mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	- l10n for the SSH Key Pairs behavior - l10n for Autoscaling / LB sections - l10n for Reset password - l10n on some strings for the installation Wizard - l10n on some strings in VPN/VPC section - l10n on Service offerings sections - improve some FR translations
		
			
				
	
	
		
			422 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| 
 | |
| (function($, cloudStack) {
 | |
|     cloudStack.uiCustom.autoscaler = function(args) {
 | |
|         // Place outer args here as local variables
 | |
|         // i.e, -- var dataProvider = args.dataProvider
 | |
|         var forms = $.extend(true, {}, args.forms);
 | |
|         var topfields = forms.topFields;
 | |
|         var bottomfields = forms.bottomFields;
 | |
|         var scaleuppolicy = forms.scaleUpPolicy;
 | |
|         var scaledownpolicy = forms.scaleDownPolicy;
 | |
|         var dataProvider = cloudStack.autoscaler.dataProvider;
 | |
|         var actions = cloudStack.autoscaler.autoscaleActions;
 | |
|         var actionFilter = cloudStack.autoscaler.actionFilter;
 | |
| 
 | |
|         return function(args) {
 | |
|             var context = args.data ?
 | |
|                 $.extend(true, {}, args.context, {
 | |
|                     lbRules: [args.data]
 | |
|                 }) : args.context;
 | |
|             var formData = args.formData;
 | |
|             var $autoscalerDialog = $('<div>').addClass('autoscaler');
 | |
|             var $topFields = $('<div>').addClass('field-group top-fields');
 | |
|             var $bottomFields = $('<div>').addClass('field-group bottom-fields');
 | |
|             var $scaleUpPolicy = $('<div>').addClass('scale-up-policy');
 | |
|             var $slideScaleUp = $('<div></div>').addClass('expand');
 | |
|             var $hideScaleUp = $('<div></div>').addClass('hide');
 | |
|             var $scaleUpLabel = $('<div>Show</div>').addClass('slide-label');
 | |
|             var $scaleUpHideLabel = $('<div>Hide</div>').addClass('slide-label');
 | |
|             var $scaleDownHideLabel = $('<div>Hide</div>').addClass('slide-label');
 | |
|             var $scaleDownLabel = $('<div>Show</div>').addClass('slide-label');
 | |
|             var $slideScaleDown = $('<div></div>').addClass('expand');
 | |
|             var $hideScaleDown = $('<div></div>').addClass('hide');
 | |
|             var $scaleUpDivider = $('<hr></hr>').addClass('policy-divider');
 | |
|             var $scaleDownDivider = $('<hr></hr>').addClass('policy-divider');
 | |
|             var $bottomFieldDivider = $('<hr></hr>').addClass('policy-divider');
 | |
|             var $scaleDownPolicy = $('<div>').addClass('scale-down-policy');
 | |
|             var $scaleUpPolicyTitle = $('<div>').addClass('scale-up-policy-title')
 | |
|                 .html("Scale Up Policy");
 | |
|             var $scaleDownPolicyTitle = $('<div>').addClass('scale-down-policy-title')
 | |
|                 .html("Scale Down Policy");
 | |
|             var topFieldForm, $topFieldForm,
 | |
|                 bottomFieldForm, $bottomFieldForm,
 | |
|                 scaleUpPolicyTitleForm, $scaleUpPolicyTitleForm,
 | |
|                 scaleDownPolicyTitleForm, $scaleDownPolicyTitleForm,
 | |
|                 scaleUpPolicyForm, scaleDownPolicyForm;
 | |
| 
 | |
|             var renderActions = function(args) {
 | |
|                 var targetActionFilter = args.actionFilter ? args.actionFilter : actionFilter;
 | |
|                 var data = args.data;
 | |
|                 var context = args.context;
 | |
|                 var $actions = $('<div>').addClass('detail-group');
 | |
|                 var $actionsTable = $('<table>').append('<tr>');
 | |
|                 var $detailActions = $('<td>').addClass('detail-actions');
 | |
|                 var $buttons = $('<div>').addClass('buttons');
 | |
|                 var visibleActions = targetActionFilter ?
 | |
|                     targetActionFilter({
 | |
|                         context: $.extend(true, {}, context, {
 | |
|                             originalAutoscaleData: data ? [data] : null
 | |
|                         })
 | |
|                     }) :
 | |
|                     $.map(actions, function(value, key) {
 | |
|                         return key;
 | |
|                     });
 | |
| 
 | |
|                 $detailActions.append($buttons);
 | |
|                 $actionsTable.find('tr').append($detailActions);
 | |
|                 $actions.append($actionsTable);
 | |
| 
 | |
|                 $(visibleActions).map(function(index, actionID) {
 | |
|                     var action = actions[actionID];
 | |
|                     var label = _l(action.label);
 | |
|                     var $action = $('<div>').addClass('action').addClass(actionID);
 | |
|                     var $icon = $('<a>')
 | |
|                         .attr({
 | |
|                             href: '#',
 | |
|                             title: label
 | |
|                         })
 | |
|                         .append($('<span>').addClass('icon'));
 | |
| 
 | |
|                     if (visibleActions.length == 1) $action.addClass('single');
 | |
|                     else if (!index) $action.addClass('first');
 | |
|                     else if (index == visibleActions.length - 1) $action.addClass('last');
 | |
| 
 | |
|                     // Perform action event
 | |
|                     $action.click(function() {
 | |
|                         var $loading = $('<div>').addClass('loading-overlay').appendTo($autoscalerDialog);
 | |
|                         var success = function(args) {
 | |
|                             $loading.remove();
 | |
|                             cloudStack.dialog.notice({
 | |
|                                 message: _l('label.task.completed') + ': ' + label
 | |
|                             });
 | |
| 
 | |
|                             // Reload actions
 | |
|                             if (data != null) { //data is originalAutoscaleData in \ui\scripts\autoscaler.js
 | |
|                                 data['afterActionIsComplete'] = args.data;
 | |
|                             }
 | |
| 
 | |
|                             var $newActions = renderActions({
 | |
|                                 data: data ? $.extend(data, args.data) : args.data,
 | |
|                                 actionFilter: args.actionFilter,
 | |
|                                 context: context
 | |
|                             });
 | |
| 
 | |
|                             $actions.after($newActions);
 | |
|                             $actions.remove();
 | |
|                         };
 | |
|                         var error = function(message) {
 | |
|                             $loading.remove();
 | |
|                             cloudStack.dialog.notice({
 | |
|                                 message: message
 | |
|                             });
 | |
|                         };
 | |
| 
 | |
|                         action.action({
 | |
|                             context: {
 | |
|                                 originalAutoscaleData: args.data
 | |
|                             },
 | |
|                             response: {
 | |
|                                 success: function(args) {
 | |
|                                     var notification = $.extend(args.notification, {
 | |
|                                         _custom: args._custom,
 | |
|                                         desc: label
 | |
|                                     });
 | |
| 
 | |
|                                     cloudStack.ui.notifications.add(
 | |
|                                         notification,
 | |
|                                         success, {},
 | |
|                                         error, {}
 | |
|                                     );
 | |
|                                 },
 | |
|                                 error: error
 | |
|                             }
 | |
|                         });
 | |
|                     });
 | |
| 
 | |
|                     $action.append($icon);
 | |
|                     $action.appendTo($buttons);
 | |
|                 });
 | |
| 
 | |
|                 if (!visibleActions || !visibleActions.length) $actions.hide();
 | |
| 
 | |
|                 return $actions;
 | |
|             };
 | |
| 
 | |
|             var renderDialogContent = function(args) {
 | |
|                 var data = args.data ? args.data : {};
 | |
| 
 | |
|                 // Setup default values, in case where existing data is present
 | |
|                 var setDefaultFields = function(fieldID, field) {
 | |
|                     var fieldData = data[fieldID];
 | |
| 
 | |
|                     if (fieldData && !field.isBoolean) {
 | |
|                         field.defaultValue = fieldData;
 | |
|                     } else {
 | |
|                         field.isChecked = fieldData;
 | |
|                     }
 | |
|                 };
 | |
|                 $.each(topfields, setDefaultFields);
 | |
|                 $.each(bottomfields, setDefaultFields);
 | |
| 
 | |
|                 $.extend(context, {
 | |
|                     originalAutoscaleData: args.data
 | |
|                 });
 | |
| 
 | |
|                 // Create and append top fields
 | |
|                 // -- uses create form to generate fields
 | |
|                 topFieldForm = cloudStack.dialog.createForm({
 | |
|                     context: context,
 | |
|                     noDialog: true, // Don't render a dialog, just return $formContainer
 | |
|                     form: {
 | |
|                         title: '',
 | |
|                         fields: topfields
 | |
|                     }
 | |
|                 });
 | |
|                 $topFieldForm = topFieldForm.$formContainer;
 | |
|                 $topFieldForm.appendTo($topFields);
 | |
| 
 | |
|                 scaleUpPolicyTitleForm = cloudStack.dialog.createForm({
 | |
|                     context: context,
 | |
|                     noDialog: true,
 | |
|                     form: {
 | |
|                         title: '',
 | |
|                         fields: {
 | |
|                             scaleUpDuration: {
 | |
|                                 label: 'label.duration.in.sec',
 | |
|                                 validation: {
 | |
|                                     required: true
 | |
|                                 }
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 });
 | |
|                 $scaleUpPolicyTitleForm = scaleUpPolicyTitleForm.$formContainer;
 | |
|                 $scaleUpPolicyTitleForm.appendTo($scaleUpPolicyTitle);
 | |
| 
 | |
| 
 | |
|                 scaleDownPolicyTitleForm = cloudStack.dialog.createForm({
 | |
|                     context: context,
 | |
|                     noDialog: true,
 | |
|                     form: {
 | |
|                         title: '',
 | |
|                         fields: {
 | |
|                             scaleDownDuration: {
 | |
|                                 label: 'label.duration.in.sec',
 | |
|                                 validation: {
 | |
|                                     required: true
 | |
|                                 }
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 });
 | |
|                 $scaleDownPolicyTitleForm = scaleDownPolicyTitleForm.$formContainer;
 | |
|                 $scaleDownPolicyTitleForm.appendTo($scaleDownPolicyTitle);
 | |
| 
 | |
|                 // Make multi-edits
 | |
|                 //
 | |
|                 // Scale up policy
 | |
|                 if (data.scaleUpPolicy && $.isArray(data.scaleUpPolicy.conditions)) {
 | |
|                     $autoscalerDialog.data('autoscaler-scale-up-data',
 | |
|                         data.scaleUpPolicy.conditions);
 | |
|                 }
 | |
| 
 | |
|                 if (data.scaleUpPolicy && data.scaleUpPolicy.duration) {
 | |
|                     $scaleUpPolicyTitleForm.find('input[name=scaleUpDuration]').val(
 | |
|                         data.scaleUpPolicy.duration
 | |
|                     );
 | |
|                 }
 | |
| 
 | |
|                 scaleuppolicy.context = context;
 | |
|                 scaleUpPolicyForm = $scaleUpPolicy.multiEdit(scaleuppolicy);
 | |
| 
 | |
|                 // Scale down policy
 | |
|                 if (data.scaleDownPolicy && $.isArray(data.scaleDownPolicy.conditions)) {
 | |
|                     $autoscalerDialog.data('autoscaler-scale-down-data',
 | |
|                         data.scaleDownPolicy.conditions);
 | |
|                 }
 | |
| 
 | |
|                 if (data.scaleDownPolicy && data.scaleDownPolicy.duration) {
 | |
|                     $scaleDownPolicyTitleForm.find('input[name=scaleDownDuration]').val(
 | |
|                         data.scaleDownPolicy.duration
 | |
|                     );
 | |
|                 }
 | |
| 
 | |
|                 scaledownpolicy.context = context;
 | |
|                 scaleDownPolicyForm = $scaleDownPolicy.multiEdit(scaledownpolicy);
 | |
| 
 | |
|                 // Create and append bottom fields
 | |
|                 bottomFieldForm = cloudStack.dialog.createForm({
 | |
|                     context: context,
 | |
|                     noDialog: true, // Don't render a dialog, just return $formContainer
 | |
|                     form: {
 | |
|                         title: '',
 | |
|                         fields: bottomfields
 | |
|                     }
 | |
|                 });
 | |
|                 $bottomFieldForm = bottomFieldForm.$formContainer;
 | |
|                 $bottomFieldForm.appendTo($bottomFields);
 | |
| 
 | |
|                 // Append main div elements
 | |
|                 $autoscalerDialog.append(
 | |
|                     $topFields,
 | |
|                     $scaleUpPolicyTitle,
 | |
|                     $scaleUpPolicy,
 | |
|                     $scaleDownPolicyTitle,
 | |
|                     $scaleDownPolicy,
 | |
|                     $bottomFields
 | |
|                 );
 | |
| 
 | |
|                 // Render dialog
 | |
|                 //$autoscalerDialog.find('.form-item[rel=templateNames] label').hide();
 | |
|                 /* Duration Fields*/
 | |
|                 //$('div.ui-dialog div.autoscaler').find('div.scale-up-policy-title').append("<br></br>").append($inputLabel = $('<label>').html('Duration').attr({left:'200'})).append($('<input>').attr({ name: 'username' }));
 | |
|                 //$('div.ui-dialog div.autoscaler').find('div.scale-down-policy-title').append("<br></br>").append($inputLabel = $('<label>').html('Duration').attr({left:'200'})).append($('<input>').attr({ name: 'username' }));
 | |
| 
 | |
|                 /*Dividers*/
 | |
|                 $autoscalerDialog.find('div.scale-up-policy-title').prepend($scaleUpDivider);
 | |
|                 $autoscalerDialog.find('div.scale-down-policy-title').prepend($scaleDownDivider);
 | |
|                 $autoscalerDialog.find('div.field-group.bottom-fields').prepend($bottomFieldDivider);
 | |
| 
 | |
|                 /* Hide effects for multi-edit table*/
 | |
|                 $autoscalerDialog.find('div.scale-up-policy').prepend($hideScaleUp);
 | |
|                 $autoscalerDialog.find('div.scale-down-policy ').prepend($hideScaleDown);
 | |
|                 $autoscalerDialog.find('div.scale-up-policy').prepend($scaleUpHideLabel);
 | |
|                 $autoscalerDialog.find('div.scale-down-policy').prepend($scaleDownHideLabel);
 | |
| 
 | |
|                 /*Toggling the labels and data-item table - SCALE UP POLICY*/
 | |
|                 $autoscalerDialog.find('div.scale-up-policy div.hide').click(function() {
 | |
|                     $autoscalerDialog.find('div.scale-up-policy div.multi-edit div.data-item').slideToggle();
 | |
|                     $scaleUpLabel = $autoscalerDialog.find('div.scale-up-policy div.slide-label').replaceWith($scaleUpLabel);
 | |
|                 });
 | |
| 
 | |
|                 /*Toggling the images */
 | |
|                 $('div.ui-dialog div.autoscaler div.scale-up-policy div.hide').click(function() {
 | |
|                     $(this).toggleClass('expand hide');
 | |
|                 });
 | |
| 
 | |
|                 $('div.ui-dialog div.autoscaler div.scale-down-policy div.hide').click(function() {
 | |
|                     $(this).toggleClass('expand hide');
 | |
|                 });
 | |
| 
 | |
|                 /*Toggling the labels and data-item table - SCALE DOWN POLICY*/
 | |
|                 $('div.ui-dialog div.autoscaler div.scale-down-policy div.hide').click(function() {
 | |
|                     $('div.ui-dialog div.autoscaler div.scale-down-policy div.multi-edit div.data div.data-item').slideToggle();
 | |
|                     $scaleDownLabel = $('div.ui-dialog div.autoscaler div.scale-down-policy div.slide-label').replaceWith($scaleDownLabel);
 | |
|                 });
 | |
| 
 | |
|                 $('div.ui-dialog div.autoscaler div.scale-down-policy div.multi-edit div.data div.expand').click(function() {
 | |
|                     $('div.ui-dialog div.autoscaler div.scale-down-policy div.multi-edit div.data div.data-item').slideToggle();
 | |
|                 });
 | |
| 
 | |
|                 $autoscalerDialog.dialog('option', 'position', 'center');
 | |
|                 $autoscalerDialog.dialog('option', 'height', 'auto');
 | |
| 
 | |
|                 // Setup actions
 | |
|                 renderActions(args).prependTo($autoscalerDialog);
 | |
|             };
 | |
| 
 | |
|             var $loading = $('<div>').addClass('loading-overlay').appendTo($autoscalerDialog);
 | |
|             $autoscalerDialog.dialog({
 | |
|                 title: 'label.autoscale.configuration.wizard',
 | |
|                 width: 825,
 | |
|                 height: 600,
 | |
|                 draggable: true,
 | |
|                 closeonEscape: false,
 | |
|                 overflow: 'auto',
 | |
|                 open: function() {
 | |
|                     $("button").each(function() {
 | |
|                         $(this).attr("style", "left: 600px; position: relative; margin-right: 5px; ");
 | |
|                     });
 | |
|                 },
 | |
|                 buttons: [{
 | |
|                     text: _l('label.cancel'),
 | |
|                     'class': 'cancel',
 | |
|                     click: function() {
 | |
|                         $autoscalerDialog.dialog('destroy');
 | |
|                         $('.overlay').remove();
 | |
|                     }
 | |
|                 }, {
 | |
|                     text: _l('Apply'),
 | |
|                     'class': 'ok',
 | |
|                     click: function() {
 | |
|                         var data = cloudStack.serializeForm($('.ui-dialog .autoscaler form'));
 | |
| 
 | |
|                         // Fix for missing formData, when editing existing rules;
 | |
|                         if (!formData) formData = data;
 | |
| 
 | |
|                         // Pass VPC data
 | |
|                         if (formData.tier) {
 | |
|                             data.tier = formData.tier;
 | |
|                         }
 | |
| 
 | |
|                         $loading.appendTo($autoscalerDialog);
 | |
|                         cloudStack.autoscaler.actions.apply({
 | |
|                             formData: formData,
 | |
|                             context: context,
 | |
|                             data: data,
 | |
|                             response: {
 | |
|                                 success: function() {
 | |
|                                     $loading.remove();
 | |
|                                     $autoscalerDialog.dialog('destroy');
 | |
|                                     $autoscalerDialog.closest(':ui-dialog').remove();
 | |
|                                     $('.overlay').remove();
 | |
|                                     cloudStack.dialog.notice({
 | |
|                                         message: 'Autoscale configured successfully.'
 | |
|                                     });
 | |
|                                 },
 | |
|                                 error: function(message) {
 | |
|                                     cloudStack.dialog.notice({
 | |
|                                         message: message
 | |
|                                     });
 | |
|                                     $loading.remove();
 | |
|                                 }
 | |
|                             }
 | |
|                         });
 | |
|                     }
 | |
|                 }]
 | |
|             }).closest('.ui-dialog').overlay();
 | |
| 
 | |
|             dataProvider({
 | |
|                 context: context,
 | |
|                 response: {
 | |
|                     success: function(args) {
 | |
|                         $loading.remove();
 | |
|                         renderDialogContent(args);
 | |
| 
 | |
|                         if (args.data == null) { //from a new LB rule
 | |
|                             $autoscalerDialog.find('select[name=serviceOfferingId]').removeAttr('disabled');
 | |
|                             $autoscalerDialog.find('select[name=securityGroups]').removeAttr('disabled');
 | |
|                             $autoscalerDialog.find('select[name=diskOfferingId]').removeAttr('disabled');
 | |
|                         } else { //from an existing LB rule
 | |
|                             $autoscalerDialog.find('select[name=serviceOfferingId]').attr('disabled', true);
 | |
|                             $autoscalerDialog.find('select[name=securityGroups]').attr('disabled', true);
 | |
|                             $autoscalerDialog.find('select[name=diskOfferingId]').attr('disabled', true);
 | |
| 
 | |
|                             if (args.data.isAdvanced != null) {
 | |
|                                 $autoscalerDialog.find('input[type=checkbox]').trigger('click');
 | |
|                                 $autoscalerDialog.find('input[type=checkbox]').attr('checked', 'checked');
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             });
 | |
|         };
 | |
|     };
 | |
| }(jQuery, cloudStack));
 |