// 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.granularSettings = function(args) { var dataProvider = args.dataProvider; var actions = args.actions; return function(args) { var context = args.context; var listView = { id: 'settings', fields: { name: { label: 'label.name' }, description: { label: 'label.description' }, value: { label: 'label.value', editable: true } }, actions: { edit: { label: 'label.change.value', action: actions.edit } }, dataProvider: dataProvider }; var $listView = $('
').listView({ context: context, listView: listView }); return $listView; } }; cloudStack.uiCustom.granularDetails = function(args) { var dataProvider = args.dataProvider; var actions = args.actions; var resourceType = args.resourceType; return function(args) { var context = args.context; var listView = { id: 'details', fields: { name: { label: 'label.name' }, value: { label: 'label.value', editable: true } }, actions: { edit: { label: 'label.change.value', action: actions.edit }, remove: { label: 'Remove Setting', messages: { confirm: function(args) { return 'Delete Setting'; }, notification: function(args) { return 'Setting deleted'; } }, action: actions.remove, notification: { poll: function(args) { args.complete(); } } }, add : { label: 'Add Setting', messages: { confirm: function(args) { return 'Add Setting'; }, notification: function(args) { return 'Setting added'; } }, preFilter: function(args) { return true; }, createForm: { title: 'Add New Setting', preFilter: function(args) { var data = { resourcetype: resourceType }; if (resourceType === 'UserVm') { data.resourceid = args.context.instances[0].id; } if (resourceType === 'Template') { data.resourceid = args.context.templates[0].id; } $.ajax({ url: createURL("listDetailOptions"), data: data, dataType: "json", success: function(json) { var details = json.listdetailoptionsresponse.detailoptions.details; var keys = []; Object.keys(details).forEach(function(key,index) { keys.push(key); }); $(args.$form.find('input[name="name"]')).blur(); $(args.$form.find('input[name="name"]')).autocomplete({ minLength: 0, delay: 0, source: keys.sort(), select: function(event, ui) { const key = ui.item.value; const options = details[key]; $(args.$form.find('input[name="value"]')).autocomplete({ minLength: 0, delay: 0, autoFocus: true, source: options.sort() }).focus(function() { $(this).data("uiAutocomplete").search($(this).val()); }); } }).focus(function() { $(this).data("uiAutocomplete").search($(this).val()); }); } }); return true; }, fields: { name: { label: 'label.name', validation: { required: true } }, value: { label: 'label.value', validation: { required: true } } } }, action: actions.add } }, dataProvider: function(args) { var data = { resourcetype: resourceType }; if (resourceType === 'UserVm') { data.resourceid = args.context.instances[0].id; } if (resourceType === 'Template') { data.resourceid = args.context.templates[0].id; } $.ajax({ url: createURL("listDetailOptions"), data: data, dataType: "json", success: function(json) { var details = json.listdetailoptionsresponse.detailoptions.details; var tbody = $.find('#details-tab-settings .data-table tbody'); $(tbody).on('DOMNodeInserted', "tr", function() { $.each($.find('#details-tab-settings .data-table tbody tr'), function(idx, row) { const key = $(row).find('td.name').attr('title'); const options = details[key]; if (options) { $($(row).find('input.edit')).autocomplete({ minLength: 0, delay: 0, autoFocus: true, source: options.sort() }).focus(function() { $(this).data("uiAutocomplete").search(""); }); $(row).find('input.edit').blur(); } }); }); dataProvider(args); } }); } }; var $listView = $('
').listView({ context: context, listView: listView }); return $listView; } }; }(jQuery, cloudStack));