afterDelete working in tenant view
[plstackapi.git] / planetstack / core / xoslib / static / js / xosTenant.js
1 XOSTenantSite = XOSModel.extend( {
2     listFields: ["name", "allocated"],
3     modelName: "tenantSite",
4     collectionName: "tenantSites"
5 });
6
7 XOSTenantSiteCollection = XOSCollection.extend( {
8     listFields: ["name", "allocated"],
9     modelName: "tenantSite",
10     collectionName: "tenantSites",
11
12     updateFromSlice: function(slice) {
13         var tenantSites = [];
14         var id = 0;
15         for (siteName in slice.attributes.site_allocation) {
16             allocated = slice.attributes.site_allocation[siteName];
17             tenantSites.push(new XOSTenantSite( { name: siteName, allocated: allocated, id: id} ));
18             id = id + 1;
19         }
20         for (index in xos.tenantview.models[0].attributes.blessed_site_names) {
21             siteName = xos.tenantview.models[0].attributes.blessed_site_names[index];
22             if (! (siteName in slice.attributes.site_allocation)) {
23                 tenantSites.push(new XOSTenantSite( { name: siteName, allocated: 0, id: id} ));
24                 id = id + 1;
25             }
26         }
27         this.set(tenantSites);
28     },
29 });
30
31 XOSTenantButtonView = Marionette.ItemView.extend({
32             template: "#xos-tenant-buttons-template",
33
34             events: {"click button.btn-tenant-create": "createClicked",
35                      "click button.btn-tenant-delete": "deleteClicked",
36                      "click button.btn-tenant-add-user": "addUserClicked",
37                      "click button.btn-tenant-save": "saveClicked",
38                      },
39
40             createClicked: function(e) {
41                      XOSTenantApp.addSlice();
42                      },
43
44             deleteClicked: function(e) {
45                      XOSTenantApp.deleteSlice(this.options.linkedView.model);
46                      },
47
48             addUserClicked: function(e) {
49                      },
50
51             saveClicked: function(e) {
52                      this.options.linkedView.submitContinueClicked.call(this.options.linkedView, e);
53                      },
54             });
55
56 XOSTenantApp = new XOSApplication({
57     logTableId: "#logTable",
58     statusMsgId: "#statusMsg",
59     hideTabsByDefault: true,
60     varName: "XOSTenantApp",
61 });
62
63 XOSTenantApp.addRegions({
64     tenantSliceSelector: "#tenantSliceSelector",
65     tenantSummary: "#tenantSummary",
66     tenantSiteList: "#tenantSiteList",
67     tenantButtons: "#tenantButtons",
68     tenantAddSliceInterior: "#tenant-addslice-interior",
69 });
70
71 XOSTenantApp.buildViews = function() {
72      XOSTenantApp.tenantSites = new XOSTenantSiteCollection();\r
73 \r
74      tenantSummaryClass = XOSDetailView.extend({template: "#xos-detail-template",\r
75                                                 app: XOSTenantApp,\r
76                                                 detailFields: ["serviceClass", "image_preference", "network_ports", "mount_data_sets"]});\r
77 \r
78      XOSTenantApp.tenantSummaryView = tenantSummaryClass;\r
79 \r
80      tenantAddClass = XOSDetailView.extend({template: "#xos-detail-template",\r
81                                                 app: XOSTenantApp,\r
82                                                 detailFields: ["name", "description"]});\r
83 \r
84      XOSTenantApp.tenantAddView = tenantAddClass;\r
85 \r
86      tenantSiteItemClass = XOSItemView.extend({template: "#xos-listitem-template",\r
87                                                app: XOSTenantApp});\r
88 \r
89      XOSTenantApp.tenantSiteItemView = tenantSiteItemClass;\r
90 \r
91      tenantSiteListClass = XOSDataTableView.extend({template: "#xos-list-template",\r
92                                                app: XOSTenantApp,\r
93                                                childView: tenantSiteItemClass,\r
94                                                collection: XOSTenantApp.tenantSites,\r
95                                                title: "sites",\r
96                                                inputType: {allocated: "spinner"},\r
97                                                noDeleteColumn: true,\r
98                                                });\r
99 \r
100      XOSTenantApp.tenantSiteListView = tenantSiteListClass;\r
101 \r
102      XOSTenantApp.tenantSliceSelectorView = SliceSelectorView.extend( {\r
103          sliceChanged: function(id) {\r
104              XOSTenantApp.navToSlice(id);\r
105          },\r
106      });\r
107 \r
108      xos.sites.fetch();\r
109      xos.slicesPlus.fetch();\r
110      xos.tenantview.fetch();\r
111 };\r
112 \r
113 make_choices = function(list_of_names, list_of_values) {\r
114     result = [];\r
115     if (!list_of_values) {\r
116         for (index in list_of_names) {\r
117             displayName = list_of_names[index];\r
118             result.push( [displayName, displayName] );\r
119         }\r
120     }\r
121     return result;\r
122 };\r
123 \r
124 XOSTenantApp.navToSlice = function(id) {\r
125     XOSTenantApp.viewSlice(xos.slicesPlus.get(id));\r
126 };\r
127 \r
128 XOSTenantApp.adjustCollectionField = function(collectionName, id, fieldName, amount) {\r
129     model = XOSTenantApp[collectionName].get(id);\r
130     model.set(fieldName, Math.max(model.get(fieldName) + amount, 0));\r
131 };\r
132 \r
133 XOSTenantApp.addSlice = function() {\r
134     var app=this;\r
135     model = new xos.slicesPlus.model({site: xos.tenant().current_user_site_id});\r
136     console.log(model);\r
137     var detailView = new XOSTenantApp.tenantAddView({model: model, collection: xos.slicesPlus});\r
138     detailView.dialog = $("tenant-addslice-dialog");\r
139     app.tenantAddSliceInterior.show(detailView);\r
140     $("#tenant-addslice-dialog").dialog({\r
141        autoOpen: false,
142        modal: true,
143        width: 640,
144        buttons : {
145             "Save" : function() {
146               var addDialog = this;
147               detailView.synchronous = true;
148               detailView.afterSave = function() { $(addDialog).dialog("close"); XOSTenantApp.navToSlice(detailView.model.id); }
149               detailView.save();
150             },
151             "Cancel" : function() {
152               $(this).dialog("close");
153             }
154           }
155         });
156     $("#tenant-addslice-dialog").dialog("open");\r
157 };\r
158 \r
159 XOSTenantApp.deleteSlice = function(model) {\r
160     var app=this;\r
161     app.deleteDialog(model, function() { console.log("afterDelete"); app.viewSlice(undefined); });\r
162 };\r
163 \r
164 XOSTenantApp.viewSlice = function(model) {\r
165     if (!model && xos.slicesPlus.models.length > 0) {\r
166         model = xos.slicesPlus.models[0];\r
167     }\r
168 \r
169     sliceSelector = new XOSTenantApp.tenantSliceSelectorView({collection: xos.slicesPlus,\r
170                                                               selectedID: model.id,\r
171                                                              } );\r
172     XOSTenantApp.sliceSelector = sliceSelector;\r
173     XOSTenantApp.tenantSliceSelector.show(sliceSelector);\r
174 \r
175     tenantSummary = new XOSTenantApp.tenantSummaryView({model: model,\r
176                                                         choices: {mount_data_sets: make_choices(xos.tenantview.models[0].attributes.public_volume_names, null),\r
177                                                                   image_preference: make_choices(xos.tenantview.models[0].attributes.blessed_image_names, null)},\r
178                                                        });\r
179     XOSTenantApp.tenantSummary.show(tenantSummary);\r
180 \r
181     tenantSites = new XOSTenantSiteCollection();\r
182     tenantSites.updateFromSlice(model);\r
183     XOSTenantApp.tenantSites = tenantSites;\r
184 \r
185     tenantSiteList = new XOSTenantApp.tenantSiteListView({collection: tenantSites });\r
186     XOSTenantApp.tenantSiteList.show(tenantSiteList);\r
187     // on xos.slicePlus.sort, need to update xostenantapp.tenantSites\r
188 \r
189     XOSTenantApp.tenantButtons.show( new XOSTenantButtonView( { app: XOSTenantApp,\r
190                                                                 linkedView: tenantSummary } ) );\r
191 };\r
192 \r
193 XOSTenantApp.startNavigation = function() {\r
194     Backbone.history.start();\r
195     XOSTenantApp.navigationStarted = true;\r
196 }\r
197 \r
198 XOSTenantApp.collectionLoadChange = function() {\r
199     stats = xos.getCollectionStatus();\r
200 \r
201     if (!XOSTenantApp.navigationStarted) {\r
202         if (stats["isLoaded"] + stats["failedLoad"] >= stats["startedLoad"]) {\r
203             XOSTenantApp.viewSlice(undefined);\r
204         } else {\r
205             $("#tenantSummary").html("<h3>Loading...</h3><div id='xos-startup-progress'></div>");\r
206             $("#xos-startup-progress").progressbar({value: stats["completedLoad"], max: stats["startedLoad"]});\r
207         }\r
208     }\r
209 };\r
210 \r
211 XOSTenantApp.on("start", function() {\r
212      XOSTenantApp.buildViews();
213
214      // fire it once to initially show the progress bar
215      XOSTenantApp.collectionLoadChange();
216
217      // fire it each time the collection load status is updated
218      Backbone.on("xoslib:collectionLoadChange", XOSTenantApp.collectionLoadChange);
219 });
220
221 $(document).ready(function(){
222     XOSTenantApp.start();
223 });
224