root / synnefo / ui / static / snf / js / ui / web / ui_create_view.js @ c64333b6
History | View | Annotate | Download (42.2 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 | 35584d80 | Kostas Papadimitriou | this.copy = this.$(".clipboard"); |
34 | 60599850 | Kostas Papadimitriou | |
35 | 60599850 | Kostas Papadimitriou | this.$(".show-machine").click(_.bind(function(){ |
36 | c6e9caec | Kostas Papadimitriou | if (this.$(".show-machine").hasClass("in-progress")) { |
37 | c6e9caec | Kostas Papadimitriou | return;
|
38 | c6e9caec | Kostas Papadimitriou | } |
39 | 60599850 | Kostas Papadimitriou | this.hide();
|
40 | 60599850 | Kostas Papadimitriou | snf.ui.main.show_vm_details(storage.vms.get(this.vm_id));
|
41 | 60599850 | Kostas Papadimitriou | }, this));
|
42 | c6e9caec | Kostas Papadimitriou | |
43 | c6e9caec | Kostas Papadimitriou | _.bindAll(this, "handle_vm_added"); |
44 | c6e9caec | Kostas Papadimitriou | storage.vms.bind("add", this.handle_vm_added); |
45 | 35584d80 | Kostas Papadimitriou | this.password.text(""); |
46 | c6e9caec | Kostas Papadimitriou | }, |
47 | c6e9caec | Kostas Papadimitriou | |
48 | c6e9caec | Kostas Papadimitriou | handle_vm_added: function() { |
49 | c6e9caec | Kostas Papadimitriou | this.$(".show-machine").removeClass("in-progress"); |
50 | 8d08f18a | Kostas Papadimitriou | }, |
51 | 8d08f18a | Kostas Papadimitriou | |
52 | 8d08f18a | Kostas Papadimitriou | show_password: function() { |
53 | c6e9caec | Kostas Papadimitriou | this.$(".show-machine").addClass("in-progress"); |
54 | 8d08f18a | Kostas Papadimitriou | this.password.text(this.pass); |
55 | a08a37d2 | Kostas Papadimitriou | if (storage.vms.get(this.vm_id)) { |
56 | 2b2afade | Kostas Papadimitriou | this.$(".show-machine").removeClass("in-progress"); |
57 | 2b2afade | Kostas Papadimitriou | } |
58 | 35584d80 | Kostas Papadimitriou | |
59 | 35584d80 | Kostas Papadimitriou | this.clip = new snf.util.ClipHelper(this.copy, this.pass); |
60 | 8d08f18a | Kostas Papadimitriou | }, |
61 | 8d08f18a | Kostas Papadimitriou | |
62 | 8d08f18a | Kostas Papadimitriou | onClose: function() { |
63 | 8d08f18a | Kostas Papadimitriou | this.password.text(""); |
64 | c6e9caec | Kostas Papadimitriou | this.vm_id = undefined; |
65 | 35584d80 | Kostas Papadimitriou | try { delete this.clip; } catch (err) {}; |
66 | 8d08f18a | Kostas Papadimitriou | }, |
67 | bd8fa10c | Kostas Papadimitriou | |
68 | bd8fa10c | Kostas Papadimitriou | beforeOpen: function() { |
69 | 35584d80 | Kostas Papadimitriou | this.copy.empty();
|
70 | bd8fa10c | Kostas Papadimitriou | }, |
71 | bd8fa10c | Kostas Papadimitriou | |
72 | bd8fa10c | Kostas Papadimitriou | onOpen: function() { |
73 | 35584d80 | Kostas Papadimitriou | this.show_password();
|
74 | bd8fa10c | Kostas Papadimitriou | }, |
75 | bd8fa10c | Kostas Papadimitriou | |
76 | 8d08f18a | Kostas Papadimitriou | show: function(pass, vm_id) { |
77 | 8d08f18a | Kostas Papadimitriou | this.pass = pass;
|
78 | 8d08f18a | Kostas Papadimitriou | this.vm_id = vm_id;
|
79 | c6e9caec | Kostas Papadimitriou | |
80 | 8d08f18a | Kostas Papadimitriou | views.VMCreationPasswordView.__super__.show.apply(this, arguments); |
81 | 8d08f18a | Kostas Papadimitriou | } |
82 | 8d08f18a | Kostas Papadimitriou | }) |
83 | 8d08f18a | Kostas Papadimitriou | |
84 | 8d08f18a | Kostas Papadimitriou | |
85 | 8d08f18a | Kostas Papadimitriou | |
86 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView = views.View.extend({ |
87 | 8d08f18a | Kostas Papadimitriou | step: "1", |
88 | 8d08f18a | Kostas Papadimitriou | title: "Image", |
89 | 8d08f18a | Kostas Papadimitriou | submit: false, |
90 | 8d08f18a | Kostas Papadimitriou | |
91 | 8d08f18a | Kostas Papadimitriou | initialize: function(view) { |
92 | 8d08f18a | Kostas Papadimitriou | this.parent = view;
|
93 | 8d08f18a | Kostas Papadimitriou | this.el = view.$("div.create-step-cont.step-" + this.step); |
94 | 820ef2f0 | Kostas Papadimitriou | this.header = this.$(".step-header .step-" + this.step); |
95 | 8d08f18a | Kostas Papadimitriou | this.view_id = "create_step_" + this.step; |
96 | 8d08f18a | Kostas Papadimitriou | |
97 | 8d08f18a | Kostas Papadimitriou | views.CreateVMStepView.__super__.initialize.apply(this);
|
98 | 8d08f18a | Kostas Papadimitriou | }, |
99 | 8d08f18a | Kostas Papadimitriou | |
100 | 8d08f18a | Kostas Papadimitriou | show: function() { |
101 | 8d08f18a | Kostas Papadimitriou | // show current
|
102 | 8d08f18a | Kostas Papadimitriou | this.el.show();
|
103 | 8d08f18a | Kostas Papadimitriou | this.header.addClass("current"); |
104 | 820ef2f0 | Kostas Papadimitriou | this.header.show();
|
105 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
106 | 8d08f18a | Kostas Papadimitriou | }, |
107 | 8d08f18a | Kostas Papadimitriou | |
108 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
109 | 8d08f18a | Kostas Papadimitriou | } |
110 | 8d08f18a | Kostas Papadimitriou | }) |
111 | 8d08f18a | Kostas Papadimitriou | |
112 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView = views.CreateVMStepView.extend({ |
113 | 8d08f18a | Kostas Papadimitriou | |
114 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
115 | 8d08f18a | Kostas Papadimitriou | views.CreateImageSelectView.__super__.initialize.apply(this, arguments); |
116 | 8d08f18a | Kostas Papadimitriou | |
117 | 820ef2f0 | Kostas Papadimitriou | // elements
|
118 | 73e25ce2 | Kostas Papadimitriou | this.images_list_cont = this.$(".images-list-cont"); |
119 | 820ef2f0 | Kostas Papadimitriou | this.images_list = this.$(".images-list-cont ul"); |
120 | 820ef2f0 | Kostas Papadimitriou | this.image_details = this.$(".images-info-cont"); |
121 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc = this.$(".images-info-cont .description p"); |
122 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title = this.$(".images-info-cont h4"); |
123 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size = this.$(".images-info-cont .size p"); |
124 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os = this.$(".images-info-cont .os p"); |
125 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel = this.$(".images-info-cont .kernel p"); |
126 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui = this.$(".images-info-cont .gui p"); |
127 | 820ef2f0 | Kostas Papadimitriou | |
128 | 820ef2f0 | Kostas Papadimitriou | this.types = this.$(".type-filter li"); |
129 | 820ef2f0 | Kostas Papadimitriou | this.categories_list = this.$(".category-filters"); |
130 | 820ef2f0 | Kostas Papadimitriou | |
131 | 820ef2f0 | Kostas Papadimitriou | // params initialization
|
132 | 820ef2f0 | Kostas Papadimitriou | this.type_selections = ["system", "custom"] |
133 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = "system"; |
134 | 820ef2f0 | Kostas Papadimitriou | this.selected_categories = [];
|
135 | 820ef2f0 | Kostas Papadimitriou | this.images = [];
|
136 | 820ef2f0 | Kostas Papadimitriou | |
137 | 820ef2f0 | Kostas Papadimitriou | // update
|
138 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
139 | 820ef2f0 | Kostas Papadimitriou | |
140 | 820ef2f0 | Kostas Papadimitriou | // handlers initialization
|
141 | 820ef2f0 | Kostas Papadimitriou | this.init_handlers();
|
142 | 820ef2f0 | Kostas Papadimitriou | this.init_position();
|
143 | 820ef2f0 | Kostas Papadimitriou | }, |
144 | 820ef2f0 | Kostas Papadimitriou | |
145 | 820ef2f0 | Kostas Papadimitriou | init_position: function() { |
146 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({position: "absolute"});
|
147 | 820ef2f0 | Kostas Papadimitriou | //this.el.css({top:"10px"})
|
148 | 820ef2f0 | Kostas Papadimitriou | }, |
149 | 820ef2f0 | Kostas Papadimitriou | |
150 | 820ef2f0 | Kostas Papadimitriou | init_handlers: function() { |
151 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
152 | 820ef2f0 | Kostas Papadimitriou | this.types.live("click", function() { |
153 | 820ef2f0 | Kostas Papadimitriou | self.select_type($(this).attr("id").replace("type-select-","")); |
154 | 820ef2f0 | Kostas Papadimitriou | }) |
155 | 820ef2f0 | Kostas Papadimitriou | }, |
156 | 820ef2f0 | Kostas Papadimitriou | |
157 | 820ef2f0 | Kostas Papadimitriou | update_images: function() { |
158 | 820ef2f0 | Kostas Papadimitriou | this.images = storage.images.active();
|
159 | 820ef2f0 | Kostas Papadimitriou | this.images_ids = _.map(this.images, function(img){return img.id}); |
160 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_type == "custom") { this.images = []; this.images_ids = []; } |
161 | 820ef2f0 | Kostas Papadimitriou | |
162 | 820ef2f0 | Kostas Papadimitriou | return this.images; |
163 | 8d08f18a | Kostas Papadimitriou | }, |
164 | 8d08f18a | Kostas Papadimitriou | |
165 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
166 | 820ef2f0 | Kostas Papadimitriou | this.select_type(this.selected_type); |
167 | 820ef2f0 | Kostas Papadimitriou | }, |
168 | 820ef2f0 | Kostas Papadimitriou | |
169 | 820ef2f0 | Kostas Papadimitriou | get_categories: function(images) { |
170 | 820ef2f0 | Kostas Papadimitriou | return [];
|
171 | 820ef2f0 | Kostas Papadimitriou | return ["Desktop", "Server", "Linux", "Windows"]; |
172 | 820ef2f0 | Kostas Papadimitriou | }, |
173 | 820ef2f0 | Kostas Papadimitriou | |
174 | 820ef2f0 | Kostas Papadimitriou | reset_categories: function() { |
175 | 820ef2f0 | Kostas Papadimitriou | var categories = this.get_categories(this.images); |
176 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.find("li").remove(); |
177 | 820ef2f0 | Kostas Papadimitriou | |
178 | 820ef2f0 | Kostas Papadimitriou | _.each(categories, _.bind(function(cat) {
|
179 | 820ef2f0 | Kostas Papadimitriou | var el = $("<li />"); |
180 | 820ef2f0 | Kostas Papadimitriou | el.text(cat); |
181 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.append(el);
|
182 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
183 | 820ef2f0 | Kostas Papadimitriou | |
184 | 820ef2f0 | Kostas Papadimitriou | if (!categories.length) {
|
185 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").hide(); |
186 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").show(); |
187 | 820ef2f0 | Kostas Papadimitriou | } else {
|
188 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".clear").show(); |
189 | 820ef2f0 | Kostas Papadimitriou | this.categories_list.parent().find(".empty").hide(); |
190 | 820ef2f0 | Kostas Papadimitriou | } |
191 | 820ef2f0 | Kostas Papadimitriou | }, |
192 | 820ef2f0 | Kostas Papadimitriou | |
193 | 820ef2f0 | Kostas Papadimitriou | select_type: function(type) { |
194 | 820ef2f0 | Kostas Papadimitriou | this.selected_type = type;
|
195 | 820ef2f0 | Kostas Papadimitriou | this.types.removeClass("selected"); |
196 | 820ef2f0 | Kostas Papadimitriou | this.types.filter("#type-select-" + this.selected_type).addClass("selected"); |
197 | 820ef2f0 | Kostas Papadimitriou | |
198 | 820ef2f0 | Kostas Papadimitriou | this.reset_categories();
|
199 | 820ef2f0 | Kostas Papadimitriou | this.update_images();
|
200 | 820ef2f0 | Kostas Papadimitriou | this.reset_images();
|
201 | 820ef2f0 | Kostas Papadimitriou | this.select_image();
|
202 | 8d08f18a | Kostas Papadimitriou | }, |
203 | 8d08f18a | Kostas Papadimitriou | |
204 | 8d08f18a | Kostas Papadimitriou | select_image: function(image) { |
205 | 820ef2f0 | Kostas Papadimitriou | if (!image && this.images_ids.length) { |
206 | 820ef2f0 | Kostas Papadimitriou | if (this.selected_image && this.images_ids.indexOf(this.selected_image.id) > -1) { |
207 | 820ef2f0 | Kostas Papadimitriou | image = this.selected_image;
|
208 | 820ef2f0 | Kostas Papadimitriou | } else {
|
209 | 820ef2f0 | Kostas Papadimitriou | image = storage.images.get(this.images_ids[0]); |
210 | 820ef2f0 | Kostas Papadimitriou | } |
211 | 8d08f18a | Kostas Papadimitriou | } |
212 | 8d08f18a | Kostas Papadimitriou | |
213 | 820ef2f0 | Kostas Papadimitriou | if (!this.images_ids.length) { image = this.selected_image || undefined }; |
214 | 820ef2f0 | Kostas Papadimitriou | |
215 | 8d08f18a | Kostas Papadimitriou | this.selected_image = image;
|
216 | 820ef2f0 | Kostas Papadimitriou | this.trigger("change", image); |
217 | 8d08f18a | Kostas Papadimitriou | |
218 | 820ef2f0 | Kostas Papadimitriou | if (image) {
|
219 | 820ef2f0 | Kostas Papadimitriou | this.image_details.show();
|
220 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").removeClass("selected"); |
221 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details#create-vm-image-" + this.selected_image.id).addClass("selected"); |
222 | 820ef2f0 | Kostas Papadimitriou | |
223 | 820ef2f0 | Kostas Papadimitriou | this.image_details_desc.text(image.get("description")); |
224 | 820ef2f0 | Kostas Papadimitriou | |
225 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_tag(image.get("OS")) |
226 | 820ef2f0 | Kostas Papadimitriou | this.image_details_title.html(img + image.get("name")); |
227 | 820ef2f0 | Kostas Papadimitriou | this.image_details_os.text(_(image.get("OS")).capitalize()); |
228 | 820ef2f0 | Kostas Papadimitriou | this.image_details_kernel.text(image.get("kernel")); |
229 | 820ef2f0 | Kostas Papadimitriou | |
230 | 5a434360 | Kostas Papadimitriou | var size = image.get_readable_size();
|
231 | 5a434360 | Kostas Papadimitriou | |
232 | 820ef2f0 | Kostas Papadimitriou | this.image_details_size.text(size);
|
233 | 820ef2f0 | Kostas Papadimitriou | this.image_details_gui.text(image.get("GUI")); |
234 | 820ef2f0 | Kostas Papadimitriou | |
235 | 820ef2f0 | Kostas Papadimitriou | } else {
|
236 | 820ef2f0 | Kostas Papadimitriou | this.image_details.hide();
|
237 | 820ef2f0 | Kostas Papadimitriou | } |
238 | cd4d5c5f | Kostas Papadimitriou | |
239 | cd4d5c5f | Kostas Papadimitriou | this.validate();
|
240 | 8d08f18a | Kostas Papadimitriou | }, |
241 | 8d08f18a | Kostas Papadimitriou | |
242 | 8d08f18a | Kostas Papadimitriou | reset_images: function() { |
243 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find("li").remove(); |
244 | 820ef2f0 | Kostas Papadimitriou | _.each(this.images, _.bind(function(img){ |
245 | 8d08f18a | Kostas Papadimitriou | this.add_image(img);
|
246 | 8d08f18a | Kostas Papadimitriou | }, this))
|
247 | 820ef2f0 | Kostas Papadimitriou | |
248 | 820ef2f0 | Kostas Papadimitriou | if (this.images.length) { |
249 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").hide(); |
250 | 820ef2f0 | Kostas Papadimitriou | } else {
|
251 | 820ef2f0 | Kostas Papadimitriou | this.images_list.parent().find(".empty").show(); |
252 | 820ef2f0 | Kostas Papadimitriou | } |
253 | 8d08f18a | Kostas Papadimitriou | |
254 | 8d08f18a | Kostas Papadimitriou | this.select_image();
|
255 | 8d08f18a | Kostas Papadimitriou | |
256 | 8d08f18a | Kostas Papadimitriou | var self = this; |
257 | 820ef2f0 | Kostas Papadimitriou | this.images_list.find(".image-details").click(function(){ |
258 | 8d08f18a | Kostas Papadimitriou | self.select_image($(this).data("image")); |
259 | 820ef2f0 | Kostas Papadimitriou | }); |
260 | 820ef2f0 | Kostas Papadimitriou | |
261 | 820ef2f0 | Kostas Papadimitriou | }, |
262 | 820ef2f0 | Kostas Papadimitriou | |
263 | 820ef2f0 | Kostas Papadimitriou | show: function() { |
264 | 820ef2f0 | Kostas Papadimitriou | views.CreateImageSelectView.__super__.show.apply(this, arguments); |
265 | 8d08f18a | Kostas Papadimitriou | }, |
266 | 8d08f18a | Kostas Papadimitriou | |
267 | 8d08f18a | Kostas Papadimitriou | add_image: function(img) { |
268 | 820ef2f0 | Kostas Papadimitriou | var image = $(('<li id="create-vm-image-{1}"' + |
269 | 820ef2f0 | Kostas Papadimitriou | 'class="image-details clearfix">{2}{0}' +
|
270 | 820ef2f0 | Kostas Papadimitriou | '<p>{4}</p><span class="size">{3}' +
|
271 | 820ef2f0 | Kostas Papadimitriou | '</span></li>').format(img.get("name"), |
272 | 820ef2f0 | Kostas Papadimitriou | img.id, |
273 | 820ef2f0 | Kostas Papadimitriou | snf.ui.helpers.os_icon_tag(img.get("OS")),
|
274 | 5a434360 | Kostas Papadimitriou | img.get_readable_size(), |
275 | 5afdfc72 | Kostas Papadimitriou | util.truncate(img.get("description"), 35))); |
276 | 8d08f18a | Kostas Papadimitriou | image.data("image", img);
|
277 | 8d08f18a | Kostas Papadimitriou | image.data("image_id", img.id);
|
278 | 820ef2f0 | Kostas Papadimitriou | this.images_list.append(image);
|
279 | 8d08f18a | Kostas Papadimitriou | }, |
280 | 8d08f18a | Kostas Papadimitriou | |
281 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
282 | 8d08f18a | Kostas Papadimitriou | this.selected_image = undefined; |
283 | 8d08f18a | Kostas Papadimitriou | this.reset_images();
|
284 | 8d08f18a | Kostas Papadimitriou | }, |
285 | 8d08f18a | Kostas Papadimitriou | |
286 | 8d08f18a | Kostas Papadimitriou | get: function() { |
287 | 8d08f18a | Kostas Papadimitriou | return {'image': this.selected_image}; |
288 | cd4d5c5f | Kostas Papadimitriou | }, |
289 | cd4d5c5f | Kostas Papadimitriou | |
290 | cd4d5c5f | Kostas Papadimitriou | validate: function() { |
291 | cd4d5c5f | Kostas Papadimitriou | if (!this.selected_image) { |
292 | cd4d5c5f | Kostas Papadimitriou | this.parent.$(".form-action.next").hide(); |
293 | cd4d5c5f | Kostas Papadimitriou | } else {
|
294 | cd4d5c5f | Kostas Papadimitriou | this.parent.$(".form-action.next").show(); |
295 | cd4d5c5f | Kostas Papadimitriou | } |
296 | 8d08f18a | Kostas Papadimitriou | } |
297 | 8d08f18a | Kostas Papadimitriou | }); |
298 | 8d08f18a | Kostas Papadimitriou | |
299 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView = views.CreateVMStepView.extend({ |
300 | 8d08f18a | Kostas Papadimitriou | step: 2, |
301 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
302 | 8d08f18a | Kostas Papadimitriou | views.CreateFlavorSelectView.__super__.initialize.apply(this, arguments); |
303 | 8d08f18a | Kostas Papadimitriou | this.parent.bind("image:change", _.bind(this.handle_image_change, this)); |
304 | 8d08f18a | Kostas Papadimitriou | |
305 | 820ef2f0 | Kostas Papadimitriou | this.cpus = this.$(".flavors-cpu-list"); |
306 | 820ef2f0 | Kostas Papadimitriou | this.disks = this.$(".flavors-disk-list"); |
307 | d965e6dc | Kostas Papadimitriou | this.disk_templates = this.$(".flavors-disk-template-list"); |
308 | 820ef2f0 | Kostas Papadimitriou | this.mems = this.$(".flavors-mem-list"); |
309 | 8d08f18a | Kostas Papadimitriou | |
310 | 820ef2f0 | Kostas Papadimitriou | this.predefined_flavors = SUGGESTED_FLAVORS;
|
311 | 2ecab6a2 | Kostas Papadimitriou | this.predefined_flavors_keys = _.keys(SUGGESTED_FLAVORS);
|
312 | 2ecab6a2 | Kostas Papadimitriou | this.predefined_flavors_keys = _.sortBy(this.predefined_flavors_keys, _.bind(function(k){ |
313 | 2ecab6a2 | Kostas Papadimitriou | var flv = this.predefined_flavors[k]; |
314 | d965e6dc | Kostas Papadimitriou | return (flv.ram * flv.cpu * flv.disk) + flv.disk_template;
|
315 | 2ecab6a2 | Kostas Papadimitriou | }, this));
|
316 | 2ecab6a2 | Kostas Papadimitriou | |
317 | 820ef2f0 | Kostas Papadimitriou | this.predefined = this.$(".predefined-list"); |
318 | 820ef2f0 | Kostas Papadimitriou | this.update_predefined_flavors();
|
319 | 8d08f18a | Kostas Papadimitriou | }, |
320 | 8d08f18a | Kostas Papadimitriou | |
321 | 8d08f18a | Kostas Papadimitriou | handle_image_change: function(data) { |
322 | 8d08f18a | Kostas Papadimitriou | this.current_image = data;
|
323 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
324 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
325 | 8d08f18a | Kostas Papadimitriou | this.reset_flavors();
|
326 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
327 | 8d08f18a | Kostas Papadimitriou | }, |
328 | 8d08f18a | Kostas Papadimitriou | |
329 | 283bb7de | Kostas Papadimitriou | validate_selected_flavor: function() { |
330 | 283bb7de | Kostas Papadimitriou | if (!this.flavor_is_valid(this.current_flavor)) { |
331 | 283bb7de | Kostas Papadimitriou | this.select_valid_flavor();
|
332 | 283bb7de | Kostas Papadimitriou | } |
333 | 283bb7de | Kostas Papadimitriou | }, |
334 | 283bb7de | Kostas Papadimitriou | |
335 | 8d08f18a | Kostas Papadimitriou | reset_flavors: function() { |
336 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-opts-list .option").remove(); |
337 | 8d08f18a | Kostas Papadimitriou | this.create_flavors();
|
338 | 8d08f18a | Kostas Papadimitriou | }, |
339 | 8d08f18a | Kostas Papadimitriou | |
340 | 820ef2f0 | Kostas Papadimitriou | update_predefined_flavors: function() { |
341 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").remove(); |
342 | 2ecab6a2 | Kostas Papadimitriou | _.each(this.predefined_flavors_keys, _.bind(function(key) { |
343 | 2ecab6a2 | Kostas Papadimitriou | var val = this.predefined_flavors[key]; |
344 | 820ef2f0 | Kostas Papadimitriou | var el = $(('<li class="predefined-selection" id="predefined-flavor-{0}">' + |
345 | 2ecab6a2 | Kostas Papadimitriou | '{1}</li>').format(key, _(key).capitalize()));
|
346 | 820ef2f0 | Kostas Papadimitriou | |
347 | 820ef2f0 | Kostas Papadimitriou | this.predefined.append(el);
|
348 | d965e6dc | Kostas Papadimitriou | el.data({flavor: storage.flavors.get_flavor(val.cpu, val.ram, val.disk, val.disk_template, this.flavors)}); |
349 | 820ef2f0 | Kostas Papadimitriou | el.click(_.bind(function() {
|
350 | 820ef2f0 | Kostas Papadimitriou | this.handle_predefined_click(el);
|
351 | 820ef2f0 | Kostas Papadimitriou | }, this))
|
352 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
353 | 820ef2f0 | Kostas Papadimitriou | this.update_valid_predefined();
|
354 | 820ef2f0 | Kostas Papadimitriou | }, |
355 | 820ef2f0 | Kostas Papadimitriou | |
356 | 820ef2f0 | Kostas Papadimitriou | handle_predefined_click: function(el) { |
357 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return }; |
358 | 16c860f4 | Kostas Papadimitriou | this.set_current(el.data("flavor")); |
359 | 820ef2f0 | Kostas Papadimitriou | }, |
360 | 820ef2f0 | Kostas Papadimitriou | |
361 | 283bb7de | Kostas Papadimitriou | select_valid_flavor: function() { |
362 | 283bb7de | Kostas Papadimitriou | var found = false; |
363 | 283bb7de | Kostas Papadimitriou | var self = this; |
364 | 283bb7de | Kostas Papadimitriou | _.each(this.flavors, function(flv) { |
365 | 283bb7de | Kostas Papadimitriou | if (self.flavor_is_valid(flv)) {
|
366 | 283bb7de | Kostas Papadimitriou | found = flv; |
367 | 283bb7de | Kostas Papadimitriou | return false; |
368 | 283bb7de | Kostas Papadimitriou | } |
369 | 283bb7de | Kostas Papadimitriou | }); |
370 | 283bb7de | Kostas Papadimitriou | |
371 | 283bb7de | Kostas Papadimitriou | if (found) {
|
372 | 283bb7de | Kostas Papadimitriou | this.set_current(found);
|
373 | 283bb7de | Kostas Papadimitriou | } else {
|
374 | 283bb7de | Kostas Papadimitriou | this.current_flavor = undefined; |
375 | 283bb7de | Kostas Papadimitriou | this.validate();
|
376 | 283bb7de | Kostas Papadimitriou | this.$("li.predefined-selection").addClass("disabled"); |
377 | 283bb7de | Kostas Papadimitriou | this.$(".flavor-opts-list li").removeClass("selected"); |
378 | 283bb7de | Kostas Papadimitriou | } |
379 | 283bb7de | Kostas Papadimitriou | }, |
380 | 283bb7de | Kostas Papadimitriou | |
381 | 820ef2f0 | Kostas Papadimitriou | update_valid_predefined: function() { |
382 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
383 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
384 | 820ef2f0 | Kostas Papadimitriou | this.valid_predefined = _.select(_.map(this.predefined_flavors, function(flv, key){ |
385 | d965e6dc | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, flv.disk_template, self.flavors);
|
386 | 820ef2f0 | Kostas Papadimitriou | // non existing
|
387 | 820ef2f0 | Kostas Papadimitriou | if (!existing) {
|
388 | 820ef2f0 | Kostas Papadimitriou | return false; |
389 | 820ef2f0 | Kostas Papadimitriou | } |
390 | 820ef2f0 | Kostas Papadimitriou | |
391 | 820ef2f0 | Kostas Papadimitriou | // not available for image
|
392 | 820ef2f0 | Kostas Papadimitriou | if (self.unavailable_values && self.unavailable_values.disk.indexOf(existing.get_disk_size()) > -1) { |
393 | 820ef2f0 | Kostas Papadimitriou | return false |
394 | 820ef2f0 | Kostas Papadimitriou | } |
395 | 820ef2f0 | Kostas Papadimitriou | |
396 | 820ef2f0 | Kostas Papadimitriou | return key;
|
397 | 820ef2f0 | Kostas Papadimitriou | }), function(ret) { return ret }); |
398 | 820ef2f0 | Kostas Papadimitriou | |
399 | 820ef2f0 | Kostas Papadimitriou | $("li.predefined-selection").addClass("disabled"); |
400 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
401 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).removeClass("disabled"); |
402 | 820ef2f0 | Kostas Papadimitriou | }) |
403 | 820ef2f0 | Kostas Papadimitriou | }, |
404 | 820ef2f0 | Kostas Papadimitriou | |
405 | 820ef2f0 | Kostas Papadimitriou | update_selected_predefined: function() { |
406 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
407 | 820ef2f0 | Kostas Papadimitriou | this.predefined.find("li").removeClass("selected"); |
408 | 820ef2f0 | Kostas Papadimitriou | |
409 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key){ |
410 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
411 | d965e6dc | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, flv.disk_template, self.flavors);
|
412 | 820ef2f0 | Kostas Papadimitriou | |
413 | 820ef2f0 | Kostas Papadimitriou | if (exists && (exists.id == self.current_flavor.id)) {
|
414 | 820ef2f0 | Kostas Papadimitriou | $("#predefined-flavor-" + key).addClass("selected"); |
415 | 820ef2f0 | Kostas Papadimitriou | } |
416 | 820ef2f0 | Kostas Papadimitriou | }) |
417 | 820ef2f0 | Kostas Papadimitriou | }, |
418 | 820ef2f0 | Kostas Papadimitriou | |
419 | 8d08f18a | Kostas Papadimitriou | update_flavors_data: function() { |
420 | 820ef2f0 | Kostas Papadimitriou | this.flavors = storage.flavors.active();
|
421 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = storage.flavors.get_data(this.flavors); |
422 | 820ef2f0 | Kostas Papadimitriou | |
423 | 820ef2f0 | Kostas Papadimitriou | var self = this; |
424 | 820ef2f0 | Kostas Papadimitriou | var set = false; |
425 | 820ef2f0 | Kostas Papadimitriou | |
426 | 820ef2f0 | Kostas Papadimitriou | // FIXME: validate current flavor
|
427 | 820ef2f0 | Kostas Papadimitriou | |
428 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_flavor) { |
429 | 820ef2f0 | Kostas Papadimitriou | _.each(this.valid_predefined, function(key) { |
430 | 820ef2f0 | Kostas Papadimitriou | var flv = self.predefined_flavors[key];
|
431 | d965e6dc | Kostas Papadimitriou | var exists = storage.flavors.get_flavor(flv.cpu, flv.ram, flv.disk, flv.disk_template, self.flavors);
|
432 | 820ef2f0 | Kostas Papadimitriou | if (exists && !set) {
|
433 | 820ef2f0 | Kostas Papadimitriou | self.set_current(exists); |
434 | 820ef2f0 | Kostas Papadimitriou | set = true;
|
435 | 820ef2f0 | Kostas Papadimitriou | } |
436 | 820ef2f0 | Kostas Papadimitriou | }) |
437 | 8d08f18a | Kostas Papadimitriou | } |
438 | 820ef2f0 | Kostas Papadimitriou | |
439 | 820ef2f0 | Kostas Papadimitriou | this.update_unavailable_values();
|
440 | 8d08f18a | Kostas Papadimitriou | }, |
441 | 8d08f18a | Kostas Papadimitriou | |
442 | 820ef2f0 | Kostas Papadimitriou | update_unavailable_values: function() { |
443 | 820ef2f0 | Kostas Papadimitriou | if (!this.current_image) { this.unavailable_values = {disk:[], ram:[], cpu:[]}; return }; |
444 | 820ef2f0 | Kostas Papadimitriou | this.unavailable_values = storage.flavors.unavailable_values_for_image(this.current_image); |
445 | 820ef2f0 | Kostas Papadimitriou | }, |
446 | 820ef2f0 | Kostas Papadimitriou | |
447 | 820ef2f0 | Kostas Papadimitriou | flavor_is_valid: function(flv) { |
448 | 820ef2f0 | Kostas Papadimitriou | if (!flv) { return false }; |
449 | 283bb7de | Kostas Papadimitriou | |
450 | d965e6dc | Kostas Papadimitriou | var existing = storage.flavors.get_flavor(flv.get("cpu"), flv.get("ram"), flv.get("disk"), flv.get("disk_template"), this.flavors); |
451 | 820ef2f0 | Kostas Papadimitriou | if (!existing) { return false }; |
452 | 283bb7de | Kostas Papadimitriou | |
453 | 283bb7de | Kostas Papadimitriou | if (this.unavailable_values && (this.unavailable_values.disk.indexOf(parseInt(flv.get("disk")) * 1000) > -1)) { |
454 | 283bb7de | Kostas Papadimitriou | return false; |
455 | 820ef2f0 | Kostas Papadimitriou | } |
456 | 820ef2f0 | Kostas Papadimitriou | return true; |
457 | 820ef2f0 | Kostas Papadimitriou | }, |
458 | 820ef2f0 | Kostas Papadimitriou | |
459 | 885a592b | Kostas Papadimitriou | set_valid_current_for: function(t, val) { |
460 | 885a592b | Kostas Papadimitriou | var found = this.flavors[0]; |
461 | 885a592b | Kostas Papadimitriou | _.each(this.flavors, function(flv) { |
462 | 885a592b | Kostas Papadimitriou | if (flv.get(t) == val) {
|
463 | 885a592b | Kostas Papadimitriou | found = flv; |
464 | 885a592b | Kostas Papadimitriou | } |
465 | 885a592b | Kostas Papadimitriou | }); |
466 | 885a592b | Kostas Papadimitriou | |
467 | 885a592b | Kostas Papadimitriou | this.set_current(found);
|
468 | 283bb7de | Kostas Papadimitriou | this.validate_selected_flavor();
|
469 | 885a592b | Kostas Papadimitriou | }, |
470 | 885a592b | Kostas Papadimitriou | |
471 | 8d08f18a | Kostas Papadimitriou | set_current: function(flv) { |
472 | 885a592b | Kostas Papadimitriou | |
473 | 885a592b | Kostas Papadimitriou | if (!flv) {
|
474 | 885a592b | Kostas Papadimitriou | // user clicked on invalid combination
|
475 | 885a592b | Kostas Papadimitriou | // force the first available choice for the
|
476 | 885a592b | Kostas Papadimitriou | // type of option he last clicked
|
477 | 885a592b | Kostas Papadimitriou | this.set_valid_current_for.apply(this, this.last_choice); |
478 | 885a592b | Kostas Papadimitriou | return;
|
479 | 885a592b | Kostas Papadimitriou | } |
480 | 885a592b | Kostas Papadimitriou | |
481 | 8d08f18a | Kostas Papadimitriou | this.current_flavor = flv;
|
482 | 8d08f18a | Kostas Papadimitriou | this.trigger("change"); |
483 | cd4d5c5f | Kostas Papadimitriou | if (this.current_flavor) { |
484 | cd4d5c5f | Kostas Papadimitriou | this.update_selected_flavor();
|
485 | cd4d5c5f | Kostas Papadimitriou | this.update_selected_predefined();
|
486 | cd4d5c5f | Kostas Papadimitriou | } |
487 | cd4d5c5f | Kostas Papadimitriou | |
488 | cd4d5c5f | Kostas Papadimitriou | this.validate();
|
489 | 820ef2f0 | Kostas Papadimitriou | }, |
490 | 820ef2f0 | Kostas Papadimitriou | |
491 | 820ef2f0 | Kostas Papadimitriou | select_default_flavor: function() { |
492 | 820ef2f0 | Kostas Papadimitriou | |
493 | 820ef2f0 | Kostas Papadimitriou | }, |
494 | 820ef2f0 | Kostas Papadimitriou | |
495 | 820ef2f0 | Kostas Papadimitriou | update_selected_from_ui: function() { |
496 | 820ef2f0 | Kostas Papadimitriou | this.set_current(this.ui_selected()); |
497 | 820ef2f0 | Kostas Papadimitriou | }, |
498 | 820ef2f0 | Kostas Papadimitriou | |
499 | 820ef2f0 | Kostas Papadimitriou | update_disabled_flavors: function() { |
500 | 820ef2f0 | Kostas Papadimitriou | this.$(".flavor-options.disk li").removeClass("disabled"); |
501 | 820ef2f0 | Kostas Papadimitriou | if (!this.unavailable_values) { return } |
502 | 885a592b | Kostas Papadimitriou | |
503 | 885a592b | Kostas Papadimitriou | this.$("#create-vm-flavor-options .flavor-options.disk li").each(_.bind(function(i, el){ |
504 | 885a592b | Kostas Papadimitriou | var el_value = $(el).data("value") * 1000; |
505 | 820ef2f0 | Kostas Papadimitriou | if (this.unavailable_values.disk.indexOf(el_value) > -1) { |
506 | 820ef2f0 | Kostas Papadimitriou | $(el).addClass("disabled"); |
507 | 820ef2f0 | Kostas Papadimitriou | }; |
508 | 820ef2f0 | Kostas Papadimitriou | }, this));
|
509 | 8d08f18a | Kostas Papadimitriou | }, |
510 | 8d08f18a | Kostas Papadimitriou | |
511 | 8d08f18a | Kostas Papadimitriou | create_flavors: function() { |
512 | 820ef2f0 | Kostas Papadimitriou | var flavors = this.get_active_flavors(); |
513 | 820ef2f0 | Kostas Papadimitriou | var valid_flavors = this.get_valid_flavors(); |
514 | d965e6dc | Kostas Papadimitriou | this.__added_flavors = {'cpu':[], 'ram':[], 'disk':[], 'disk_template':[] }; |
515 | 820ef2f0 | Kostas Papadimitriou | |
516 | 8d08f18a | Kostas Papadimitriou | _.each(flavors, _.bind(function(flv){
|
517 | 8d08f18a | Kostas Papadimitriou | this.add_flavor(flv);
|
518 | 8d08f18a | Kostas Papadimitriou | }, this));
|
519 | 8d08f18a | Kostas Papadimitriou | |
520 | 5f26e13f | Kostas Papadimitriou | this.sort_flavors(this.disks); |
521 | 5f26e13f | Kostas Papadimitriou | this.sort_flavors(this.cpus); |
522 | 5f26e13f | Kostas Papadimitriou | this.sort_flavors(this.mems); |
523 | d965e6dc | Kostas Papadimitriou | this.sort_flavors(this.disk_templates); |
524 | 5f26e13f | Kostas Papadimitriou | |
525 | 8d08f18a | Kostas Papadimitriou | var self = this; |
526 | 8d08f18a | Kostas Papadimitriou | this.$(".flavor-options li.option").click(function(){ |
527 | 8d08f18a | Kostas Papadimitriou | var el = $(this); |
528 | 820ef2f0 | Kostas Papadimitriou | |
529 | 820ef2f0 | Kostas Papadimitriou | if (el.hasClass("disabled")) { return } |
530 | 820ef2f0 | Kostas Papadimitriou | |
531 | 8d08f18a | Kostas Papadimitriou | el.parent().find(".option").removeClass("selected"); |
532 | 8d08f18a | Kostas Papadimitriou | el.addClass("selected");
|
533 | 820ef2f0 | Kostas Papadimitriou | |
534 | 885a592b | Kostas Papadimitriou | if (el.hasClass("mem")) { self.last_choice = ["ram", $(this).data("value")] } |
535 | 885a592b | Kostas Papadimitriou | if (el.hasClass("cpu")) { self.last_choice = ["cpu", $(this).data("value")] } |
536 | 885a592b | Kostas Papadimitriou | if (el.hasClass("disk")) { self.last_choice = ["disk", $(this).data("value")] } |
537 | d965e6dc | Kostas Papadimitriou | if (el.hasClass("disk_template")) { self.last_choice = ["disk_template", $(this).data("value")] } |
538 | 820ef2f0 | Kostas Papadimitriou | |
539 | 8d08f18a | Kostas Papadimitriou | self.update_selected_from_ui(); |
540 | 8d08f18a | Kostas Papadimitriou | }) |
541 | d965e6dc | Kostas Papadimitriou | |
542 | 5afdfc72 | Kostas Papadimitriou | //this.$(".flavor-options li.disk_template.option").mouseover(function(){
|
543 | 5afdfc72 | Kostas Papadimitriou | //$(this).parent().find(".description").hide();
|
544 | 5afdfc72 | Kostas Papadimitriou | //$(this).find(".description").show();
|
545 | 5afdfc72 | Kostas Papadimitriou | //}).mouseout(function(){
|
546 | 5afdfc72 | Kostas Papadimitriou | //$(this).parent().find(".description").hide();
|
547 | 5afdfc72 | Kostas Papadimitriou | //$(this).parent().find(".selected .description").show();
|
548 | 5afdfc72 | Kostas Papadimitriou | //});
|
549 | 8d08f18a | Kostas Papadimitriou | }, |
550 | 5f26e13f | Kostas Papadimitriou | |
551 | 5f26e13f | Kostas Papadimitriou | sort_flavors: function(els) { |
552 | 5f26e13f | Kostas Papadimitriou | var prev = undefined; |
553 | 5f26e13f | Kostas Papadimitriou | els.find("li").each(function(i,el){ |
554 | 5f26e13f | Kostas Papadimitriou | el = $(el);
|
555 | 5f26e13f | Kostas Papadimitriou | if (!prev) { prev = el; return true }; |
556 | 5f26e13f | Kostas Papadimitriou | if (el.data("value") < prev.data("value")) { |
557 | 5f26e13f | Kostas Papadimitriou | prev.before(el); |
558 | 5f26e13f | Kostas Papadimitriou | } |
559 | 5f26e13f | Kostas Papadimitriou | prev = el; |
560 | 5f26e13f | Kostas Papadimitriou | }) |
561 | 5f26e13f | Kostas Papadimitriou | }, |
562 | 8d08f18a | Kostas Papadimitriou | |
563 | 8d08f18a | Kostas Papadimitriou | ui_selected: function() { |
564 | 820ef2f0 | Kostas Papadimitriou | var args = [this.$(".option.cpu.selected").data("value"), |
565 | 8d08f18a | Kostas Papadimitriou | this.$(".option.mem.selected").data("value"), |
566 | 8d08f18a | Kostas Papadimitriou | this.$(".option.disk.selected").data("value"), |
567 | d965e6dc | Kostas Papadimitriou | this.$(".option.disk_template.selected").data("value"), |
568 | 8d08f18a | Kostas Papadimitriou | this.flavors];
|
569 | 8d08f18a | Kostas Papadimitriou | |
570 | 820ef2f0 | Kostas Papadimitriou | var flv = storage.flavors.get_flavor.apply(storage.flavors, args);
|
571 | 820ef2f0 | Kostas Papadimitriou | return flv;
|
572 | 8d08f18a | Kostas Papadimitriou | }, |
573 | 8d08f18a | Kostas Papadimitriou | |
574 | 8d08f18a | Kostas Papadimitriou | update_selected_flavor: function() { |
575 | 820ef2f0 | Kostas Papadimitriou | var flv = this.current_flavor; |
576 | cd4d5c5f | Kostas Papadimitriou | if (!flv) { return } |
577 | 820ef2f0 | Kostas Papadimitriou | this.$(".option").removeClass("selected"); |
578 | 8d08f18a | Kostas Papadimitriou | |
579 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.cpu.value-" + flv.get("cpu")).addClass("selected"); |
580 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.mem.value-" + flv.get("ram")).addClass("selected"); |
581 | 820ef2f0 | Kostas Papadimitriou | this.$(".option.disk.value-" + flv.get("disk")).addClass("selected"); |
582 | d965e6dc | Kostas Papadimitriou | this.$(".option.disk_template.value-" + flv.get("disk_template")).addClass("selected"); |
583 | 5afdfc72 | Kostas Papadimitriou | |
584 | 5afdfc72 | Kostas Papadimitriou | var disk_el = this.$(".option.disk_template.value-" + flv.get("disk_template")); |
585 | 5afdfc72 | Kostas Papadimitriou | var basebgpos = 470; |
586 | 5afdfc72 | Kostas Papadimitriou | |
587 | 5afdfc72 | Kostas Papadimitriou | var append_to_bg_pos = 40 + (disk_el.index() * 91); |
588 | 5afdfc72 | Kostas Papadimitriou | var bg_pos = basebgpos - append_to_bg_pos;
|
589 | 5afdfc72 | Kostas Papadimitriou | |
590 | 5afdfc72 | Kostas Papadimitriou | this.$(".disk-template-description").css({backgroundPosition:'-' + bg_pos + 'px top'}) |
591 | 5afdfc72 | Kostas Papadimitriou | this.$(".disk-template-description p").html(flv.get_disk_template_info().description || ""); |
592 | 8d08f18a | Kostas Papadimitriou | }, |
593 | 885a592b | Kostas Papadimitriou | |
594 | d965e6dc | Kostas Papadimitriou | __added_flavors: {'cpu':[], 'ram':[], 'disk':[], 'disk_template':[]}, |
595 | 8d08f18a | Kostas Papadimitriou | add_flavor: function(flv) { |
596 | d965e6dc | Kostas Papadimitriou | var values = {'cpu': flv.get('cpu'), |
597 | d965e6dc | Kostas Papadimitriou | 'mem': flv.get('ram'), |
598 | d965e6dc | Kostas Papadimitriou | 'disk': flv.get('disk'), |
599 | d965e6dc | Kostas Papadimitriou | 'disk_template': flv.get('disk_template')}; |
600 | 820ef2f0 | Kostas Papadimitriou | |
601 | 820ef2f0 | Kostas Papadimitriou | disabled = "";
|
602 | 885a592b | Kostas Papadimitriou | |
603 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.cpu.indexOf(values.cpu) == -1) { |
604 | 820ef2f0 | Kostas Papadimitriou | var cpu = $(('<li class="option cpu value-{0} {1}">' + |
605 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
606 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">x</span></li>').format(values.cpu, disabled)).data('value', values.cpu); |
607 | 8d08f18a | Kostas Papadimitriou | this.cpus.append(cpu);
|
608 | 885a592b | Kostas Papadimitriou | this.__added_flavors.cpu.push(values.cpu);
|
609 | 8d08f18a | Kostas Papadimitriou | } |
610 | 885a592b | Kostas Papadimitriou | |
611 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.ram.indexOf(values.mem) == -1) { |
612 | 820ef2f0 | Kostas Papadimitriou | var mem = $(('<li class="option mem value-{0}">' + |
613 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
614 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">MB</span></li>').format(values.mem)).data('value', values.mem); |
615 | 8d08f18a | Kostas Papadimitriou | this.mems.append(mem);
|
616 | 885a592b | Kostas Papadimitriou | this.__added_flavors.ram.push(values.mem);
|
617 | 8d08f18a | Kostas Papadimitriou | } |
618 | 885a592b | Kostas Papadimitriou | |
619 | 885a592b | Kostas Papadimitriou | if (this.__added_flavors.disk.indexOf(values.disk) == -1) { |
620 | 820ef2f0 | Kostas Papadimitriou | var disk = $(('<li class="option disk value-{0}">' + |
621 | 820ef2f0 | Kostas Papadimitriou | '<span class="value">{0}</span>' +
|
622 | 820ef2f0 | Kostas Papadimitriou | '<span class="metric">GB</span></li>').format(values.disk)).data('value', values.disk); |
623 | 8d08f18a | Kostas Papadimitriou | this.disks.append(disk);
|
624 | 885a592b | Kostas Papadimitriou | this.__added_flavors.disk.push(values.disk)
|
625 | 8d08f18a | Kostas Papadimitriou | } |
626 | d965e6dc | Kostas Papadimitriou | |
627 | d965e6dc | Kostas Papadimitriou | if (this.__added_flavors.disk_template.indexOf(values.disk_template) == -1) { |
628 | d965e6dc | Kostas Papadimitriou | var template_info = flv.get_disk_template_info();
|
629 | 5afdfc72 | Kostas Papadimitriou | var disk_template = $(('<li title="{2}" class="option disk_template value-{0}">' + |
630 | 5afdfc72 | Kostas Papadimitriou | '<span class="value name">{1}</span>' +
|
631 | d965e6dc | Kostas Papadimitriou | '</li>').format(values.disk_template,
|
632 | d965e6dc | Kostas Papadimitriou | template_info.name, |
633 | d965e6dc | Kostas Papadimitriou | template_info.description)).data('value',
|
634 | d965e6dc | Kostas Papadimitriou | values.disk_template); |
635 | d965e6dc | Kostas Papadimitriou | |
636 | d965e6dc | Kostas Papadimitriou | this.disk_templates.append(disk_template);
|
637 | 5afdfc72 | Kostas Papadimitriou | //disk_template.tooltip({position:'top center', offset:[-5,0], delay:100, tipClass:'tooltip disktip'});
|
638 | d965e6dc | Kostas Papadimitriou | this.__added_flavors.disk_template.push(values.disk_template)
|
639 | d965e6dc | Kostas Papadimitriou | } |
640 | 8d08f18a | Kostas Papadimitriou | |
641 | 8d08f18a | Kostas Papadimitriou | }, |
642 | 820ef2f0 | Kostas Papadimitriou | |
643 | 820ef2f0 | Kostas Papadimitriou | get_active_flavors: function() { |
644 | 820ef2f0 | Kostas Papadimitriou | return storage.flavors.active();
|
645 | 820ef2f0 | Kostas Papadimitriou | }, |
646 | 8d08f18a | Kostas Papadimitriou | |
647 | 820ef2f0 | Kostas Papadimitriou | get_valid_flavors: function() { |
648 | 8d08f18a | Kostas Papadimitriou | return this.flavors; |
649 | 8d08f18a | Kostas Papadimitriou | }, |
650 | 8d08f18a | Kostas Papadimitriou | |
651 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
652 | 820ef2f0 | Kostas Papadimitriou | this.update_selected_flavor();
|
653 | 820ef2f0 | Kostas Papadimitriou | this.update_disabled_flavors();
|
654 | cd4d5c5f | Kostas Papadimitriou | this.validate();
|
655 | 283bb7de | Kostas Papadimitriou | this.validate_selected_flavor();
|
656 | 8d08f18a | Kostas Papadimitriou | }, |
657 | 8d08f18a | Kostas Papadimitriou | |
658 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
659 | 8d08f18a | Kostas Papadimitriou | this.current_image = storage.images.at(0); |
660 | 8d08f18a | Kostas Papadimitriou | this.flavors = [];
|
661 | 8d08f18a | Kostas Papadimitriou | this.flavors_data = {'cpu':[], 'mem':[], 'disk':[]}; |
662 | 8d08f18a | Kostas Papadimitriou | this.update_flavors_data();
|
663 | 8d08f18a | Kostas Papadimitriou | }, |
664 | 8d08f18a | Kostas Papadimitriou | |
665 | cd4d5c5f | Kostas Papadimitriou | validate: function() { |
666 | cd4d5c5f | Kostas Papadimitriou | if (!this.current_flavor) { |
667 | cd4d5c5f | Kostas Papadimitriou | this.parent.$(".form-action.next").hide(); |
668 | cd4d5c5f | Kostas Papadimitriou | } else {
|
669 | cd4d5c5f | Kostas Papadimitriou | this.parent.$(".form-action.next").show(); |
670 | cd4d5c5f | Kostas Papadimitriou | } |
671 | cd4d5c5f | Kostas Papadimitriou | }, |
672 | cd4d5c5f | Kostas Papadimitriou | |
673 | 8d08f18a | Kostas Papadimitriou | get: function() { |
674 | d965e6dc | Kostas Papadimitriou | return {'flavor': this.current_flavor} |
675 | 8d08f18a | Kostas Papadimitriou | } |
676 | 8d08f18a | Kostas Papadimitriou | |
677 | 8d08f18a | Kostas Papadimitriou | }); |
678 | 8d08f18a | Kostas Papadimitriou | |
679 | 47276ec2 | Kostas Papadimitriou | views.CreatePersonalizeView = views.CreateVMStepView.extend({ |
680 | 8d08f18a | Kostas Papadimitriou | step: 3, |
681 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
682 | 8d08f18a | Kostas Papadimitriou | views.CreateSubmitView.__super__.initialize.apply(this, arguments); |
683 | 73e25ce2 | Kostas Papadimitriou | this.roles = this.$("li.predefined-meta.role .values"); |
684 | 73e25ce2 | Kostas Papadimitriou | this.name = this.$("input.rename-field"); |
685 | 8d08f18a | Kostas Papadimitriou | this.name_changed = false; |
686 | 73e25ce2 | Kostas Papadimitriou | this.init_suggested_roles();
|
687 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
688 | 47276ec2 | Kostas Papadimitriou | this.ssh_list = this.$(".ssh ul"); |
689 | 47276ec2 | Kostas Papadimitriou | this.selected_keys = [];
|
690 | 47276ec2 | Kostas Papadimitriou | |
691 | 47276ec2 | Kostas Papadimitriou | var self = this; |
692 | 47276ec2 | Kostas Papadimitriou | this.$(".create-ssh-key").click(function() { |
693 | 47276ec2 | Kostas Papadimitriou | var confirm_close = true || confirm("This action will close the virtual machine creation wizard." + |
694 | 47276ec2 | Kostas Papadimitriou | " Are you sure you want to continue ?")
|
695 | 47276ec2 | Kostas Papadimitriou | if (confirm_close) {
|
696 | 47276ec2 | Kostas Papadimitriou | snf.ui.main.public_keys_view.show(self.parent); |
697 | 47276ec2 | Kostas Papadimitriou | } else {
|
698 | 47276ec2 | Kostas Papadimitriou | } |
699 | 47276ec2 | Kostas Papadimitriou | }); |
700 | 8d08f18a | Kostas Papadimitriou | }, |
701 | 8d08f18a | Kostas Papadimitriou | |
702 | 73e25ce2 | Kostas Papadimitriou | init_suggested_roles: function() { |
703 | 73e25ce2 | Kostas Papadimitriou | var cont = this.roles; |
704 | 73e25ce2 | Kostas Papadimitriou | cont.empty(); |
705 | 73e25ce2 | Kostas Papadimitriou | |
706 | 73e25ce2 | Kostas Papadimitriou | // TODO: get suggested from snf.api.conf
|
707 | 73e25ce2 | Kostas Papadimitriou | _.each(window.SUGGESTED_ROLES, function(r){
|
708 | 73e25ce2 | Kostas Papadimitriou | var el = $('<span class="val">{0}</span>'.format(r)); |
709 | 73e25ce2 | Kostas Papadimitriou | el.data("value", r);
|
710 | 73e25ce2 | Kostas Papadimitriou | cont.append(el); |
711 | 73e25ce2 | Kostas Papadimitriou | el.click(function() {
|
712 | 73e25ce2 | Kostas Papadimitriou | $(this).parent().find(".val").removeClass("selected"); |
713 | 73e25ce2 | Kostas Papadimitriou | $(this).toggleClass("selected"); |
714 | 73e25ce2 | Kostas Papadimitriou | }) |
715 | 47276ec2 | Kostas Papadimitriou | }); |
716 | 47276ec2 | Kostas Papadimitriou | |
717 | 47276ec2 | Kostas Papadimitriou | var self = this; |
718 | 47276ec2 | Kostas Papadimitriou | $(".ssh li.ssh-key-option").live("click", function(e) { |
719 | 47276ec2 | Kostas Papadimitriou | var key = $(this).data("model"); |
720 | 47276ec2 | Kostas Papadimitriou | self.select_key(key); |
721 | 47276ec2 | Kostas Papadimitriou | }); |
722 | 47276ec2 | Kostas Papadimitriou | }, |
723 | 47276ec2 | Kostas Papadimitriou | |
724 | 47276ec2 | Kostas Papadimitriou | select_key: function(key) { |
725 | 47276ec2 | Kostas Papadimitriou | var exists = this.selected_keys.indexOf(key.id); |
726 | 47276ec2 | Kostas Papadimitriou | if (exists > -1) { |
727 | 47276ec2 | Kostas Papadimitriou | this.selected_keys.splice(exists, 1); |
728 | 47276ec2 | Kostas Papadimitriou | } else {
|
729 | 47276ec2 | Kostas Papadimitriou | this.selected_keys.push(key.id);
|
730 | 47276ec2 | Kostas Papadimitriou | } |
731 | 47276ec2 | Kostas Papadimitriou | this.update_ui_keys_selections(this.selected_keys); |
732 | 47276ec2 | Kostas Papadimitriou | }, |
733 | 47276ec2 | Kostas Papadimitriou | |
734 | 47276ec2 | Kostas Papadimitriou | update_ui_keys_selections: function(keys) { |
735 | 47276ec2 | Kostas Papadimitriou | var self = this; |
736 | 47276ec2 | Kostas Papadimitriou | self.$(".ssh-key-option").removeClass("selected"); |
737 | 47276ec2 | Kostas Papadimitriou | self.$(".ssh-key-option .check").attr("checked", false); |
738 | 47276ec2 | Kostas Papadimitriou | _.each(keys, function(kid) {
|
739 | 47276ec2 | Kostas Papadimitriou | $("#ssh-key-option-" + kid).addClass("selected"); |
740 | 47276ec2 | Kostas Papadimitriou | $("#ssh-key-option-" + kid).find(".check").attr("checked", true); |
741 | 47276ec2 | Kostas Papadimitriou | }); |
742 | 47276ec2 | Kostas Papadimitriou | }, |
743 | 47276ec2 | Kostas Papadimitriou | |
744 | 47276ec2 | Kostas Papadimitriou | update_ssh_keys: function() { |
745 | 47276ec2 | Kostas Papadimitriou | this.ssh_list.empty();
|
746 | 47276ec2 | Kostas Papadimitriou | var keys = snf.storage.keys.models;
|
747 | 47276ec2 | Kostas Papadimitriou | if (keys.length == 0) { |
748 | 47276ec2 | Kostas Papadimitriou | this.$(".ssh .empty").show(); |
749 | 47276ec2 | Kostas Papadimitriou | } else {
|
750 | 47276ec2 | Kostas Papadimitriou | this.$(".ssh .empty").hide(); |
751 | 47276ec2 | Kostas Papadimitriou | } |
752 | 47276ec2 | Kostas Papadimitriou | _.each(keys, _.bind(function(key){
|
753 | 47276ec2 | Kostas Papadimitriou | var el = $('<li id="ssh-key-option-{1}" class="ssh-key-option">{0}</li>'.format(key.get("name"), key.id)); |
754 | 47276ec2 | Kostas Papadimitriou | var check = $('<input class="check" type="checkbox"></input>') |
755 | 47276ec2 | Kostas Papadimitriou | el.append(check); |
756 | 47276ec2 | Kostas Papadimitriou | el.data("model", key);
|
757 | 47276ec2 | Kostas Papadimitriou | this.ssh_list.append(el);
|
758 | 47276ec2 | Kostas Papadimitriou | }, this));
|
759 | 73e25ce2 | Kostas Papadimitriou | }, |
760 | 73e25ce2 | Kostas Papadimitriou | |
761 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
762 | 820ef2f0 | Kostas Papadimitriou | this.name.bind("keypress", _.bind(function(e) { |
763 | 8d08f18a | Kostas Papadimitriou | this.name_changed = true; |
764 | 47276ec2 | Kostas Papadimitriou | if (e.keyCode == 13) { this.parent.set_step(4); this.parent.update_layout() }; |
765 | 8d08f18a | Kostas Papadimitriou | }, this));
|
766 | 8d08f18a | Kostas Papadimitriou | |
767 | 8d08f18a | Kostas Papadimitriou | this.name.bind("click", _.bind(function() { |
768 | 8d08f18a | Kostas Papadimitriou | if (!this.name_changed) { |
769 | 8d08f18a | Kostas Papadimitriou | this.name.val(""); |
770 | 8d08f18a | Kostas Papadimitriou | } |
771 | 8d08f18a | Kostas Papadimitriou | }, this))
|
772 | 8d08f18a | Kostas Papadimitriou | }, |
773 | 8d08f18a | Kostas Papadimitriou | |
774 | 8d08f18a | Kostas Papadimitriou | show: function() { |
775 | 47276ec2 | Kostas Papadimitriou | views.CreatePersonalizeView.__super__.show.apply(this, arguments); |
776 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
777 | 8d08f18a | Kostas Papadimitriou | }, |
778 | 820ef2f0 | Kostas Papadimitriou | |
779 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
780 | 8d08f18a | Kostas Papadimitriou | var params = this.parent.get_params(); |
781 | 47276ec2 | Kostas Papadimitriou | |
782 | cd4d5c5f | Kostas Papadimitriou | if (!params.image || !params.flavor) { return } |
783 | 820ef2f0 | Kostas Papadimitriou | |
784 | 820ef2f0 | Kostas Papadimitriou | if (!params.image) { return } |
785 | c130b56e | Kostas Papadimitriou | var vm_name_tpl = snf.config.vm_name_template || "My {0} server"; |
786 | c130b56e | Kostas Papadimitriou | var vm_name = vm_name_tpl.format(params.image.get("name")); |
787 | 8d08f18a | Kostas Papadimitriou | var orig_name = vm_name;
|
788 | 8d08f18a | Kostas Papadimitriou | |
789 | 8d08f18a | Kostas Papadimitriou | var existing = true; |
790 | 8d08f18a | Kostas Papadimitriou | var j = 0; |
791 | b128dc09 | Kostas Papadimitriou | |
792 | 820ef2f0 | Kostas Papadimitriou | while (existing && !this.name_changed) { |
793 | 8d08f18a | Kostas Papadimitriou | var existing = storage.vms.select(function(vm){return vm.get("name") == vm_name}).length |
794 | 8d08f18a | Kostas Papadimitriou | if (existing) {
|
795 | 8d08f18a | Kostas Papadimitriou | j++; |
796 | 8d08f18a | Kostas Papadimitriou | vm_name = orig_name + " " + j;
|
797 | 8d08f18a | Kostas Papadimitriou | } |
798 | 8d08f18a | Kostas Papadimitriou | } |
799 | 47276ec2 | Kostas Papadimitriou | |
800 | 8d08f18a | Kostas Papadimitriou | if (!_(this.name.val()).trim() || !this.name_changed) { |
801 | 8d08f18a | Kostas Papadimitriou | this.name.val(vm_name);
|
802 | 8d08f18a | Kostas Papadimitriou | } |
803 | 8d08f18a | Kostas Papadimitriou | |
804 | 4f1968db | Kostas Papadimitriou | if (!this.name_changed && this.parent.visible()) { |
805 | 1325fc64 | Kostas Papadimitriou | if (!$.browser.msie && !$.browser.opera) { |
806 | 4f1968db | Kostas Papadimitriou | this.$("#create-vm-name").select(); |
807 | 4f1968db | Kostas Papadimitriou | } else {
|
808 | 4f1968db | Kostas Papadimitriou | window.setTimeout(_.bind(function(){
|
809 | 4f1968db | Kostas Papadimitriou | this.$("#create-vm-name").select(); |
810 | 1325fc64 | Kostas Papadimitriou | }, this), 400) |
811 | 4f1968db | Kostas Papadimitriou | } |
812 | 820ef2f0 | Kostas Papadimitriou | } |
813 | 820ef2f0 | Kostas Papadimitriou | |
814 | 820ef2f0 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_path(params.image.get("OS")) |
815 | 820ef2f0 | Kostas Papadimitriou | this.name.css({backgroundImage:"url({0})".format(img)}) |
816 | 47276ec2 | Kostas Papadimitriou | |
817 | 47276ec2 | Kostas Papadimitriou | if (!params.image.supports('ssh')) { |
818 | 47276ec2 | Kostas Papadimitriou | this.disable_ssh_keys();
|
819 | 47276ec2 | Kostas Papadimitriou | } else {
|
820 | 47276ec2 | Kostas Papadimitriou | this.enable_ssh_keys();
|
821 | 47276ec2 | Kostas Papadimitriou | this.update_ssh_keys();
|
822 | 47276ec2 | Kostas Papadimitriou | } |
823 | 820ef2f0 | Kostas Papadimitriou | |
824 | 47276ec2 | Kostas Papadimitriou | this.update_ui_keys_selections(this.selected_keys); |
825 | 47276ec2 | Kostas Papadimitriou | }, |
826 | 47276ec2 | Kostas Papadimitriou | |
827 | 47276ec2 | Kostas Papadimitriou | disable_ssh_keys: function() { |
828 | 47276ec2 | Kostas Papadimitriou | this.$(".disabled.desc").show(); |
829 | 47276ec2 | Kostas Papadimitriou | this.$(".empty.desc").hide(); |
830 | 47276ec2 | Kostas Papadimitriou | this.$(".ssh .confirm-params").hide(); |
831 | 47276ec2 | Kostas Papadimitriou | this.selected_keys = [];
|
832 | 47276ec2 | Kostas Papadimitriou | }, |
833 | 47276ec2 | Kostas Papadimitriou | |
834 | 47276ec2 | Kostas Papadimitriou | enable_ssh_keys: function() { |
835 | 47276ec2 | Kostas Papadimitriou | this.$(".ssh .confirm-params").show(); |
836 | 47276ec2 | Kostas Papadimitriou | this.$(".disabled.desc").hide(); |
837 | 8d08f18a | Kostas Papadimitriou | }, |
838 | 8d08f18a | Kostas Papadimitriou | |
839 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
840 | 73e25ce2 | Kostas Papadimitriou | this.roles.find(".val").removeClass("selected"); |
841 | 820ef2f0 | Kostas Papadimitriou | this.name_changed = false; |
842 | 47276ec2 | Kostas Papadimitriou | this.selected_keys = [];
|
843 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
844 | 8d08f18a | Kostas Papadimitriou | }, |
845 | 8d08f18a | Kostas Papadimitriou | |
846 | 73e25ce2 | Kostas Papadimitriou | get_meta: function() { |
847 | 73e25ce2 | Kostas Papadimitriou | if (this.roles.find(".selected").length == 0) { |
848 | 73e25ce2 | Kostas Papadimitriou | return false; |
849 | 73e25ce2 | Kostas Papadimitriou | } |
850 | 73e25ce2 | Kostas Papadimitriou | |
851 | 73e25ce2 | Kostas Papadimitriou | var role = $(this.roles.find(".selected").get(0)).data("value"); |
852 | 73e25ce2 | Kostas Papadimitriou | return {'Role': role } |
853 | 73e25ce2 | Kostas Papadimitriou | }, |
854 | 73e25ce2 | Kostas Papadimitriou | |
855 | 8d08f18a | Kostas Papadimitriou | get: function() { |
856 | 73e25ce2 | Kostas Papadimitriou | var val = {'name': this.name.val() }; |
857 | 73e25ce2 | Kostas Papadimitriou | if (this.get_meta()) { |
858 | 73e25ce2 | Kostas Papadimitriou | val.metadata = this.get_meta();
|
859 | 73e25ce2 | Kostas Papadimitriou | } |
860 | 47276ec2 | Kostas Papadimitriou | |
861 | 47276ec2 | Kostas Papadimitriou | val.keys = _.map(this.selected_keys, function(k){ return snf.storage.keys.get(k)}); |
862 | 73e25ce2 | Kostas Papadimitriou | |
863 | 73e25ce2 | Kostas Papadimitriou | return val;
|
864 | 8d08f18a | Kostas Papadimitriou | } |
865 | 8d08f18a | Kostas Papadimitriou | }); |
866 | 8d08f18a | Kostas Papadimitriou | |
867 | 47276ec2 | Kostas Papadimitriou | views.CreateSubmitView = views.CreateVMStepView.extend({ |
868 | 47276ec2 | Kostas Papadimitriou | step: 4, |
869 | 47276ec2 | Kostas Papadimitriou | initialize: function() { |
870 | 47276ec2 | Kostas Papadimitriou | views.CreateSubmitView.__super__.initialize.apply(this, arguments); |
871 | 47276ec2 | Kostas Papadimitriou | this.roles = this.$("li.predefined-meta.role .values"); |
872 | 47276ec2 | Kostas Papadimitriou | this.confirm = this.$(".confirm-params ul"); |
873 | 47276ec2 | Kostas Papadimitriou | this.name = this.$("h3.vm-name"); |
874 | 47276ec2 | Kostas Papadimitriou | this.keys = this.$(".confirm-params.ssh"); |
875 | 47276ec2 | Kostas Papadimitriou | this.meta = this.$(".confirm-params.meta"); |
876 | 47276ec2 | Kostas Papadimitriou | this.init_handlers();
|
877 | 47276ec2 | Kostas Papadimitriou | }, |
878 | 47276ec2 | Kostas Papadimitriou | |
879 | 47276ec2 | Kostas Papadimitriou | init_handlers: function() { |
880 | 47276ec2 | Kostas Papadimitriou | }, |
881 | 47276ec2 | Kostas Papadimitriou | |
882 | 47276ec2 | Kostas Papadimitriou | show: function() { |
883 | 47276ec2 | Kostas Papadimitriou | views.CreateSubmitView.__super__.show.apply(this, arguments); |
884 | 47276ec2 | Kostas Papadimitriou | this.update_layout();
|
885 | 47276ec2 | Kostas Papadimitriou | }, |
886 | 47276ec2 | Kostas Papadimitriou | |
887 | 47276ec2 | Kostas Papadimitriou | update_flavor_details: function() { |
888 | 47276ec2 | Kostas Papadimitriou | var flavor = this.parent.get_params().flavor; |
889 | 47276ec2 | Kostas Papadimitriou | |
890 | 47276ec2 | Kostas Papadimitriou | function set_detail(sel, key) { |
891 | 47276ec2 | Kostas Papadimitriou | var val = key;
|
892 | 47276ec2 | Kostas Papadimitriou | if (key == undefined) { val = flavor.get(sel) }; |
893 | 47276ec2 | Kostas Papadimitriou | this.$(".confirm-cont.flavor .flavor-" + sel + " .value").text(val) |
894 | 47276ec2 | Kostas Papadimitriou | } |
895 | 47276ec2 | Kostas Papadimitriou | |
896 | 47276ec2 | Kostas Papadimitriou | set_detail("cpu", flavor.get("cpu") + "x"); |
897 | 47276ec2 | Kostas Papadimitriou | set_detail("ram", flavor.get("ram") + " MB"); |
898 | 47276ec2 | Kostas Papadimitriou | set_detail("disk", util.readablizeBytes(flavor.get("disk") * 1024 * 1024 * 1024)); |
899 | d965e6dc | Kostas Papadimitriou | set_detail("disktype", flavor.get_disk_template_info().name);
|
900 | 47276ec2 | Kostas Papadimitriou | }, |
901 | 47276ec2 | Kostas Papadimitriou | |
902 | 47276ec2 | Kostas Papadimitriou | update_image_details: function() { |
903 | 47276ec2 | Kostas Papadimitriou | var image = this.parent.get_params().image; |
904 | 47276ec2 | Kostas Papadimitriou | |
905 | 47276ec2 | Kostas Papadimitriou | function set_detail(sel, key) { |
906 | 47276ec2 | Kostas Papadimitriou | var val = key;
|
907 | 47276ec2 | Kostas Papadimitriou | if (key == undefined) { val = image.get(sel) }; |
908 | 47276ec2 | Kostas Papadimitriou | this.$(".confirm-cont.image .image-" + sel + " .value").text(val) |
909 | 47276ec2 | Kostas Papadimitriou | } |
910 | 47276ec2 | Kostas Papadimitriou | |
911 | 47276ec2 | Kostas Papadimitriou | set_detail("description");
|
912 | 47276ec2 | Kostas Papadimitriou | set_detail("name");
|
913 | 47276ec2 | Kostas Papadimitriou | set_detail("os", _(image.get("OS")).capitalize()); |
914 | 47276ec2 | Kostas Papadimitriou | set_detail("gui", image.get("GUI")); |
915 | 47276ec2 | Kostas Papadimitriou | set_detail("size", image.get_readable_size());
|
916 | 47276ec2 | Kostas Papadimitriou | set_detail("kernel");
|
917 | 47276ec2 | Kostas Papadimitriou | }, |
918 | 47276ec2 | Kostas Papadimitriou | |
919 | 47276ec2 | Kostas Papadimitriou | update_selected_keys: function(keys) { |
920 | 47276ec2 | Kostas Papadimitriou | this.keys.empty();
|
921 | 47276ec2 | Kostas Papadimitriou | if (!keys || keys.length == 0) { |
922 | 47276ec2 | Kostas Papadimitriou | this.keys.append(this.make("li", {'class':'empty'}, 'No keys selected')) |
923 | 47276ec2 | Kostas Papadimitriou | } |
924 | 47276ec2 | Kostas Papadimitriou | _.each(keys, _.bind(function(key) {
|
925 | 47276ec2 | Kostas Papadimitriou | var el = this.make("li", {'class':'selected-ssh-key'}, key.get('name')); |
926 | 47276ec2 | Kostas Papadimitriou | this.keys.append(el);
|
927 | 47276ec2 | Kostas Papadimitriou | }, this))
|
928 | 47276ec2 | Kostas Papadimitriou | }, |
929 | 47276ec2 | Kostas Papadimitriou | |
930 | 47276ec2 | Kostas Papadimitriou | update_selected_meta: function(meta) { |
931 | 47276ec2 | Kostas Papadimitriou | this.meta.empty();
|
932 | 47276ec2 | Kostas Papadimitriou | if (!meta || meta.length == 0) { |
933 | 47276ec2 | Kostas Papadimitriou | this.meta.append(this.make("li", {'class':'empty'}, 'No tags selected')) |
934 | 47276ec2 | Kostas Papadimitriou | } |
935 | 47276ec2 | Kostas Papadimitriou | _.each(meta, _.bind(function(value, key) {
|
936 | 47276ec2 | Kostas Papadimitriou | var el = this.make("li", {'class':"confirm-value"}); |
937 | 47276ec2 | Kostas Papadimitriou | var name = this.make("span", {'class':"ckey"}, key); |
938 | 47276ec2 | Kostas Papadimitriou | var value = this.make("span", {'class':"cval"}, value); |
939 | 47276ec2 | Kostas Papadimitriou | |
940 | 47276ec2 | Kostas Papadimitriou | $(el).append(name)
|
941 | 47276ec2 | Kostas Papadimitriou | $(el).append(value);
|
942 | 47276ec2 | Kostas Papadimitriou | this.meta.append(el);
|
943 | 47276ec2 | Kostas Papadimitriou | }, this));
|
944 | 47276ec2 | Kostas Papadimitriou | }, |
945 | 47276ec2 | Kostas Papadimitriou | |
946 | 47276ec2 | Kostas Papadimitriou | update_layout: function() { |
947 | 47276ec2 | Kostas Papadimitriou | var params = this.parent.get_params(); |
948 | 47276ec2 | Kostas Papadimitriou | if (!params.image || !params.flavor) { return } |
949 | 47276ec2 | Kostas Papadimitriou | |
950 | 47276ec2 | Kostas Papadimitriou | if (!params.image) { return } |
951 | 47276ec2 | Kostas Papadimitriou | |
952 | 47276ec2 | Kostas Papadimitriou | this.name.text(params.name);
|
953 | 47276ec2 | Kostas Papadimitriou | |
954 | 47276ec2 | Kostas Papadimitriou | this.confirm.find("li.image .value").text(params.flavor.get("image")); |
955 | 47276ec2 | Kostas Papadimitriou | this.confirm.find("li.cpu .value").text(params.flavor.get("cpu") + "x"); |
956 | 47276ec2 | Kostas Papadimitriou | this.confirm.find("li.mem .value").text(params.flavor.get("ram")); |
957 | 47276ec2 | Kostas Papadimitriou | this.confirm.find("li.disk .value").text(params.flavor.get("disk")); |
958 | 47276ec2 | Kostas Papadimitriou | |
959 | 47276ec2 | Kostas Papadimitriou | var img = snf.ui.helpers.os_icon_path(params.image.get("OS")) |
960 | 47276ec2 | Kostas Papadimitriou | this.name.css({backgroundImage:"url({0})".format(img)}) |
961 | 47276ec2 | Kostas Papadimitriou | |
962 | 47276ec2 | Kostas Papadimitriou | this.update_image_details();
|
963 | 47276ec2 | Kostas Papadimitriou | this.update_flavor_details();
|
964 | 47276ec2 | Kostas Papadimitriou | |
965 | 47276ec2 | Kostas Papadimitriou | if (!params.image.supports('ssh')) { |
966 | 47276ec2 | Kostas Papadimitriou | this.keys.hide();
|
967 | 47276ec2 | Kostas Papadimitriou | this.keys.prev().hide();
|
968 | 47276ec2 | Kostas Papadimitriou | } else {
|
969 | 47276ec2 | Kostas Papadimitriou | this.keys.show();
|
970 | 47276ec2 | Kostas Papadimitriou | this.keys.prev().show();
|
971 | 47276ec2 | Kostas Papadimitriou | this.update_selected_keys(params.keys);
|
972 | 47276ec2 | Kostas Papadimitriou | } |
973 | 47276ec2 | Kostas Papadimitriou | |
974 | 47276ec2 | Kostas Papadimitriou | this.update_selected_meta(params.metadata);
|
975 | 47276ec2 | Kostas Papadimitriou | }, |
976 | 47276ec2 | Kostas Papadimitriou | |
977 | 47276ec2 | Kostas Papadimitriou | reset: function() { |
978 | 47276ec2 | Kostas Papadimitriou | this.update_layout();
|
979 | 47276ec2 | Kostas Papadimitriou | }, |
980 | 47276ec2 | Kostas Papadimitriou | |
981 | 47276ec2 | Kostas Papadimitriou | get_meta: function() { |
982 | 47276ec2 | Kostas Papadimitriou | }, |
983 | 47276ec2 | Kostas Papadimitriou | |
984 | 47276ec2 | Kostas Papadimitriou | get: function() { |
985 | 47276ec2 | Kostas Papadimitriou | return {};
|
986 | 47276ec2 | Kostas Papadimitriou | } |
987 | 47276ec2 | Kostas Papadimitriou | }); |
988 | 47276ec2 | Kostas Papadimitriou | |
989 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView = views.Overlay.extend({ |
990 | 8d08f18a | Kostas Papadimitriou | |
991 | 8d08f18a | Kostas Papadimitriou | view_id: "create_vm_view", |
992 | 8d08f18a | Kostas Papadimitriou | content_selector: "#createvm-overlay-content", |
993 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-createvm overlay-info', |
994 | 8d08f18a | Kostas Papadimitriou | overlay_id: "metadata-overlay", |
995 | 8d08f18a | Kostas Papadimitriou | |
996 | 8d08f18a | Kostas Papadimitriou | subtitle: false, |
997 | 8d08f18a | Kostas Papadimitriou | title: "Create new machine", |
998 | 8d08f18a | Kostas Papadimitriou | |
999 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
1000 | 8d08f18a | Kostas Papadimitriou | views.CreateVMView.__super__.initialize.apply(this);
|
1001 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
1002 | 8d08f18a | Kostas Papadimitriou | |
1003 | 8d08f18a | Kostas Papadimitriou | this.password_view = new views.VMCreationPasswordView(); |
1004 | 8d08f18a | Kostas Papadimitriou | |
1005 | 8d08f18a | Kostas Papadimitriou | this.steps = [];
|
1006 | 8d08f18a | Kostas Papadimitriou | this.steps[1] = new views.CreateImageSelectView(this); |
1007 | 8d08f18a | Kostas Papadimitriou | this.steps[1].bind("change", _.bind(function(data) {this.trigger("image:change", data)}, this)); |
1008 | 8d08f18a | Kostas Papadimitriou | |
1009 | 8d08f18a | Kostas Papadimitriou | this.steps[2] = new views.CreateFlavorSelectView(this); |
1010 | 47276ec2 | Kostas Papadimitriou | this.steps[3] = new views.CreatePersonalizeView(this); |
1011 | 47276ec2 | Kostas Papadimitriou | this.steps[4] = new views.CreateSubmitView(this); |
1012 | 8d08f18a | Kostas Papadimitriou | |
1013 | 1325fc64 | Kostas Papadimitriou | this.cancel_btn = this.$(".create-controls .cancel"); |
1014 | 1325fc64 | Kostas Papadimitriou | this.next_btn = this.$(".create-controls .next"); |
1015 | 1325fc64 | Kostas Papadimitriou | this.prev_btn = this.$(".create-controls .prev"); |
1016 | 1325fc64 | Kostas Papadimitriou | this.submit_btn = this.$(".create-controls .submit"); |
1017 | 1325fc64 | Kostas Papadimitriou | |
1018 | 1325fc64 | Kostas Papadimitriou | this.history = this.$(".steps-history"); |
1019 | 1325fc64 | Kostas Papadimitriou | this.history_steps = this.$(".steps-history .steps-history-step"); |
1020 | 8d08f18a | Kostas Papadimitriou | |
1021 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
1022 | 8d08f18a | Kostas Papadimitriou | }, |
1023 | 8d08f18a | Kostas Papadimitriou | |
1024 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
1025 | 1325fc64 | Kostas Papadimitriou | var self = this; |
1026 | 8d08f18a | Kostas Papadimitriou | this.next_btn.click(_.bind(function(){ |
1027 | b128dc09 | Kostas Papadimitriou | this.set_step(this.current_step + 1); |
1028 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
1029 | 8d08f18a | Kostas Papadimitriou | }, this))
|
1030 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.click(_.bind(function(){ |
1031 | b128dc09 | Kostas Papadimitriou | this.set_step(this.current_step - 1); |
1032 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
1033 | 8d08f18a | Kostas Papadimitriou | }, this))
|
1034 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.click(_.bind(function(){ |
1035 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
1036 | 8d08f18a | Kostas Papadimitriou | }, this))
|
1037 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.click(_.bind(function(){ |
1038 | 8d08f18a | Kostas Papadimitriou | this.submit();
|
1039 | 8d08f18a | Kostas Papadimitriou | }, this))
|
1040 | 1325fc64 | Kostas Papadimitriou | |
1041 | 1325fc64 | Kostas Papadimitriou | this.history.find(".completed").live("click", function() { |
1042 | 1325fc64 | Kostas Papadimitriou | var step = parseInt($(this).attr("id").replace("vm-create-step-history-", "")); |
1043 | 1325fc64 | Kostas Papadimitriou | self.set_step(step); |
1044 | 1325fc64 | Kostas Papadimitriou | self.update_layout(); |
1045 | 1325fc64 | Kostas Papadimitriou | }) |
1046 | 8d08f18a | Kostas Papadimitriou | }, |
1047 | 8d08f18a | Kostas Papadimitriou | |
1048 | 8d08f18a | Kostas Papadimitriou | set_step: function(st) { |
1049 | 8d08f18a | Kostas Papadimitriou | }, |
1050 | 8d08f18a | Kostas Papadimitriou | |
1051 | 8d08f18a | Kostas Papadimitriou | validate: function(data) { |
1052 | 8d08f18a | Kostas Papadimitriou | if (_(data.name).trim() == "") { |
1053 | 8d08f18a | Kostas Papadimitriou | this.$(".form-field").addClass("error"); |
1054 | 8d08f18a | Kostas Papadimitriou | return false; |
1055 | 8d08f18a | Kostas Papadimitriou | } else {
|
1056 | 8d08f18a | Kostas Papadimitriou | return true; |
1057 | 8d08f18a | Kostas Papadimitriou | } |
1058 | 8d08f18a | Kostas Papadimitriou | }, |
1059 | 8d08f18a | Kostas Papadimitriou | |
1060 | 8d08f18a | Kostas Papadimitriou | submit: function() { |
1061 | 820ef2f0 | Kostas Papadimitriou | if (this.submiting) { return }; |
1062 | 8d08f18a | Kostas Papadimitriou | var data = this.get_params(); |
1063 | 73e25ce2 | Kostas Papadimitriou | var meta = {};
|
1064 | 47276ec2 | Kostas Papadimitriou | var extra = {};
|
1065 | 47276ec2 | Kostas Papadimitriou | var personality = [];
|
1066 | 47276ec2 | Kostas Papadimitriou | |
1067 | 8d08f18a | Kostas Papadimitriou | if (this.validate(data)) { |
1068 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.addClass("in-progress"); |
1069 | 820ef2f0 | Kostas Papadimitriou | this.submiting = true; |
1070 | 73e25ce2 | Kostas Papadimitriou | if (data.metadata) { meta = data.metadata; }
|
1071 | 47276ec2 | Kostas Papadimitriou | if (data.keys && data.keys.length > 0) { |
1072 | 47276ec2 | Kostas Papadimitriou | personality.push(data.image.personality_data_for_keys(data.keys)) |
1073 | 47276ec2 | Kostas Papadimitriou | } |
1074 | 47276ec2 | Kostas Papadimitriou | |
1075 | 47276ec2 | Kostas Papadimitriou | extra['personality'] = personality;
|
1076 | 47276ec2 | Kostas Papadimitriou | storage.vms.create(data.name, data.image, data.flavor, meta, extra, _.bind(function(data){
|
1077 | 8d08f18a | Kostas Papadimitriou | this.close_all();
|
1078 | 820ef2f0 | Kostas Papadimitriou | this.password_view.show(data.server.adminPass, data.server.id);
|
1079 | 820ef2f0 | Kostas Papadimitriou | this.submiting = false; |
1080 | 8d08f18a | Kostas Papadimitriou | }, this));
|
1081 | 8d08f18a | Kostas Papadimitriou | } |
1082 | 8d08f18a | Kostas Papadimitriou | }, |
1083 | 8d08f18a | Kostas Papadimitriou | |
1084 | 8d08f18a | Kostas Papadimitriou | close_all: function() { |
1085 | 8d08f18a | Kostas Papadimitriou | this.hide();
|
1086 | 8d08f18a | Kostas Papadimitriou | }, |
1087 | 8d08f18a | Kostas Papadimitriou | |
1088 | 8d08f18a | Kostas Papadimitriou | reset: function() { |
1089 | 8d08f18a | Kostas Papadimitriou | this.current_step = 1; |
1090 | b128dc09 | Kostas Papadimitriou | |
1091 | 8d08f18a | Kostas Papadimitriou | this.steps[1].reset(); |
1092 | 8d08f18a | Kostas Papadimitriou | this.steps[2].reset(); |
1093 | 8d08f18a | Kostas Papadimitriou | this.steps[3].reset(); |
1094 | 47276ec2 | Kostas Papadimitriou | this.steps[4].reset(); |
1095 | 8d08f18a | Kostas Papadimitriou | |
1096 | b128dc09 | Kostas Papadimitriou | this.steps[1].show(); |
1097 | b128dc09 | Kostas Papadimitriou | this.steps[2].show(); |
1098 | b128dc09 | Kostas Papadimitriou | this.steps[3].show(); |
1099 | 47276ec2 | Kostas Papadimitriou | this.steps[4].show(); |
1100 | b128dc09 | Kostas Papadimitriou | |
1101 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.removeClass("in-progress"); |
1102 | 8d08f18a | Kostas Papadimitriou | }, |
1103 | 8d08f18a | Kostas Papadimitriou | |
1104 | 8d08f18a | Kostas Papadimitriou | onShow: function() { |
1105 | 8d08f18a | Kostas Papadimitriou | this.reset()
|
1106 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
1107 | 8d08f18a | Kostas Papadimitriou | }, |
1108 | 8d08f18a | Kostas Papadimitriou | |
1109 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
1110 | 8d08f18a | Kostas Papadimitriou | this.show_step(this.current_step); |
1111 | 8d08f18a | Kostas Papadimitriou | this.current_view.update_layout();
|
1112 | 8d08f18a | Kostas Papadimitriou | }, |
1113 | 8d08f18a | Kostas Papadimitriou | |
1114 | 8d08f18a | Kostas Papadimitriou | beforeOpen: function() { |
1115 | 47276ec2 | Kostas Papadimitriou | if (!this.skip_reset_on_next_open) { |
1116 | 47276ec2 | Kostas Papadimitriou | this.submiting = false; |
1117 | 47276ec2 | Kostas Papadimitriou | this.reset();
|
1118 | 47276ec2 | Kostas Papadimitriou | this.current_step = 1; |
1119 | 47276ec2 | Kostas Papadimitriou | this.$(".steps-container").css({"margin-left":0 + "px"}); |
1120 | 47276ec2 | Kostas Papadimitriou | this.show_step(1); |
1121 | 47276ec2 | Kostas Papadimitriou | } |
1122 | 47276ec2 | Kostas Papadimitriou | |
1123 | 47276ec2 | Kostas Papadimitriou | this.skip_reset_on_next_open = false; |
1124 | 47276ec2 | Kostas Papadimitriou | this.update_layout();
|
1125 | 8d08f18a | Kostas Papadimitriou | }, |
1126 | b128dc09 | Kostas Papadimitriou | |
1127 | b128dc09 | Kostas Papadimitriou | set_step: function(step) { |
1128 | 8d08f18a | Kostas Papadimitriou | if (step <= 1) { |
1129 | 8d08f18a | Kostas Papadimitriou | step = 1
|
1130 | 8d08f18a | Kostas Papadimitriou | } |
1131 | 8d08f18a | Kostas Papadimitriou | if (step > this.steps.length - 1) { |
1132 | 8d08f18a | Kostas Papadimitriou | step = this.steps.length - 1; |
1133 | 8d08f18a | Kostas Papadimitriou | } |
1134 | bd8fa10c | Kostas Papadimitriou | this.current_step = step;
|
1135 | b128dc09 | Kostas Papadimitriou | }, |
1136 | b128dc09 | Kostas Papadimitriou | |
1137 | b128dc09 | Kostas Papadimitriou | show_step: function(step) { |
1138 | bd8fa10c | Kostas Papadimitriou | this.current_view = this.steps[step]; |
1139 | bd8fa10c | Kostas Papadimitriou | this.update_controls();
|
1140 | bd8fa10c | Kostas Papadimitriou | |
1141 | b128dc09 | Kostas Papadimitriou | this.steps[step].show();
|
1142 | 820ef2f0 | Kostas Papadimitriou | var width = this.el.find('.container').width(); |
1143 | 820ef2f0 | Kostas Papadimitriou | var left = (step -1) * width * -1; |
1144 | 1325fc64 | Kostas Papadimitriou | this.$(".steps-container").animate({"margin-left": left + "px"}, 300); |
1145 | 1325fc64 | Kostas Papadimitriou | |
1146 | 1325fc64 | Kostas Papadimitriou | this.update_steps_history();
|
1147 | 1325fc64 | Kostas Papadimitriou | }, |
1148 | 1325fc64 | Kostas Papadimitriou | |
1149 | 1325fc64 | Kostas Papadimitriou | update_steps_history: function() { |
1150 | 1325fc64 | Kostas Papadimitriou | var self = this; |
1151 | 1325fc64 | Kostas Papadimitriou | function get_step(s) { |
1152 | 1325fc64 | Kostas Papadimitriou | return self.history.find(".step" + s + "h"); |
1153 | 1325fc64 | Kostas Papadimitriou | } |
1154 | 1325fc64 | Kostas Papadimitriou | |
1155 | 1325fc64 | Kostas Papadimitriou | var current_step = parseInt(this.current_view.step); |
1156 | 1325fc64 | Kostas Papadimitriou | _.each(this.steps, function(stepv) { |
1157 | 1325fc64 | Kostas Papadimitriou | var step = parseInt(stepv.step);
|
1158 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("completed").removeClass("current"); |
1159 | 1325fc64 | Kostas Papadimitriou | if (step == current_step) {
|
1160 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("completed").addClass("current"); |
1161 | 1325fc64 | Kostas Papadimitriou | } |
1162 | 1325fc64 | Kostas Papadimitriou | if (step < current_step) {
|
1163 | 1325fc64 | Kostas Papadimitriou | get_step(step).removeClass("current").addClass("completed"); |
1164 | 1325fc64 | Kostas Papadimitriou | } |
1165 | 1325fc64 | Kostas Papadimitriou | }); |
1166 | 8d08f18a | Kostas Papadimitriou | }, |
1167 | 8d08f18a | Kostas Papadimitriou | |
1168 | 8d08f18a | Kostas Papadimitriou | update_controls: function() { |
1169 | 8d08f18a | Kostas Papadimitriou | var step = this.current_step; |
1170 | 8d08f18a | Kostas Papadimitriou | if (step == 1) { |
1171 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.hide();
|
1172 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.show();
|
1173 | 8d08f18a | Kostas Papadimitriou | } else {
|
1174 | 8d08f18a | Kostas Papadimitriou | this.prev_btn.show();
|
1175 | 8d08f18a | Kostas Papadimitriou | this.cancel_btn.hide();
|
1176 | 8d08f18a | Kostas Papadimitriou | } |
1177 | 8d08f18a | Kostas Papadimitriou | |
1178 | 8d08f18a | Kostas Papadimitriou | if (step == this.steps.length - 1) { |
1179 | 8d08f18a | Kostas Papadimitriou | this.next_btn.hide();
|
1180 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.show();
|
1181 | 8d08f18a | Kostas Papadimitriou | } else {
|
1182 | 8d08f18a | Kostas Papadimitriou | this.next_btn.show();
|
1183 | 8d08f18a | Kostas Papadimitriou | this.submit_btn.hide();
|
1184 | 8d08f18a | Kostas Papadimitriou | } |
1185 | 8d08f18a | Kostas Papadimitriou | }, |
1186 | 8d08f18a | Kostas Papadimitriou | |
1187 | 8d08f18a | Kostas Papadimitriou | get_params: function() { |
1188 | 8d08f18a | Kostas Papadimitriou | return _.extend({}, this.steps[1].get(), this.steps[2].get(), this.steps[3].get()); |
1189 | 8d08f18a | Kostas Papadimitriou | } |
1190 | 8d08f18a | Kostas Papadimitriou | }); |
1191 | 8d08f18a | Kostas Papadimitriou | |
1192 | 8d08f18a | Kostas Papadimitriou | })(this);
|