From 7f0cb7320e13fc05399d1667706a8f4586316b1c Mon Sep 17 00:00:00 2001 From: Diego del Corral Date: Fri, 16 Feb 2018 16:33:03 +0100 Subject: [PATCH] regex expresion for id now accepts strings, utils.js/getLabel checks if template exists. Changes for new addons (#1752) --- src/sunstone/public/app/sunstone.js | 2 +- src/sunstone/public/app/utils/labels/utils.js | 246 +++++++++--------- 2 files changed, 125 insertions(+), 123 deletions(-) diff --git a/src/sunstone/public/app/sunstone.js b/src/sunstone/public/app/sunstone.js index 53343c8864..a3e09bf87a 100644 --- a/src/sunstone/public/app/sunstone.js +++ b/src/sunstone/public/app/sunstone.js @@ -1237,7 +1237,7 @@ define(function(require) { } }.bind(tabName)); - router.on(new RegExp("(?:#|/)"+tabName+"/(\\d+)"), function(id){ + router.on(new RegExp("(?:#|/)"+tabName+"/(\\w+)"), function(id){ _routerShowElement(this, id); }.bind(tabName)); diff --git a/src/sunstone/public/app/utils/labels/utils.js b/src/sunstone/public/app/utils/labels/utils.js index e1d88d2b1a..a6e1d5f0b4 100644 --- a/src/sunstone/public/app/utils/labels/utils.js +++ b/src/sunstone/public/app/utils/labels/utils.js @@ -14,7 +14,7 @@ /* limitations under the License. */ /* -------------------------------------------------------------------------- */ -define(function(require) { +define(function (require) { /* DEPENDENCIES */ var Tree = require('./tree'); @@ -77,11 +77,11 @@ define(function(require) { Tree.setup($('.labels-tree', context)); - var currentLabel = $('span[one-label-full-name="'+_getLabelsFilter(dataTable)+'"]', context); + var currentLabel = $('span[one-label-full-name="' + _getLabelsFilter(dataTable) + '"]', context); - if (currentLabel.length == 0){ + if (currentLabel.length == 0) { _clearLabelsFilter(dataTable, labelsColumn); - }else{ + } else { currentLabel.parent(".labeltree-line").click(); currentLabel.parentsUntil(".labels-tree", "li").children(".tree-toggle").click(); } @@ -91,10 +91,10 @@ define(function(require) { Filter datatable when a label in the left menu is clicked */ context.off('click', '.labeltree-line'); - context.on('click', '.labeltree-line', function() { + context.on('click', '.labeltree-line', function () { var span = $(".one-label", this); - if($(span).hasClass("active")){ + if ($(span).hasClass("active")) { if (opts.tabName && !Sunstone.rightListVisible($('#' + opts.tabName))) { Sunstone.showTab(opts.tabName); } @@ -119,65 +119,65 @@ define(function(require) { var labelsDropdown = $('#' + tabName + 'LabelsDropdown'); OpenNebulaUser.show({ - data : { - id: config['user_id'] - }, - success: function(request, user_json) { - var labels_persis = ''; - if (user_json["USER"]["TEMPLATE"]) { - if (user_json["USER"]["TEMPLATE"]["LABELS"]) { - labels_persis = user_json["USER"]["TEMPLATE"]["LABELS"]; - } + data: { + id: config['user_id'] + }, + success: function (request, user_json) { + var labels_persis = ''; + if (user_json["USER"]["TEMPLATE"]) { + if (user_json["USER"]["TEMPLATE"]["LABELS"]) { + labels_persis = user_json["USER"]["TEMPLATE"]["LABELS"]; } - var labels = _getLabels(dataTable, labelsColumn); - labels_persis = _deserializeLabels(labels_persis); - var array_labels_yaml = []; - var labels_yaml = {}; - if(config['all_labels'][0] != ""){ - $.each(config['all_labels'], function(index){ - array_labels_yaml.push(config['all_labels'][index]+'_YAML'); - if(labels[config['all_labels'][index]]){ - delete labels[config['all_labels'][index]]; - } - }) - labels_yaml = _deserializeLabels(array_labels_yaml.join(',')); - } - var keys = Object.keys(labels_persis).sort(); - for (var i = 0; i < keys.length; i++){ - if(labels[keys[i]]){ - delete labels[keys[i]]; - } - labels_persis[keys[i]+"_PERSIS"] = labels_persis[keys[i]]; - delete labels_persis[keys[i]]; - } - $.extend(labels, labels_persis); - var html_yaml = "" - if(!$.isEmptyObject(labels_yaml)){ - html_yaml = '
' + Locale.tr('System Labels') + '
' + - '
' + - Tree.html(_makeTree(labels_yaml), false) + - '
'; - } - labelsDropdown.html( - '
' + - '
' + Locale.tr('Edit Labels') + '
' + - '
' + - Tree.html(_makeTree(labels), false) + - '
' + - html_yaml+ - '
' + - '' + - '
' + - '
'); - - Tree.setup(labelsDropdown); - recountLabels(); - $('[data-toggle="' + tabName + 'LabelsDropdown"]').off('click'); - $('[data-toggle="' + tabName + 'LabelsDropdown"]').on('click', function(){ - recountLabels(); - }); } - }); + var labels = _getLabels(dataTable, labelsColumn); + labels_persis = _deserializeLabels(labels_persis); + var array_labels_yaml = []; + var labels_yaml = {}; + if (config['all_labels'][0] != "") { + $.each(config['all_labels'], function (index) { + array_labels_yaml.push(config['all_labels'][index] + '_YAML'); + if (labels[config['all_labels'][index]]) { + delete labels[config['all_labels'][index]]; + } + }) + labels_yaml = _deserializeLabels(array_labels_yaml.join(',')); + } + var keys = Object.keys(labels_persis).sort(); + for (var i = 0; i < keys.length; i++) { + if (labels[keys[i]]) { + delete labels[keys[i]]; + } + labels_persis[keys[i] + "_PERSIS"] = labels_persis[keys[i]]; + delete labels_persis[keys[i]]; + } + $.extend(labels, labels_persis); + var html_yaml = "" + if (!$.isEmptyObject(labels_yaml)) { + html_yaml = '
' + Locale.tr('System Labels') + '
' + + '
' + + Tree.html(_makeTree(labels_yaml), false) + + '
'; + } + labelsDropdown.html( + '
' + + '
' + Locale.tr('Edit Labels') + '
' + + '
' + + Tree.html(_makeTree(labels), false) + + '
' + + html_yaml + + '
' + + '' + + '
' + + '
'); + + Tree.setup(labelsDropdown); + recountLabels(); + $('[data-toggle="' + tabName + 'LabelsDropdown"]').off('click'); + $('[data-toggle="' + tabName + 'LabelsDropdown"]').on('click', function () { + recountLabels(); + }); + } + }); /* Update Dropdown with selected items [v] If all the selected items has a label @@ -189,10 +189,10 @@ define(function(require) { var labelsStr, labelsIndexed = {}; var selectedItems = tabTable.elements(); - $.each(selectedItems, function(index, resourceId) { + $.each(selectedItems, function (index, resourceId) { labelsStr = _getLabel(tabName, dataTable, labelsColumn, resourceId); if (labelsStr != '') { - $.each(labelsStr.split(','), function(){ + $.each(labelsStr.split(','), function () { if (labelsIndexed[this]) { labelsIndexed[this] += 1 } else { @@ -211,7 +211,7 @@ define(function(require) { .addClass('fa-square-o'); var labelsCheckbox; - $.each(labelsIndexed, function(labelName, numberOfItems) { + $.each(labelsIndexed, function (labelName, numberOfItems) { labelsCheckbox = $('.labelsCheckbox', $('[one-label-full-name="' + labelName + '"]', labelsDropdown).closest('li')); if (labelsCheckbox.length > 0) { @@ -234,7 +234,7 @@ define(function(require) { Check/Uncheck label & Update Templates */ labelsDropdown.off('click', '.labeltree-line'); - labelsDropdown.on('click', '.labeltree-line', function() { + labelsDropdown.on('click', '.labeltree-line', function () { var action; var that = $(".labelsCheckbox", this); @@ -246,10 +246,10 @@ define(function(require) { $(that).removeClass('fa-check-square-o fa-minus-square-o').addClass('fa-square-o'); } OpenNebulaUser.show({ - data : { + data: { id: config['user_id'] }, - success: function(request, user_json) { + success: function (request, user_json) { var labels_persis = ''; if (user_json["USER"]["TEMPLATE"]) { if (user_json["USER"]["TEMPLATE"]["LABELS"]) { @@ -257,14 +257,14 @@ define(function(require) { } } var labelName = $('.one-label', $(that).closest('li')).attr('one-label-full-name'); - var labelsArray,labelsArray_persis, labelIndex; + var labelsArray, labelsArray_persis, labelIndex; var selectedItems = tabTable.elements(); if (labels_persis != '') { - labelsArray_persis = labels_persis.split(',') + labelsArray_persis = labels_persis.split(',') } else { - labelsArray_persis = [] + labelsArray_persis = [] } - $.each(selectedItems, function(index, resourceId) { + $.each(selectedItems, function (index, resourceId) { labelsStr = _getLabel(tabName, dataTable, labelsColumn, resourceId); if (labelsStr != '') { labelsArray = labelsStr.split(',') @@ -277,7 +277,7 @@ define(function(require) { _updateResouceLabels(tabName, resourceId, labelsArray); } else if (action == 'remove' && labelIndex != -1) { if ((!labelsArray_persis || (labelsArray_persis && $.inArray(labelName, labelsArray_persis) == -1)) || - (!config['all_labels'] || (config['all_labels'] && $.inArray(labelName, config['all_labels']) == -1))) { + (!config['all_labels'] || (config['all_labels'] && $.inArray(labelName, config['all_labels']) == -1))) { labelsArray.splice(labelIndex, 1); _updateResouceLabels(tabName, resourceId, labelsArray); } @@ -291,7 +291,7 @@ define(function(require) { Add a new label when ENTER is presed in the input */ labelsDropdown.off('keypress', '.newLabelInput'); - labelsDropdown.on('keypress', '.newLabelInput', function(e) { + labelsDropdown.on('keypress', '.newLabelInput', function (e) { var ev = e || window.event; var key = ev.keyCode; var labelName = $(this).val(); @@ -299,7 +299,7 @@ define(function(require) { if (key == 13 && !ev.altKey && labelName != '') { var labelsArray, labelIndex; var selectedItems = tabTable.elements(); - $.each(selectedItems, function(index, resourceId) { + $.each(selectedItems, function (index, resourceId) { labelsStr = _getLabel(tabName, dataTable, labelsColumn, resourceId); if (labelsStr != '') { labelsArray = labelsStr.split(','); @@ -318,10 +318,10 @@ define(function(require) { }); } - function existInArrInsensitive(val, arr){ - if (arr.length){ - for (var i = 0; arr.length > i; i++){ - if (val.toLowerCase() == arr[i].toLowerCase()){ + function existInArrInsensitive(val, arr) { + if (arr.length) { + for (var i = 0; arr.length > i; i++) { + if (val.toLowerCase() == arr[i].toLowerCase()) { return true; } } @@ -341,24 +341,24 @@ define(function(require) { OpenNebula[resource].append({ timeout: true, - data : { - id: resourceId, - extra_param: templateStr + data: { + id: resourceId, + extra_param: templateStr }, - success: function(request) { + success: function (request) { OpenNebula[resource].show({ timeout: true, - data : { - id: resourceId + data: { + id: resourceId }, - success: function(request, response) { + success: function (request, response) { tabTable.updateElement(request, response); if (Sunstone.rightInfoVisible($('#' + tabName))) { Sunstone.insertPanels(tabName, response); } - _insertLabelsMenu({'tabName': tabName}); + _insertLabelsMenu({ 'tabName': tabName }); _insertLabelsDropdown(tabName); }, error: Notifier.onError @@ -372,7 +372,7 @@ define(function(require) { if (elementTemplate['BODY'] && elementTemplate["BODY"][LABELS_ATTR.toLowerCase()]) { return TemplateUtils.htmlEncode(elementTemplate["BODY"][LABELS_ATTR.toLowerCase()]); } else { - return TemplateUtils.htmlEncode( elementTemplate[LABELS_ATTR] ); + return TemplateUtils.htmlEncode(elementTemplate[LABELS_ATTR]); } } @@ -381,9 +381,9 @@ define(function(require) { if (labelsStr) { var parent; - $.each(labelsStr.split(','), function() { + $.each(labelsStr.split(','), function () { parent = indexedLabels; - $.each(this.split('/'), function() { + $.each(this.split('/'), function () { if (parent[this] == undefined) { parent[this] = {}; } @@ -397,12 +397,12 @@ define(function(require) { function _makeTree(indexedLabels, currentLabel) { var treeRoot = { - htmlStr : '', - subTree : [] + htmlStr: '', + subTree: [] }; var keys = Object.keys(indexedLabels).sort(); - for (var i = 0; i < keys.length; i++){ + for (var i = 0; i < keys.length; i++) { var folderName = keys[i]; var childs = indexedLabels[folderName]; treeRoot.subTree.push(_makeSubTree('', folderName, childs, currentLabel)); @@ -415,41 +415,41 @@ define(function(require) { var name_split = folderName.split("_"); var persis = false; var yaml = false; - if(name_split.indexOf("PERSIS") > -1){ + if (name_split.indexOf("PERSIS") > -1) { folderName = ""; - $.each(name_split, function(value){ - if(name_split[value] != "PERSIS"){ - folderName += name_split[value]+"_"; + $.each(name_split, function (value) { + if (name_split[value] != "PERSIS") { + folderName += name_split[value] + "_"; } }); - folderName = folderName.slice(0,-1); + folderName = folderName.slice(0, -1); persis = true; } - else if(name_split.indexOf("YAML") > -1){ + else if (name_split.indexOf("YAML") > -1) { folderName = ""; - $.each(name_split, function(value){ - if(name_split[value] != "YAML"){ - folderName += name_split[value]+"_"; + $.each(name_split, function (value) { + if (name_split[value] != "YAML") { + folderName += name_split[value] + "_"; } }); - folderName = folderName.slice(0,-1); + folderName = folderName.slice(0, -1); yaml = true; } var fullName = parentName + folderName; - if(persis){ + if (persis) { var htmlStr = - '' + + '' + folderName + - ''; + ''; } else if (yaml) { var htmlStr = '' + - folderName + + folderName + ''; } else { - var htmlStr = + var htmlStr = '' + - folderName + + folderName + ''; } @@ -460,7 +460,7 @@ define(function(require) { }; var keys = Object.keys(childs).sort(); - for (var i = 0; i < keys.length; i++){ + for (var i = 0; i < keys.length; i++) { var subFolderName = keys[i]; var subChilds = childs[subFolderName]; tree.subTree.push(_makeSubTree(fullName + '/', subFolderName, subChilds, currentLabel)); @@ -479,10 +479,10 @@ define(function(require) { // https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions var escapedLabel = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - var regExp = '^' + escapedLabel + '$|'+ - ',' + escapedLabel + '$|'+ - '^' + escapedLabel + ',|'+ - ',' + escapedLabel + ',' + var regExp = '^' + escapedLabel + '$|' + + ',' + escapedLabel + '$|' + + '^' + escapedLabel + ',|' + + ',' + escapedLabel + ',' dataTable.data("sunstone-label-filter", label); dataTable.fnFilter(regExp, labelsColumn, true, false); @@ -500,10 +500,10 @@ define(function(require) { function _getLabels(dataTable, labelsColumn, labelsPath) { var labels = []; var tmp; - $.each(dataTable.fnGetData(), function() { + $.each(dataTable.fnGetData(), function () { if (labelsPath) { tmp = this; - $.each(labelsPath.split('.'), function() { + $.each(labelsPath.split('.'), function () { if (tmp) { tmp = tmp[this]; } @@ -530,13 +530,15 @@ define(function(require) { } else { template = element.TEMPLATE; } - - if (template["BODY"] && template["BODY"][LABELS_ATTR.toLowerCase()]) { - return template["BODY"][LABELS_ATTR.toLowerCase()]; + if (template) { + if (template["BODY"] && template["BODY"][LABELS_ATTR.toLowerCase()]) { + return template["BODY"][LABELS_ATTR.toLowerCase()]; + } else { + return template[LABELS_ATTR] || ''; + } } else { - return template[LABELS_ATTR]||''; + return ''; } - } else { return ''; }