mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-16 22:50:10 +03:00
Merge branch 'feature-3748' of git.opennebula.org:one into feature-3748
This commit is contained in:
commit
e1a6cb4f94
@ -24,6 +24,7 @@ require.config({
|
||||
'foundation.offcanvas': '../bower_components/foundation/js/foundation/foundation.offcanvas',
|
||||
'foundation.orbit': '../bower_components/foundation/js/foundation/foundation.orbit',
|
||||
'foundation.reveal': '../bower_components/foundation/js/foundation/foundation.reveal',
|
||||
'foundation.slider': '../bower_components/foundation/js/foundation/foundation.slider',
|
||||
'foundation.tab': '../bower_components/foundation/js/foundation/foundation.tab',
|
||||
'foundation.tooltip': '../bower_components/foundation/js/foundation/foundation.tooltip',
|
||||
'foundation.topbar': '../bower_components/foundation/js/foundation/foundation.topbar',
|
||||
@ -140,6 +141,9 @@ require.config({
|
||||
'foundation.reveal': {
|
||||
deps: ['foundation.core']
|
||||
},
|
||||
'foundation.slider': {
|
||||
deps: ['foundation.core']
|
||||
},
|
||||
'foundation.tab': {
|
||||
deps: ['foundation.core']
|
||||
},
|
||||
|
@ -19,6 +19,7 @@ define(function(require) {
|
||||
var ProvisionQuotaWidget = require('./provision-tab/users/quota-widget');
|
||||
|
||||
var ProvisionVmsList = require('./provision-tab/vms/list');
|
||||
var ProvisionTemplatesList = require('./provision-tab/templates/list');
|
||||
var ProvisionUsersList = require('./provision-tab/users/list');
|
||||
var ProvisionFlowsList = require('./provision-tab/flows/list');
|
||||
|
||||
@ -33,7 +34,6 @@ define(function(require) {
|
||||
var TemplateDashboardUsers = require('hbs!./provision-tab/dashboard/users');
|
||||
|
||||
var TemplateGroupInfo = require('hbs!./provision-tab/group/info');
|
||||
var TemplateTemplatesList = require('hbs!./provision-tab/templates/list');
|
||||
|
||||
var TAB_ID = require('./provision-tab/tabId');
|
||||
|
||||
@ -276,21 +276,6 @@ define(function(require) {
|
||||
'</div>'+
|
||||
'</div>';
|
||||
|
||||
var list_templates_accordion_id = 0;
|
||||
function provision_list_templates(opts_arg){
|
||||
opts = $.extend({
|
||||
title: Locale.tr("Saved Templates"),
|
||||
refresh: true,
|
||||
create: true,
|
||||
active: true,
|
||||
filter: true
|
||||
},opts_arg)
|
||||
|
||||
list_templates_accordion_id += 1;
|
||||
return TemplateTemplatesList({'accordionId': list_templates_accordion_id, 'opts': opts});
|
||||
}
|
||||
|
||||
|
||||
var povision_actions = {
|
||||
"Provision.User.show" : {
|
||||
type: "single",
|
||||
@ -1361,15 +1346,15 @@ define(function(require) {
|
||||
|
||||
function show_provision_create_vm() {
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
update_provision_templates_datatable(provision_system_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_system_templates_datatable);
|
||||
provision_system_templates_datatable.fnFilter("^-$", 2, true, false)
|
||||
|
||||
update_provision_templates_datatable(provision_vdc_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_vdc_templates_datatable);
|
||||
provision_vdc_templates_datatable.fnFilter("^(?!\-$)", 2, true, false);
|
||||
provision_vdc_templates_datatable.fnFilter("^1$", 3, true, false);
|
||||
|
||||
if (Config.isTabPanelEnabled("provision-tab", "templates")) {
|
||||
update_provision_templates_datatable(provision_saved_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_saved_templates_datatable);
|
||||
provision_saved_templates_datatable.fnFilter("^(?!\-$)", 2, true, false);
|
||||
provision_saved_templates_datatable.fnFilter("^0$", 3, true, false);
|
||||
}
|
||||
@ -1422,52 +1407,6 @@ define(function(require) {
|
||||
Sunstone.runAction('Provision.Group.show', "-1");
|
||||
}
|
||||
|
||||
function show_provision_template_list(timeout) {
|
||||
$(".section_content").hide();
|
||||
$(".provision_templates_list_section").fadeIn();
|
||||
|
||||
//$("dd:not(.active) .provision_back", $(".provision_templates_list_section")).trigger("click");
|
||||
$(".provision_templates_list_refresh_button", $(".provision_templates_list_section")).trigger("click");
|
||||
}
|
||||
|
||||
function update_provision_templates_datatable(datatable, timeout) {
|
||||
datatable.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
|
||||
setTimeout( function(){
|
||||
OpenNebula.Template.list({
|
||||
timeout: true,
|
||||
success: function (request, item_list){
|
||||
datatable.fnClearTable(true);
|
||||
if (item_list.length == 0) {
|
||||
datatable.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
Locale.tr("There are no templates available")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
datatable.fnAddData(item_list);
|
||||
}
|
||||
},
|
||||
error: Notifier.onError
|
||||
});
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
function update_provision_instance_types_datatable(datatable) {
|
||||
datatable.fnClearTable(true);
|
||||
if (!config['instance_types'] || config['instance_types'].length == 0) {
|
||||
@ -1561,338 +1500,6 @@ define(function(require) {
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
function setup_provision_templates_list(context, opts) {
|
||||
var provision_templates_datatable = $('.provision_templates_table', context).dataTable({
|
||||
"iDisplayLength": 8,
|
||||
"sDom" : '<"H">t<"F"lp>',
|
||||
"aLengthMenu": [[6, 12, 36, 72], [6, 12, 36, 72]],
|
||||
"aaSorting" : [[0, "desc"]],
|
||||
"aoColumnDefs": [
|
||||
{ "bVisible": false, "aTargets": ["all"]}
|
||||
],
|
||||
"aoColumns": [
|
||||
{ "mDataProp": "VMTEMPLATE.ID" },
|
||||
{ "mDataProp": "VMTEMPLATE.NAME" },
|
||||
{ "mDataProp": "VMTEMPLATE.TEMPLATE.SAVED_TEMPLATE_ID", "sDefaultContent" : "-" },
|
||||
{ "mDataProp": "VMTEMPLATE.UID" }
|
||||
],
|
||||
"fnPreDrawCallback": function (oSettings) {
|
||||
// create a thumbs container if it doesn't exist. put it in the dataTables_scrollbody div
|
||||
if (this.$('tr', {"filter": "applied"} ).length == 0) {
|
||||
this.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
Locale.tr("There are no saved templates available")+
|
||||
'<br>'+
|
||||
Locale.tr("Create a template by saving a running Virtual Machine")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
$(".provision_templates_table", context).html('<ul class="provision_templates_ul large-block-grid-3 medium-block-grid-3 small-block-grid-1 text-center"></ul>');
|
||||
}
|
||||
return true;
|
||||
},
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
var data = aData.VMTEMPLATE;
|
||||
var actions_html = "";
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.chmod")) {
|
||||
if (data.UID == config['user_id']) {
|
||||
|
||||
if (data.PERMISSIONS.GROUP_U == "1") {
|
||||
actions_html += '<a class="provision_confirm_unshare_template_button left" data-tooltip title="'+ Locale.tr("Unshare")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-ban only-on-hover"/></a>';
|
||||
actions_html += '<span style="font-size:12px; color: #777">' + Locale.tr("SHARED") + '</span>';
|
||||
} else {
|
||||
actions_html += '<a class="provision_confirm_chmod_template_button left" data-tooltip title="'+ Locale.tr("Share")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-share-alt only-on-hover"/></a>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.delete")) {
|
||||
actions_html += '<a class="provision_confirm_delete_template_button" data-tooltip title="'+ Locale.tr("Delete")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-trash-o right only-on-hover"/></a>';
|
||||
}
|
||||
|
||||
$(".provision_templates_ul", context).append('<li>'+
|
||||
'<ul class="provision-pricing-table" opennebula_id="'+data.ID+'" saved_to_image_id="'+data.TEMPLATE.SAVED_TO_IMAGE_ID+'" datatable_index="'+iDisplayIndexFull+'">'+
|
||||
'<li class="provision-title text-left" title="'+data.NAME+'">'+
|
||||
data.NAME +
|
||||
'</li>'+
|
||||
'<li class="provision-description text-left" style="padding-top:0px; padding-bottom: 5px">'+
|
||||
(data.TEMPLATE.DESCRIPTION || '...')+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left" style="margin-left: 5px">'+
|
||||
'<i class="fa fa-fw fa-file-text-o"/> '+
|
||||
'x'+(data.TEMPLATE.CPU||'-')+' - '+
|
||||
((data.TEMPLATE.MEMORY > 1000) ?
|
||||
(Math.floor(data.TEMPLATE.MEMORY/1024)+'GB') :
|
||||
((data.TEMPLATE.MEMORY||'-')+'MB'))+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left" style="margin-left: 5px">'+
|
||||
'<i class="fa fa-fw fa-user"/> '+
|
||||
data.UNAME+
|
||||
'</li>'+
|
||||
'<li class="provision-description text-right" style="padding-top:5px; margin-right: 5px">'+
|
||||
'<i class="fa fa-fw fa-clock-o"/>'+
|
||||
Humanize.prettyTimeAgo(data.REGTIME)+
|
||||
'</li>'+
|
||||
'<li class="provision-title" style="padding-top:10px">'+
|
||||
actions_html+
|
||||
'</li>'+
|
||||
'</ul>'+
|
||||
'</li>');
|
||||
|
||||
return nRow;
|
||||
}
|
||||
});
|
||||
|
||||
provision_templates_datatable.fnFilter("^(?!\-$)", 2, true, false);
|
||||
|
||||
$('.provision_list_templates_search', context).keyup(function(){
|
||||
provision_templates_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
$('.provision_list_templates_search', context).change(function(){
|
||||
provision_templates_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
context.on("click", ".provision_templates_list_refresh_button", function(){
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
$(".provision_confirm_delete_template_div", context).html("");
|
||||
update_provision_templates_datatable(provision_templates_datatable, 0);
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_templates_list_search_button", function(){
|
||||
$(".provision_list_templates_search", context).fadeIn();
|
||||
});
|
||||
|
||||
$(".provision_list_templates_filter", context).on("change", ".resource_list_select", function(){
|
||||
if ($(this).val() != "-2"){
|
||||
provision_templates_datatable.fnFilter("^" + $(this).val() + "$", 3, true, false);
|
||||
} else {
|
||||
provision_templates_datatable.fnFilter("", 3);
|
||||
}
|
||||
})
|
||||
|
||||
ResourceSelect.insert(
|
||||
".provision_list_templates_filter",
|
||||
context,
|
||||
"User",
|
||||
(opts.filter_expression ? opts.filter_expression : "-2"),
|
||||
false,
|
||||
'<option value="-2">'+Locale.tr("ALL")+'</option>',
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true);
|
||||
|
||||
context.on("click", ".provision_templates_list_filter_button", function(){
|
||||
$(".provision_list_templates_filter", context).fadeIn();
|
||||
return false;
|
||||
});
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.delete")) {
|
||||
context.on("click", ".provision_confirm_delete_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-9 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("Handle with care! This action will inmediately destroy the template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-3 columns">'+
|
||||
'<a href"#" class="provision_delete_template_button alert button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Delete")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_delete_template_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Image.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id
|
||||
},
|
||||
success: function (){
|
||||
OpenNebula.Template.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
Notifier.onError(request, error_json, container);
|
||||
}
|
||||
})
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
if (error_json.error.http_status=="404") {
|
||||
OpenNebula.Template.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
Notifier.onError(request, error_json, container);
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Notifier.onError(request, error_json, container);
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.chmod")) {
|
||||
context.on("click", ".provision_confirm_chmod_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-8 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("The template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated will be shared and all the users will be able to instantiate new VMs using this template.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<a href"#" class="provision_chmod_template_button success button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Share template")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_chmod_template_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Template.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id,
|
||||
extra_param: {'group_u': 1}
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
|
||||
OpenNebula.Image.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id,
|
||||
extra_param: {'group_u': 1}
|
||||
},
|
||||
success: function (){
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
});
|
||||
|
||||
context.on("click", ".provision_confirm_unshare_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).first().text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-8 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("The template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated will be unshared and the users will not be able to instantiate new VMs using this template.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<a href"#" class="provision_unshare_template_button success button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Unshare template")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_unshare_template_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Template.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id,
|
||||
extra_param: {'group_u': 0}
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
|
||||
OpenNebula.Image.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id,
|
||||
extra_param: {'group_u': 0}
|
||||
},
|
||||
success: function (){
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
update_provision_templates_datatable(provision_templates_datatable, 0);
|
||||
context.foundation();
|
||||
}
|
||||
|
||||
function generate_provision_templates_list(context, opts) {
|
||||
context.off();
|
||||
context.html(provision_list_templates(opts));
|
||||
setup_provision_templates_list(context, opts);
|
||||
}
|
||||
|
||||
// Closes and resets the create user wizard
|
||||
function clear_provision_create_user(){
|
||||
OpenNebula.Action.clear_cache("USER");
|
||||
@ -1951,7 +1558,7 @@ define(function(require) {
|
||||
ProvisionVmsList.generate($(".provision_vms_list_section"), {active: true});
|
||||
|
||||
if (Config.isTabPanelEnabled("provision-tab", "templates")) {
|
||||
generate_provision_templates_list($(".provision_templates_list_section"), {active: true});
|
||||
ProvisionTemplatesList.generate($(".provision_templates_list_section"), {active: true});
|
||||
}
|
||||
|
||||
// TODO check if active
|
||||
@ -1976,7 +1583,7 @@ define(function(require) {
|
||||
|
||||
$(document).on("click", ".provision_templates_list_button", function(){
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
show_provision_template_list(0);
|
||||
ProvisionTemplatesList.show(0);
|
||||
});
|
||||
|
||||
$(document).on("click", ".provision_flows_list_button", function(){
|
||||
@ -2260,9 +1867,9 @@ define(function(require) {
|
||||
|
||||
$("#provision_create_template_refresh_button").click(function(){
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
update_provision_templates_datatable(provision_system_templates_datatable);
|
||||
update_provision_templates_datatable(provision_saved_templates_datatable);
|
||||
update_provision_templates_datatable(provision_vdc_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_system_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_saved_templates_datatable);
|
||||
ProvisionTemplatesList.updateDatatable(provision_vdc_templates_datatable);
|
||||
|
||||
});
|
||||
|
||||
@ -2457,8 +2064,6 @@ define(function(require) {
|
||||
var roles_li = "";
|
||||
if (body.roles) {
|
||||
$.each(body.roles, function(index, role) {
|
||||
var role_state = get_provision_flow_state(role);
|
||||
|
||||
roles_li +=
|
||||
'<li class="provision-bullet-item text-left" style="margin-left: 10px;margin-right: 10px;">'+
|
||||
'<i class="fa fa-fw fa-cube"/> '+
|
||||
|
@ -1,4 +1,5 @@
|
||||
define(function(require) {
|
||||
require('foundation.alert');
|
||||
var OpenNebula = require('opennebula');
|
||||
var Locale = require('utils/locale');
|
||||
var Notifier = require('utils/notifier');
|
||||
|
@ -1,24 +1,24 @@
|
||||
<dl class="accordion accordion_list provision_list_templates" data-accordion="dfsaf">
|
||||
<dd class="{{#if opts.active}}active{{/if}} accordion-navigation">
|
||||
<a class="right only-not-active" href="#provision_list_template_accordion{{accordionId}}">
|
||||
<span class="button medium radius"> <i class="fa fa-fw fa-lg fa-th"/><i class="fa fa-fw fa-lg fa-chevron-left"/>
|
||||
<span class="button small radius"> <i class="fa fa-fw fa-lg fa-th"/><i class="fa fa-fw fa-lg fa-chevron-left"/>
|
||||
</span>
|
||||
</a>
|
||||
<h2 class="subheader">
|
||||
{{opts.title}}
|
||||
<span href"#" class="right only-active button medium radius secondary provision_templates_list_refresh_button"
|
||||
{{#if opts.refresh}}style="display:none"{{/if}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<h3 class="subheader">
|
||||
{{!opts.title}}
|
||||
<span href"#" class="right only-active button small radius secondary provision_templates_list_refresh_button"
|
||||
{{#unless opts.refresh}}style="display:none"{{/unless}} data-tooltip title=" {{tr "Refresh"}}">
|
||||
<i class="fa fa-fw fa-lg fa-refresh"/></span>
|
||||
<span href"#" class="right only-active button medium radius secondary provision_templates_list_filter_button"
|
||||
{{#if opts.filter}}style="display:none"{{/if}} data-tooltip title=" {{tr "Filter by User"}}">
|
||||
<span href"#" class="right only-active button small radius secondary provision_templates_list_filter_button"
|
||||
{{#unless opts.filter}}style="display:none"{{/unless}} data-tooltip title=" {{tr "Filter by User"}}">
|
||||
<i class="fa fa-fw fa-lg fa-filter"/>
|
||||
</span>
|
||||
<span class="right only-active provision_list_templates_filter" style="display: none"></span>
|
||||
<input type="search" class="provision_list_templates_search right only-active provision-search-input right" placeholder="Search"/>
|
||||
</h2>
|
||||
<input type="search" class="provision_list_templates_search only-active provision-search-input" placeholder="Search Templates"/>
|
||||
</h3>
|
||||
<div id="provision_list_template_accordion{{accordionId}}" class="content {{#if opts.active}}active{{/if}}">
|
||||
<div class="row">
|
||||
<div class="provision_confirm_delete_template_div large-10 large-centered columns"></div>
|
||||
<div class="provision_confirm_delete_template_div large-12 large-centered columns"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 large-centered columns">
|
||||
|
433
src/sunstone/public/app/tabs/provision-tab/templates/list.js
Normal file
433
src/sunstone/public/app/tabs/provision-tab/templates/list.js
Normal file
@ -0,0 +1,433 @@
|
||||
define(function(require) {
|
||||
require('foundation.alert');
|
||||
var OpenNebula = require('opennebula');
|
||||
var Locale = require('utils/locale');
|
||||
var Config = require('sunstone-config');
|
||||
var Notifier = require('utils/notifier');
|
||||
var Humanize = require('utils/humanize');
|
||||
var ResourceSelect = require('utils/resource-select');
|
||||
|
||||
var TemplateTemplatesList = require('hbs!./list');
|
||||
|
||||
var _accordionId = 0;
|
||||
|
||||
return {
|
||||
'generate': generate_provision_templates_list,
|
||||
'show': show_provision_template_list,
|
||||
'updateDatatable': update_provision_templates_datatable,
|
||||
};
|
||||
|
||||
function show_provision_template_list(timeout) {
|
||||
$(".section_content").hide();
|
||||
$(".provision_templates_list_section").fadeIn();
|
||||
|
||||
$(".provision_templates_list_refresh_button", $(".provision_templates_list_section")).trigger("click");
|
||||
}
|
||||
|
||||
function generate_provision_templates_list(context, opts) {
|
||||
context.off();
|
||||
context.html(html(opts));
|
||||
setup_provision_templates_list(context, opts);
|
||||
}
|
||||
|
||||
function html(opts_arg){
|
||||
opts = $.extend({
|
||||
title: Locale.tr("Saved Templates"),
|
||||
refresh: true,
|
||||
create: true,
|
||||
active: true,
|
||||
filter: true
|
||||
},opts_arg)
|
||||
|
||||
_accordionId += 1;
|
||||
return TemplateTemplatesList({'accordionId': _accordionId, 'opts': opts});
|
||||
}
|
||||
|
||||
function update_provision_templates_datatable(datatable, timeout) {
|
||||
datatable.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
|
||||
setTimeout( function(){
|
||||
OpenNebula.Template.list({
|
||||
timeout: true,
|
||||
success: function (request, item_list){
|
||||
datatable.fnClearTable(true);
|
||||
if (item_list.length == 0) {
|
||||
datatable.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
Locale.tr("There are no templates available")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
datatable.fnAddData(item_list);
|
||||
}
|
||||
},
|
||||
error: Notifier.onError
|
||||
});
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
function setup_provision_templates_list(context, opts) {
|
||||
var provision_templates_datatable = $('.provision_templates_table', context).dataTable({
|
||||
"iDisplayLength": 8,
|
||||
"sDom" : '<"H">t<"F"lp>',
|
||||
"aLengthMenu": [[6, 12, 36, 72], [6, 12, 36, 72]],
|
||||
"aaSorting" : [[0, "desc"]],
|
||||
"aoColumnDefs": [
|
||||
{ "bVisible": false, "aTargets": ["all"]}
|
||||
],
|
||||
"aoColumns": [
|
||||
{ "mDataProp": "VMTEMPLATE.ID" },
|
||||
{ "mDataProp": "VMTEMPLATE.NAME" },
|
||||
{ "mDataProp": "VMTEMPLATE.TEMPLATE.SAVED_TEMPLATE_ID", "sDefaultContent" : "-" },
|
||||
{ "mDataProp": "VMTEMPLATE.UID" }
|
||||
],
|
||||
"fnPreDrawCallback": function (oSettings) {
|
||||
// create a thumbs container if it doesn't exist. put it in the dataTables_scrollbody div
|
||||
if (this.$('tr', {"filter": "applied"} ).length == 0) {
|
||||
this.html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-info-circle fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
Locale.tr("There are no saved templates available")+
|
||||
'<br>'+
|
||||
Locale.tr("Create a template by saving a running Virtual Machine")+
|
||||
'</span>'+
|
||||
'</div>');
|
||||
} else {
|
||||
$(".provision_templates_table", context).html('<ul class="provision_templates_ul large-block-grid-3 medium-block-grid-3 small-block-grid-1 text-center"></ul>');
|
||||
}
|
||||
return true;
|
||||
},
|
||||
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
||||
var data = aData.VMTEMPLATE;
|
||||
var actions_html = "";
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.chmod")) {
|
||||
if (data.UID == config['user_id']) {
|
||||
|
||||
if (data.PERMISSIONS.GROUP_U == "1") {
|
||||
actions_html += '<a class="provision_confirm_unshare_template_button left" data-tooltip title="'+ Locale.tr("Unshare")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-ban only-on-hover"/></a>';
|
||||
actions_html += '<span style="font-size:12px; color: #777">' + Locale.tr("SHARED") + '</span>';
|
||||
} else {
|
||||
actions_html += '<a class="provision_confirm_chmod_template_button left" data-tooltip title="'+ Locale.tr("Share")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-share-alt only-on-hover"/></a>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.delete")) {
|
||||
actions_html += '<a class="provision_confirm_delete_template_button" data-tooltip title="'+ Locale.tr("Delete")+'" style="color:#555" href="#"><i class="fa fa-fw fa-lg fa-trash-o right only-on-hover"/></a>';
|
||||
}
|
||||
|
||||
$(".provision_templates_ul", context).append('<li>'+
|
||||
'<ul class="provision-pricing-table" opennebula_id="'+data.ID+'" saved_to_image_id="'+data.TEMPLATE.SAVED_TO_IMAGE_ID+'" datatable_index="'+iDisplayIndexFull+'">'+
|
||||
'<li class="provision-title text-left" title="'+data.NAME+'">'+
|
||||
data.NAME +
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left" >'+
|
||||
'<i class="fa fa-fw fa-lg fa-laptop"/> '+
|
||||
'x'+data.TEMPLATE.CPU+' - '+
|
||||
((data.TEMPLATE.MEMORY > 1000) ?
|
||||
(Math.floor(data.TEMPLATE.MEMORY/1024)+'GB') :
|
||||
(data.TEMPLATE.MEMORY+'MB'))+
|
||||
' - '+
|
||||
get_provision_disk_image(data) +
|
||||
'</li>'+
|
||||
'<li class="provision-description text-left" style="padding-top:0px; padding-bottom: 5px">'+
|
||||
(data.TEMPLATE.DESCRIPTION || '')+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item" style="padding-top:10px">'+
|
||||
actions_html+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item-last text-left" >'+
|
||||
'<span class="">'+
|
||||
'<i class="fa fa-fw fa-lg fa-user"/> '+
|
||||
data.UNAME+
|
||||
'</span>'+
|
||||
'<span class="right">'+
|
||||
Humanize.prettyTimeAgo(data.REGTIME)+
|
||||
'</span>'+
|
||||
'</li>'+
|
||||
'</ul>'+
|
||||
'</li>');
|
||||
|
||||
return nRow;
|
||||
}
|
||||
});
|
||||
|
||||
provision_templates_datatable.fnFilter("^(?!\-$)", 2, true, false);
|
||||
|
||||
$('.provision_list_templates_search', context).keyup(function(){
|
||||
provision_templates_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
$('.provision_list_templates_search', context).change(function(){
|
||||
provision_templates_datatable.fnFilter( $(this).val() );
|
||||
})
|
||||
|
||||
context.on("click", ".provision_templates_list_refresh_button", function(){
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
$(".provision_confirm_delete_template_div", context).html("");
|
||||
update_provision_templates_datatable(provision_templates_datatable, 0);
|
||||
return false;
|
||||
});
|
||||
|
||||
context.on("click", ".provision_templates_list_search_button", function(){
|
||||
$(".provision_list_templates_search", context).fadeIn();
|
||||
});
|
||||
|
||||
$(".provision_list_templates_filter", context).on("change", ".resource_list_select", function(){
|
||||
if ($(this).val() != "-2"){
|
||||
provision_templates_datatable.fnFilter("^" + $(this).val() + "$", 3, true, false);
|
||||
} else {
|
||||
provision_templates_datatable.fnFilter("", 3);
|
||||
}
|
||||
})
|
||||
|
||||
ResourceSelect.insert(
|
||||
".provision_list_templates_filter",
|
||||
context,
|
||||
"User",
|
||||
(opts.filter_expression ? opts.filter_expression : "-2"),
|
||||
false,
|
||||
'<option value="-2">'+Locale.tr("ALL")+'</option>',
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
true);
|
||||
|
||||
context.on("click", ".provision_templates_list_filter_button", function(){
|
||||
$(".provision_list_templates_filter", context).fadeIn();
|
||||
return false;
|
||||
});
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.delete")) {
|
||||
context.on("click", ".provision_confirm_delete_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-9 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("Handle with care! This action will inmediately destroy the template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-3 columns">'+
|
||||
'<a href"#" class="provision_delete_template_button alert button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Delete")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_delete_template_button", function(){
|
||||
/* TODO SAVED_TO_IMAGE_ID does not exists anymore and now all the images of the template
|
||||
are cloned instead of only the main disk, therefore all the images should be deleted now.
|
||||
Probably this could be done in the core
|
||||
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Image.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id
|
||||
},
|
||||
success: function (){
|
||||
OpenNebula.Template.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
Notifier.onError(request, error_json, container);
|
||||
}
|
||||
})
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
if (error_json.error.http_status=="404") {
|
||||
OpenNebula.Template.del({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
},
|
||||
error: function (request,error_json, container) {
|
||||
Notifier.onError(request, error_json, container);
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Notifier.onError(request, error_json, container);
|
||||
}
|
||||
}
|
||||
})*/
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (Config.isTabActionEnabled("provision-tab", "Template.chmod")) {
|
||||
context.on("click", ".provision_confirm_chmod_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-8 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("The template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated will be shared and all the users will be able to instantiate new VMs using this template.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<a href"#" class="provision_chmod_template_button success button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Share template")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_chmod_template_button", function(){
|
||||
/* TODO SAVED_TO_IMAGE_ID does not exists anymore and now all the images of the template
|
||||
are cloned instead of only the main disk, therefore all the images should be chmod now.
|
||||
Probably this could be done in the core
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Template.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id,
|
||||
extra_param: {'group_u': 1}
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
|
||||
OpenNebula.Image.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id,
|
||||
extra_param: {'group_u': 1}
|
||||
},
|
||||
success: function (){
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
},
|
||||
error: Notifier.onError
|
||||
})*/
|
||||
});
|
||||
|
||||
context.on("click", ".provision_confirm_unshare_template_button", function(){
|
||||
var ul_context = $(this).parents(".provision-pricing-table");
|
||||
var template_id = ul_context.attr("opennebula_id");
|
||||
var image_id = ul_context.attr("saved_to_image_id");
|
||||
var template_name = $(".provision-title", ul_context).first().text();
|
||||
|
||||
$(".provision_confirm_delete_template_div", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-8 columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("The template")+
|
||||
' "' + template_name + '" ' +
|
||||
Locale.tr("and the image associated will be unshared and the users will not be able to instantiate new VMs using this template.") +
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'<div class="large-4 columns">'+
|
||||
'<a href"#" class="provision_unshare_template_button success button large-12 radius right" style="margin-right: 15px" image_id="'+image_id+'" template_id="'+template_id+'">'+Locale.tr("Unshare template")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close">×</a>'+
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_unshare_template_button", function(){
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
|
||||
var template_id = $(this).attr("template_id");
|
||||
var image_id = $(this).attr("image_id");
|
||||
|
||||
OpenNebula.Template.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : template_id,
|
||||
extra_param: {'group_u': 0}
|
||||
},
|
||||
success: function (){
|
||||
$(".provision_templates_list_refresh_button", context).trigger("click");
|
||||
|
||||
OpenNebula.Image.chmod({
|
||||
timeout: true,
|
||||
data : {
|
||||
id : image_id,
|
||||
extra_param: {'group_u': 0}
|
||||
},
|
||||
success: function (){
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
},
|
||||
error: Notifier.onError
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
OpenNebula.Action.clear_cache("VMTEMPLATE");
|
||||
update_provision_templates_datatable(provision_templates_datatable, 0);
|
||||
context.foundation();
|
||||
}
|
||||
|
||||
function get_provision_disk_image(data) {
|
||||
var disks = []
|
||||
if ($.isArray(data.TEMPLATE.DISK))
|
||||
disks = data.TEMPLATE.DISK
|
||||
else if (!$.isEmptyObject(data.TEMPLATE.DISK))
|
||||
disks = [data.TEMPLATE.DISK]
|
||||
|
||||
if (disks.length > 0 && disks[0].IMAGE) {
|
||||
return disks[0].IMAGE;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
});
|
@ -24,7 +24,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="provision_vdc_user_confirm_action large-10 large-centered columns"></div>
|
||||
<div class="provision_vdc_user_confirm_action large-12 columns"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
@ -42,7 +42,7 @@
|
||||
</div>
|
||||
<br>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph" id="acct_cpu_graph" style="height: 180px;"></div>
|
||||
<div class="large-12 columns centered graph" id="acct_cpu_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -52,7 +52,7 @@
|
||||
<span style="color: #777; font-size: 14px">{{tr "Memory GB hours"}}</span>
|
||||
</div>
|
||||
<div class="large-12 columns">
|
||||
<div class="large-12 columns centered graph" id="acct_mem_graph" style="height: 180px;"></div>
|
||||
<div class="large-12 columns centered graph" id="acct_mem_graph" style="height: 100px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -67,6 +67,10 @@
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="provision_vdc_info_container large-12 large-centered columns"></div>
|
||||
<div class="provision-user-resource-header large-12 columns text-center"></div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="provision_vdc_info_container large-12 columns"></div>
|
||||
</div>
|
||||
<br></div>
|
@ -1,4 +1,5 @@
|
||||
define(function(require) {
|
||||
require('foundation.alert');
|
||||
var OpenNebula = require('opennebula');
|
||||
var Locale = require('utils/locale');
|
||||
var Config = require('sunstone-config');
|
||||
@ -11,6 +12,8 @@ define(function(require) {
|
||||
|
||||
var ProvisionQuotaWidget = require('./quota-widget');
|
||||
var ProvisionVmsList = require('tabs/provision-tab/vms/list');
|
||||
var ProvisionTemplatesList = require('tabs/provision-tab/templates/list');
|
||||
var ProvisionFlowsList = require('tabs/provision-tab/flows/list');
|
||||
|
||||
var TemplateProvisionQuotaWidget = require('hbs!./quota-widget/html');
|
||||
var TemplateUsersList = require('hbs!./list');
|
||||
@ -121,120 +124,67 @@ define(function(require) {
|
||||
var memory = "";
|
||||
var cpu = "";
|
||||
|
||||
// Inject the VM user quota. This info is returned separately in the
|
||||
// pool info call, but the userElementArray expects it inside the USER,
|
||||
// as it is returned by the individual info call
|
||||
var q = provision_quotas_list[data.ID];
|
||||
|
||||
var quotas_html;
|
||||
QuotaWidgets.initEmptyQuotas(data);
|
||||
|
||||
if (q != undefined) {
|
||||
var quota = q.QUOTAS;
|
||||
|
||||
if ($.isEmptyObject(quota.VM_QUOTA)) {
|
||||
var limit = (data.ID != 0 ? QuotaLimits.QUOTA_LIMIT_DEFAULT : QuotaLimits.QUOTA_LIMIT_UNLIMITED);
|
||||
|
||||
quota.VM_QUOTA = {
|
||||
VM: {
|
||||
VMS : limit,
|
||||
VMS_USED : 0,
|
||||
CPU : limit,
|
||||
CPU_USED : 0,
|
||||
MEMORY : limit,
|
||||
MEMORY_USED : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$.isEmptyObject(quota.VM_QUOTA)) {
|
||||
var default_user_quotas = QuotaDefaults.getDefaultUserQuotas();
|
||||
if (!$.isEmptyObject(data.VM_QUOTA)) {
|
||||
var default_user_quotas = QuotaDefaults.getDefaultUserQuotas();
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
quota.VM_QUOTA.VM.VMS_USED,
|
||||
quota.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.VMS_USED,
|
||||
data.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
quotas_html = "";
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
quotas_html = "";
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
quota.VM_QUOTA.VM.CPU_USED,
|
||||
quota.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.CPU_USED,
|
||||
data.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(
|
||||
quota.VM_QUOTA.VM.MEMORY_USED,
|
||||
quota.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
quotas = QuotaWidgets.quotaMBInfo(
|
||||
data.VM_QUOTA.VM.MEMORY_USED,
|
||||
data.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
} else {
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
} else {
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
|
||||
quotas_html = "";
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
quotas_html = "";
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(0, 0, null, true);
|
||||
quotas = QuotaWidgets.quotaMBInfo(0, 0, null, true);
|
||||
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>';
|
||||
}
|
||||
quotas_html += '<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>';
|
||||
}
|
||||
|
||||
$(".provision_users_ul", context).append('<li>' +
|
||||
@ -267,7 +217,6 @@ define(function(require) {
|
||||
$(document).foundation();
|
||||
}
|
||||
|
||||
|
||||
function setup_provision_user_info(context) {
|
||||
function update_provision_vdc_user_info(user_id, context) {
|
||||
$(".provision_info_vdc_user_name", context).text("");
|
||||
@ -280,11 +229,11 @@ define(function(require) {
|
||||
id: user_id
|
||||
},
|
||||
error: Notifier.onError,
|
||||
success: function(request, response){
|
||||
success: function(request, response) {
|
||||
var data = response.USER
|
||||
|
||||
$(".provision_vdc_user_confirm_action",context).html("");
|
||||
$(".provision_info_vdc_user_acct",context).html("");
|
||||
$(".provision_vdc_user_confirm_action", context).html("");
|
||||
$(".provision_info_vdc_user_acct", context).html("");
|
||||
|
||||
$(".provision_info_vdc_user", context).attr("opennebula_id", data.ID);
|
||||
$(".provision_info_vdc_user", context).attr("uname", data.NAME);
|
||||
@ -295,116 +244,109 @@ define(function(require) {
|
||||
|
||||
QuotaWidgets.initEmptyQuotas(data);
|
||||
|
||||
if (!$.isEmptyObject(data.VM_QUOTA)){
|
||||
var default_user_quotas = QuotaDefaults.default_quotas(data.DEFAULT_USER_QUOTAS);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.VMS_USED,
|
||||
data.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
if (!$.isEmptyObject(data.VM_QUOTA)) {
|
||||
var default_user_quotas = QuotaDefaults.default_quotas(data.DEFAULT_USER_QUOTAS);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.VMS_USED,
|
||||
data.VM_QUOTA.VM.VMS,
|
||||
default_user_quotas.VM_QUOTA.VM.VMS,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("Running VMs")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
'</li>');
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.CPU_USED,
|
||||
data.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
quotas = QuotaWidgets.quotaFloatInfo(
|
||||
data.VM_QUOTA.VM.CPU_USED,
|
||||
data.VM_QUOTA.VM.CPU,
|
||||
default_user_quotas.VM_QUOTA.VM.CPU,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("CPU")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
'</li>');
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(
|
||||
data.VM_QUOTA.VM.MEMORY_USED,
|
||||
data.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
quotas = QuotaWidgets.quotaMBInfo(
|
||||
data.VM_QUOTA.VM.MEMORY_USED,
|
||||
data.VM_QUOTA.VM.MEMORY,
|
||||
default_user_quotas.VM_QUOTA.VM.MEMORY,
|
||||
true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("Memory")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
'</li>');
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
} else {
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("Running VMs")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-th"></i> '+ Locale.tr("VMs") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaFloatInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("CPU")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-tachometer"></i> '+ Locale.tr("CPU") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
|
||||
quotas = QuotaWidgets.quotaMBInfo(0, 0, null, true);
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">'+
|
||||
Locale.tr("Memory")+
|
||||
'<span class="right">'+quotas.str+"</span>"+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'<div class="progress small radius" style="background: #f7f7f7">'+
|
||||
' <span class="meter" style="width: '+quotas.percentage+'%;"></span>'+
|
||||
'</div>'+
|
||||
$(".provision-pricing-table_user_info", context).append('<li class="provision-bullet-item text-left">' +
|
||||
'<i class="fa fa-fw fa-align-left"></i> '+ Locale.tr("Memory") +
|
||||
'<span class="right">' + quotas.str + "</span>" +
|
||||
'</li>' +
|
||||
'<li class="provision-bullet-item text-left">' +
|
||||
'<div class="progress small radius" style="background: #f7f7f7">' +
|
||||
' <span class="meter" style="width: ' + quotas.percentage + '%;"></span>' +
|
||||
'</div>' +
|
||||
'</li>');
|
||||
}
|
||||
|
||||
$(".provision-pricing-table_user_info", context).append(
|
||||
'<li class="text-left provision-bullet-item">'+
|
||||
'<hr style="margin: 0px">'+
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item ">'+
|
||||
'<span class="provision_vdc_user_info_show_vms button medium radius" data-tooltip title="'+Locale.tr("User Virtual Machines")+'" style="margin-right: 10px">'+
|
||||
'<i class="fa fa-th fa-lg"></i>'+
|
||||
'</span>'+
|
||||
'<span class="provision_vdc_user_info_show_templates button medium radius" data-tooltip title="'+Locale.tr("User Saved Templates")+'" style="margin-right: 10px">'+
|
||||
'<i class="fa fa-save fa-lg"></i>'+
|
||||
'</span>'+
|
||||
'<span class="provision_vdc_user_info_show_flows button medium radius" data-tooltip title="'+Locale.tr("User Services")+'" style="margin-right: 10px">'+
|
||||
'<i class="fa fa-cubes fa-lg"></i>'+
|
||||
'</span>'+
|
||||
'<span class="provision_vdc_user_info_show_acct button medium radius" data-tooltip title="'+Locale.tr("User Accounting")+'" style="margin-right: 10px">'+
|
||||
'<i class="fa fa-bar-chart-o fa-lg"></i>'+
|
||||
'</span>'+
|
||||
(Config.isFeatureEnabled("showback") ? '<span class="provision_vdc_user_info_show_showback button medium radius" data-tooltip title="'+Locale.tr("User Showback")+'" style="margin-right: 10px">'+
|
||||
'<i class="fa fa-money fa-lg"></i>'+
|
||||
'</span>' : '') +
|
||||
'</li>'+
|
||||
'<li class="provision-bullet-item text-left">'+
|
||||
'</li>')
|
||||
$(".provision-user-resource-header", context).html(
|
||||
'<span class="provision_vdc_user_info_show_vms button medium radius" data-tooltip title="' + Locale.tr("User Virtual Machines") + '" style="margin-right: 10px">' +
|
||||
'<i class="fa fa-th fa-lg"></i>' +
|
||||
'</span>' +
|
||||
'<span class="provision_vdc_user_info_show_templates button medium radius" data-tooltip title="' + Locale.tr("User Saved Templates") + '" style="margin-right: 10px">' +
|
||||
'<i class="fa fa-save fa-lg"></i>' +
|
||||
'</span>' +
|
||||
'<span class="provision_vdc_user_info_show_flows button medium radius" data-tooltip title="' + Locale.tr("User Services") + '" style="margin-right: 10px">' +
|
||||
'<i class="fa fa-cubes fa-lg"></i>' +
|
||||
'</span>' +
|
||||
'<span class="provision_vdc_user_info_show_acct button medium radius" data-tooltip title="' + Locale.tr("User Accounting") + '" style="margin-right: 10px">' +
|
||||
'<i class="fa fa-bar-chart-o fa-lg"></i>' +
|
||||
'</span>' +
|
||||
(Config.isFeatureEnabled("showback") ? '<span class="provision_vdc_user_info_show_showback button medium radius" data-tooltip title="' + Locale.tr("User Showback") + '" style="margin-right: 10px">' +
|
||||
'<i class="fa fa-money fa-lg"></i>' +
|
||||
'</span>' : ''))
|
||||
|
||||
var start_time = Math.floor(new Date().getTime() / 1000);
|
||||
// ms to s
|
||||
@ -424,11 +366,11 @@ define(function(require) {
|
||||
var no_table = true;
|
||||
|
||||
OpenNebula.VM.accounting({
|
||||
success: function(req, response){
|
||||
Accounting.fillAccounting($(".dashboard_vm_accounting", context), req, response, no_table);
|
||||
},
|
||||
error: Notifier.onError,
|
||||
data: options
|
||||
success: function(req, response) {
|
||||
Accounting.fillAccounting($(".dashboard_vm_accounting", context), req, response, no_table);
|
||||
},
|
||||
error: Notifier.onError,
|
||||
data: options
|
||||
});
|
||||
|
||||
$(".provision_info_vdc_user", context).show();
|
||||
@ -443,7 +385,7 @@ define(function(require) {
|
||||
// Info User
|
||||
//
|
||||
|
||||
$(".provision_list_users", context).on("click", ".provision_info_user_button", function(){
|
||||
$(".provision_list_users", context).on("click", ".provision_info_user_button", function() {
|
||||
$("a.provision_show_user_accordion", context).trigger("click");
|
||||
// TODO loading
|
||||
|
||||
@ -451,16 +393,16 @@ define(function(require) {
|
||||
update_provision_vdc_user_info(user_id, context);
|
||||
})
|
||||
|
||||
context.on("click", ".provision_vdc_user_info_show_vms", function(){
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
'</span>'+
|
||||
context.on("click", ".provision_vdc_user_info_show_vms", function() {
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">' +
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">' +
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>' +
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>' +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<span style="font-size: 18px; color: #999">' +
|
||||
'</span>' +
|
||||
'</div>');
|
||||
|
||||
ProvisionVmsList.generate(
|
||||
@ -475,19 +417,19 @@ define(function(require) {
|
||||
});
|
||||
})
|
||||
|
||||
context.on("click", ".provision_vdc_user_info_show_templates", function(){
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
'</span>'+
|
||||
context.on("click", ".provision_vdc_user_info_show_templates", function() {
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">' +
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">' +
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>' +
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>' +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<span style="font-size: 18px; color: #999">' +
|
||||
'</span>' +
|
||||
'</div>');
|
||||
|
||||
generate_provision_templates_list(
|
||||
ProvisionTemplatesList.generate(
|
||||
$(".provision_vdc_info_container", context),
|
||||
{
|
||||
title: $(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Templates"),
|
||||
@ -499,19 +441,19 @@ define(function(require) {
|
||||
});
|
||||
})
|
||||
|
||||
context.on("click", ".provision_vdc_user_info_show_flows", function(){
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">'+
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">'+
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>'+
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
|
||||
'</span>'+
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<span style="font-size: 18px; color: #999">'+
|
||||
'</span>'+
|
||||
context.on("click", ".provision_vdc_user_info_show_flows", function() {
|
||||
$(".provision_vdc_info_container", context).html('<div class="text-center">' +
|
||||
'<span class="fa-stack fa-5x" style="color: #dfdfdf">' +
|
||||
'<i class="fa fa-cloud fa-stack-2x"></i>' +
|
||||
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>' +
|
||||
'</span>' +
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<span style="font-size: 18px; color: #999">' +
|
||||
'</span>' +
|
||||
'</div>');
|
||||
|
||||
generate_provision_flows_list(
|
||||
ProvisionFlowsList.generate(
|
||||
$(".provision_vdc_info_container", context),
|
||||
{
|
||||
title: $(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Services"),
|
||||
@ -523,96 +465,95 @@ define(function(require) {
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
context.on("click", ".provision_vdc_user_info_show_acct", function(){
|
||||
context.on("click", ".provision_vdc_user_info_show_acct", function() {
|
||||
$(".provision_vdc_info_container", context).html("");
|
||||
|
||||
$(".provision_vdc_info_container", context).html(Accounting.html());
|
||||
Accounting.setup(
|
||||
$(".provision_vdc_info_container", context),
|
||||
{ fixed_user: $(".provision_info_vdc_user", context).attr("opennebula_id"),
|
||||
init_group_by: "vm" });
|
||||
{fixed_user: $(".provision_info_vdc_user", context).attr("opennebula_id"),
|
||||
init_group_by: "vm"});
|
||||
|
||||
$(".provision_vdc_info_container", context).prepend(
|
||||
'<h2 class="subheader">'+
|
||||
$(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Accounting")+
|
||||
'<h2 class="subheader">' +
|
||||
$(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Accounting") +
|
||||
'</h2>')
|
||||
})
|
||||
|
||||
if (Config.isFeatureEnabled("showback")) {
|
||||
context.on("click", ".provision_vdc_user_info_show_showback", function(){
|
||||
context.on("click", ".provision_vdc_user_info_show_showback", function() {
|
||||
$(".provision_vdc_info_container", context).html("");
|
||||
|
||||
$(".provision_vdc_info_container", context).html(Showback.html());
|
||||
Showback.setup(
|
||||
$(".provision_vdc_info_container", context),
|
||||
{ fixed_user: $(".provision_info_vdc_user", context).attr("opennebula_id"),
|
||||
fixed_group: "" });
|
||||
{fixed_user: $(".provision_info_vdc_user", context).attr("opennebula_id"),
|
||||
fixed_group: ""});
|
||||
|
||||
$(".provision_vdc_info_container", context).prepend(
|
||||
'<h2 class="subheader">'+
|
||||
$(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Showback")+
|
||||
'<h2 class="subheader">' +
|
||||
$(".provision_info_vdc_user", context).attr("uname") + ' ' + Locale.tr("Showback") +
|
||||
'</h2>')
|
||||
})
|
||||
};
|
||||
|
||||
context.on("click", ".provision_vdc_user_delete_confirm_button", function(){
|
||||
context.on("click", ".provision_vdc_user_delete_confirm_button", function() {
|
||||
$(".provision_vdc_user_confirm_action", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<span style="font-size: 14px; line-height: 20px">'+
|
||||
Locale.tr("Be careful, this action will inmediately remove the User from OpenNebula")+
|
||||
'</span>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<a href"#" class="provision_delete_button alert button large-12 large radius">'+Locale.tr("Delete User")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'<div data-alert class="alert-box secondary radius">' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<span style="font-size: 14px; line-height: 20px">' +
|
||||
Locale.tr("Be careful, this action will inmediately remove the User from OpenNebula") +
|
||||
'</span>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<br>' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<a href"#" class="provision_delete_button alert button large-12 large radius">' + Locale.tr("Delete User") + '</a>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<a href="#" class="close" style="top: 20px">×</a>' +
|
||||
'</div>');
|
||||
});
|
||||
|
||||
context.on("click", ".provision_vdc_user_password_confirm_button", function(){
|
||||
context.on("click", ".provision_vdc_user_password_confirm_button", function() {
|
||||
$(".provision_vdc_user_confirm_action", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<input type="password" class="provision_vdc_user_new_password provision-input" placeholder="'+Locale.tr("New Password")+'" style="height: 40px !important; font-size: 16px; padding: 0.5rem !important;"/>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<input type="password" class="provision_vdc_user_new_confirm_password provision-input" placeholder="'+Locale.tr("Confirm Password")+'" style="height: 40px !important; font-size: 16px; padding: 0.5rem !important;"/>'+
|
||||
'<br>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<button href"#" type="submit" class="provision_vdc_user_change_password_button button success large radius large-12 small-12">'+Locale.tr("Update Password")+'</button>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'<div data-alert class="alert-box secondary radius">' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<input type="password" class="provision_vdc_user_new_password provision-input" placeholder="' + Locale.tr("New Password") + '" style="height: 40px !important; font-size: 16px; padding: 0.5rem !important;"/>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<input type="password" class="provision_vdc_user_new_confirm_password provision-input" placeholder="' + Locale.tr("Confirm Password") + '" style="height: 40px !important; font-size: 16px; padding: 0.5rem !important;"/>' +
|
||||
'<br>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<button href"#" type="submit" class="provision_vdc_user_change_password_button button success large radius large-12 small-12">' + Locale.tr("Update Password") + '</button>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<a href="#" class="close" style="top: 20px">×</a>' +
|
||||
'</div>');
|
||||
|
||||
context.on("click", ".provision_vdc_user_change_password_button", function(){
|
||||
context.on("click", ".provision_vdc_user_change_password_button", function() {
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var user_id = $(".provision_info_vdc_user", context).attr("opennebula_id");
|
||||
var pw = $('.provision_vdc_user_new_password', context).val();
|
||||
var confirm_password = $('.provision_vdc_user_new_confirm_password', context).val();
|
||||
|
||||
if (!pw.length){
|
||||
Notifier.notifyError(Locale.tr("Fill in a new password"));
|
||||
return false;
|
||||
if (!pw.length) {
|
||||
Notifier.notifyError(Locale.tr("Fill in a new password"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pw !== confirm_password){
|
||||
Notifier.notifyError(Locale.tr("Passwords do not match"));
|
||||
return false;
|
||||
if (pw !== confirm_password) {
|
||||
Notifier.notifyError(Locale.tr("Passwords do not match"));
|
||||
return false;
|
||||
}
|
||||
|
||||
OpenNebula.User.passwd({
|
||||
@ -620,11 +561,11 @@ define(function(require) {
|
||||
id: user_id,
|
||||
extra_param: pw
|
||||
},
|
||||
success: function(request, response){
|
||||
success: function(request, response) {
|
||||
update_provision_vdc_user_info(user_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
error: function(request, response) {
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
@ -633,48 +574,46 @@ define(function(require) {
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
context.on("click", ".provision_vdc_user_quota_confirm_button", function(){
|
||||
context.on("click", ".provision_vdc_user_quota_confirm_button", function() {
|
||||
$(".provision_vdc_user_confirm_action", context).html(
|
||||
'<div data-alert class="alert-box secondary radius">'+
|
||||
'<div data-alert class="alert-box secondary radius">' +
|
||||
TemplateProvisionQuotaWidget() +
|
||||
'<br>'+
|
||||
'<br>'+
|
||||
'<div class="row">'+
|
||||
'<div class="large-10 large-centered columns">'+
|
||||
'<a href"#" class="provision_update_quota_button success large button large-12 radius" style="margin-right: 15px">'+Locale.tr("Update User Quota")+'</a>'+
|
||||
'</div>'+
|
||||
'</div>'+
|
||||
'<a href="#" class="close" style="top: 20px">×</a>'+
|
||||
'<br>' +
|
||||
'<br>' +
|
||||
'<div class="row">' +
|
||||
'<div class="large-10 large-centered columns">' +
|
||||
'<a href"#" class="provision_update_quota_button success large button large-12 radius" style="margin-right: 15px">' + Locale.tr("Update User Quota") + '</a>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<a href="#" class="close" style="top: 20px">×</a>' +
|
||||
'</div>');
|
||||
|
||||
ProvisionQuotaWidget.setup(context);
|
||||
ProvisionQuotaWidget.setup(context);
|
||||
|
||||
$(document).foundation();
|
||||
$(document).foundation();
|
||||
|
||||
var quotas_str = $(".provision_info_vdc_user", context).attr("quotas");
|
||||
if (quotas_str) {
|
||||
var quotas = JSON.parse(quotas_str);
|
||||
var quotas_str = $(".provision_info_vdc_user", context).attr("quotas");
|
||||
if (quotas_str) {
|
||||
var quotas = JSON.parse(quotas_str);
|
||||
|
||||
var vms_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
var cpu_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
var mem_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
var vms_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
var cpu_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
var mem_limit = QuotaLimits.QUOTA_LIMIT_DEFAULT;
|
||||
|
||||
if ( quotas.VM != undefined ){
|
||||
vms_limit = quotas.VM.VMS;
|
||||
cpu_limit = quotas.VM.CPU;
|
||||
mem_limit = quotas.VM.MEMORY;
|
||||
if (quotas.VM != undefined) {
|
||||
vms_limit = quotas.VM.VMS;
|
||||
cpu_limit = quotas.VM.CPU;
|
||||
mem_limit = quotas.VM.MEMORY;
|
||||
|
||||
if(mem_limit != QuotaLimits.QUOTA_LIMIT_UNLIMITED &&
|
||||
mem_limit != QuotaLimits.QUOTA_LIMIT_DEFAULT){
|
||||
if (mem_limit != QuotaLimits.QUOTA_LIMIT_UNLIMITED &&
|
||||
mem_limit != QuotaLimits.QUOTA_LIMIT_DEFAULT) {
|
||||
|
||||
mem_limit = quotas.VM.MEMORY/1024;
|
||||
}
|
||||
mem_limit = quotas.VM.MEMORY / 1024;
|
||||
}
|
||||
}
|
||||
|
||||
var fill_limits = function(limit, select, input){
|
||||
switch(limit){
|
||||
var fill_limits = function(limit, select, input) {
|
||||
switch (limit){
|
||||
case QuotaLimits.QUOTA_LIMIT_DEFAULT:
|
||||
select.val('default').change();
|
||||
input.val('').change();
|
||||
@ -691,24 +630,24 @@ define(function(require) {
|
||||
}
|
||||
}
|
||||
|
||||
fill_limits(
|
||||
vms_limit,
|
||||
$("div.provision_rvms_quota select.provision_quota_select", context),
|
||||
$(".provision_rvms_quota_input", context) );
|
||||
fill_limits(
|
||||
vms_limit,
|
||||
$("div.provision_rvms_quota select.provision_quota_select", context),
|
||||
$(".provision_rvms_quota_input", context));
|
||||
|
||||
fill_limits(
|
||||
cpu_limit,
|
||||
$("div.provision_cpu_quota select.provision_quota_select", context),
|
||||
$(".provision_cpu_quota_input", context) );
|
||||
fill_limits(
|
||||
cpu_limit,
|
||||
$("div.provision_cpu_quota select.provision_quota_select", context),
|
||||
$(".provision_cpu_quota_input", context));
|
||||
|
||||
fill_limits(
|
||||
mem_limit,
|
||||
$("div.provision_memory_quota select.provision_quota_select", context),
|
||||
$(".provision_memory_quota_tmp_input", context) );
|
||||
}
|
||||
fill_limits(
|
||||
mem_limit,
|
||||
$("div.provision_memory_quota select.provision_quota_select", context),
|
||||
$(".provision_memory_quota_tmp_input", context));
|
||||
}
|
||||
});
|
||||
|
||||
context.on("click", ".provision_delete_button", function(){
|
||||
context.on("click", ".provision_delete_button", function() {
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var user_id = $(".provision_info_vdc_user", context).attr("opennebula_id");
|
||||
@ -716,19 +655,19 @@ define(function(require) {
|
||||
data : {
|
||||
id: user_id
|
||||
},
|
||||
success: function(request, response){
|
||||
success: function(request, response) {
|
||||
$(".provision_back", context).click();
|
||||
$(".provision_users_list_refresh_button", context).click();
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
error: function(request, response) {
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
context.on("click", ".provision_update_quota_button", function(){
|
||||
context.on("click", ".provision_update_quota_button", function() {
|
||||
var button = $(this);
|
||||
button.attr("disabled", "disabled");
|
||||
var user_id = $(".provision_info_vdc_user", context).attr("opennebula_id");
|
||||
@ -740,18 +679,18 @@ define(function(require) {
|
||||
id: user_id,
|
||||
extra_param: quota_json
|
||||
},
|
||||
success: function(request, response){
|
||||
success: function(request, response) {
|
||||
update_provision_vdc_user_info(user_id, context);
|
||||
button.removeAttr("disabled");
|
||||
},
|
||||
error: function(request, response){
|
||||
error: function(request, response) {
|
||||
Notifier.onError(request, response);
|
||||
button.removeAttr("disabled");
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
context.on("click", ".provision_refresh_info", function(){
|
||||
context.on("click", ".provision_refresh_info", function() {
|
||||
var user_id = $(".provision_info_vdc_user", context).attr("opennebula_id");
|
||||
update_provision_vdc_user_info(user_id, context);
|
||||
return false;
|
||||
|
@ -1,4 +1,5 @@
|
||||
define(function(require) {
|
||||
require('foundation.slider');
|
||||
var QuotaLimits = require('utils/quotas/quota-limits');
|
||||
|
||||
return {
|
||||
@ -7,12 +8,13 @@ define(function(require) {
|
||||
'retrieve': retrieve_provision_quota_widget
|
||||
}
|
||||
|
||||
function setup_provision_quota_widget(context){
|
||||
// Mode selector, for the 3 sliders
|
||||
$("select.provision_quota_select", context).on('change', function(){
|
||||
function setup_provision_quota_widget(context) {
|
||||
context.foundation('reflow', 'slider');
|
||||
// Mode selector, for the 3 sliders
|
||||
$("select.provision_quota_select", context).on('change', function() {
|
||||
var row = $(this).closest(".row");
|
||||
|
||||
switch($(this).val()) {
|
||||
switch ($(this).val()) {
|
||||
case "edit":
|
||||
$("div.provision_quota_edit", row).show();
|
||||
$("div.provision_quota_default", row).hide();
|
||||
@ -40,58 +42,58 @@ define(function(require) {
|
||||
return false;
|
||||
});
|
||||
|
||||
var provision_rvms_quota_input = $(".provision_rvms_quota_input", context);
|
||||
var provision_rvms_quota_input = $(".provision_rvms_quota_input", context);
|
||||
|
||||
$( ".provision_rvms_quota_slider", context).on('change', function(){
|
||||
$(".provision_rvms_quota_slider", context).on('change', function() {
|
||||
provision_rvms_quota_input.val($(this).attr('data-slider'))
|
||||
});
|
||||
|
||||
provision_rvms_quota_input.change(function() {
|
||||
$( ".provision_rvms_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
provision_rvms_quota_input.change(function() {
|
||||
$(".provision_rvms_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
|
||||
var provision_cpu_quota_input = $(".provision_cpu_quota_input", context);
|
||||
var provision_cpu_quota_input = $(".provision_cpu_quota_input", context);
|
||||
|
||||
$( ".provision_cpu_quota_slider", context).on('change', function(){
|
||||
$(".provision_cpu_quota_slider", context).on('change', function() {
|
||||
provision_cpu_quota_input.val($(this).attr('data-slider'))
|
||||
});
|
||||
|
||||
provision_cpu_quota_input.change(function() {
|
||||
$( ".provision_cpu_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
provision_cpu_quota_input.change(function() {
|
||||
$(".provision_cpu_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
|
||||
var provision_memory_quota_input = $(".provision_memory_quota_input", context);
|
||||
var provision_memory_quota_tmp_input = $(".provision_memory_quota_tmp_input", context);
|
||||
var provision_memory_quota_input = $(".provision_memory_quota_input", context);
|
||||
var provision_memory_quota_tmp_input = $(".provision_memory_quota_tmp_input", context);
|
||||
|
||||
var update_final_memory_input = function() {
|
||||
var update_final_memory_input = function() {
|
||||
var value = provision_memory_quota_tmp_input.val();
|
||||
if (value > 0) {
|
||||
provision_memory_quota_input.val( Math.floor(value * 1024) );
|
||||
provision_memory_quota_input.val(Math.floor(value * 1024));
|
||||
} else {
|
||||
provision_memory_quota_input.val(value);
|
||||
provision_memory_quota_input.val(value);
|
||||
}
|
||||
}
|
||||
|
||||
$( ".provision_memory_quota_slider", context).on('change', function(){
|
||||
$(".provision_memory_quota_slider", context).on('change', function() {
|
||||
provision_memory_quota_tmp_input.val($(this).attr('data-slider'));
|
||||
update_final_memory_input();
|
||||
});
|
||||
|
||||
provision_memory_quota_tmp_input.change(function() {
|
||||
update_final_memory_input();
|
||||
$( ".provision_memory_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
provision_memory_quota_tmp_input.change(function() {
|
||||
update_final_memory_input();
|
||||
$(".provision_memory_quota_slider", context).foundation(
|
||||
'slider', 'set_value', this.value);
|
||||
});
|
||||
|
||||
$(".provision_rvms_quota_input", context).val('').change();
|
||||
$(".provision_memory_quota_input", context).val('').change();
|
||||
$(".provision_memory_quota_tmp_input", context).val('').change();
|
||||
$(".provision_cpu_quota_input", context).val('').change();
|
||||
$(".provision_rvms_quota_input", context).val('').change();
|
||||
$(".provision_memory_quota_input", context).val('').change();
|
||||
$(".provision_memory_quota_tmp_input", context).val('').change();
|
||||
$(".provision_cpu_quota_input", context).val('').change();
|
||||
}
|
||||
|
||||
function reset_provision_quota_widget(context){
|
||||
function reset_provision_quota_widget(context) {
|
||||
$("select.provision_quota_select", context).val('edit').change();
|
||||
|
||||
$(".provision_rvms_quota_input", context).val('').change();
|
||||
@ -100,9 +102,9 @@ define(function(require) {
|
||||
$(".provision_cpu_quota_input", context).val('').change();
|
||||
}
|
||||
|
||||
function retrieve_provision_quota_widget(context){
|
||||
var retrieve_quota = function(select, input){
|
||||
switch(select.val()) {
|
||||
function retrieve_provision_quota_widget(context) {
|
||||
var retrieve_quota = function(select, input) {
|
||||
switch (select.val()) {
|
||||
case "edit":
|
||||
return input.val();
|
||||
case "default":
|
||||
|
@ -1,4 +1,5 @@
|
||||
define(function(require) {
|
||||
require('foundation.alert');
|
||||
var OpenNebula = require('opennebula');
|
||||
var Locale = require('utils/locale');
|
||||
var Config = require('sunstone-config');
|
||||
|
@ -262,13 +262,19 @@ define(function(require) {
|
||||
mode: "time",
|
||||
timeformat: "%y/%m/%d",
|
||||
color: "#efefef",
|
||||
size: 8,
|
||||
font: {
|
||||
color: "#999",
|
||||
size: 10
|
||||
},
|
||||
ticks: 4,
|
||||
minTickSize: [1, "day"]
|
||||
},
|
||||
yaxis : { min: 0,
|
||||
color: "#efefef",
|
||||
size: 8
|
||||
font: {
|
||||
color: "#999",
|
||||
size: 10
|
||||
}
|
||||
},
|
||||
series: {
|
||||
bars: {
|
||||
|
File diff suppressed because one or more lines are too long
@ -609,11 +609,11 @@ fieldset {
|
||||
}
|
||||
}
|
||||
.provision-header {
|
||||
font-size: rem-calc(16px);
|
||||
font-size: rem-calc(14px);
|
||||
border-bottom: 1px solid #efefef;
|
||||
|
||||
li {
|
||||
padding: 0px 10px 5px 0px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
li.active {
|
||||
@ -875,7 +875,8 @@ div.dataTables_scrollFoot table {
|
||||
}
|
||||
|
||||
.provision-pricing-table_vm_info,
|
||||
.provision-pricing-table_flow_info {
|
||||
.provision-pricing-table_flow_info,
|
||||
.provision-pricing-table_user_info {
|
||||
li {
|
||||
padding: 5px 0px !important;
|
||||
font-size: rem-calc(14px) !important;
|
||||
@ -1108,7 +1109,7 @@ hr {
|
||||
}
|
||||
|
||||
select {
|
||||
height: 39px !important;
|
||||
height: 33px !important;
|
||||
margin: 0px 5px 0px 0px !important;
|
||||
float: right !important;
|
||||
width: auto !important;
|
||||
|
Loading…
x
Reference in New Issue
Block a user