root / ui / static / snf / js / ui / web / ui_create_view.js @ 1325fc64
History | View | Annotate | Download (31 kB)
1 | 8d08f18a | Kostas Papadimitriou | ;(function(root){
|
---|---|---|---|
2 | 8d08f18a | Kostas Papadimitriou | |
3 | 8d08f18a | Kostas Papadimitriou | // root
|
4 | 8d08f18a | Kostas Papadimitriou | var root = root;
|
5 | 8d08f18a | Kostas Papadimitriou | |
6 | 8d08f18a | Kostas Papadimitriou | // setup namepsaces
|
7 | 8d08f18a | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
8 | 8d08f18a | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
9 | 8d08f18a | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
10 | 8d08f18a | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
11 | 8d08f18a | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
12 | 8d08f18a | Kostas Papadimitriou | |
13 | 8d08f18a | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
14 | 8d08f18a | Kostas Papadimitriou | |
15 | 8d08f18a | Kostas Papadimitriou | // shortcuts
|
16 | 8d08f18a | Kostas Papadimitriou | var bb = root.Backbone;
|
17 | 8d08f18a | Kostas Papadimitriou | |
18 | 8d08f18a | Kostas Papadimitriou | |
19 | 8d08f18a | Kostas Papadimitriou | views.VMCreationPasswordView = views.Overlay.extend({ |
20 | 8d08f18a | Kostas Papadimitriou | view_id: "creation_password_view", |
21 | 8d08f18a | Kostas Papadimitriou | content_selector: "#creation-password-overlay", |
22 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-password overlay-info', |
23 | 8d08f18a | Kostas Papadimitriou | overlay_id: "creation-password-overlay", |
24 | 8d08f18a | Kostas Papadimitriou | |
25 | 8d08f18a | Kostas Papadimitriou | subtitle: "", |
26 | 8d08f18a | Kostas Papadimitriou | title: "Machine password", |
27 | 8d08f18a | Kostas Papadimitriou | |
28 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
29 | 8d08f18a | Kostas Papadimitriou | views.FeedbackView.__super__.initialize.apply(this, arguments); |
30 | 8d08f18a | Kostas Papadimitriou | _.bindAll(this, 'show_password'); |
31 | 8d08f18a | Kostas Papadimitriou | |
32 | 8d08f18a | Kostas Papadimitriou | this.password = this.$("#new-machine-password"); |
33 | 5c0a0ade | Kostas Papadimitriou | this.copy = this.$(".clip-copy"); |
34 | 60599850 | Kostas Papadimitriou | |
35 | 60599850 | Kostas Papadimitriou | this.$(".show-machine").click(_.bind(function(){ |
36 | 60599850 | Kostas Papadimitriou | this.hide();
|
37 | 60599850 | Kostas Papadimitriou | snf.ui.main.show_vm_details(storage.vms.get(this.vm_id));
|
38 | 60599850 | Kostas Papadimitriou | }, this));
|
39 | 5c0a0ade | Kostas Papadimitriou | |
40 | 8d08f18a | Kostas Papadimitriou | }, |
41 | 8d08f18a | Kostas Papadimitriou | |
42 | 8d08f18a | Kostas Papadimitriou | show_password: function() { |
43 | 8d08f18a | Kostas Papadimitriou | this.password.text(this.pass); |
44 | 8d08f18a | Kostas Papadimitriou | }, |
45 | 8d08f18a | Kostas Papadimitriou | |
46 | 8d08f18a | Kostas Papadimitriou | onClose: function() { |
47 | 8d08f18a | Kostas Papadimitriou | this.password.text(""); |
48 | 8d08f18a | Kostas Papadimitriou | }, |
49 | bd8fa10c | Kostas Papadimitriou | |
50 | bd8fa10c | Kostas Papadimitriou | beforeOpen: function() { |
51 | 978648f4 | Kostas Papadimitriou | try { delete this.clipboard } catch (err) { console.log(err) }; |
52 | bd8fa10c | Kostas Papadimitriou | this.clipboard = new util.ClipHelper(this.copy); |
53 | bd8fa10c | Kostas Papadimitriou | }, |
54 | bd8fa10c | Kostas Papadimitriou | |
55 | bd8fa10c | Kostas Papadimitriou | onOpen: function() { |
56 | 2385c471 | Kostas Papadimitriou | this.copy.show();
|
57 | b128dc09 | Kostas Papadimitriou | try {
|
58 | b128dc09 | Kostas Papadimitriou | this.clipboard.setText(this.pass); |
59 | b128dc09 | Kostas Papadimitriou | this.copy.show();
|
60 | b128dc09 | Kostas Papadimitriou | } catch (err) {
|
61 | b128dc09 | Kostas Papadimitriou | this.copy.hide();
|
62 | b128dc09 | Kostas Papadimitriou | } |
63 | bd8fa10c | Kostas Papadimitriou | }, |
64 | bd8fa10c | Kostas Papadimitriou | |
65 | 8d08f18a | Kostas Papadimitriou | show: function(pass, vm_id) { |
66 | 8d08f18a | Kostas Papadimitriou | this.pass = pass;
|
67 | 8d08f18a | Kostas Papadimitriou | this.vm_id = vm_id;
|
68 | 8d08f18a | Kostas Papadimitriou | |
69 | 8d08f18a | Kostas Papadimitriou | views.VMCreationPasswordView.__super__.show.apply(this, arguments); |
70 | 8d08f18a | Kostas Papadimitriou | this.show_password();
|
71 | 8d08f18a | Kostas Papadimitriou | } |
72 | 8d08f18a | Kostas Papadimitriou | }) |
73 | 8d08f18a | Kostas Papadimitriou | |
74 | 8d08f18a | Kostas Papadimitriou | |
75 | 8d08f18a | Kostas Papadimitriou | |
76 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView = views.View.extend({ |
77 | 8d08f18a | Kostas Papadimitriou | step: "1", |
78 | 8d08f18a | Kostas Papadimitriou | title: "Image", |
79 | 8d08f18a | Kostas Papadimitriou | submit: false, |
80 | 8d08f18a | Kostas Papadimitriou | |
81 | 8d08f18a | Kostas Papadimitriou | initialize: function(view) { |
82 | 8d08f18a | Kostas Papadimitriou | this.parent = view;
|
83 | 8d08f18a | Kostas Papadimitriou | this.el = view.$("div.create-step-cont.step-" + this.step); |
84 | 820ef2f0 | Kostas Papadimitriou | this.header = this.$(".step-header .step-" + this.step); |
85 | 8d08f18a | Kostas Papadimitriou | this.view_id = "create_step_" + this.step; |
86 | 8d08f18a | Kostas Papadimitriou | |
87 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView.__super__.initialize.apply(this);
|
88 | 8d08f18a | Kostas Papadimitriou | }, |
89 | 8d08f18a | Kostas Papadimitriou | |
90 | 8d08f18a | Kostas Papadimitriou | show: function() { |
91 | 8d08f18a | Kostas Papadimitriou | // show current
|
92 | 8d08f18a | Kostas Papadimitriou | this.el.show();
|
93 | 8d08f18a | Kostas Papadimitriou | this.header.addClass("current"); |
94 | 820ef2f0 | Kostas Papadimitriou | this.header.show();
|
95 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
96 | 8d08f18a | Kostas Papadimitriou | }, |
97 | 8d08f18a | Kostas Papadimitriou | |
98 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
99 | 8d08f18a | Kostas Papadimitriou | } |
100 | 8d08f18a | Kostas Papadimitriou | }) |
101 | 8d08f18a | Kostas Papadimitriou | |
102 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView = views.CreateVMStepView.extend({ |
103 | 8d08f18a | Kostas Papadimitriou | |
104 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
105 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView.__super__.initialize.apply(this, arguments); |
106 | 8d08f18a | Kostas Papadimitriou | |
107 | 820ef2f0 | Kostas Papadimitriou | // elements
|
108 | 73e25ce2 | Kostas Papadimitriou | this.images_list_cont = this.$(".images-list-cont"); |
109 | 820ef2f0 | Kostas Papadimitriou | this.images_list = this.$(".images-list-cont ul"); |
110 | 820ef2f0 | Kostas Papadimitriou | this.image_details = this.$(".images-info-cont"); |
111 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc = this.$(".images-info-cont .description p"); |
112 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title = this.$(".images-info-cont h4"); |
113 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size = this.$(".images-info-cont .size p"); |
114 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os = this.$(".images-info-cont .os p"); |
115 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel = this.$(".images-info-cont .kernel p"); |
116 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui = this.$(".images-info-cont .gui p"); |
117 | 820ef2f0 | Kostas Papadimitriou | |
118 | 820ef2f0 | Kostas Papadimitriou | this.types = this.$(".type-filter li"); |
119 | 820ef2f0 | Kostas Papadimitriou | this.categories_list = this.$(".category-filters"); |
120 | 820ef2f0 | Kostas Papadimitriou | |
121 | 820ef2f0 | Kostas Papadimitriou | // params initialization
|
122 | 820ef2f0 | Kostas Papadimitriou | this.type_selections = ["system", "custom"] |
123 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = "system"; |
124 | 820ef2f0 | Kostas Papadimitriou | this.selected_categories = [];
|
125 | 820ef2f0 | Kostas Papadimitriou | this.images = [];
|
126 | 820ef2f0 | Kostas Papadimitriou | |
127 | 820ef2f0 | Kostas Papadimitriou | // update
|
128 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
129 | 820ef2f0 | Kostas Papadimitriou | |
130 | 820ef2f0 | Kostas Papadimitriou | // handlers initialization
|
131 | 820ef2f0 | Kostas Papadimitriou | this.init_handlers();
|
132 | 820ef2f0 | Kostas Papadimitriou | this.init_position();
|
133 | 820ef2f0 | Kostas Papadimitriou | }, |
134 | 820ef2f0 | Kostas Papadimitriou | |
135 | 820ef2f0 | Kostas Papadimitriou | init_position: function() { |
136 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({position: "absolute"});
|
137 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({top:"10px"})
|
138 | 820ef2f0 | Kostas Papadimitriou | }, |
139 | 820ef2f0 | Kostas Papadimitriou | |
140 | 820ef2f0 | Kostas Papadimitriou | init_handlers: function() { |
141 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
142 | 820ef2f0 | Kostas Papadimitriou | this.types.live("click", function() { |
143 | 820ef2f0 | Kostas Papadimitriou | self.select_type($(this).attr("id").replace("type-select-","")); |
144 | 820ef2f0 | Kostas Papadimitriou | }) |
145 | 820ef2f0 | Kostas Papadimitriou | }, |
146 | 820ef2f0 | Kostas Papadimitriou | |
147 | 820ef2f0 | Kostas Papadimitriou | update_images: function() { |
148 | 820ef2f0 | Kostas Papadimitriou | this.images = storage.images.active();
|
149 | 820ef2f0 | Kostas Papadimitriou | this.images_ids = _.map(this.images, function(img){return img.id}); |
150 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_type == "custom") { this.images = []; this.images_ids = []; } |
151 | 820ef2f0 | Kostas Papadimitriou | |
152 | 820ef2f0 | Kostas Papadimitriou | return this.images; |
153 | 8d08f18a | Kostas Papadimitriou | }, |
154 | 8d08f18a | Kostas Papadimitriou | |
155 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
156 | 820ef2f0 | Kostas Papadimitriou | this.select_type(this.selected_type); |
157 | 820ef2f0 | Kostas Papadimitriou | }, |
158 | 820ef2f0 | Kostas Papadimitriou | |
159 | 820ef2f0 | Kostas Papadimitriou | get_categories: function(images) { |
160 | 820ef2f0 | Kostas Papadimitriou | return [];
|
161 | 820ef2f0 | Kostas Papadimitriou | return ["Desktop", "Server", "Linux", "Windows"]; |
162 | 820ef2f0 | Kostas Papadimitriou | }, |
163 | 820ef2f0 | Kostas Papadimitriou | |
164 | 820ef2f0 | Kostas Papadimitriou | reset_categories: function() { |
165 | 820ef2f0 | Kostas Papadimitriou | var categories = this.get_categories(this.images); |
166 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.find("li").remove(); |
167 | 820ef2f0 | Kostas Papadimitriou | |
168 | 820ef2f0 | Kostas Papadimitriou | _.each(categories, _.bind(function(cat) {
|
169 | 820ef2f0 | Kostas Papadimitriou | var el = $("<li />"); |
170 | 820ef2f0 | Kostas Papadimitriou | el.text(cat); |
171 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.append(el);
|
172 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
173 | 820ef2f0 | Kostas Papadimitriou | |
174 | 820ef2f0 | Kostas Papadimitriou | if (!categories.length) {
|
175 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").hide(); |
176 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").show(); |
177 | 820ef2f0 | Kostas Papadimitriou | } else {
|
178 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").show(); |
179 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").hide(); |
180 | 820ef2f0 | Kostas Papadimitriou | } |
181 | 820ef2f0 | Kostas Papadimitriou | }, |
182 | 820ef2f0 | Kostas Papadimitriou | |
183 | 820ef2f0 | Kostas Papadimitriou | select_type: function(type) { |
184 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = type;
|
185 | 820ef2f0 | Kostas Papadimitriou | this.types.removeClass("selected"); |
186 | 820ef2f0 | Kostas Papadimitriou | this.types.filter("#type-select-" + this.selected_type).addClass("selected"); |
187 | 820ef2f0 | Kostas Papadimitriou | |
188 | 820ef2f0 | Kostas Papadimitriou | this.reset_categories();
|
189 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
190 | 820ef2f0 | Kostas Papadimitriou | this.reset_images();
|
191 | 820ef2f0 | Kostas Papadimitriou | this.select_image();
|
192 | 8d08f18a | Kostas Papadimitriou | }, |
193 | 8d08f18a | Kostas Papadimitriou | |
194 | 8d08f18a | Kostas Papadimitriou | select_image: function(image) { |
195 | 820ef2f0 | Kostas Papadimitriou | if (!image && this.images_ids.length) { |
196 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_image && this.images_ids.indexOf(this.selected_image.id) > -1) { |
197 | 820ef2f0 | Kostas Papadimitriou | image = this.selected_image;
|
198 | 820ef2f0 | Kostas Papadimitriou | } else {
|
199 | 820ef2f0 | Kostas Papadimitriou | image = storage.images.get(this.images_ids[0]); |
200 | 820ef2f0 | Kostas Papadimitriou | } |
201 | 8d08f18a | Kostas Papadimitriou | } |
202 | 8d08f18a | Kostas Papadimitriou | |
203 | 820ef2f0 | Kostas Papadimitriou | if (!this.images_ids.length) { image = this.selected_image || undefined }; |
204 | 820ef2f0 | Kostas Papadimitriou | |
205 | 8d08f18a | Kostas Papadimitriou | this.selected_image = image;
|
206 | 820ef2f0 | Kostas Papadimitriou | this.trigger("change", image); |
207 | 8d08f18a | Kostas Papadimitriou | |
208 | 820ef2f0 | Kostas Papadimitriou | if (image) {
|
209 | 820ef2f0 | Kostas Papadimitriou | this.image_details.show();
|
210 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").removeClass("selected"); |
211 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details#create-vm-image-" + this.selected_image.id).addClass("selected"); |
212 | 820ef2f0 | Kostas Papadimitriou | |
213 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc.text(image.get("description")); |
214 | 820ef2f0 | Kostas Papadimitriou | |
215 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_tag(image.get("OS")) |
216 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title.html(img + image.get("name")); |
217 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os.text(_(image.get("OS")).capitalize()); |
218 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel.text(image.get("kernel")); |
219 | 820ef2f0 | Kostas Papadimitriou | |
220 | 73e25ce2 | Kostas Papadimitriou | var size = util.readablizeBytes(parseInt(image.get("size")) * 1024 * 1024); |
221 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size.text(size);
|
222 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui.text(image.get("GUI")); |
223 | 820ef2f0 | Kostas Papadimitriou | |
224 | 820ef2f0 | Kostas Papadimitriou | } else {
|
225 | 820ef2f0 | Kostas Papadimitriou | this.image_details.hide();
|
226 | 820ef2f0 | Kostas Papadimitriou | } |
227 | 8d08f18a | Kostas Papadimitriou | }, |
228 | 8d08f18a | Kostas Papadimitriou | |
229 | 8d08f18a | Kostas Papadimitriou | reset_images: function() { |
230 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find("li").remove(); |
231 | 820ef2f0 | Kostas Papadimitriou | _.each(this.images, _.bind(function(img){ |
232 | 8d08f18a | Kostas Papadimitriou | this.add_image(img);
|
233 | 8d08f18a | Kostas Papadimitriou | }, this))
|
234 | 820ef2f0 | Kostas Papadimitriou | |
235 | 820ef2f0 | Kostas Papadimitriou | if (this.images.length) { |
236 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").hide(); |
237 | 820ef2f0 | Kostas Papadimitriou | } else {
|
238 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").show(); |
239 | 820ef2f0 | Kostas Papadimitriou | } |
240 | 8d08f18a | Kostas Papadimitriou | |
241 | 8d08f18a | Kostas Papadimitriou | this.select_image();
|
242 | 8d08f18a | Kostas Papadimitriou | |
243 | 8d08f18a | Kostas Papadimitriou | var self = this; |
244 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").click(function(){ |
245 | 8d08f18a | Kostas Papadimitriou | self.select_image($(this).data("image")); |
246 | 820ef2f0 | Kostas Papadimitriou | }); |
247 | 820ef2f0 | Kostas Papadimitriou | |
248 | 820ef2f0 | Kostas Papadimitriou | }, |
249 | 820ef2f0 | Kostas Papadimitriou | |
250 | 820ef2f0 | Kostas Papadimitriou | show: function() { |
251 | 820ef2f0 | Kostas Papadimitriou | views.CreateImageSelectView.__super__.show.apply(this, arguments); |
252 | 8d08f18a | Kostas Papadimitriou | }, |
253 | 8d08f18a | Kostas Papadimitriou | |
254 | 8d08f18a | Kostas Papadimitriou | add_image: function(img) { |
255 | 820ef2f0 | Kostas Papadimitriou | var image = $(('<li id="create-vm-image-{1}"' + |
256 | 820ef2f0 | Kostas Papadimitriou | 'class="image-details clearfix">{2}{0}' +
|
257 | 820ef2f0 | Kostas Papadimitriou | '<p>{4}</p><span class="size">{3}' +
|
258 | 820ef2f0 | Kostas Papadimitriou | '</span></li>').format(img.get("name"), |
259 | 820ef2f0 | Kostas Papadimitriou | img.id, |
260 | 820ef2f0 | Kostas Papadimitriou | snf.ui.helpers.os_icon_tag(img.get("OS")),
|
261 | 73e25ce2 | Kostas Papadimitriou | util.readablizeBytes(parseInt(img.get("size"))* 1024 * 1024), |
262 | 820ef2f0 | Kostas Papadimitriou | util.truncate(img.get("description"),35))); |
263 | 8d08f18a | Kostas Papadimitriou | image.data("image", img);
|
264 | 8d08f18a | Kostas Papadimitriou | image.data("image_id", img.id);
|
265 | 820ef2f0 | Kostas Papadimitriou | this.images_list.append(image);
|
266 | 8d08f18a | Kostas Papadimitriou | }, |
267 | 8d08f18a | Kostas Papadimitriou | |
268 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
269 | 8d08f18a | Kostas Papadimitriou | this.selected_image = undefined; |
270 | 8d08f18a | Kostas Papadimitriou | this.reset_images();
|
271 | 8d08f18a | Kostas Papadimitriou | }, |
272 | 8d08f18a | Kostas Papadimitriou | |
273 | 8d08f18a | Kostas Papadimitriou | get: function() { |
274 | 8d08f18a | Kostas Papadimitriou | return {'image': this.selected_image}; |
275 | 8d08f18a | Kostas Papadimitriou | } |
276 | 8d08f18a | Kostas Papadimitriou | }); |
277 | 8d08f18a | Kostas Papadimitriou | |
278 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView = views.CreateVMStepView.extend({ |
279 | 8d08f18a | Kostas Papadimitriou | step: 2, |
280 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
281 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView.__super__.initialize.apply(this, arguments); |
282 | 8d08f18a | Kostas Papadimitriou | this.parent.bind("image:change", _.bind(this.handle_image_change, this)); |
283 | 8d08f18a | Kostas Papadimitriou | |
284 | 820ef2f0 | Kostas Papadimitriou | this.cpus = this.$(".flavors-cpu-list"); |
285 | 820ef2f0 | Kostas Papadimitriou | this.disks = this.$(".flavors-disk-list"); |
286 | 820ef2f0 | Kostas Papadimitriou | this.mems = this.$(".flavors-mem-list"); |
287 | 8d08f18a | Kostas Papadimitriou | |
288 | 820ef2f0 | Kostas Papadimitriou | this.predefined_flavors = SUGGESTED_FLAVORS;
|
289 | 2ecab6a2 | Kostas Papadimitriou | this.predefined_flavors_keys = _.keys(SUGGESTED_FLAVORS);
|
290 | 2ecab6a2 | Kostas Papadimitriou | this.predefined_flavors_keys = _.sortBy(this.predefined_flavors_keys, _.bind(function(k){ |
291 | 2ecab6a2 | Kostas Papadimitriou | var flv = this.predefined_flavors[k]; |
292 | 2ecab6a2 | Kostas Papadimitriou | return flv.ram * flv.cpu * flv.disk;
|
293 | 2ecab6a2 | Kostas Papadimitriou | }, this));
|
294 | 2ecab6a2 | Kostas Papadimitriou | |
295 | 820ef2f0 | Kostas Papadimitriou | this.predefined = this.$(".predefined-list"); |
296 | 820ef2f0 | Kostas Papadimitriou | this.update_predefined_flavors();
|
297 | 8d08f18a | Kostas Papadimitriou | }, |
298 | 8d08f18a | Kostas Papadimitriou | |
299 | 8d08f18a | Kostas Papadimitriou | handle_image_change: function(data) { |
300 | 8d08f18a | Kostas Papadimitriou | this.current_image = data;
|
301 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
302 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
303 | 8d08f18a | Kostas Papadimitriou | this.reset_flavors();
|
304 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
305 | 8d08f18a | Kostas Papadimitriou | }, |
306 | 8d08f18a | Kostas Papadimitriou | |
307 | 8d08f18a | Kostas Papadimitriou | reset_flavors: function() { |
308 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-opts-list .option").remove(); |
309 | 8d08f18a | Kostas Papadimitriou | this.create_flavors();
|
310 | 8d08f18a | Kostas Papadimitriou | }, |
311 | 8d08f18a | Kostas Papadimitriou | |
312 | 820ef2f0 | Kostas Papadimitriou | update_predefined_flavors: function() { |
313 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").remove(); |
314 | 2ecab6a2 | Kostas Papadimitriou | _.each(this.predefined_flavors_keys, _.bind(function(key) { |
315 | 2ecab6a2 | Kostas Papadimitriou | var val = this.predefined_flavors[key]; |
316 | 820ef2f0 | Kostas Papadimitriou | var el = $(('<li class="predefined-selection" id="predefined-flavor-{0}">' + |
317 | 2ecab6a2 | Kostas Papadimitriou | '{1}</li>').format(key, _(key).capitalize()));
|
318 | 820ef2f0 | Kostas Papadimitriou | |
319 | 820ef2f0 | Kostas Papadimitriou | this.predefined.append(el);
|
320 | 820ef2f0 | Kostas Papadimitriou | el.data({flavor: storage.flavors.get_flavor(val.cpu, val.ram, val.disk, this.flavors)}) |
321 | 820ef2f0 | Kostas Papadimitriou | el.click(_.bind(function() {
|
322 | 820ef2f0 | Kostas Papadimitriou | this.handle_predefined_click(el);
|
323 | 820ef2f0 | Kostas Papadimitriou | }, this))
|
324 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
325 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
326 | 820ef2f0 | Kostas Papadimitriou | }, |
327 | 820ef2f0 | Kostas Papadimitriou | |
328 | 820ef2f0 | Kostas Papadimitriou | handle_predefined_click: function(el) { |
329 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return }; |
330 | 820ef2f0 | Kostas Papadimitriou | this.set_current(el.data("flavor")) |
331 | 820ef2f0 | Kostas Papadimitriou | }, |
332 | 820ef2f0 | Kostas Papadimitriou | |
333 | 820ef2f0 | Kostas Papadimitriou | update_valid_predefined: function() { |
334 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
335 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
336 | 820ef2f0 | Kostas Papadimitriou | this.valid_predefined = _.select(_.map(this.predefined_flavors, function(flv, key){ |
337 | 820ef2f0 | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
338 | 820ef2f0 | Kostas Papadimitriou | // non existing
|
339 | 820ef2f0 | Kostas Papadimitriou | if (!existing) {
|
340 | 820ef2f0 | Kostas Papadimitriou | return false; |
341 | 820ef2f0 | Kostas Papadimitriou | } |
342 | 820ef2f0 | Kostas Papadimitriou | |
343 | 820ef2f0 | Kostas Papadimitriou | // not available for image
|
344 | 820ef2f0 | Kostas Papadimitriou | if (self.unavailable_values && self.unavailable_values.disk.indexOf(existing.get_disk_size()) > -1) { |
345 | 820ef2f0 | Kostas Papadimitriou | return false |
346 | 820ef2f0 | Kostas Papadimitriou | } |
347 | 820ef2f0 | Kostas Papadimitriou | |
348 | 820ef2f0 | Kostas Papadimitriou | return key;
|
349 | 820ef2f0 | Kostas Papadimitriou | }), function(ret) { return ret }); |
350 | 820ef2f0 | Kostas Papadimitriou | |
351 | 820ef2f0 | Kostas Papadimitriou | $("li.predefined-selection").addClass("disabled"); |
352 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
353 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).removeClass("disabled"); |
354 | 820ef2f0 | Kostas Papadimitriou | }) |
355 | 820ef2f0 | Kostas Papadimitriou | }, |
356 | 820ef2f0 | Kostas Papadimitriou | |
357 | 820ef2f0 | Kostas Papadimitriou | update_selected_predefined: function() { |
358 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
359 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").removeClass("selected"); |
360 | 820ef2f0 | Kostas Papadimitriou | |
361 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key){ |
362 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
363 | 820ef2f0 | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
364 | 820ef2f0 | Kostas Papadimitriou | |
365 | 820ef2f0 | Kostas Papadimitriou | if (exists && (exists.id == self.current_flavor.id)) {
|
366 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).addClass("selected"); |
367 | 820ef2f0 | Kostas Papadimitriou | } |
368 | 820ef2f0 | Kostas Papadimitriou | }) |
369 | 820ef2f0 | Kostas Papadimitriou | }, |
370 | 820ef2f0 | Kostas Papadimitriou | |
371 | 8d08f18a | Kostas Papadimitriou | update_flavors_data: function() { |
372 | 820ef2f0 | Kostas Papadimitriou | this.flavors = storage.flavors.active();
|
373 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = storage.flavors.get_data(this.flavors); |
374 | 820ef2f0 | Kostas Papadimitriou | |
375 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
376 | 820ef2f0 | Kostas Papadimitriou | var set = false; |
377 | 820ef2f0 | Kostas Papadimitriou | |
378 | 820ef2f0 | Kostas Papadimitriou | // FIXME: validate current flavor
|
379 | 820ef2f0 | Kostas Papadimitriou | |
380 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_flavor) { |
381 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
382 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
383 | 820ef2f0 | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, self.flavors);
|
384 | 820ef2f0 | Kostas Papadimitriou | if (exists && !set) {
|
385 | 820ef2f0 | Kostas Papadimitriou | self.set_current(exists); |
386 | 820ef2f0 | Kostas Papadimitriou | set = true;
|
387 | 820ef2f0 | Kostas Papadimitriou | } |
388 | 820ef2f0 | Kostas Papadimitriou | }) |
389 | 8d08f18a | Kostas Papadimitriou | } |
390 | 820ef2f0 | Kostas Papadimitriou | |
391 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
392 | 8d08f18a | Kostas Papadimitriou | }, |
393 | 8d08f18a | Kostas Papadimitriou | |
394 | 820ef2f0 | Kostas Papadimitriou | update_unavailable_values: function() { |
395 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_image) { this.unavailable_values = {disk:[], ram:[], cpu:[]}; return }; |
396 | 820ef2f0 | Kostas Papadimitriou | this.unavailable_values = storage.flavors.unavailable_values_for_image(this.current_image); |
397 | 820ef2f0 | Kostas Papadimitriou | }, |
398 | 820ef2f0 | Kostas Papadimitriou | |
399 | 820ef2f0 | Kostas Papadimitriou | flavor_is_valid: function(flv) { |
400 | 820ef2f0 | Kostas Papadimitriou | if (!flv) { return false }; |
401 | 820ef2f0 | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.get("cpu"), flv.get("ram"), flv.get("disk"), this.flavors); |
402 | 820ef2f0 | Kostas Papadimitriou | if (!existing) { return false }; |
403 | 820ef2f0 | Kostas Papadimitriou | if (this.unavailable_values && this.unavailable_values.disk.indexOf(flv.get("disk") > -1)) { |
404 | 820ef2f0 | Kostas Papadimitriou | return false |
405 | 820ef2f0 | Kostas Papadimitriou | } |
406 | 820ef2f0 | Kostas Papadimitriou | return true; |
407 | 820ef2f0 | Kostas Papadimitriou | }, |
408 | 820ef2f0 | Kostas Papadimitriou | |
409 | 885a592b | Kostas Papadimitriou | set_valid_current_for: function(t, val) { |
410 | 885a592b | Kostas Papadimitriou | var found = this.flavors[0]; |
411 | 885a592b | Kostas Papadimitriou | _.each(this.flavors, function(flv) { |
412 | 885a592b | Kostas Papadimitriou | if (flv.get(t) == val) {
|
413 | 885a592b | Kostas Papadimitriou | found = flv; |
414 | 885a592b | Kostas Papadimitriou | } |
415 | 885a592b | Kostas Papadimitriou | }); |
416 | 885a592b | Kostas Papadimitriou | |
417 | 885a592b | Kostas Papadimitriou | this.set_current(found);
|
418 | 885a592b | Kostas Papadimitriou | }, |
419 | 885a592b | Kostas Papadimitriou | |
420 | 8d08f18a | Kostas Papadimitriou | set_current: function(flv) { |
421 | 885a592b | Kostas Papadimitriou | |
422 | 885a592b | Kostas Papadimitriou | if (!flv) {
|
423 | 885a592b | Kostas Papadimitriou | // user clicked on invalid combination
|
424 | 885a592b | Kostas Papadimitriou | // force the first available choice for the
|
425 | 885a592b | Kostas Papadimitriou | // type of option he last clicked
|
426 | 885a592b | Kostas Papadimitriou | this.set_valid_current_for.apply(this, this.last_choice); |
427 | 885a592b | Kostas Papadimitriou | return;
|
428 | 885a592b | Kostas Papadimitriou | } |
429 | 885a592b | Kostas Papadimitriou | |
430 | 8d08f18a | Kostas Papadimitriou | this.current_flavor = flv;
|
431 | 8d08f18a | Kostas Papadimitriou | this.trigger("change"); |
432 | 8d08f18a | Kostas Papadimitriou | this.update_selected_flavor();
|
433 | 820ef2f0 | Kostas Papadimitriou | this.update_selected_predefined();
|
434 | 820ef2f0 | Kostas Papadimitriou | }, |
435 | 820ef2f0 | Kostas Papadimitriou | |
436 | 820ef2f0 | Kostas Papadimitriou | select_default_flavor: function() { |
437 | 820ef2f0 | Kostas Papadimitriou | |
438 | 820ef2f0 | Kostas Papadimitriou | }, |
439 | 820ef2f0 | Kostas Papadimitriou | |
440 | 820ef2f0 | Kostas Papadimitriou | update_selected_from_ui: function() { |
441 | 820ef2f0 | Kostas Papadimitriou | this.set_current(this.ui_selected()); |
442 | 820ef2f0 | Kostas Papadimitriou | }, |
443 | 820ef2f0 | Kostas Papadimitriou | |
444 | 820ef2f0 | Kostas Papadimitriou | update_disabled_flavors: function() { |
445 | 820ef2f0 | Kostas Papadimitriou | this.$(".flavor-options.disk li").removeClass("disabled"); |
446 | 820ef2f0 | Kostas Papadimitriou | if (!this.unavailable_values) { return } |
447 | 885a592b | Kostas Papadimitriou | |
448 | 885a592b | Kostas Papadimitriou | this.$("#create-vm-flavor-options .flavor-options.disk li").each(_.bind(function(i, el){ |
449 | 885a592b | Kostas Papadimitriou | var el_value = $(el).data("value") * 1000; |
450 | 820ef2f0 | Kostas Papadimitriou | if (this.unavailable_values.disk.indexOf(el_value) > -1) { |
451 | 820ef2f0 | Kostas Papadimitriou | $(el).addClass("disabled"); |
452 | 820ef2f0 | Kostas Papadimitriou | }; |
453 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
454 | 8d08f18a | Kostas Papadimitriou | }, |
455 | 8d08f18a | Kostas Papadimitriou | |
456 | 8d08f18a | Kostas Papadimitriou | create_flavors: function() { |
457 | 820ef2f0 | Kostas Papadimitriou | var flavors = this.get_active_flavors(); |
458 | 820ef2f0 | Kostas Papadimitriou | var valid_flavors = this.get_valid_flavors(); |
459 | 885a592b | Kostas Papadimitriou | this.__added_flavors = {'cpu':[], 'ram':[], 'disk':[]}; |
460 | 820ef2f0 | Kostas Papadimitriou | |
461 | 8d08f18a | Kostas Papadimitriou | _.each(flavors, _.bind(function(flv){
|
462 | 8d08f18a | Kostas Papadimitriou | this.add_flavor(flv);
|
463 | 8d08f18a | Kostas Papadimitriou | }, this));
|
464 | 8d08f18a | Kostas Papadimitriou | |
465 | 8d08f18a | Kostas Papadimitriou | var self = this; |
466 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-options li.option").click(function(){ |
467 | 8d08f18a | Kostas Papadimitriou | var el = $(this); |
468 | 820ef2f0 | Kostas Papadimitriou | |
469 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return } |
470 | 820ef2f0 | Kostas Papadimitriou | |
471 | 8d08f18a | Kostas Papadimitriou | el.parent().find(".option").removeClass("selected"); |
472 | 8d08f18a | Kostas Papadimitriou | el.addClass("selected");
|
473 | 820ef2f0 | Kostas Papadimitriou | |
474 | 885a592b | Kostas Papadimitriou | if (el.hasClass("mem")) { self.last_choice = ["ram", $(this).data("value")] } |
475 | 885a592b | Kostas Papadimitriou | if (el.hasClass("cpu")) { self.last_choice = ["cpu", $(this).data("value")] } |
476 | 885a592b | Kostas Papadimitriou | if (el.hasClass("disk")) { self.last_choice = ["disk", $(this).data("value")] } |
477 | 820ef2f0 | Kostas Papadimitriou | |
478 | 8d08f18a | Kostas Papadimitriou | self.update_selected_from_ui(); |
479 | 8d08f18a | Kostas Papadimitriou | }) |
480 | 8d08f18a | Kostas Papadimitriou | }, |
481 | 8d08f18a | Kostas Papadimitriou | |
482 | 8d08f18a | Kostas Papadimitriou | ui_selected: function() { |
483 | 820ef2f0 | Kostas Papadimitriou | var args = [this.$(".option.cpu.selected").data("value"), |
484 | 8d08f18a | Kostas Papadimitriou | this.$(".option.mem.selected").data("value"), |
485 | 8d08f18a | Kostas Papadimitriou | this.$(".option.disk.selected").data("value"), |
486 | 8d08f18a | Kostas Papadimitriou | this.flavors];
|
487 | 8d08f18a | Kostas Papadimitriou | |
488 | 820ef2f0 | Kostas Papadimitriou | var flv = storage.flavors.get_flavor.apply(storage.flavors, args);
|
489 | 820ef2f0 | Kostas Papadimitriou | return flv;
|
490 | 8d08f18a | Kostas Papadimitriou | }, |
491 | 8d08f18a | Kostas Papadimitriou | |
492 | 8d08f18a | Kostas Papadimitriou | update_selected_flavor: function() { |
493 | 820ef2f0 | Kostas Papadimitriou | var flv = this.current_flavor; |
494 | 820ef2f0 | Kostas Papadimitriou | this.$(".option").removeClass("selected"); |
495 | 8d08f18a | Kostas Papadimitriou | |
496 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.cpu.value-" + flv.get("cpu")).addClass("selected"); |
497 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.mem.value-" + flv.get("ram")).addClass("selected"); |
498 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.disk.value-" + flv.get("disk")).addClass("selected"); |
499 | 8d08f18a | Kostas Papadimitriou | }, |
500 | 885a592b | Kostas Papadimitriou | |
501 | 885a592b | Kostas Papadimitriou | __added_flavors: {'cpu':[], 'ram':[], 'disk':[]}, |
502 | 8d08f18a | Kostas Papadimitriou | add_flavor: function(flv) { |
503 | 8d08f18a | Kostas Papadimitriou | var values = {'cpu': flv.get('cpu'), 'mem': flv.get('ram'), 'disk': flv.get('disk')}; |
504 | 820ef2f0 | Kostas Papadimitriou | |
505 | 820ef2f0 | Kostas Papadimitriou | disabled = "";
|
506 | 885a592b | Kostas Papadimitriou | |
507 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.cpu.indexOf(values.cpu) == -1) { |
508 | 820ef2f0 | Kostas Papadimitriou | var cpu = $(('<li class="option cpu value-{0} {1}">' + |
509 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
510 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">x</span></li>').format(values.cpu, disabled)).data('value', values.cpu); |
511 | 8d08f18a | Kostas Papadimitriou | this.cpus.append(cpu);
|
512 | 885a592b | Kostas Papadimitriou | this.__added_flavors.cpu.push(values.cpu);
|
513 | 8d08f18a | Kostas Papadimitriou | } |
514 | 885a592b | Kostas Papadimitriou | |
515 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.ram.indexOf(values.mem) == -1) { |
516 | 820ef2f0 | Kostas Papadimitriou | var mem = $(('<li class="option mem value-{0}">' + |
517 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
518 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">MB</span></li>').format(values.mem)).data('value', values.mem); |
519 | 8d08f18a | Kostas Papadimitriou | this.mems.append(mem);
|
520 | 885a592b | Kostas Papadimitriou | this.__added_flavors.ram.push(values.mem);
|
521 | 8d08f18a | Kostas Papadimitriou | } |
522 | 885a592b | Kostas Papadimitriou | |
523 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.disk.indexOf(values.disk) == -1) { |
524 | 820ef2f0 | Kostas Papadimitriou | var disk = $(('<li class="option disk value-{0}">' + |
525 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
526 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">GB</span></li>').format(values.disk)).data('value', values.disk); |
527 | 8d08f18a | Kostas Papadimitriou | this.disks.append(disk);
|
528 | 885a592b | Kostas Papadimitriou | this.__added_flavors.disk.push(values.disk)
|
529 | 8d08f18a | Kostas Papadimitriou | } |
530 | 885a592b | Kostas Papadimitriou | |
531 | 8d08f18a | Kostas Papadimitriou | |
532 | 8d08f18a | Kostas Papadimitriou | }, |
533 | 820ef2f0 | Kostas Papadimitriou | |
534 | 820ef2f0 | Kostas Papadimitriou | get_active_flavors: function() { |
535 | 820ef2f0 | Kostas Papadimitriou | return storage.flavors.active();
|
536 | 820ef2f0 | Kostas Papadimitriou | }, |
537 | 8d08f18a | Kostas Papadimitriou | |
538 | 820ef2f0 | Kostas Papadimitriou | get_valid_flavors: function() { |
539 | 8d08f18a | Kostas Papadimitriou | return this.flavors; |
540 | 8d08f18a | Kostas Papadimitriou | }, |
541 | 8d08f18a | Kostas Papadimitriou | |
542 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
543 | 820ef2f0 | Kostas Papadimitriou | this.update_selected_flavor();
|
544 | 820ef2f0 | Kostas Papadimitriou | this.update_disabled_flavors();
|
545 | 8d08f18a | Kostas Papadimitriou | }, |
546 | 8d08f18a | Kostas Papadimitriou | |
547 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
548 | 8d08f18a | Kostas Papadimitriou | this.current_image = storage.images.at(0); |
549 | 8d08f18a | Kostas Papadimitriou | this.flavors = [];
|
550 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = {'cpu':[], 'mem':[], 'disk':[]}; |
551 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
552 | 8d08f18a | Kostas Papadimitriou | }, |
553 | 8d08f18a | Kostas Papadimitriou | |
554 | 8d08f18a | Kostas Papadimitriou | get: function() { |
555 | 8d08f18a | Kostas Papadimitriou | return {'flavor': this.current_flavor} |
556 | 8d08f18a | Kostas Papadimitriou | } |
557 | 8d08f18a | Kostas Papadimitriou | |
558 | 8d08f18a | Kostas Papadimitriou | }); |
559 | 8d08f18a | Kostas Papadimitriou | |
560 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView = views.CreateVMStepView.extend({ |
561 | 8d08f18a | Kostas Papadimitriou | step: 3, |
562 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
563 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView.__super__.initialize.apply(this, arguments); |
564 | 73e25ce2 | Kostas Papadimitriou | this.roles = this.$("li.predefined-meta.role .values"); |
565 | 8d08f18a | Kostas Papadimitriou | this.confirm = this.$(".confirm-params ul"); |
566 | 73e25ce2 | Kostas Papadimitriou | this.name = this.$("input.rename-field"); |
567 | 8d08f18a | Kostas Papadimitriou | this.name_changed = false; |
568 | 73e25ce2 | Kostas Papadimitriou | this.init_suggested_roles();
|
569 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
570 | 8d08f18a | Kostas Papadimitriou | }, |
571 | 8d08f18a | Kostas Papadimitriou | |
572 | 73e25ce2 | Kostas Papadimitriou | init_suggested_roles: function() { |
573 | 73e25ce2 | Kostas Papadimitriou | var cont = this.roles; |
574 | 73e25ce2 | Kostas Papadimitriou | cont.empty(); |
575 | 73e25ce2 | Kostas Papadimitriou | |
576 | 73e25ce2 | Kostas Papadimitriou | // TODO: get suggested from snf.api.conf
|
577 | 73e25ce2 | Kostas Papadimitriou | _.each(window.SUGGESTED_ROLES, function(r){
|
578 | 73e25ce2 | Kostas Papadimitriou | var el = $('<span class="val">{0}</span>'.format(r)); |
579 | 73e25ce2 | Kostas Papadimitriou | el.data("value", r);
|
580 | 73e25ce2 | Kostas Papadimitriou | cont.append(el); |
581 | 73e25ce2 | Kostas Papadimitriou | el.click(function() {
|
582 | 73e25ce2 | Kostas Papadimitriou | $(this).parent().find(".val").removeClass("selected"); |
583 | 73e25ce2 | Kostas Papadimitriou | $(this).toggleClass("selected"); |
584 | 73e25ce2 | Kostas Papadimitriou | }) |
585 | 73e25ce2 | Kostas Papadimitriou | }) |
586 | 73e25ce2 | Kostas Papadimitriou | }, |
587 | 73e25ce2 | Kostas Papadimitriou | |
588 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
589 | 820ef2f0 | Kostas Papadimitriou | this.name.bind("keypress", _.bind(function(e) { |
590 | 8d08f18a | Kostas Papadimitriou | this.name_changed = true; |
591 | 820ef2f0 | Kostas Papadimitriou | if (e.keyCode == 13) { this.parent.submit() }; |
592 | 8d08f18a | Kostas Papadimitriou | }, this));
|
593 | 8d08f18a | Kostas Papadimitriou | |
594 | 8d08f18a | Kostas Papadimitriou | this.name.bind("click", _.bind(function() { |
595 | 8d08f18a | Kostas Papadimitriou | if (!this.name_changed) { |
596 | 8d08f18a | Kostas Papadimitriou | this.name.val(""); |
597 | 8d08f18a | Kostas Papadimitriou | } |
598 | 8d08f18a | Kostas Papadimitriou | }, this))
|
599 | 8d08f18a | Kostas Papadimitriou | }, |
600 | 8d08f18a | Kostas Papadimitriou | |
601 | 8d08f18a | Kostas Papadimitriou | show: function() { |
602 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView.__super__.show.apply(this, arguments); |
603 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
604 | 8d08f18a | Kostas Papadimitriou | }, |
605 | 820ef2f0 | Kostas Papadimitriou | |
606 | 73e25ce2 | Kostas Papadimitriou | update_flavor_details: function() { |
607 | 73e25ce2 | Kostas Papadimitriou | var flavor = this.parent.get_params().flavor; |
608 | 73e25ce2 | Kostas Papadimitriou | |
609 | 73e25ce2 | Kostas Papadimitriou | function set_detail(sel, key) { |
610 | 73e25ce2 | Kostas Papadimitriou | var val = key;
|
611 | 73e25ce2 | Kostas Papadimitriou | if (key == undefined) { val = flavor.get(sel) }; |
612 | 73e25ce2 | Kostas Papadimitriou | this.$(".confirm-cont.flavor .flavor-" + sel + " .value").text(val) |
613 | 73e25ce2 | Kostas Papadimitriou | } |
614 | 73e25ce2 | Kostas Papadimitriou | |
615 | 4f1968db | Kostas Papadimitriou | set_detail("cpu", flavor.get("cpu") + "x"); |
616 | 73e25ce2 | Kostas Papadimitriou | set_detail("ram", flavor.get("ram") + " MB"); |
617 | 73e25ce2 | Kostas Papadimitriou | set_detail("disk", util.readablizeBytes(flavor.get("disk") * 1024 * 1024 * 1024)); |
618 | 73e25ce2 | Kostas Papadimitriou | }, |
619 | 73e25ce2 | Kostas Papadimitriou | |
620 | 820ef2f0 | Kostas Papadimitriou | update_image_details: function() { |
621 | 820ef2f0 | Kostas Papadimitriou | var image = this.parent.get_params().image; |
622 | 820ef2f0 | Kostas Papadimitriou | |
623 | 73e25ce2 | Kostas Papadimitriou | function set_detail(sel, key) { |
624 | 73e25ce2 | Kostas Papadimitriou | var val = key;
|
625 | 73e25ce2 | Kostas Papadimitriou | if (key == undefined) { val = image.get(sel) }; |
626 | 73e25ce2 | Kostas Papadimitriou | this.$(".confirm-cont.image .image-" + sel + " .value").text(val) |
627 | 820ef2f0 | Kostas Papadimitriou | } |
628 | 820ef2f0 | Kostas Papadimitriou | |
629 | 73e25ce2 | Kostas Papadimitriou | set_detail("description");
|
630 | 73e25ce2 | Kostas Papadimitriou | set_detail("name");
|
631 | 4f1968db | Kostas Papadimitriou | set_detail("os", _(image.get("OS")).capitalize()); |
632 | 73e25ce2 | Kostas Papadimitriou | set_detail("gui", image.get("GUI")); |
633 | 73e25ce2 | Kostas Papadimitriou | set_detail("size", util.readablizeBytes(image.get_size() * 1024 * 1024)); |
634 | 73e25ce2 | Kostas Papadimitriou | set_detail("kernel");
|
635 | 820ef2f0 | Kostas Papadimitriou | }, |
636 | 8d08f18a | Kostas Papadimitriou | |
637 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
638 | 8d08f18a | Kostas Papadimitriou | var params = this.parent.get_params(); |
639 | 820ef2f0 | Kostas Papadimitriou | |
640 | 820ef2f0 | Kostas Papadimitriou | if (!params.image) { return } |
641 | 8d08f18a | Kostas Papadimitriou | var vm_name = "My {0} server".format(params.image.get("name")); |
642 | 8d08f18a | Kostas Papadimitriou | var orig_name = vm_name;
|
643 | 8d08f18a | Kostas Papadimitriou | |
644 | 8d08f18a | Kostas Papadimitriou | var existing = true; |
645 | 8d08f18a | Kostas Papadimitriou | var j = 0; |
646 | b128dc09 | Kostas Papadimitriou | |
647 | 820ef2f0 | Kostas Papadimitriou | while (existing && !this.name_changed) { |
648 | 8d08f18a | Kostas Papadimitriou | var existing = storage.vms.select(function(vm){return vm.get("name") == vm_name}).length |
649 | 8d08f18a | Kostas Papadimitriou | if (existing) {
|
650 | 8d08f18a | Kostas Papadimitriou | j++; |
651 | 8d08f18a | Kostas Papadimitriou | vm_name = orig_name + " " + j;
|
652 | 8d08f18a | Kostas Papadimitriou | } |
653 | 8d08f18a | Kostas Papadimitriou | } |
654 | 8d08f18a | Kostas Papadimitriou | if (!_(this.name.val()).trim() || !this.name_changed) { |
655 | 8d08f18a | Kostas Papadimitriou | this.name.val(vm_name);
|
656 | 8d08f18a | Kostas Papadimitriou | } |
657 | 8d08f18a | Kostas Papadimitriou | |
658 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.image .value").text(params.flavor.get("image")); |
659 | 60143907 | Kostas Papadimitriou | this.confirm.find("li.cpu .value").text(params.flavor.get("cpu") + "x"); |
660 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.mem .value").text(params.flavor.get("ram")); |
661 | 8d08f18a | Kostas Papadimitriou | this.confirm.find("li.disk .value").text(params.flavor.get("disk")); |
662 | 820ef2f0 | Kostas Papadimitriou | |
663 | 4f1968db | Kostas Papadimitriou | if (!this.name_changed && this.parent.visible()) { |
664 | 1325fc64 | Kostas Papadimitriou | if (!$.browser.msie && !$.browser.opera) { |
665 | 4f1968db | Kostas Papadimitriou | this.$("#create-vm-name").select(); |
666 | 4f1968db | Kostas Papadimitriou | } else {
|
667 | 4f1968db | Kostas Papadimitriou | window.setTimeout(_.bind(function(){
|
668 | 4f1968db | Kostas Papadimitriou | this.$("#create-vm-name").select(); |
669 | 1325fc64 | Kostas Papadimitriou | }, this), 400) |
670 | 4f1968db | Kostas Papadimitriou | } |
671 | 820ef2f0 | Kostas Papadimitriou | } |
672 | 820ef2f0 | Kostas Papadimitriou | |
673 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_path(params.image.get("OS")) |
674 | 820ef2f0 | Kostas Papadimitriou | this.name.css({backgroundImage:"url({0})".format(img)}) |
675 | 820ef2f0 | Kostas Papadimitriou | |
676 | 820ef2f0 | Kostas Papadimitriou | this.update_image_details();
|
677 | 73e25ce2 | Kostas Papadimitriou | this.update_flavor_details();
|
678 | 8d08f18a | Kostas Papadimitriou | }, |
679 | 8d08f18a | Kostas Papadimitriou | |
680 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
681 | 73e25ce2 | Kostas Papadimitriou | this.roles.find(".val").removeClass("selected"); |
682 | 820ef2f0 | Kostas Papadimitriou | this.name_changed = false; |
683 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
684 | 8d08f18a | Kostas Papadimitriou | }, |
685 | 8d08f18a | Kostas Papadimitriou | |
686 | 73e25ce2 | Kostas Papadimitriou | get_meta: function() { |
687 | 73e25ce2 | Kostas Papadimitriou | if (this.roles.find(".selected").length == 0) { |
688 | 73e25ce2 | Kostas Papadimitriou | return false; |
689 | 73e25ce2 | Kostas Papadimitriou | } |
690 | 73e25ce2 | Kostas Papadimitriou | |
691 | 73e25ce2 | Kostas Papadimitriou | var role = $(this.roles.find(".selected").get(0)).data("value"); |
692 | 73e25ce2 | Kostas Papadimitriou | return {'Role': role } |
693 | 73e25ce2 | Kostas Papadimitriou | }, |
694 | 73e25ce2 | Kostas Papadimitriou | |
695 | 8d08f18a | Kostas Papadimitriou | get: function() { |
696 | 73e25ce2 | Kostas Papadimitriou | var val = {'name': this.name.val() }; |
697 | 73e25ce2 | Kostas Papadimitriou | if (this.get_meta()) { |
698 | 73e25ce2 | Kostas Papadimitriou | val.metadata = this.get_meta();
|
699 | 73e25ce2 | Kostas Papadimitriou | } |
700 | 73e25ce2 | Kostas Papadimitriou | |
701 | 73e25ce2 | Kostas Papadimitriou | return val;
|
702 | 8d08f18a | Kostas Papadimitriou | } |
703 | 8d08f18a | Kostas Papadimitriou | }); |
704 | 8d08f18a | Kostas Papadimitriou | |
705 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView = views.Overlay.extend({ |
706 | 8d08f18a | Kostas Papadimitriou | |
707 | 8d08f18a | Kostas Papadimitriou | view_id: "create_vm_view", |
708 | 8d08f18a | Kostas Papadimitriou | content_selector: "#createvm-overlay-content", |
709 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-createvm overlay-info', |
710 | 8d08f18a | Kostas Papadimitriou | overlay_id: "metadata-overlay", |
711 | 8d08f18a | Kostas Papadimitriou | |
712 | 8d08f18a | Kostas Papadimitriou | subtitle: false, |
713 | 8d08f18a | Kostas Papadimitriou | title: "Create new machine", |
714 | 8d08f18a | Kostas Papadimitriou | |
715 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
716 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView.__super__.initialize.apply(this);
|
717 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
718 | 8d08f18a | Kostas Papadimitriou | |
719 | 8d08f18a | Kostas Papadimitriou | this.password_view = new views.VMCreationPasswordView(); |
720 | 8d08f18a | Kostas Papadimitriou | |
721 | 8d08f18a | Kostas Papadimitriou | this.steps = [];
|
722 | 8d08f18a | Kostas Papadimitriou | this.steps[1] = new views.CreateImageSelectView(this); |
723 | 8d08f18a | Kostas Papadimitriou | this.steps[1].bind("change", _.bind(function(data) {this.trigger("image:change", data)}, this)); |
724 | 8d08f18a | Kostas Papadimitriou | |
725 | 8d08f18a | Kostas Papadimitriou | this.steps[2] = new views.CreateFlavorSelectView(this); |
726 | 8d08f18a | Kostas Papadimitriou | this.steps[3] = new views.CreateSubmitView(this); |
727 | 8d08f18a | Kostas Papadimitriou | |
728 | 1325fc64 | Kostas Papadimitriou | this.cancel_btn = this.$(".create-controls .cancel"); |
729 | 1325fc64 | Kostas Papadimitriou | this.next_btn = this.$(".create-controls .next"); |
730 | 1325fc64 | Kostas Papadimitriou | this.prev_btn = this.$(".create-controls .prev"); |
731 | 1325fc64 | Kostas Papadimitriou | this.submit_btn = this.$(".create-controls .submit"); |
732 | 1325fc64 | Kostas Papadimitriou | |
733 | 1325fc64 | Kostas Papadimitriou | this.history = this.$(".steps-history"); |
734 | 1325fc64 | Kostas Papadimitriou | this.history_steps = this.$(".steps-history .steps-history-step"); |
735 | 8d08f18a | Kostas Papadimitriou | |
736 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
737 | 8d08f18a | Kostas Papadimitriou | }, |
738 | 8d08f18a | Kostas Papadimitriou | |
739 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
740 | 1325fc64 | Kostas Papadimitriou | var self = this; |
741 | 8d08f18a | Kostas Papadimitriou | this.next_btn.click(_.bind(function(){ |
742 | b128dc09 | Kostas Papadimitriou | this.set_step(this.current_step + 1); |
743 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
744 | 8d08f18a | Kostas Papadimitriou | }, this))
|
745 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.click(_.bind(function(){ |
746 | b128dc09 | Kostas Papadimitriou | this.set_step(this.current_step - 1); |
747 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
748 | 8d08f18a | Kostas Papadimitriou | }, this))
|
749 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.click(_.bind(function(){ |
750 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
751 | 8d08f18a | Kostas Papadimitriou | }, this))
|
752 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.click(_.bind(function(){ |
753 | 8d08f18a | Kostas Papadimitriou | this.submit();
|
754 | 8d08f18a | Kostas Papadimitriou | }, this))
|
755 | 1325fc64 | Kostas Papadimitriou | |
756 | 1325fc64 | Kostas Papadimitriou | this.history.find(".completed").live("click", function() { |
757 | 1325fc64 | Kostas Papadimitriou | var step = parseInt($(this).attr("id").replace("vm-create-step-history-", "")); |
758 | 1325fc64 | Kostas Papadimitriou | self.set_step(step); |
759 | 1325fc64 | Kostas Papadimitriou | self.update_layout(); |
760 | 1325fc64 | Kostas Papadimitriou | }) |
761 | 8d08f18a | Kostas Papadimitriou | }, |
762 | 8d08f18a | Kostas Papadimitriou | |
763 | 8d08f18a | Kostas Papadimitriou | set_step: function(st) { |
764 | 8d08f18a | Kostas Papadimitriou | }, |
765 | 8d08f18a | Kostas Papadimitriou | |
766 | 8d08f18a | Kostas Papadimitriou | validate: function(data) { |
767 | 8d08f18a | Kostas Papadimitriou | if (_(data.name).trim() == "") { |
768 | 8d08f18a | Kostas Papadimitriou | this.$(".form-field").addClass("error"); |
769 | 8d08f18a | Kostas Papadimitriou | return false; |
770 | 8d08f18a | Kostas Papadimitriou | } else {
|
771 | 8d08f18a | Kostas Papadimitriou | return true; |
772 | 8d08f18a | Kostas Papadimitriou | } |
773 | 8d08f18a | Kostas Papadimitriou | }, |
774 | 8d08f18a | Kostas Papadimitriou | |
775 | 8d08f18a | Kostas Papadimitriou | submit: function() { |
776 | 820ef2f0 | Kostas Papadimitriou | if (this.submiting) { return }; |
777 | 8d08f18a | Kostas Papadimitriou | var data = this.get_params(); |
778 | 73e25ce2 | Kostas Papadimitriou | var meta = {};
|
779 | 8d08f18a | Kostas Papadimitriou | if (this.validate(data)) { |
780 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.addClass("in-progress"); |
781 | 820ef2f0 | Kostas Papadimitriou | this.submiting = true; |
782 | 73e25ce2 | Kostas Papadimitriou | if (data.metadata) { meta = data.metadata; }
|
783 | 73e25ce2 | Kostas Papadimitriou | storage.vms.create(data.name, data.image, data.flavor, meta, {}, _.bind(function(data){
|
784 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
785 | 820ef2f0 | Kostas Papadimitriou | this.password_view.show(data.server.adminPass, data.server.id);
|
786 | 820ef2f0 | Kostas Papadimitriou | this.submiting = false; |
787 | 8d08f18a | Kostas Papadimitriou | }, this));
|
788 | 8d08f18a | Kostas Papadimitriou | } |
789 | 8d08f18a | Kostas Papadimitriou | }, |
790 | 8d08f18a | Kostas Papadimitriou | |
791 | 8d08f18a | Kostas Papadimitriou | close_all: function() { |
792 | 8d08f18a | Kostas Papadimitriou | this.hide();
|
793 | 8d08f18a | Kostas Papadimitriou | }, |
794 | 8d08f18a | Kostas Papadimitriou | |
795 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
796 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
797 | b128dc09 | Kostas Papadimitriou | |
798 | 8d08f18a | Kostas Papadimitriou | this.steps[1].reset(); |
799 | 8d08f18a | Kostas Papadimitriou | this.steps[2].reset(); |
800 | 8d08f18a | Kostas Papadimitriou | this.steps[3].reset(); |
801 | 8d08f18a | Kostas Papadimitriou | |
802 | b128dc09 | Kostas Papadimitriou | this.steps[1].show(); |
803 | b128dc09 | Kostas Papadimitriou | this.steps[2].show(); |
804 | b128dc09 | Kostas Papadimitriou | this.steps[3].show(); |
805 | b128dc09 | Kostas Papadimitriou | |
806 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.removeClass("in-progress"); |
807 | 8d08f18a | Kostas Papadimitriou | }, |
808 | 8d08f18a | Kostas Papadimitriou | |
809 | 8d08f18a | Kostas Papadimitriou | onShow: function() { |
810 | 8d08f18a | Kostas Papadimitriou | this.reset()
|
811 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
812 | 8d08f18a | Kostas Papadimitriou | }, |
813 | 8d08f18a | Kostas Papadimitriou | |
814 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
815 | 8d08f18a | Kostas Papadimitriou | this.show_step(this.current_step); |
816 | 8d08f18a | Kostas Papadimitriou | this.current_view.update_layout();
|
817 | 8d08f18a | Kostas Papadimitriou | }, |
818 | 8d08f18a | Kostas Papadimitriou | |
819 | 8d08f18a | Kostas Papadimitriou | beforeOpen: function() { |
820 | 820ef2f0 | Kostas Papadimitriou | this.submiting = false; |
821 | 8d08f18a | Kostas Papadimitriou | this.reset();
|
822 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
823 | 820ef2f0 | Kostas Papadimitriou | this.$(".steps-container").css({"margin-left":0 + "px"}); |
824 | 8d08f18a | Kostas Papadimitriou | this.show_step(1); |
825 | 8d08f18a | Kostas Papadimitriou | }, |
826 | b128dc09 | Kostas Papadimitriou | |
827 | b128dc09 | Kostas Papadimitriou | set_step: function(step) { |
828 | 8d08f18a | Kostas Papadimitriou | if (step <= 1) { |
829 | 8d08f18a | Kostas Papadimitriou | step = 1
|
830 | 8d08f18a | Kostas Papadimitriou | } |
831 | 8d08f18a | Kostas Papadimitriou | if (step > this.steps.length - 1) { |
832 | 8d08f18a | Kostas Papadimitriou | step = this.steps.length - 1; |
833 | 8d08f18a | Kostas Papadimitriou | } |
834 | bd8fa10c | Kostas Papadimitriou | this.current_step = step;
|
835 | b128dc09 | Kostas Papadimitriou | }, |
836 | b128dc09 | Kostas Papadimitriou | |
837 | b128dc09 | Kostas Papadimitriou | show_step: function(step) { |
838 | bd8fa10c | Kostas Papadimitriou | this.current_view = this.steps[step]; |
839 | bd8fa10c | Kostas Papadimitriou | this.update_controls();
|
840 | bd8fa10c | Kostas Papadimitriou | |
841 | b128dc09 | Kostas Papadimitriou | this.steps[step].show();
|
842 | 820ef2f0 | Kostas Papadimitriou | var width = this.el.find('.container').width(); |
843 | 820ef2f0 | Kostas Papadimitriou | var left = (step -1) * width * -1; |
844 | 1325fc64 | Kostas Papadimitriou | this.$(".steps-container").animate({"margin-left": left + "px"}, 300); |
845 | 1325fc64 | Kostas Papadimitriou | |
846 | 1325fc64 | Kostas Papadimitriou | this.update_steps_history();
|
847 | 1325fc64 | Kostas Papadimitriou | }, |
848 | 1325fc64 | Kostas Papadimitriou | |
849 | 1325fc64 | Kostas Papadimitriou | update_steps_history: function() { |
850 | 1325fc64 | Kostas Papadimitriou | var self = this; |
851 | 1325fc64 | Kostas Papadimitriou | function get_step(s) { |
852 | 1325fc64 | Kostas Papadimitriou | return self.history.find(".step" + s + "h"); |
853 | 1325fc64 | Kostas Papadimitriou | } |
854 | 1325fc64 | Kostas Papadimitriou | |
855 | 1325fc64 | Kostas Papadimitriou | var current_step = parseInt(this.current_view.step); |
856 | 1325fc64 | Kostas Papadimitriou | _.each(this.steps, function(stepv) { |
857 | 1325fc64 | Kostas Papadimitriou | var step = parseInt(stepv.step);
|
858 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("completed").removeClass("current"); |
859 | 1325fc64 | Kostas Papadimitriou | if (step == current_step) {
|
860 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("completed").addClass("current"); |
861 | 1325fc64 | Kostas Papadimitriou | } |
862 | 1325fc64 | Kostas Papadimitriou | if (step < current_step) {
|
863 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("current").addClass("completed"); |
864 | 1325fc64 | Kostas Papadimitriou | } |
865 | 1325fc64 | Kostas Papadimitriou | }); |
866 | 8d08f18a | Kostas Papadimitriou | }, |
867 | 8d08f18a | Kostas Papadimitriou | |
868 | 8d08f18a | Kostas Papadimitriou | update_controls: function() { |
869 | 8d08f18a | Kostas Papadimitriou | var step = this.current_step; |
870 | 8d08f18a | Kostas Papadimitriou | if (step == 1) { |
871 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.hide();
|
872 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.show();
|
873 | 8d08f18a | Kostas Papadimitriou | } else {
|
874 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.show();
|
875 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.hide();
|
876 | 8d08f18a | Kostas Papadimitriou | } |
877 | 8d08f18a | Kostas Papadimitriou | |
878 | 8d08f18a | Kostas Papadimitriou | if (step == this.steps.length - 1) { |
879 | 8d08f18a | Kostas Papadimitriou | this.next_btn.hide();
|
880 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.show();
|
881 | 8d08f18a | Kostas Papadimitriou | } else {
|
882 | 8d08f18a | Kostas Papadimitriou | this.next_btn.show();
|
883 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.hide();
|
884 | 8d08f18a | Kostas Papadimitriou | } |
885 | 8d08f18a | Kostas Papadimitriou | }, |
886 | 8d08f18a | Kostas Papadimitriou | |
887 | 8d08f18a | Kostas Papadimitriou | get_params: function() { |
888 | 8d08f18a | Kostas Papadimitriou | return _.extend({}, this.steps[1].get(), this.steps[2].get(), this.steps[3].get()); |
889 | 8d08f18a | Kostas Papadimitriou | } |
890 | 8d08f18a | Kostas Papadimitriou | }); |
891 | 8d08f18a | Kostas Papadimitriou | |
892 | 8d08f18a | Kostas Papadimitriou | })(this);
|