sliceEditor demo view
[plstackapi.git] / planetstack / core / xoslib / static / js / sliceEditor.js
1 SliceEditorApp = new Marionette.Application();
2 \r
3 SliceEditorApp.addRegions({\r
4   sliceList: "#sliceEditorList",\r
5   sliceDetail: "#sliceEditorDetail",\r
6 });
7
8 SliceEditorApp.SliceListItemView = Marionette.ItemView.extend({
9   template: "#sliceeditor-listitem-template",\r
10   tagName: 'li',\r
11   className: 'sliceeditor-listitem',\r
12 \r
13   events: {"click": "changeSlice"},\r
14 \r
15   changeSlice: function(e) {\r
16         e.preventDefault();\r
17         e.stopPropagation();\r
18 \r
19         if (SliceEditorApp.sliceDetail.currentView && SliceEditorApp.sliceDetail.currentView.dirty) {\r
20             if (!confirm("discard current changes?")) {\r
21                 return;\r
22             }\r
23         }\r
24 \r
25         var sliceDetailView = new SliceEditorApp.SliceDetailView({\r
26             model: this.model,\r
27         });\r
28         SliceEditorApp.sliceDetail.show(sliceDetailView);\r
29   },\r
30 });\r
31
32 SliceEditorApp.SliceListView = Marionette.CollectionView.extend({
33   tagName: "ul",\r
34   childView: SliceEditorApp.SliceListItemView,\r
35 \r
36   modelEvents: {"sync": "render"},\r
37 \r
38   initialize: function() {\r
39       this.dirty = false;\r
40       this.listenTo(this.collection, 'change', this._renderChildren);\r
41   },\r
42 \r
43   attachHtml: function(compositeView, childView, index) {\r
44       // The REST API will let admin users see everything. For the developer\r
45       // view we still want to hide slices we are not members of.\r
46       if (childView.model.get("sliceInfo").roles.length == 0) {\r
47           return;\r
48       }\r
49       SliceEditorApp.SliceListView.__super__.attachHtml(compositeView, childView, index);\r
50   },\r
51 });\r
52 \r
53 SliceEditorApp.SliceDetailView = Marionette.ItemView.extend({\r
54     template: "#sliceeditor-sliceedit-template",\r
55     tagName: 'div',\r
56 \r
57     events: {"click button.js-submit": "submitClicked",\r
58              "change input": "inputChanged"},\r
59 \r
60     inputChanged: function(e) {\r
61         this.dirty = true;\r
62     },\r
63 \r
64     submitClicked: function(e) {\r
65         e.preventDefault();\r
66         var data = Backbone.Syphon.serialize(this);\r
67         this.model.save(data);\r
68         this.dirty = false;\r
69     },\r
70 });\r
71
72 SliceEditorApp.on("start", function() {
73   var sliceListView = new SliceEditorApp.SliceListView({
74     collection: xos.slicesPlus\r
75   });\r
76   SliceEditorApp.sliceList.show(sliceListView);\r
77   xos.slicesPlus.startPolling();\r
78 });
79
80 $(document).ready(function(){
81   SliceEditorApp.start();
82 });
83