-OBJS = ['deployment', 'image', 'networkTemplate', 'network', 'networkSliver', 'networkDeployment', 'node', 'service', 'site', 'slice', 'sliceDeployment', 'slicePrivilege', 'sliver', 'user', 'sliceRole', 'userDeployment'];
+OBJS = ['deployment', 'image', 'networkTemplate', 'network', 'networkSliver', 'node', 'service', 'site', 'slice', 'slicePrivilege', 'sliver', 'user', 'sliceRole', 'flavor', 'controller', 'siteDeployment'];
+// 'networkDeployment', 'userDeployment', 'sliceDeployment', 'imageDeployment'
NAV_OBJS = ['deployment', 'site', 'slice', 'user'];
-function assert(outcome, description) {
- if (!outcome) {
- console.log(description);
- }
-}
+REWRITES = {"/admin/core/deployment/": "#deployments",
+ "/admin/core/site/" : "#sites",
+ "/admin/core/slice/" : "#slices",
+ "/admin/core/user/" : "#users"};
-XOSAdminApp = new XOSApplication();
+XOSAdminApp = new XOSApplication({
+ logTableId: "#logTable",
+ statusMsgId: "#statusMsg",
+ hideTabsByDefault: true
+});
XOSAdminApp.addRegions({
navigation: "#navigationPanel",
linkedObjs1: "#linkedObjs1",
linkedObjs2: "#linkedObjs2",
linkedObjs3: "#linkedObjs3",
- linkedObjs4: "#linkedObjs4"
+ linkedObjs4: "#linkedObjs4",
+
+ addChildDetail: "#xos-addchild-detail",
+
+ rightButtonPanel: "#rightButtonPanel"
});
-XOSAdminApp.navigateToModel = function(app, detailClass, detailNavLink, model) {
- XOSAdminApp.Router.navigate(detailNavLink + "/" + model.id, {trigger: true});
-};\r
+XOSAdminApp.navigate = function(what, modelName, modelId) {\r
+ console.log("XOSAsminApp.navigate");\r
+ collection_name = modelName + "s";\r
+ if (what=="list") {\r
+ XOSAdminApp.Router.navigate(collection_name, {trigger: true})\r
+ } else if (what=="detail") {\r
+ XOSAdminApp.Router.navigate(collection_name + "/" + modelId, {trigger: true})\r
+ } else if (what=="add") {\r
+ XOSAdminApp.Router.navigate("add" + firstCharUpper(modelName), {trigger: true, force: true})\r
+ }\r
+}\r
+\r
+ICON_CLASSES = {home: "icon-home", deployments: "icon-deployment", sites: "icon-site", slices: "icon-slice", users: "icon-user"};\r
\r
XOSAdminApp.updateNavigationPanel = function() {\r
buttonTemplate=$("#xos-navbutton").html();\r
assert(buttonTemplate != undefined, "buttonTemplate is undefined");\r
- html=""\r
+ html="<div class='left-nav'><ul>";\r
for (var index in NAV_OBJS) {\r
name = NAV_OBJS[index];\r
collection_name = name+"s";\r
- nav_url = "/" + collection_name;\r
+ nav_url = "#" + collection_name;\r
id = "nav-"+name;\r
+ icon_class = ICON_CLASSES[collection_name] || "icon-cog";\r
\r
- html = html + _.template(buttonTemplate, {name: collection_name, router: "XOSAdminApp.Router", routeUrl: nav_url});\r
+ html = html + _.template(buttonTemplate, {name: collection_name, router: "XOSAdminApp.Router", routeUrl: nav_url, iconClass: icon_class});\r
}\r
\r
+ html = html + "</ul>";\r
+\r
$("#navigationPanel").html(html);\r
};\r
\r
XOSAdminApp.buildViews = function() {\r
+ genericAddChildClass = XOSDetailView.extend({template: "#xos-add-template",\r
+ app: XOSAdminApp});\r
+ XOSAdminApp["genericAddChildView"] = genericAddChildClass;\r
+\r
+ genericDetailClass = XOSDetailView.extend({template: "#xos-detail-template",\r
+ app: XOSAdminApp});\r
+ XOSAdminApp["genericDetailView"] = genericDetailClass;\r
+\r
+ genericItemViewClass = XOSItemView.extend({template: "#xos-listitem-template",\r
+ app: XOSAdminApp});\r
+ XOSAdminApp["genericItemView"] = genericItemViewClass;\r
+\r
+ //genericListViewClass = XOSListView.extend({template: "#xos-list-template",\r
+ // app: XOSAdminApp});\r
+\r
+ genericListViewClass = XOSDataTableView.extend({template: "#xos-list-template", app: XOSAdminApp});\r
+ XOSAdminApp["genericListView"] = genericListViewClass;\r
+\r
for (var index in OBJS) {\r
name = OBJS[index];
tr_template = '#xosAdmin-' + name + '-listitem-template';
table_template = '#xosAdmin-' + name + '-list-template';
detail_template = '#xosAdmin-' + name + '-detail-template';
+ add_child_template = '#xosAdmin-' + name + '-add-child-template';
collection_name = name + "s";
region_name = name + "List";
- detailNavLink = collection_name;
- detailClass = XOSDetailView.extend({
- template: detail_template,\r
- app: XOSAdminApp,\r
- });\r
+ if (window["XOSDetailView_" + name]) {
+ detailClass = window["XOSDetailView_" + name].extend({template: "#xos-detail-template",
+ app: XOSAdminApp});
+ } else {
+ detailClass = genericDetailClass;
+ }
+ if ($(detail_template).length) {
+ detailClass = detailClass.extend({
+ template: detail_template,\r
+ });\r
+ }\r
XOSAdminApp[collection_name + "DetailView"] = detailClass;\r
+\r
+ if (window["XOSDetailView_" + name]) {\r
+ addClass = window["XOSDetailView_" + name].extend({template: "#xos-add-template",
+ app: XOSAdminApp});
+ } else {
+ addClass = genericAddChildClass;
+ }
+ if ($(add_child_template).length) {
+ addClass = detailClass.extend({
+ template: add_child_template,\r
+ });\r
+ }\r
+ XOSAdminApp[collection_name + "AddChildView"] = addClass;\r
+\r
+ if ($(tr_template).length) {\r
+ itemViewClass = XOSItemView.extend({\r
+ template: tr_template,\r
+ app: XOSAdminApp,
+ });
+ } else {
+ itemViewClass = genericItemViewClass;
+ }
- itemViewClass = XOSItemView.extend({
- detailClass: detailClass,
- template: tr_template,
- app: XOSAdminApp,
- detailNavLink: detailNavLink,
- });
-
- listViewClass = XOSListView.extend({
- childView: itemViewClass,
- template: table_template,
- collection: xos[collection_name],
- title: name + "s",
- app: XOSAdminApp,
- });
+ if ($(table_template).length) {
+ listViewClass = XOSListView.extend({
+ childView: itemViewClass,
+ template: table_template,
+ collection: xos[collection_name],
+ title: name + "s",
+ app: XOSAdminApp,
+ });
+ } else {
+ listViewClass = genericListViewClass.extend( { childView: itemViewClass,
+ collection: xos[collection_name],
+ title: name + "s",
+ } );
+ }
XOSAdminApp[collection_name + "ListView"] = listViewClass;
};\r
\r
XOSAdminApp.initRouter = function() {\r
- router = Marionette.AppRouter.extend({\r
- });\r
-\r
+ router = XOSRouter;\r
var api = {};\r
var routes = {};\r
\r
- function listViewShower(listViewName) {\r
- return function() {\r
- XOSAdminApp.detail.show(new XOSAdminApp[listViewName]);\r
- }\r
- };\r
-\r
- function detailShower(detailName, collection_name) {\r
- shower = function(model_id) {\r
- model = xos[collection_name].get(model_id);\r
- if (model == undefined) {\r
- $("#detail").html("not ready yet");\r
- return;\r
- }\r
- detailViewClass = XOSAdminApp[detailName];\r
- detailView = new detailViewClass({model: model});\r
- XOSAdminApp.detail.show(detailView);\r
- detailView.showLinkedItems();\r
- }\r
- return shower;\r
- };\r
-\r
for (var index in OBJS) {\r
name = OBJS[index];\r
collection_name = name + "s";\r
nav_url = collection_name;\r
- api_command = "list" + collection_name.charAt(0).toUpperCase() + collection_name.slice(1);\r
+ api_command = "list" + firstCharUpper(collection_name);\r
listViewName = collection_name + "ListView";\r
detailViewName = collection_name + "DetailView";\r
+ addChildViewName = collection_name + "AddChildView";\r
\r
- api[api_command] = listViewShower(listViewName);\r
+ api[api_command] = XOSAdminApp.createListHandler(listViewName, collection_name, "detail", collection_name);\r
routes[nav_url] = api_command;\r
\r
nav_url = collection_name + "/:id";\r
- api_command = "detail" + collection_name.charAt(0).toUpperCase() + collection_name.slice(1);\r
+ api_command = "detail" + firstCharUpper(collection_name);\r
\r
- api[api_command] = detailShower(detailViewName, collection_name);\r
+ api[api_command] = XOSAdminApp.createDetailHandler(detailViewName, collection_name, "detail", name);\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "add" + firstCharUpper(name);\r
+ api_command = "add" + firstCharUpper(name);\r
+ api[api_command] = XOSAdminApp.createAddHandler(detailViewName, collection_name, "detail", name);\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "addChild" + firstCharUpper(name) + "/:parentModel/:parentField/:parentId";\r
+ api_command = "addChild" + firstCharUpper(name);\r
+ api[api_command] = XOSAdminApp.createAddChildHandler(addChildViewName, collection_name);\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "delete" + firstCharUpper(name) + "/:id";\r
+ api_command = "delete" + firstCharUpper(name);\r
+ api[api_command] = XOSAdminApp.createDeleteHandler(collection_name, name);\r
routes[nav_url] = api_command;\r
};\r
\r
+ routes["*part"] = "listSlices";\r
+\r
XOSAdminApp.Router = new router({ appRoutes: routes, controller: api });\r
+};\r
+\r
+/* rewriteLinks\r
+\r
+ Rewrite the links in the suit navbar from django-links to marionette\r
+ links. This let's us intercept the navbar and make it function within\r
+ this view rather than jumping back out to a django view.\r
+*/\r
+\r
+XOSAdminApp.rewriteLinks = function () {\r
+ $("a").each(function() {\r
+ href=$(this).attr("href");\r
+ rewrite_href=REWRITES[href];\r
+ if (rewrite_href) {\r
+ $(this).attr("href", rewrite_href);\r
+ }\r
+ });\r
+};\r
+\r
+XOSAdminApp.startNavigation = function() {\r
+ Backbone.history.start();\r
+ XOSAdminApp.navigationStarted = true;\r
}\r
\r
+XOSAdminApp.collectionLoadChange = function() {\r
+ stats = xos.getCollectionStatus();\r
+\r
+ if (!XOSAdminApp.navigationStarted) {\r
+ if (stats["isLoaded"] + stats["failedLoad"] >= stats["startedLoad"]) {\r
+ XOSAdminApp.startNavigation();\r
+ } else {\r
+ $("#detail").html("<h3>Loading...</h3><div id='xos-startup-progress'></div>");\r
+ $("#xos-startup-progress").progressbar({value: stats["completedLoad"], max: stats["startedLoad"]});\r
+ }\r
+ }\r
+};\r
+\r
XOSAdminApp.on("start", function() {\r
XOSAdminApp.buildViews();
XOSAdminApp.updateNavigationPanel();
- if (Backbone.history) {
- console.log("history start");
- Backbone.history.start();
- }
+ XOSAdminApp.rewriteLinks();
+
+ // fire it once to initially show the progress bar
+ XOSAdminApp.collectionLoadChange();
+
+ // fire it each time the collection load status is updated
+ Backbone.on("xoslib:collectionLoadChange", XOSAdminApp.collectionLoadChange);
});
$(document).ready(function(){