ceri-dev-server
Version:
a small development server for building ceri components
82 lines (76 loc) • 2.24 kB
JavaScript
(function() {
var container, startupRouter;
require("es6-promise/auto");
container = document.getElementById("container");
startupRouter = function() {
var clearSlashes, current, defaultRoute, getFragment, listen, nav, route, routename, routes, val, view, views;
clearSlashes = function(path) {
return path.toString().replace(/\/$/, '').replace(/^\//, '');
};
getFragment = function() {
var match;
match = window.location.href.match(/#(.*)$/);
if (match) {
return match[1];
} else {
return defaultRoute;
}
};
current = '';
listen = function() {
var frag;
frag = getFragment();
if (current !== frag) {
current = frag;
route();
return document.title = current + " - ceri-dev-server";
}
};
setInterval(listen, 50);
routes = {};
view = null;
views = {};
getRoutes();
if (Object.keys(routes).length === 1) {
defaultRoute = Object.keys(routes)[0];
} else {
defaultRoute = "/";
}
route = function() {
var name;
if (routes[current] == null) {
current = defaultRoute;
window.location.href = window.location.href.replace(/#(.*)$/, '') + '#' + defaultRoute;
}
if (view != null) {
container.removeChild(view);
}
if (views[current] != null) {
view = views[current];
} else {
view = routes[current];
name = "ce" + (current.replace('/', '-').replace(/([^-])([A-Z])/g, '$1-$2').toLowerCase());
window.customElements.define(name, view);
view = document.createElement(name);
views[current] = view;
}
return container.appendChild(view);
};
nav = document.createElement("ul");
for (routename in routes) {
val = routes[routename];
nav.innerHTML += "<li><a href='#" + routename + "'>" + routename + "</a></li>";
}
views["/"] = nav;
routes["/"] = true;
return listen();
};
if (window.customElements == null) {
require.ensure([], (function(require) {
require("document-register-element");
return startupRouter();
}), "cePoly");
} else {
startupRouter();
}
}).call(this);