add button plumbed through to router
[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 REWRITES = {"/admin/core/deployment/": "#deployments",
5             "/admin/core/site/" : "#sites",
6             "/admin/core/slice/" : "#slices",
7             "/admin/core/user/" : "#users"};
8
9 XOSAdminApp = new XOSApplication({
10     logTableId: "#logTable",
11     statusMsgId: "#statusMsg",
12     hideTabsByDefault: true
13 });
14
15 XOSAdminApp.addRegions({
16     navigation: "#navigationPanel",
17
18     detail: "#detail",
19     linkedObjs1: "#linkedObjs1",
20     linkedObjs2: "#linkedObjs2",
21     linkedObjs3: "#linkedObjs3",
22     linkedObjs4: "#linkedObjs4"
23 });
24
25 XOSAdminApp.navigateToModel = function(app, detailClass, detailNavLink, model) {
26      XOSAdminApp.Router.navigate(detailNavLink + "/" + model.id, {trigger: true});
27 };\r
28 \r
29 ICON_CLASSES = {home: "icon-home", deployments: "icon-deployment", sites: "icon-site", slices: "icon-slice", users: "icon-user"};\r
30 \r
31 XOSAdminApp.updateNavigationPanel = function() {\r
32     buttonTemplate=$("#xos-navbutton").html();\r
33     assert(buttonTemplate != undefined, "buttonTemplate is undefined");\r
34     html="<div class='left-nav'><ul>";\r
35     for (var index in NAV_OBJS) {\r
36         name = NAV_OBJS[index];\r
37         collection_name = name+"s";\r
38         nav_url = "#" + collection_name;\r
39         id = "nav-"+name;\r
40         icon_class = ICON_CLASSES[collection_name] || "icon-cog";\r
41 \r
42         html = html + _.template(buttonTemplate, {name: collection_name, router: "XOSAdminApp.Router", routeUrl: nav_url, iconClass: icon_class});\r
43     }\r
44 \r
45     html = html + "</ul>";\r
46 \r
47     $("#navigationPanel").html(html);\r
48 };\r
49 \r
50 XOSAdminApp.buildViews = function() {\r
51      for (var index in OBJS) {\r
52          name = OBJS[index];
53          tr_template = '#xosAdmin-' + name + '-listitem-template';
54          table_template = '#xosAdmin-' + name + '-list-template';
55          detail_template = '#xosAdmin-' + name + '-detail-template';
56          collection_name = name + "s";
57          region_name = name + "List";
58          detailNavLink = collection_name;
59
60          detailClass = XOSDetailView.extend({
61             template: detail_template,\r
62             app: XOSAdminApp,\r
63          });\r
64          XOSAdminApp[collection_name + "DetailView"] = detailClass;\r
65
66          itemViewClass = XOSItemView.extend({
67              detailClass: detailClass,
68              template: tr_template,
69              app: XOSAdminApp,
70              detailNavLink: detailNavLink,
71          });
72
73          listViewClass = XOSListView.extend({
74              childView: itemViewClass,
75              template: table_template,
76              collection: xos[collection_name],
77              title: name + "s",
78              app: XOSAdminApp,
79          });
80
81          XOSAdminApp[collection_name + "ListView"] = listViewClass;
82
83          xos[collection_name].fetch(); //startPolling();
84      }\r
85 };\r
86 \r
87 XOSAdminApp.initRouter = function() {\r
88     router = Marionette.AppRouter.extend({\r
89     });\r
90 \r
91     var api = {};\r
92     var routes = {};\r
93 \r
94     for (var index in OBJS) {\r
95         name = OBJS[index];\r
96         collection_name = name + "s";\r
97         nav_url = collection_name;\r
98         api_command = "list" + firstCharUpper(collection_name);\r
99         listViewName = collection_name + "ListView";\r
100         detailViewName = collection_name + "DetailView";\r
101 \r
102         api[api_command] = XOSAdminApp.listViewShower(listViewName, collection_name, "detail", collection_name);\r
103         routes[nav_url] = api_command;\r
104 \r
105         nav_url = collection_name + "/:id";\r
106         api_command = "detail" + firstCharUpper(collection_name);\r
107 \r
108         api[api_command] = XOSAdminApp.detailShower(detailViewName, collection_name, "detail", name);\r
109         routes[nav_url] = api_command;\r
110 \r
111         nav_url = "add" + firstCharUpper(name);\r
112         api_command = "add" + firstCharUpper(name);\r
113         api[api_command] = XOSAdminApp.addShower(detailViewName, collection_name, "detail", name);\r
114         routes[nav_url] = api_command;\r
115     };\r
116 \r
117     XOSAdminApp.Router = new router({ appRoutes: routes, controller: api });\r
118 };\r
119 \r
120 /* rewriteLinks\r
121 \r
122    Rewrite the links in the suit navbar from django-links to marionette\r
123    links. This let's us intercept the navbar and make it function within\r
124    this view rather than jumping back out to a django view.\r
125 */\r
126 \r
127 XOSAdminApp.rewriteLinks = function () {\r
128     $("a").each(function() {\r
129         href=$(this).attr("href");\r
130         rewrite_href=REWRITES[href];\r
131         if (rewrite_href) {\r
132             $(this).attr("href", rewrite_href);\r
133         }\r
134     });\r
135 };\r
136 \r
137 XOSAdminApp.on("start", function() {\r
138      XOSAdminApp.buildViews();
139
140      XOSAdminApp.initRouter();
141
142      XOSAdminApp.updateNavigationPanel();
143
144      XOSAdminApp.rewriteLinks();
145
146      if (Backbone.history) {
147          console.log("history start");
148          Backbone.history.start();
149      }
150 });
151
152 $(document).ready(function(){
153     XOSAdminApp.start();
154 });
155