1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-22 18:50:08 +03:00

Feature #507: Finished reviewing code and adding comments. Small fixes here

and there.
This commit is contained in:
Hector Sanjuan 2011-03-25 16:13:54 +01:00
parent 47a1a12eb0
commit d5584f5a71
5 changed files with 241 additions and 182 deletions

View File

@ -398,7 +398,6 @@ function hostInfoListener(){
//do nothing if we are clicking a checkbox!
if ($(e.target).is('input')) {return true;}
popDialogLoading();
var aData = dataTable_hosts.fnGetData(this);
var id = $(aData[0]).val();

View File

@ -433,9 +433,10 @@ Sunstone.addActions(image_actions);
Sunstone.addMainTab('images_tab',images_tab);
Sunstone.addInfoPanel('image_info_panel',image_info_panel);
// Returns an array containing the values of the image_json and ready
// to be inserted in the dataTable
function imageElementArray(image_json){
image = image_json.IMAGE;
var image = image_json.IMAGE;
return [
'<input type="checkbox" id="image_'+image.ID+'" name="selected_items" value="'+image.ID+'"/>',
image.ID,
@ -450,65 +451,77 @@ function imageElementArray(image_json){
];
}
function imageInfoListener(target){
// Set up the listener on the table TDs to show the info panel
function imageInfoListener(){
$('#tbodyimages tr').live("click",function(e){
if ($(e.target).is('input')) {return true;}
aData = dataTable_images.fnGetData(this);
id = $(aData[0]).val();
popDialogLoading();
var aData = dataTable_images.fnGetData(this);
var id = $(aData[0]).val();
Sunstone.runAction("Image.showinfo",id);
return false;
});
}
//Updates the select input field with an option for each image
function updateImageSelect(image_list){
images_select="";
images_select += "<option value=\"\">Select an image</option>";
$.each(image_list, function(){
//Only add if the state says the image is usable
if ((this.IMAGE.STATE < 3) && (this.IMAGE.STATE > 0)){
images_select += '<option id="img_sel_'+this.IMAGE.ID+'" value="'+this.IMAGE.NAME+'">'+this.IMAGE.NAME+'</option>';
}
});
//update static selectors
//update static selectors:
//in the VM section
$('div.vm_section#disks select#IMAGE').html(images_select);
}
// Callback to update an element in the dataTable
function updateImageElement(request, image_json){
id = image_json.IMAGE.ID;
element = imageElementArray(image_json);
var id = image_json.IMAGE.ID;
var element = imageElementArray(image_json);
updateSingleElement(element,dataTable_images,'#image_'+id);
//Update the image select but only if the image is enabled...
if ((image_json.IMAGE.STATE < 3) &&
(image_json.IMAGE.STATE > 0) &&
($('#img_sel_'+id,images_select).length == 0)){
images_select += '<option id="img_sel_'+id+'" value="'+image_json.IMAGE.NAME+'">'+image_json.IMAGE.NAME+'</option>';
}
else {
tag = 'option#img_sel_'+id;
select = $('<select>'+images_select+'</select>');
else { //delete the element if it is in the list
var tag = 'option#img_sel_'+id;
var select = $('<select>'+images_select+'</select>');
$(tag,select).remove();
images_select = $(select).html();
}
$('div.vm_section#disks select#IMAGE').html(images_select);
}
// Callback to remove an element from the dataTable
function deleteImageElement(req){
deleteElement(dataTable_images,'#image_'+req.request.data);
tag = 'option#img_sel_'+req.request.data;
select = $('<select>'+images_select+'</select>');
var tag = 'option#img_sel_'+req.request.data;
var select = $('<select>'+images_select+'</select>');
$(tag,select).remove();
images_select = $(select).html();
$('div.vm_section#disks select#IMAGE').html(images_select);
}
// Callback to add an image element
function addImageElement(request, image_json){
element = imageElementArray(image_json);
var element = imageElementArray(image_json);
addElement(element,dataTable_images);
//NOTE that the select is not updated because newly added images
//are disabled by default
}
// Callback to refresh the list of images
function updateImagesView(request, images_list){
image_list_json = images_list;
image_list_array = [];
var image_list_array = [];
$.each(image_list_json,function(){
image_list_array.push(imageElementArray(this));
});
@ -519,9 +532,13 @@ function updateImagesView(request, images_list){
}
// Prepare the dialog to add/remove/update image attributes
function setupImageAttributesDialogs(){
//Append to DOM
$('div#dialogs').append('<div id="image_attributes_dialog" title="Image attributes"></div>');
//Put HTML in place
$('#image_attributes_dialog').html(
'<form action="javascript:alert(\'js error!\');">\
<fieldset>\
@ -552,6 +569,7 @@ function setupImageAttributesDialogs(){
$('#image_attributes_dialog button').button();
//Upcase variable names
$('#img_attr_name').keyup(function(){
$(this).val($(this).val().toUpperCase());
});
@ -563,8 +581,10 @@ function setupImageAttributesDialogs(){
}
// Popup a dialog to add/update an attribute
function popUpImageAddattrDialog(){
//Show value field and label
$('#img_attr_value').show();
$('#img_attr_value').prev().show();
var desc = "Please write the name and value of the attribute. It will be added or updated in all selected images:";
@ -574,8 +594,10 @@ function popUpImageAddattrDialog(){
return false;
}
// Popup a dialog to remove an attribute
function popUpImageRmattrDialog(){
//Hide value field and label
$('#img_attr_value').hide();
$('#img_attr_value').prev().hide();
var desc = "Please type the attribute you want to remove:";
@ -585,7 +607,7 @@ function popUpImageRmattrDialog(){
return false;
}
// Callback to update the information panel tabs and pop it up
function updateImageInfo(request,img){
var img_info = img.IMAGE;
var info_tab = {
@ -645,6 +667,7 @@ function updateImageInfo(request,img){
}
// Prepare the image creation dialog
function setupCreateImageDialog(){
$('div#dialogs').append('<div title="Create Image" id="create_image_dialog"></div>');
@ -669,7 +692,7 @@ function setupCreateImageDialog(){
});
$('select#img_type').click(function(){
value = $(this).val();
var value = $(this).val();
switch (value){
case "DATABLOCK":
$('#datablock_img').removeAttr("disabled");
@ -697,7 +720,7 @@ function setupCreateImageDialog(){
$('#src_path_select input').click(function(){
value = $(this).val();
var value = $(this).val();
switch (value){
case "path":
$('#img_source,#img_fstype,#img_size').parent().hide();
@ -792,6 +815,7 @@ function popUpCreateImageDialog(){
$('#create_image_dialog').dialog('open');
}
// Set the autorefresh interval for the datatable
function setImageAutorefresh() {
setInterval(function(){
var checked = $('input:checked',dataTable_images.fnGetNodes());
@ -802,6 +826,7 @@ function setImageAutorefresh() {
},INTERVAL+someTime());
}
//The DOM is ready at this point
$(document).ready(function(){
dataTable_images = $("#datatable_images").dataTable({

View File

@ -129,9 +129,10 @@ var users_tab = {
Sunstone.addActions(user_actions);
Sunstone.addMainTab('users_tab',users_tab);
// Returns an array with the values from the user_json ready to be
// added to the dataTable
function userElementArray(user_json){
user = user_json.USER;
var user = user_json.USER;
if (!user.NAME || user.NAME == {}){
name = "";
} else {
@ -146,25 +147,28 @@ function userElementArray(user_json){
}
// Callback to refresh a single element from the dataTable
function updateUserElement(request, user_json){
id = user_json.USER.ID;
element = userElementArray(user_json);
var id = user_json.USER.ID;
var element = userElementArray(user_json);
updateSingleElement(element,dataTable_users,'#user_'+id);
}
// Callback to delete a single element from the dataTable
function deleteUserElement(req){
deleteElement(dataTable_users,'#user_'+req.request.data);
}
// Callback to add a single user element
function addUserElement(request,user_json){
element = userElementArray(user_json);
var element = userElementArray(user_json);
addElement(element,dataTable_users);
}
// Callback to update the list of users
function updateUsersView(request,users_list){
user_list_json = users_list;
user_list_array = [];
var user_list_array = [];
$.each(user_list_json,function(){
user_list_array.push(userElementArray(this));
@ -173,6 +177,7 @@ function updateUsersView(request,users_list){
updateDashboard("users",user_list_json);
}
// Prepare the user creation dialog
function setupCreateUserDialog(){
$('div#dialogs').append('<div title="Create user" id="create_user_dialog"></div>');
$('#create_user_dialog').html(create_user_tmpl);
@ -203,7 +208,7 @@ function popUpCreateUserDialog(){
$('#create_user_dialog').dialog('open');
}
// Prepare the autorefresh of the list
function setUserAutorefresh(){
setInterval(function(){
var checked = $('input:checked',dataTable_users.fnGetNodes());
@ -216,6 +221,7 @@ function setUserAutorefresh(){
$(document).ready(function(){
//if we are not oneadmin, our tab will not even be in the DOM.
if (uid==0) {
dataTable_users = $("#datatable_users").dataTable({
"bJQueryUI": true,
@ -241,9 +247,4 @@ $(document).ready(function(){
initCheckAllBoxes(dataTable_users);
tableCheckboxesListener(dataTable_users);
}
})

View File

@ -655,6 +655,9 @@ var vm_actions = {
type: "single",
call: OpenNebula.VM.log,
callback: function(req,res) {
//after calling VM.log we process the answer
//update the tab and pop it up again with the updated
//info and the log tab selected
var log_lines = res.split("\n");
var colored_log = '';
for (line in log_lines){
@ -668,8 +671,8 @@ var vm_actions = {
title: "VM log",
content: '<pre>'+colored_log+'</pre>'
}
Sunstone.updateInfoPanelTab("vm_info_panel","log_tab",log_tab);
Sunstone.popUpInfoPanel("vm_info_panel",2);
Sunstone.updateInfoPanelTab("vm_info_panel","vm_log_tab",log_tab);
Sunstone.popUpInfoPanel("vm_info_panel",0);
},
error: function(request,error_json){
@ -822,6 +825,8 @@ function str_start_time(vm){
return pretty_time(vm.STIME);
}
// Returns an array formed by the information contained in the vm_json
// and ready to be introduced in a dataTable
function vMachineElementArray(vm_json){
var vm = vm_json.VM;
var state = OpenNebula.Helper.resource_state("vm",vm.STATE);
@ -841,39 +846,46 @@ function vMachineElementArray(vm_json){
]
}
//Creates a listener for the TDs of the VM table
function vMachineInfoListener(){
$('#tbodyvmachines tr').live("click", function(e){
if ($(e.target).is('input')) {return true;}
aData = dataTable_vMachines.fnGetData(this);
id = $(aData[0]).val();
popDialogLoading();
var aData = dataTable_vMachines.fnGetData(this);
var id = $(aData[0]).val();
Sunstone.runAction("VM.showinfo",id);
return false;
});
}
// Callback to refresh a single element from the list
function updateVMachineElement(request, vm_json){
id = vm_json.VM.ID;
element = vMachineElementArray(vm_json);
var id = vm_json.VM.ID;
var element = vMachineElementArray(vm_json);
updateSingleElement(element,dataTable_vMachines,'#vm_'+id)
}
// Callback to delete a single element from the list
function deleteVMachineElement(req){
deleteElement(dataTable_vMachines,'#vm_'+req.request.data);
}
// Callback to add an element to the list
function addVMachineElement(request,vm_json){
id = vm_json.VM.ID;
notifySubmit('OpenNebula.VM.create',id);
element = vMachineElementArray(vm_json);
var id = vm_json.VM.ID;
var element = vMachineElementArray(vm_json);
addElement(element,dataTable_vMachines);
//Popup info panel after creation.
updateVMInfo(null,vm_json);
}
// Callback to refresh the list of Virtual Machines
function updateVMachinesView(request, vmachine_list){
vmachine_list_json = vmachine_list;
vmachine_list_array = [];
var vmachine_list_array = [];
$.each(vmachine_list,function(){
vmachine_list_array.push( vMachineElementArray(this));
@ -883,6 +895,8 @@ function updateVMachinesView(request, vmachine_list){
updateDashboard("vms",vmachine_list_json);
}
// Refreshes the information panel for a VM
function updateVMInfo(request,vm){
var vm_info = vm.VM;
var info_tab = {
@ -956,14 +970,23 @@ function updateVMInfo(request,vm){
Sunstone.updateInfoPanelTab("vm_info_panel","vm_template_tab",template_tab);
Sunstone.updateInfoPanelTab("vm_info_panel","vm_log_tab",log_tab);
//Here it is special, as we will let the callback from the VM.log
//action popUp the info panel again when the info is received.
Sunstone.popUpInfoPanel("vm_info_panel");
Sunstone.runAction("VM.log",vm_info.ID);
}
// Sets up the create-VM dialog and all the processing associated to it,
// which is a lot.
function setupCreateVMDialog(){
/* #### createVMachineDialog() helper functions #### */
vmTabChange = function(event,ui){
//Helper functions for the dialog operations
// Called when changing tabs. Since we use the same form for both
// KVM, XEN and others we need to do some operation to update it
var vmTabChange = function(event,ui){
// ui.tab // anchor element of the selected (clicked) tab
// ui.panel // element, that contains the selected/clicked tab contents
// ui.index // zero-based index of the selected (clicked) tab
@ -981,32 +1004,21 @@ function setupCreateVMDialog(){
}
}
update_dynamic_css = function(){
//This function used to be useful to add specific
//css to elements that changed.
//Now its not needed anymore apparently
/*
if (templ_type=="kvm"){
$(xen_man_items).css({"font-weight":"normal"});
$(kvm_man_items).css({"background":"green","font-weight":"bold"});
$(kvm_opt_items).css({"background":"yellow"});
} else if (templ_type=="xen"){
$(kvm_man_items).css({"font-weight":"normal"});
$(xen_man_items).css({"background":"green","font-weight":"bold"});
$(xen_opt_items).css({"background":"yellow"});
};*/
};
enable_kvm = function(){
//Using kvm wizard. Updates mandatory tag, optional tags, disable
//XEN-only (and others) items, enables KVM items
var enable_kvm = function(){
man_class="kvm";
opt_class="kvm_opt";
$(xen_items).attr("disabled","disabled");
$(xen_items).css("background","");
$(kvm_items).removeAttr("disabled");
//$(items+':disabled').hide();
//particularities
//KVM particularities:
// * Add no_type option for disks
// * Add driver default option for boot and select it - hide some fields
// * Set the raw type to kvm
// * Show the inputs section
$('div#disks select#TYPE option:selected').removeAttr("selected");
$('div#disks select#TYPE').prepend(
'<option id="no_type" value="">None</option>');
@ -1020,10 +1032,10 @@ function setupCreateVMDialog(){
$('input#TYPE', section_raw).val("kvm");
$(section_inputs).show();
update_dynamic_css();
};
// Using XEN wizard. Update mandatory and optional classes, disable
// KVM-only (and other) items, enable XEN fields...
enable_xen = function(){
man_class="xen";
opt_class="xen_opt";
@ -1033,7 +1045,11 @@ function setupCreateVMDialog(){
//$(items+':disabled').hide();
//particularities
// XEN particularities:
// * Remove no_type option from disks
// * Remove driver default boot method
// * Set the raw section to XEN
// * Hide the inputs section
$('div#disks select#TYPE option#no_type').remove();
$('select#boot_method option:selected').removeAttr("selected");
@ -1041,22 +1057,20 @@ function setupCreateVMDialog(){
$('.kernel, .bootloader', $('div#os_boot_opts')).hide();
$('input#TYPE', section_raw).val("kvm");
$('input#TYPE', section_raw).val("xen");
$(section_inputs).hide(); //not present for xen
update_dynamic_css();
};
mandatory_filter = function(context){
man_items = "";
if (templ_type == "kvm")
{ man_items = ".kvm"; }
else if (templ_type == "xen")
{ man_items = ".xen"; }
else {return false;};
//This function checks that all mandatory items within a section
//have some value. Returns true if so, false if not.
var mandatory_filter = function(context){
var man_items = "."+man_class;
//find enabled mandatory items in this context
man_items = $(man_items+' input:visible',context);
r = true;
var r = true;
//we fail it the item is enabled and has no value
$.each(man_items,function(){
if ($(this).parents(".vm_param").attr("disabled") ||
!($(this).val().length)) {
@ -1068,47 +1082,57 @@ function setupCreateVMDialog(){
};
box_add_element = function(context,box_tag,filter){
value="";
params= $('.vm_param',context);
inputs= $('input:enabled',params);
selects = $('select:enabled',params);
fields = $.merge(inputs,selects);
//Adds an option element to a multiple select box. Before doing so,
//it checks that the desired filter is passed
var box_add_element = function(context,box_tag,filter){
var value="";
var params= $('.vm_param',context);
var inputs= $('input:enabled',params);
var selects = $('select:enabled',params);
var fields = $.merge(inputs,selects);
//are fields correctly set?
result = filter();
//are fields passing the filter?
var result = filter();
if (!result) {
notifyError("There are mandatory parameters missing in this section");
return false;
}
value={};
//With each enabled field we form a JSON object
var id = null;
$.each(fields,function(){
if (!($(this).parents(".vm_param").attr("disabled")) &&
$(this).val().length){
//Pick up parent's ID if we do not have one
id = $(this).attr('id').length ? $(this).attr('id') : $(this).parent().attr('id');
value[id] = $(this).val();
}
});
string = JSON.stringify(value);
option= '<option value=\''+string+'\'>'+
var value_string = JSON.stringify(value);
var option= '<option value=\''+value_string+'\'>'+
stringJSON(value)+
'</option>';
$('select'+box_tag,context).append(option);
return false;
};
box_remove_element = function(section_tag,box_tag){
context = $(section_tag);
//Removes selected elements from a multiple select box
var box_remove_element = function(section_tag,box_tag){
var context = $(section_tag);
$('select'+box_tag+' :selected',context).remove();
return false;
};
addSectionJSON = function(template_json,context){
params= $('.vm_param',context);
inputs= $('input:enabled',params);
selects = $('select:enabled',params);
fields = $.merge(inputs,selects);
//Given the JSON of a VM template (or of a section of it), it crawls
//the fields of certain section (context) and add their name and
//values to the template JSON.
var addSectionJSON = function(template_json,context){
var params= $('.vm_param',context);
var inputs= $('input:enabled',params);
var selects = $('select:enabled',params);
var fields = $.merge(inputs,selects);
fields.each(function(){
if (!($(this).parents(".vm_param").attr("disabled"))){ //if ! disabled
@ -1119,16 +1143,23 @@ function setupCreateVMDialog(){
});
}
addBoxJSON = function(array,context,box_tag){
// Given an array (usually empty), a section (context) and a tag for
// a multiple select in that section, it adds the contents of the
// box as objects in the array.
// TODO: Make it return a new array?
var addBoxJSON = function(array,context,box_tag){
$('select'+box_tag+' option',context).each(function(){
array.push( JSON.parse($(this).val()) );
});
}
removeEmptyObjects = function(obj){
//Given an object, removes those elements which are empty
//Used to clean up a template JSON before submitting
//it to opennebula.js
var removeEmptyObjects = function(obj){
for (elem in obj){
remove = false;
value = obj[elem];
var remove = false;
var value = obj[elem];
if (value instanceof Array)
{
if (value.length == 0)
@ -1154,7 +1185,8 @@ function setupCreateVMDialog(){
return obj;
}
iconToggle = function(){
//Toggles the icon when a section is folded/unfolded
var iconToggle = function(){
$('.icon_right').toggle(
function(e){
$('span',e.currentTarget).removeClass("ui-icon-plusthick");
@ -1165,18 +1197,22 @@ function setupCreateVMDialog(){
});
}
capacity_setup = function(){
//$('fieldset',section_capacity).hide();
//~ $('#add_capacity',section_capacity).click(function(){
//~ $('fieldset',section_capacity).toggle();
//~ return false;
//~ });
// Set ups the capacity section
var capacity_setup = function(){
//Actually there is nothing to set up, but it used to be
//possible to hide it like others
/*
$('fieldset',section_capacity).hide();
$('#add_capacity',section_capacity).click(function(){
$('fieldset',section_capacity).toggle();
return false;
});
*/
}
os_boot_setup = function(){
//Sets up the OS_BOOT section
var os_boot_setup = function(){
$('fieldset',section_os_boot).hide();
$('.bootloader, .kernel',section_os_boot).hide();
@ -1191,6 +1227,7 @@ function setupCreateVMDialog(){
$(this).trigger("click");
});
//Depending on the boot method we enable/disable some options
$('#boot_method',section_os_boot).click(function(){
select = $(this).val();
switch (select)
@ -1215,7 +1252,8 @@ function setupCreateVMDialog(){
});
};
disks_setup = function(){
// Sets up the disk section
var disks_setup = function(){
$('fieldset',section_disks).hide();
$('.vm_param', section_disks).hide();
@ -1226,10 +1264,12 @@ function setupCreateVMDialog(){
return false;
});
//Depending on adding a disk or a image we need to show/hide
//different options and make then mandatory or not
$('#image_vs_disk input',section_disks).click(function(){
//$('fieldset',section_disks).show();
$('.vm_param', section_disks).show();
select = $('#image_vs_disk :checked',section_disks).val();
var select = $('#image_vs_disk :checked',section_disks).val();
switch (select)
{
case "disk":
@ -1254,22 +1294,17 @@ function setupCreateVMDialog(){
$('#FORMAT',section_disks).parent().hide();
$('#SIZE',section_disks).parent().attr("disabled","disabled");
$('#TYPE :selected',section_disks).removeAttr("selected");
update_dynamic_css();
});
//activate correct mandatory attributes when
//selecting disk type
//Chrome workaround
$('select#TYPE',section_disks).change(function(){
$(this).trigger('click');
});
//Depending on the type of disk we need to show/hide
//different options and make then mandatory or not
$('select#TYPE',section_disks).click(function(){
select = $(this).val();
var select = $(this).val();
switch (select) {
//size,format,target
case "swap":
@ -1336,10 +1371,11 @@ function setupCreateVMDialog(){
$('#FORMAT',section_disks).parent().attr("disabled","disabled");
}
update_dynamic_css();
});
diskFilter = function(){
//Our filter for the disks section fields is the mandatory
//filter for this section
var diskFilter = function(){
return mandatory_filter(section_disks);
};
@ -1353,7 +1389,8 @@ function setupCreateVMDialog(){
});
};
networks_setup = function(){
// Sets up the network section
var networks_setup = function(){
$('.vm_param',section_networks).hide();
$('fieldset',section_networks).hide();
@ -1363,6 +1400,8 @@ function setupCreateVMDialog(){
return false;
});
//Depending on adding predefined network or not we show/hide
//some fields
$('#network_vs_niccfg input',section_networks).click(function(){
select = $('#network_vs_niccfg :checked',section_networks).val();
@ -1382,10 +1421,13 @@ function setupCreateVMDialog(){
}
});
nicFilter = function(){
network = $('select#network :selected',section_networks).attr('id');
ip = $('#IP',section_networks).val();
mac = $('#MAC',section_networks).val();
//The filter to add a new network checks that we have selected a
//network, or that the ip or mac are set
//TODO: Improve this check
var nicFilter = function(){
var network = $('select#NETWORK :selected',section_networks).attr('id');
var ip = $('#IP',section_networks).val();
var mac = $('#MAC',section_networks).val();
return (network != "no_network" || ip.length || mac.length);
};
@ -1401,7 +1443,8 @@ function setupCreateVMDialog(){
};
inputs_setup = function() {
//Sets up the input section - basicly enabling adding and removing from box
var inputs_setup = function() {
$('fieldset',section_inputs).hide();
$('#add_inputs',section_inputs).click(function(){
@ -1411,7 +1454,7 @@ function setupCreateVMDialog(){
$('#add_input_button',section_inputs).click(function(){
//no filter
box_add_element(section_inputs,'#inputs_box',function(){return true;});
box_add_element(section_inputs,'#inputs_box',True);
return false;
});
$('#remove_input_button',section_inputs).click(function(){
@ -1419,8 +1462,9 @@ function setupCreateVMDialog(){
return false;
});
};
graphics_setup = function(){
//Set up the graphics section
var graphics_setup = function(){
$('fieldset',section_graphics).hide();
$('.vm_param',section_graphics).hide();
$('select#TYPE',section_graphics).parent().show();
@ -1466,7 +1510,8 @@ function setupCreateVMDialog(){
}
context_setup = function(){
//Set up the context section - TODO: Apply improvements here...
var context_setup = function(){
$('fieldset',section_context).hide();
$('#add_context',section_context).click(function(){
@ -1476,7 +1521,8 @@ function setupCreateVMDialog(){
};
placement_setup = function(){
// Set up the placement section
var placement_setup = function(){
$('fieldset',section_placement).hide();
$('#add_placement',section_placement).click(function(){
@ -1486,7 +1532,8 @@ function setupCreateVMDialog(){
};
raw_setup = function(){
// Set up the raw section
var raw_setup = function(){
$('fieldset',section_raw).hide();
$('#add_raw',section_raw).click(function(){
@ -1500,6 +1547,7 @@ function setupCreateVMDialog(){
$('div#dialogs').append('<div title="Create Virtual Machine" id="create_vm_dialog"></div>');
//Insert HTML in place
$('#create_vm_dialog').html(create_vm_tmpl);
//Enable tabs
$('#vm_create_tabs').tabs({
select:vmTabChange
});
@ -1513,52 +1561,40 @@ function setupCreateVMDialog(){
height: height
});
// Enhace buttons
$('#create_vm_dialog button').button();
//Enable different icon for folded/unfolded categories
iconToggle(); //toogle +/- buttons
//Sections, used to stay within their scope
section_capacity = $('#capacity');
section_os_boot = $('#os_boot_opts');
section_disks = $('#disks');
section_networks = $('#networks');
section_inputs = $('#inputs');
section_graphics = $('#graphics');
section_context = $('#context');
section_placement = $('#placement');
section_raw = $('#raw');
var section_capacity = $('#capacity');
var section_os_boot = $('#os_boot_opts');
var section_disks = $('#disks');
var section_networks = $('#networks');
var section_inputs = $('#inputs');
var section_graphics = $('#graphics');
var section_context = $('#context');
var section_placement = $('#placement');
var section_raw = $('#raw');
//Different selector for items of kvm and xen (mandatory and optional)
items = '.vm_section input,.vm_section select';
kvm_man_items = '.kvm input,.kvm select';
kvm_opt_items = '.kvm_opt input, .kvm_opt select';
kvm_items = kvm_man_items +','+kvm_opt_items;
xen_man_items = '.xen input,.xen select';
xen_opt_items = '.xen_opt input, .xen_opt select';
xen_items = xen_man_items +','+ xen_opt_items;
var items = '.vm_section input,.vm_section select';
var kvm_man_items = '.kvm input,.kvm select';
var kvm_opt_items = '.kvm_opt input, .kvm_opt select';
var kvm_items = kvm_man_items +','+kvm_opt_items;
var xen_man_items = '.xen input,.xen select';
var xen_opt_items = '.xen_opt input, .xen_opt select';
var xen_items = xen_man_items +','+ xen_opt_items;
//Starting template type, optional items class and mandatory items class
templ_type = "kvm";
opt_class=".kvm_opt";
man_class=".kvm";
var templ_type = "kvm";
var opt_class=".kvm_opt";
var man_class=".kvm";
$('#template_type #kvm').attr("checked","checked"); //check KVM
enable_kvm(); //enable all kvm options
//handle change between templates.
$("#template_type input").click(function(){
templ_type = $("#template_type :checked").val();
switch (templ_type)
{
case "kvm":
enable_kvm();
break;
case "xen":
enable_xen();
break;
}
});
//Fold/unfold all sections button
$('#fold_unfold_vm_params').toggle(
function(){
$('.vm_section fieldset').show();
@ -1566,10 +1602,11 @@ function setupCreateVMDialog(){
},
function(){
$('.vm_section fieldset').hide();
$('.vm_section fieldset').first().show();
$('.vm_section fieldset').first().show(); //Show capacity opts
return false;
});
//initialise all sections
capacity_setup();
os_boot_setup();
disks_setup();
@ -1580,13 +1617,14 @@ function setupCreateVMDialog(){
placement_setup();
raw_setup();
//Process form
$('button#create_vm_form_easy').click(function(){
//validate form
vm_json = {};
var vm_json = {};
//process capacity options
scope = section_capacity;
var scope = section_capacity;
if (!mandatory_filter(scope)){
notifyError("There are mandatory fields missing in the capacity section");
@ -1610,7 +1648,7 @@ function setupCreateVMDialog(){
};
addSectionJSON(vm_json,scope);
//process disks
//process disks -> fetch from box
scope = section_disks;
vm_json["DISK"] = [];
addBoxJSON(vm_json["DISK"],scope,'#disks_box');
@ -1654,28 +1692,23 @@ function setupCreateVMDialog(){
Sunstone.runAction("VM.create",vm_json);
//OpenNebula.VM.create({data: vm_json,
// success: addVMachineElement,
// error: onError});
$('#create_vm_dialog').dialog('close');
return false;
});
//Handle manual forms
$('button#create_vm_form_manual').click(function(){
template = $('#textarea_vm_template').val();
var template = $('#textarea_vm_template').val();
//wrap it in the "vm" object
template = {"vm": {"vm_raw": template}};
Sunstone.runAction("VM.create",template);
//OpenNebula.VM.create({data: template,
// success: addVMachineElement,
// error: onError});
$('#create_vm_dialog').dialog('close');
return false;
});
//Reset form - empty boxes
$('button#reset_vm_form').click(function(){
$('select#disks_box option',section_disks).remove();
$('select#nics_box option',section_networks).remove();
@ -1686,10 +1719,12 @@ function setupCreateVMDialog(){
}
// Open creation dialog
function popUpCreateVMDialog(){
$('#create_vm_dialog').dialog('open');
}
//Prepares autorefresh
function setVMAutorefresh(){
setInterval(function(){
var checked = $('input:checked',dataTable_vMachines.fnGetNodes());
@ -1700,6 +1735,7 @@ function setVMAutorefresh(){
},INTERVAL+someTime()); //so that not all refreshing is done at the same time
}
// At this point the DOM is ready and the sunstone.js ready() has been run.
$(document).ready(function(){
dataTable_vMachines = $("#datatable_vmachines").dataTable({
@ -1728,6 +1764,4 @@ $(document).ready(function(){
tableCheckboxesListener(dataTable_vMachines);
vMachineInfoListener();
setupTips($('#create_vm_dialog'));
})

View File

@ -305,7 +305,7 @@ function vNetworkInfoListener(){
//updates the vnet select different options
function updateNetworkSelect(network_list){
vnetworks_select="";
vnetworks_select += "<option value=\"\">Select a network</option>";
vnetworks_select += "<option id=\"no_network\" value=\"\">Select a network</option>";
$.each(network_list, function(){
vnetworks_select += "<option value=\""+this.VNET.NAME+"\">"+this.VNET.NAME+"</option>";