3d87ca6c1580e7d8551792efde7b44299e297c89
[plstackapi.git] / planetstack / core / xoslib / static / js / xosAdminSite.js
1 OBJS = ['deployment', 'image', 'networkTemplate', 'network', 'networkSliver', 'networkDeployment', 'node', 'service', 'site', 'slice', 'sliceDeployment', 'slicePrivilege', 'sliver', 'user', 'sliceRole', 'userDeployment'];
2 NAV_OBJS = ['deployment', 'site', 'slice', 'user'];
3
4 function assert(outcome, description) {
5     if (!outcome) {
6         console.log(description);
7     }
8 }
9
10 XOSAdminApp = new XOSApplication();
11
12 XOSAdminApp.addRegions({
13     navigation: "#navigationPanel",
14
15     detail: "#detail",
16     linkedObjs1: "#linkedObjs1",
17     linkedObjs2: "#linkedObjs2",
18     linkedObjs3: "#linkedObjs3",
19     linkedObjs4: "#linkedObjs4"
20 });
21
22 XOSAdminApp.navigateToModel = function(app, detailClass, detailNavLink, model) {
23      XOSAdminApp.Router.navigate(detailNavLink + "/" + model.id, {trigger: true});
24 };\r
25 \r
26 ICON_CLASSES = {home: "icon-home", deployments: "icon-deployment", sites: "icon-site", slices: "icon-slice", users: "icon-user"};\r
27 \r
28 XOSAdminApp.updateNavigationPanel = function() {\r
29     buttonTemplate=$("#xos-navbutton").html();\r
30     assert(buttonTemplate != undefined, "buttonTemplate is undefined");\r
31     html="<div class='left-nav'><ul>";\r
32     for (var index in NAV_OBJS) {\r
33         name = NAV_OBJS[index];\r
34         collection_name = name+"s";\r
35         //nav_url = "/" + collection_name;\r
36         nav_url = "#" + collection_name;\r
37         id = "nav-"+name;\r
38         icon_class = ICON_CLASSES[collection_name] || "icon-cog";\r
39 \r
40         html = html + _.template(buttonTemplate, {name: collection_name, router: "XOSAdminApp.Router", routeUrl: nav_url, iconClass: icon_class});\r
41     }\r
42 \r
43     html = html + "</ul>";\r
44 \r
45     $("#navigationPanel").html(html);\r
46 };\r
47 \r
48 XOSAdminApp.buildViews = function() {\r
49      for (var index in OBJS) {\r
50          name = OBJS[index];
51          tr_template = '#xosAdmin-' + name + '-listitem-template';
52          table_template = '#xosAdmin-' + name + '-list-template';
53          detail_template = '#xosAdmin-' + name + '-detail-template';
54          collection_name = name + "s";
55          region_name = name + "List";
56          detailNavLink = collection_name;
57
58          detailClass = XOSDetailView.extend({
59             template: detail_template,\r
60             app: XOSAdminApp,\r
61          });\r
62          XOSAdminApp[collection_name + "DetailView"] = detailClass;\r
63
64          itemViewClass = XOSItemView.extend({
65              detailClass: detailClass,
66              template: tr_template,
67              app: XOSAdminApp,
68              detailNavLink: detailNavLink,
69          });
70
71          listViewClass = XOSListView.extend({
72              childView: itemViewClass,
73              template: table_template,
74              collection: xos[collection_name],
75              title: name + "s",
76              app: XOSAdminApp,
77          });
78
79          XOSAdminApp[collection_name + "ListView"] = listViewClass;
80
81          xos[collection_name].fetch(); //startPolling();
82      }\r
83 };\r
84 \r
85 XOSAdminApp.initRouter = function() {\r
86     router = Marionette.AppRouter.extend({\r
87     });\r
88 \r
89     var api = {};\r
90     var routes = {};\r
91 \r
92     function listViewShower(listViewName) {\r
93         return function() {\r
94             XOSAdminApp.detail.show(new XOSAdminApp[listViewName]);\r
95         }\r
96     };\r
97 \r
98     function detailShower(detailName, collection_name) {\r
99         shower = function(model_id) {\r
100             model = xos[collection_name].get(model_id);\r
101             if (model == undefined) {\r
102                 $("#detail").html("not ready yet");\r
103                 return;\r
104             }\r
105             detailViewClass = XOSAdminApp[detailName];\r
106             detailView = new detailViewClass({model: model});\r
107             XOSAdminApp.detail.show(detailView);\r
108             detailView.showLinkedItems();\r
109         }\r
110         return shower;\r
111     };\r
112 \r
113     for (var index in OBJS) {\r
114         name = OBJS[index];\r
115         collection_name = name + "s";\r
116         nav_url = collection_name;\r
117         api_command = "list" + collection_name.charAt(0).toUpperCase() + collection_name.slice(1);\r
118         listViewName = collection_name + "ListView";\r
119         detailViewName = collection_name + "DetailView";\r
120 \r
121         api[api_command] = listViewShower(listViewName);\r
122         routes[nav_url] = api_command;\r
123 \r
124         nav_url = collection_name + "/:id";\r
125         api_command = "detail" + collection_name.charAt(0).toUpperCase() + collection_name.slice(1);\r
126 \r
127         api[api_command] = detailShower(detailViewName, collection_name);\r
128         routes[nav_url] = api_command;\r
129     };\r
130 \r
131     XOSAdminApp.Router = new router({ appRoutes: routes, controller: api });\r
132 }\r
133 \r
134 XOSAdminApp.on("start", function() {\r
135      XOSAdminApp.buildViews();
136
137      XOSAdminApp.initRouter();
138
139      XOSAdminApp.updateNavigationPanel();
140
141      if (Backbone.history) {
142          console.log("history start");
143          Backbone.history.start();
144      }
145 });
146
147 $(document).ready(function(){
148     XOSAdminApp.start();
149 });
150