renaissance-spa
Version:
renaissance spa adpater
75 lines (65 loc) • 1.91 kB
JavaScript
// Generated by CoffeeScript 2.7.0
(function () {
// spa adapter
var SpaAdapter;
SpaAdapter = class SpaAdapter {
constructor() {
this.meta = {
'containerSelector': '.spa-container'
};
this.pages = {};
this;
}
/*
Get nodes by selector
@param {string} selector
@returns {object} NodeList
*/
// TODO: Should be moved to general utils module
_getNodes(selector) {
// try to use query selector all on slctr with attribute
if (selector.match(/^.+\[.+\]$/)) {
return document.querySelectorAll(slctr);
} // default - use standard selector statements
// node
if (typeof selector === 'object') {
return [selector]; // id
} else if (selector.charAt(0) === '#') {
selector = selector.substring(1);
return [document.getElementById(selector)]; // class
} else if (selector.charAt(0) === '.') {
selector = selector.substring(1);
return document.getElementsByClassName(selector); // tag
} else if (typeof selector === 'string') {
return document.getElementsByTagName(selector);
}
}
/*
Register a spa container
@param {string} name
@param {string} slctr
@returns {*}
*/
register(name, slctr) {
return this.pages[name] = slctr;
}
/*
Go to given page
@param {string} name
@returns {*}
*/
goto(name) {
var container, spaContainers;
spaContainers = Array.from(this._getNodes(this.meta.containerSelector));
container = this._getNodes(this.pages[name])[0];
spaContainers.forEach(function (el, idx) {
var cont;
cont = spaContainers[idx];
return cont.style.display = 'none';
});
return container.style.display = 'block';
}
};
module.exports = SpaAdapter;
}).call(this);
//# sourceMappingURL=Adapter.js.map