diff --git a/src/sunstone/public/app/utils/labels/utils.js b/src/sunstone/public/app/utils/labels/utils.js index 22aa9835eb..439691cfa9 100644 --- a/src/sunstone/public/app/utils/labels/utils.js +++ b/src/sunstone/public/app/utils/labels/utils.js @@ -28,16 +28,16 @@ define(function (require) { var LABELS_ATTR = "LABELS"; return { - "labelsStr": _labelsStr, - "deserializeLabels": _deserializeLabels, - "makeTree": _makeTree, - "insertLabelsMenu": _insertLabelsMenu, - "insertLabelsDropdown": _insertLabelsDropdown, - "clearLabelsFilter": _clearLabelsFilter, - "setLabelsFilter": _setLabelsFilter, - "getLabelsFilter": _getLabelsFilter, - "getLabels": _getLabels, - "getLabel": _getLabel + labelsStr: _labelsStr, + deserializeLabels: _deserializeLabels, + makeTree: _makeTree, + insertLabelsMenu: _insertLabelsMenu, + insertLabelsDropdown: _insertLabelsDropdown, + clearLabelsFilter: _clearLabelsFilter, + setLabelsFilter: _setLabelsFilter, + getLabelsFilter: _getLabelsFilter, + getLabels: _getLabels, + getLabel: _getLabel, }; /* FUNCTION DEFINITIONS */ @@ -60,8 +60,10 @@ define(function (require) { */ function _insertLabelsMenu(opts) { var context = opts.context || $("#li_" + opts.tabName); - var dataTable = opts.dataTable || Sunstone.getDataTable(opts.tabName).dataTable; - var labelsColumn = opts.labelsColumn || Sunstone.getDataTable(opts.tabName).labelsColumn; + var dataTable = + opts.dataTable || Sunstone.getDataTable(opts.tabName).dataTable; + var labelsColumn = + opts.labelsColumn || Sunstone.getDataTable(opts.tabName).labelsColumn; var labelsPath = opts.labelsPath; var labels = _getLabels(dataTable, labelsColumn, labelsPath); @@ -77,13 +79,19 @@ 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) { _clearLabelsFilter(dataTable, labelsColumn); } else { currentLabel.parent(".labeltree-line").click(); - currentLabel.parentsUntil(".labels-tree", "li").children(".tree-toggle").click(); + currentLabel + .parentsUntil(".labels-tree", "li") + .children(".tree-toggle") + .click(); } } @@ -120,7 +128,7 @@ define(function (require) { OpenNebulaUser.show({ data: { - id: config["user_id"] + id: config["user_id"], }, success: function (request, user_json) { var labels_persis = ""; @@ -154,30 +162,41 @@ define(function (require) { $.extend(labels, labels_persis); var html_yaml = ""; if (!$.isEmptyObject(labels_yaml)) { - html_yaml = "
" + Locale.tr("System Labels") + "
" + + 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 + - "
" + - "" + - "
" + - "
"); + "
" + + 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(); - }); - } + $("[data-toggle=\"" + tabName + "LabelsDropdown\"]").on( + "click", + function () { + recountLabels(); + } + ); + }, }); /* Update Dropdown with selected items @@ -187,7 +206,8 @@ define(function (require) { */ function recountLabels() { // Generate Hash with labels and number of items - var labelsStr, labelsIndexed = {}; + var labelsStr, + labelsIndexed = {}; var selectedItems = tabTable.elements(); $.each(selectedItems, function (index, resourceId) { @@ -213,8 +233,13 @@ define(function (require) { var labelsCheckbox; $.each(labelsIndexed, function (labelName, numberOfItems) { - labelsCheckbox = $(".labelsCheckbox", - $("[one-label-full-name=\"" + labelName + "\"]", labelsDropdown).closest("li")); + labelsCheckbox = $( + ".labelsCheckbox", + $( + "[one-label-full-name=\"" + labelName + "\"]", + labelsDropdown + ).closest("li") + ); if (labelsCheckbox.length > 0) { if (numberOfItems == selectedItems.length) { $(labelsCheckbox[0]) @@ -244,11 +269,13 @@ define(function (require) { $(that).removeClass("fa-square").addClass("fa-check-square"); } else { action = "remove"; - $(that).removeClass("fa-check-square fa-minus-square").addClass("fa-square"); + $(that) + .removeClass("fa-check-square fa-minus-square") + .addClass("fa-square"); } OpenNebulaUser.show({ data: { - id: config["user_id"] + id: config["user_id"], }, success: function (request, user_json) { var labels_persis = ""; @@ -257,7 +284,9 @@ define(function (require) { labels_persis = user_json["USER"]["TEMPLATE"]["LABELS"]; } } - var labelName = $(".one-label", $(that).closest("li")).attr("one-label-full-name"); + var labelName = $(".one-label", $(that).closest("li")).attr( + "one-label-full-name" + ); var labelsArray, labelsArray_persis, labelIndex; var selectedItems = tabTable.elements(); if (labels_persis != "") { @@ -277,14 +306,20 @@ define(function (require) { labelsArray.push(labelName); _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))) { + if ( + !labelsArray_persis || + (labelsArray_persis && + $.inArray(labelName, labelsArray_persis) == -1) || + !config["all_labels"] || + (config["all_labels"] && + $.inArray(labelName, config["all_labels"]) == -1) + ) { labelsArray.splice(labelIndex, 1); _updateResouceLabels(tabName, resourceId, labelsArray); } } }); - } + }, }); }); @@ -299,7 +334,6 @@ define(function (require) { if (key == 13 && !ev.altKey && labelName !== "") { var labelsArray; - var labelClean = transformLabelToCleanFormat(labelName); var selectedItems = tabTable.elements(); $.each(selectedItems, function (_, resourceId) { @@ -310,10 +344,8 @@ define(function (require) { labelsArray = []; } - if (!existInArrInsensitive(labelClean, labelsArray)) { - labelsArray.push(labelClean); - _updateResouceLabels(tabName, resourceId, labelsArray); - } + labelsArray.push(labelName); + _updateResouceLabels(tabName, resourceId, labelsArray); }); ev.preventDefault(); @@ -321,23 +353,13 @@ define(function (require) { }); } - function existInArrInsensitive(val, arr) { - if (arr.length) { - for (var i = 0; arr.length > i; i++) { - if (val.toLowerCase() == arr[i].toLowerCase()) { - return true; - } - } - } - return false; - } - function _updateResouceLabels(tabName, resourceId, labelsArray) { var resource = Sunstone.getResource(tabName); var tabTable = Sunstone.getDataTable(tabName); if (resource == "ServiceTemplate" || resource == "Service") { - var templateStr = "{\"" + LABELS_ATTR.toLowerCase() + "\":\"" + labelsArray.join(",") + "\"}"; + var templateStr = + "{\"" + LABELS_ATTR.toLowerCase() + "\":\"" + labelsArray.join(",") + "\"}"; } else { var templateStr = LABELS_ATTR + "=\"" + labelsArray.join(",") + "\""; } @@ -346,13 +368,13 @@ define(function (require) { timeout: true, data: { id: resourceId, - extra_param: templateStr + extra_param: templateStr, }, success: function (request) { OpenNebula[resource].show({ timeout: true, data: { - id: resourceId + id: resourceId, }, success: function (request, response) { tabTable.updateElement(request, response); @@ -360,25 +382,31 @@ define(function (require) { Sunstone.insertPanels(tabName, response); } - - _insertLabelsMenu({ "tabName": tabName }); + _insertLabelsMenu({ tabName: tabName }); _insertLabelsDropdown(tabName); }, - error: Notifier.onError + error: Notifier.onError, }); }, - error: Notifier.onError + error: Notifier.onError, }); } function _labelsStr(elementTemplate) { - if (elementTemplate && - elementTemplate.BODY && + if ( + elementTemplate && + elementTemplate.BODY && + elementTemplate.BODY[LABELS_ATTR.toLowerCase()] + ) { + return TemplateUtils.htmlEncode( elementTemplate.BODY[LABELS_ATTR.toLowerCase()] - ) { - return TemplateUtils.htmlEncode(elementTemplate.BODY[LABELS_ATTR.toLowerCase()]); + ); } else { - return TemplateUtils.htmlEncode(elementTemplate && elementTemplate[LABELS_ATTR]? elementTemplate[LABELS_ATTR] : ""); + return TemplateUtils.htmlEncode( + elementTemplate && elementTemplate[LABELS_ATTR] + ? elementTemplate[LABELS_ATTR] + : "" + ); } } @@ -404,7 +432,7 @@ define(function (require) { function _makeTree(indexedLabels, currentLabel) { var treeRoot = { htmlStr: "", - subTree: [] + subTree: [], }; var keys = Object.keys(indexedLabels).sort(); @@ -431,8 +459,7 @@ define(function (require) { }); 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") { @@ -445,32 +472,51 @@ define(function (require) { var fullName = parentName + folderName; if (persis) { var htmlStr = - "" + + "" + folderName + ""; } else if (yaml) { var htmlStr = - "" + + "" + folderName + ""; } else { var htmlStr = - "" + + "" + folderName + ""; } - var tree = { htmlStr: htmlStr, - subTree: [] + subTree: [], }; var keys = Object.keys(childs).sort(); for (var i = 0; i < keys.length; i++) { var subFolderName = keys[i]; var subChilds = childs[subFolderName]; - tree.subTree.push(_makeSubTree(fullName + "/", subFolderName, subChilds, currentLabel)); + tree.subTree.push( + _makeSubTree(fullName + "/", subFolderName, subChilds, currentLabel) + ); } return tree; @@ -481,15 +527,23 @@ define(function (require) { */ function _setLabelsFilter(dataTable, labelsColumn, label) { - // Make the label safe, it may contain regexp special characters. Source: // 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); @@ -551,7 +605,9 @@ define(function (require) { } } else { var nodes = dataTable.fnGetNodes(); - var tr = $(".check_item[value=\"" + resourceId + "\"]", nodes).closest("tr"); + var tr = $(".check_item[value=\"" + resourceId + "\"]", nodes).closest( + "tr" + ); var aData = dataTable.fnGetData(tr); return aData[labelsColumn]; } @@ -566,7 +622,7 @@ define(function (require) { function transformLabelToCleanFormat(label) { let SEPARATOR_SUB_TREE = "/"; - return $.map(label.split(SEPARATOR_SUB_TREE), function(tree) { + return $.map(label.split(SEPARATOR_SUB_TREE), function (tree) { return firstLetterToUppercase(tree); }).join(SEPARATOR_SUB_TREE); } @@ -578,7 +634,7 @@ define(function (require) { function firstLetterToUppercase(phrase) { let words = splitPhraseWithSpaces(phrase); - return $.map(words, function(word) { + return $.map(words, function (word) { return capitalize(word.toLowerCase()); }).join(" "); } @@ -600,4 +656,4 @@ define(function (require) { function capitalize(string) { return string[0].toUpperCase() + string.slice(1); } -}); \ No newline at end of file +});