// 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 = $('
').addClass('autoscaler'); var $topFields = $('
').addClass('field-group top-fields'); var $bottomFields = $('
').addClass('field-group bottom-fields'); var $scaleUpPolicy = $('
').addClass('scale-up-policy'); var $slideScaleUp = $('
').addClass('expand'); var $hideScaleUp = $('
').addClass('hide'); var $scaleUpLabel = $('
Show
').addClass('slide-label'); var $scaleUpHideLabel = $('
Hide
').addClass('slide-label'); var $scaleDownHideLabel = $('
Hide
').addClass('slide-label'); var $scaleDownLabel = $('
Show
').addClass('slide-label'); var $slideScaleDown = $('
').addClass('expand'); var $hideScaleDown = $('
').addClass('hide'); var $scaleUpDivider = $('
').addClass('policy-divider'); var $scaleDownDivider = $('
').addClass('policy-divider'); var $bottomFieldDivider = $('
').addClass('policy-divider'); var $scaleDownPolicy = $('
').addClass('scale-down-policy'); var $scaleUpPolicyTitle = $('
').addClass('scale-up-policy-title') .html("Scale Up Policy"); var $scaleDownPolicyTitle = $('
').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 = $('
').addClass('detail-group'); var $actionsTable = $('').append(''); var $detailActions = $('
').addClass('detail-actions'); var $buttons = $('
').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 = $('
').addClass('action').addClass(actionID); var $icon = $('') .attr({ href: '#', title: label }) .append($('').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 = $('
').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: '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: '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("

").append($inputLabel = $('