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