mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-26 06:50:09 +03:00
Feature #507: Fixed bugs, typos, image attributes dialogs, dashboard
links. This makes it an usable version , though there are some small fixes left.
This commit is contained in:
parent
59cc040699
commit
9ce115b9e4
@ -407,7 +407,7 @@ tr.even:hover{
|
||||
.top_button {
|
||||
font-size: 0.8em;
|
||||
height: 25px;
|
||||
margin: 3px 0;
|
||||
margin: 3px 2px;
|
||||
vertical-align: middle;
|
||||
/*width: 89px;*/
|
||||
}
|
||||
@ -417,6 +417,13 @@ tr.even:hover{
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.image_button {
|
||||
font-size: 0.8em;
|
||||
margin: 3px 2px;
|
||||
vertical-align: middle;
|
||||
border:0;
|
||||
}
|
||||
|
||||
/*
|
||||
.multi_action_slct{
|
||||
font-size: 0.7em;
|
||||
|
@ -2186,8 +2186,12 @@ function setupTips(){
|
||||
//Crawls the user dataTable for that. If such user is not found,
|
||||
//we return the uid.
|
||||
function getUserName(uid){
|
||||
var user = "uid "+uid;
|
||||
if (!dataTable_users) {
|
||||
return user;
|
||||
}
|
||||
nodes = dataTable_users.fnGetData();
|
||||
user = "uid "+uid;
|
||||
|
||||
$.each(nodes,function(){
|
||||
if (uid == this[1]) {
|
||||
user = this[2];
|
||||
|
@ -1275,7 +1275,6 @@ var OpenNebula = {
|
||||
var callback = params.success;
|
||||
var callback_error = params.error;
|
||||
var timeout = params.timeout || false;
|
||||
var resource = OpenNebula.Cluster.resource;
|
||||
|
||||
var resource = OpenNebula.Cluster.resource;
|
||||
var request = OpenNebula.Helper.request(resource,"list");
|
||||
@ -1444,7 +1443,7 @@ var OpenNebula = {
|
||||
var callback_error = params.error;
|
||||
var timeout = params.timeout || false;
|
||||
|
||||
var resource = OpenNebula.Cluster.resource;
|
||||
var resource = OpenNebula.User.resource;
|
||||
var request = OpenNebula.Helper.request(resource,"list");
|
||||
|
||||
$.ajax({
|
||||
|
@ -19,9 +19,9 @@ var dashboard_tab_content =
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#hosts">Hosts</a>\
|
||||
<h3><a href="#hosts_tab">Hosts</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_host_button" href="#">+</a>\
|
||||
<a class="action_button" href="#hosts_tab" value="Host.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
@ -40,9 +40,9 @@ var dashboard_tab_content =
|
||||
</td>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#clusters">Clusters</a>\
|
||||
<h3><a href="#hosts_tab">Clusters</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_cluster_button" href="#">+</a>\
|
||||
<a class="action_button" href="#hosts_tab" value="Cluster.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
@ -59,9 +59,9 @@ var dashboard_tab_content =
|
||||
<tr>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#virtualMachines">Virtual Machines</a>\
|
||||
<h3><a href="#vms_tab">Virtual Machines</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_vm_button" href="#">+</a>\
|
||||
<a class="action_button" href="#vms_tab" value="VM.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
@ -84,9 +84,9 @@ var dashboard_tab_content =
|
||||
</td>\
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3><a href="#virtualNetworks">Virtual Networks</a>\
|
||||
<h3><a href="#vnets_tab">Virtual Networks</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_vn_button" href="#">+</a>\
|
||||
<a class="action_button" href="#vnets_tab" value="Network.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
@ -109,9 +109,9 @@ var dashboard_tab_content =
|
||||
<td>\
|
||||
<div class="panel">\
|
||||
<h3>\
|
||||
<a href="#images">Images</a>\
|
||||
<a href="#images_tab">Images</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_image_button" href="#">+</a>\
|
||||
<a class="action_button" href="#images_tab" value="Image.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
@ -130,9 +130,9 @@ var dashboard_tab_content =
|
||||
</td>\
|
||||
<td class="oneadmin">\
|
||||
<div class="panel">\
|
||||
<h3><a href="#users">Users</a>\
|
||||
<h3><a href="#users_tab">Users</a>\
|
||||
<div class="new-resource">\
|
||||
<a class="create_user_button" href="#">+</a>\
|
||||
<a class="action_button" href="#users_tab" value="User.create_dialog">+</a>\
|
||||
</div>\
|
||||
</h3>\
|
||||
<div class="panel_info">\
|
||||
|
@ -310,12 +310,12 @@ var host_buttons = {
|
||||
};
|
||||
|
||||
var host_info_panel = {
|
||||
"info_tab" : {
|
||||
"host_info_tab" : {
|
||||
title: "Host information",
|
||||
content:""
|
||||
},
|
||||
|
||||
"template_tab" : {
|
||||
"host_template_tab" : {
|
||||
title: "Host template",
|
||||
content: ""
|
||||
}
|
||||
@ -326,7 +326,7 @@ for (action in host_actions){
|
||||
}
|
||||
|
||||
// title, content, buttons, id
|
||||
Sunstone.addMainTab('hosts_tab','Hosts',hosts_tab_content,host_buttons);
|
||||
Sunstone.addMainTab('hosts_tab','Hosts & Clusters',hosts_tab_content,host_buttons);
|
||||
Sunstone.addInfoPanel("host_info_panel",host_info_panel);
|
||||
|
||||
|
||||
|
@ -208,8 +208,21 @@ var image_actions = {
|
||||
|
||||
"Image.addattr" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Image.addattr,
|
||||
callback: function (req) {
|
||||
call: function(obj){
|
||||
var id_attr = obj.data.id;
|
||||
var name = $('#img_attr_name').val();
|
||||
var value = $('#img_attr_value').val();
|
||||
OpenNebula.Image.addattr(
|
||||
{data: {
|
||||
id: id_attr,
|
||||
name: name,
|
||||
value: value
|
||||
},
|
||||
success: obj.success,
|
||||
error: obj.error
|
||||
});
|
||||
},
|
||||
callback : function (req) {
|
||||
Sunstone.runAction("Image.show",req.request.data[0]);
|
||||
},
|
||||
dataTable: function(){return dataTable_images},
|
||||
@ -222,9 +235,25 @@ var image_actions = {
|
||||
call: popUpImageAddattrDialog
|
||||
},
|
||||
|
||||
"Image.updateattr_dialog" : {
|
||||
type: "custom",
|
||||
call: popUpImageAddattrDialog
|
||||
},
|
||||
|
||||
"Image.rmattr" : {
|
||||
type: "multiple",
|
||||
call: OpenNebula.Image.rmattr,
|
||||
call: function(obj){
|
||||
var id_attr = obj.data.id;
|
||||
var name = $('#img_attr_name').val();
|
||||
OpenNebula.Image.rmattr(
|
||||
{data: {
|
||||
id: id_attr,
|
||||
name: name
|
||||
},
|
||||
success: obj.success,
|
||||
error: obj.error
|
||||
});
|
||||
},
|
||||
callback: function (req) {
|
||||
Sunstone.runAction("Image.show",req.request.data[0]);
|
||||
},
|
||||
@ -234,9 +263,8 @@ var image_actions = {
|
||||
},
|
||||
|
||||
"Image.rmattr_dialog" : {
|
||||
type: "custom"
|
||||
type: "custom",
|
||||
call: popUpImageRmattrDialog,
|
||||
notify: False
|
||||
},
|
||||
|
||||
"Image.enable" : {
|
||||
@ -335,12 +363,12 @@ var image_buttons = {
|
||||
text: "Add attribute",
|
||||
condition: True
|
||||
},
|
||||
"Image.addattr_dialog" : {
|
||||
"Image.updateattr_dialog" : {
|
||||
type: "action",
|
||||
text: "Update attribute",
|
||||
condition: True
|
||||
},
|
||||
"Image.rmattr_dialog:" : {
|
||||
"Image.rmattr_dialog" : {
|
||||
type: "action",
|
||||
text: "Remove attribute",
|
||||
condition: True
|
||||
@ -389,12 +417,14 @@ var image_buttons = {
|
||||
}
|
||||
|
||||
var image_info_panel = {
|
||||
"info_tab" : {
|
||||
|
||||
"image_info_tab" : {
|
||||
title: "Image information",
|
||||
content: ""
|
||||
},
|
||||
|
||||
"template_tab" : {
|
||||
|
||||
"image_template_tab" : {
|
||||
title: "Image template",
|
||||
content: ""
|
||||
}
|
||||
|
||||
}
|
||||
@ -493,6 +523,73 @@ function updateImagesView(request, images_list){
|
||||
|
||||
}
|
||||
|
||||
function setupImageAttributesDialogs(){
|
||||
$('div#dialogs').append('<div id="image_attributes_dialog" title="Image attributes"></div>');
|
||||
|
||||
$('#image_attributes_dialog').html(
|
||||
'<form action="javascript:alert(\'js error!\');">\
|
||||
<fieldset>\
|
||||
<div id="img_attr_action_desc">\
|
||||
</div>\
|
||||
<div>\
|
||||
<label for="img_attr_name">Name:</label>\
|
||||
<input type="text" id="img_attr_name" name="img_attr_name" value="" />\
|
||||
</div>\
|
||||
<div>\
|
||||
<label for="img_attr_value">Value:</label>\
|
||||
<input type="text" id="img_attr_value" name="img_attr_value" value="" />\
|
||||
</div>\
|
||||
<div class="form_buttons">\
|
||||
<button class="action_button" id="img_attr_proceed" value="">OK</button>\
|
||||
<button id="img_attr_cancel" value="">Cancel</button>\
|
||||
</div>\
|
||||
</fieldset>\
|
||||
</form>');
|
||||
|
||||
$('#image_attributes_dialog').dialog({
|
||||
autoOpen:false,
|
||||
width:400,
|
||||
modal:true,
|
||||
height:220,
|
||||
resizable:false,
|
||||
});
|
||||
|
||||
$('#image_attributes_dialog button').button();
|
||||
|
||||
$('#img_attr_name').keyup(function(){
|
||||
$(this).val($(this).val().toUpperCase());
|
||||
});
|
||||
|
||||
$('#image_attributes_dialog #img_attr_cancel').click(function(){
|
||||
$('#image_attributes_dialog').dialog('close');
|
||||
return false;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function popUpImageAddattrDialog(){
|
||||
|
||||
$('#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:";
|
||||
$('#img_attr_proceed').val("Image.addattr");
|
||||
$('#img_attr_action_desc').html(desc);
|
||||
$('#image_attributes_dialog').dialog('open');
|
||||
return false;
|
||||
}
|
||||
|
||||
function popUpImageRmattrDialog(){
|
||||
|
||||
$('#img_attr_value').hide();
|
||||
$('#img_attr_value').prev().hide();
|
||||
var desc = "Please type the attribute you want to remove:";
|
||||
$('#img_attr_proceed').val("Image.rmattr");
|
||||
$('#img_attr_action_desc').html(desc);
|
||||
$('#image_attributes_dialog').dialog('open');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function updateImageInfo(request,img){
|
||||
var img_info = img.IMAGE;
|
||||
var info_tab = {
|
||||
@ -721,6 +818,8 @@ $(document).ready(function(){
|
||||
Sunstone.runAction("Image.list");
|
||||
|
||||
setupCreateImageDialog();
|
||||
setupImageAttributesDialogs();
|
||||
setupTips($('#create_image_dialog'));
|
||||
|
||||
setInterval(function(){
|
||||
var nodes = $('input:checked',dataTable_images.fnGetNodes());
|
||||
@ -734,11 +833,4 @@ $(document).ready(function(){
|
||||
tableCheckboxesListener(dataTable_images);
|
||||
imageInfoListener();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
})
|
||||
|
@ -70,7 +70,7 @@ var user_actions = {
|
||||
|
||||
"User.list" : {
|
||||
type: "list",
|
||||
call: OpenNebula.User.list
|
||||
call: OpenNebula.User.list,
|
||||
callback: updateUsersView,
|
||||
error: onError,
|
||||
notify: False
|
||||
@ -229,4 +229,4 @@ $(document).ready(function(){
|
||||
initCheckAllBoxes(dataTable_users);
|
||||
tableCheckboxesListener(dataTable_users);
|
||||
|
||||
}
|
||||
})
|
||||
|
@ -494,12 +494,12 @@ var vm_actions = {
|
||||
},
|
||||
|
||||
"VM.create_dialog" : {
|
||||
type: "custom"
|
||||
type: "custom",
|
||||
call: popUpCreateVMDialog,
|
||||
},
|
||||
|
||||
"VM.list" : {
|
||||
type: "list"
|
||||
type: "list",
|
||||
call: OpenNebula.VM.list,
|
||||
callback: updateVMachinesView,
|
||||
error: onError,
|
||||
@ -662,7 +662,7 @@ var vm_actions = {
|
||||
},
|
||||
|
||||
"VM.log" : {
|
||||
type: "single"
|
||||
type: "single",
|
||||
call: OpenNebula.VM.log,
|
||||
callback: function(req,res) {
|
||||
var log_lines = res.split("\n");
|
||||
@ -798,20 +798,23 @@ var vm_buttons = {
|
||||
"VM.delete" : {
|
||||
type: "confirm",
|
||||
text: "Delete",
|
||||
tip: "This will delete the selected VMs from the database"
|
||||
tip: "This will delete the selected VMs from the database",
|
||||
condition: True
|
||||
}
|
||||
}
|
||||
|
||||
var vm_info_panel = {
|
||||
"info_tab" : {
|
||||
|
||||
"vm_info_tab" : {
|
||||
title: "Virtual Machine information",
|
||||
content: ""
|
||||
},
|
||||
"template_tab" : {
|
||||
|
||||
"vm_template_tab" : {
|
||||
title: "VM template",
|
||||
content: ""
|
||||
},
|
||||
"log_tab" : {
|
||||
|
||||
"vm_log_tab" : {
|
||||
title: "VM log",
|
||||
content: ""
|
||||
}
|
||||
}
|
||||
|
||||
@ -1725,7 +1728,7 @@ $(document).ready(function(){
|
||||
initCheckAllBoxes(dataTable_vMachines);
|
||||
tableCheckboxesListener(dataTable_vMachines);
|
||||
vMachineInfoListener();
|
||||
setupTips($('#create_vm_dialog'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
@ -137,7 +137,7 @@ var vnet_actions = {
|
||||
|
||||
"Network.create_dialog" : {
|
||||
type: "custom",
|
||||
call: popUpCreateNetworkDialog
|
||||
call: popUpCreateVnetDialog
|
||||
},
|
||||
|
||||
"Network.list" : {
|
||||
@ -162,7 +162,7 @@ var vnet_actions = {
|
||||
callback: updateVNetworkInfo,
|
||||
error: onError,
|
||||
notify: False
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"Network.refresh" : {
|
||||
@ -242,11 +242,13 @@ var vnet_buttons = {
|
||||
}
|
||||
|
||||
var vnet_info_panel = {
|
||||
"info_tab" : {
|
||||
|
||||
"vnet_info_tab" : {
|
||||
title: "Virtual network information",
|
||||
content: ""
|
||||
},
|
||||
"template_tab" : {
|
||||
|
||||
"vnet_template_tab" : {
|
||||
title: "Virtual network template",
|
||||
content: ""
|
||||
}
|
||||
}
|
||||
|
||||
@ -389,10 +391,11 @@ function updateVNetworkInfo(request,vn){
|
||||
}
|
||||
|
||||
|
||||
function setupCreateVNetDialog {
|
||||
|
||||
function setupCreateVNetDialog() {
|
||||
|
||||
$('div#dialogs').append('<div title="Create Virtual Network" id="create_vn_dialog"></div>');
|
||||
$('#create_vn_dialog').html(create_vn_tmpl);
|
||||
|
||||
|
||||
//Prepare the jquery-ui dialog. Set style options here.
|
||||
$('#create_vn_dialog').dialog({
|
||||
@ -519,7 +522,7 @@ function setupCreateVNetDialog {
|
||||
});
|
||||
}
|
||||
|
||||
function popUpCreateVnetDialog {
|
||||
function popUpCreateVnetDialog() {
|
||||
$('#create_vn_dialog').dialog('open');
|
||||
}
|
||||
|
||||
@ -557,8 +560,7 @@ $(document).ready(function(){
|
||||
|
||||
initCheckAllBoxes(dataTable_vNetworks);
|
||||
tableCheckboxesListener(dataTable_vNetworks);
|
||||
vNetworkInfoListener()
|
||||
vNetworkInfoListener();
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -154,7 +154,7 @@ function tableCheckboxesListener(dataTable){
|
||||
total_length = nodes.length;
|
||||
checked_length = $('input:checked',nodes).length;
|
||||
|
||||
if (total_length == checked_length){
|
||||
if (total_length == checked_length && total_length != 0){
|
||||
$('.check_all',dataTable).attr("checked","checked");
|
||||
} else {
|
||||
$('.check_all',dataTable).removeAttr("checked");
|
||||
@ -165,11 +165,11 @@ function tableCheckboxesListener(dataTable){
|
||||
if (last_action_b.length && last_action_b.val().length){
|
||||
last_action_b.button("enable");
|
||||
};
|
||||
$('.new_button',context).button("enable");
|
||||
$('.create_dialog_button',context).button("enable");
|
||||
} else {
|
||||
$('.top_button, .list_button',context).button("disable");
|
||||
last_action_b.button("disable");
|
||||
$('.new_button',context).button("enable");
|
||||
$('.create_dialog_button',context).button("enable");
|
||||
}
|
||||
});
|
||||
|
||||
@ -333,6 +333,52 @@ function waitingNodes(dataTable){
|
||||
}
|
||||
};
|
||||
|
||||
function getUserName(uid){
|
||||
var user = "uid "+uid;
|
||||
if (typeof(dataTable_users) == "undefined") {
|
||||
return user;
|
||||
}
|
||||
nodes = dataTable_users.fnGetData();
|
||||
|
||||
$.each(nodes,function(){
|
||||
if (uid == this[1]) {
|
||||
user = this[2];
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return user;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Replaces all class"tip" divs with an information icon that
|
||||
//displays the tip information on mouseover.
|
||||
function setupTips(context){
|
||||
$('div.tip',context).each(function(){
|
||||
tip = $(this).html();
|
||||
$(this).html('<span class="ui-icon ui-icon-info info_icon"></span>');
|
||||
$(this).append('<span class="tipspan"></span>');
|
||||
|
||||
$(this).append('<span class="ui-icon ui-icon-alert man_icon" />');
|
||||
|
||||
|
||||
$('span.tipspan',this).html(tip);
|
||||
$(this).parent().append('<div class="clear"></div>');
|
||||
$('span.tipspan',this).hide();
|
||||
$('span.info_icon',this).hover(function(e){
|
||||
var top, left;
|
||||
top = e.pageY - 15;// - $(this).parents('#create_vm_dialog').offset().top - 15;
|
||||
left = e.pageX + 15;// - $(this).parents('#create_vm_dialog').offset().left;
|
||||
$(this).next().css(
|
||||
{"top":top+"px",
|
||||
"left":left+"px"});
|
||||
$(this).next().fadeIn();
|
||||
},function(){
|
||||
$(this).next().fadeOut();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function True(){
|
||||
return true;
|
||||
|
@ -56,8 +56,9 @@ var Sunstone = {
|
||||
"addMainTab" : function(tab_id,title_arg,content_arg, buttons_arg,refresh,condition_f) {
|
||||
SunstoneCfg["tabs"][tab_id] = {title: title_arg,
|
||||
content: content_arg,
|
||||
buttons: buttons_arg.
|
||||
condition: condition_f };
|
||||
buttons: buttons_arg,
|
||||
condition: condition_f
|
||||
};
|
||||
if (refresh){
|
||||
|
||||
}
|
||||
@ -94,7 +95,7 @@ var Sunstone = {
|
||||
$('ul',info_panel).append('<li><a href="#'+tab_name+'">'+tab.title+'</a></li>');
|
||||
info_panel.append('<div id="'+tab_name+'">'+tab.content+'</div>');
|
||||
}
|
||||
if (selected){
|
||||
if (selected_tab){
|
||||
return info_panel.tabs({selected: selected_tab});
|
||||
}
|
||||
return info_panel.tabs({selected: 0});
|
||||
@ -230,7 +231,6 @@ $(document).ready(function(){
|
||||
initListButtons();
|
||||
setupCreateDialogs(); //listener for create
|
||||
setupConfirmDialogs();
|
||||
setupTips();
|
||||
|
||||
$('.action_button').live("click",function(){
|
||||
|
||||
@ -351,7 +351,7 @@ function insertButtonsInTab(tab_name){
|
||||
button_code += '</select>';
|
||||
break;
|
||||
case "image":
|
||||
button_code = '<img src="'+button.img+'" class="action_button" value="'+button_name+'" alt="'+button.text+'" />';
|
||||
button_code = '<a href="#" class="action_button" value="'+button_name+'"><img class="image_button" src="'+button.img+'" alt="'+button.text+'" /></a>';
|
||||
break;
|
||||
case "create_dialog":
|
||||
button_code = '<button class="'+button.type+'_button action_button top_button" value="'+button_name+'">'+button.text+'</button>';
|
||||
@ -609,30 +609,4 @@ function popUpConfirmWithSelectDialog(target_elem){
|
||||
|
||||
}
|
||||
|
||||
//Replaces all class"tip" divs with an information icon that
|
||||
//displays the tip information on mouseover.
|
||||
function setupTips(){
|
||||
$('div.tip').each(function(){
|
||||
tip = $(this).html();
|
||||
$(this).html('<span class="ui-icon ui-icon-info info_icon"></span>');
|
||||
$(this).append('<span class="tipspan"></span>');
|
||||
|
||||
$(this).append('<span class="ui-icon ui-icon-alert man_icon" />');
|
||||
|
||||
|
||||
$('span.tipspan',this).html(tip);
|
||||
$(this).parent().append('<div class="clear"></div>');
|
||||
$('span.tipspan',this).hide();
|
||||
$('span.info_icon',this).hover(function(e){
|
||||
var top, left;
|
||||
top = e.pageY - 15;// - $(this).parents('#create_vm_dialog').offset().top - 15;
|
||||
left = e.pageX + 15;// - $(this).parents('#create_vm_dialog').offset().left;
|
||||
$(this).next().css(
|
||||
{"top":top+"px",
|
||||
"left":left+"px"});
|
||||
$(this).next().fadeIn();
|
||||
},function(){
|
||||
$(this).next().fadeOut();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -24,6 +24,10 @@
|
||||
<script type="text/javascript" src="/js/sunstone-util.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/dashboard-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/hosts-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/vms-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/vnets-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/images-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/plugins/users-tab.js"></script>
|
||||
<script type="text/javascript" src="/js/layout.js"></script>
|
||||
|
||||
</head>
|
||||
|
Loading…
x
Reference in New Issue
Block a user