1
0
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:
Carlos Martín 2015-06-22 13:47:34 +02:00
commit e1a6cb4f94
12 changed files with 795 additions and 799 deletions

View File

@ -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']
},

View File

@ -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"/>&emsp;'+
'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"/>&emsp;'+
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">&times;</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">&times;</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">&times;</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"/>&emsp;'+

View File

@ -1,4 +1,5 @@
define(function(require) {
require('foundation.alert');
var OpenNebula = require('opennebula');
var Locale = require('utils/locale');
var Notifier = require('utils/notifier');

View File

@ -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">

View 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">&times;</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">&times;</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">&times;</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 '';
}
}
});

View File

@ -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>

View File

@ -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">&times;</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">&times;</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">&times;</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">&times;</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">&times;</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">&times;</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;

View File

@ -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":

View File

@ -1,4 +1,5 @@
define(function(require) {
require('foundation.alert');
var OpenNebula = require('opennebula');
var Locale = require('utils/locale');
var Config = require('sunstone-config');

View File

@ -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

View File

@ -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;