1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

regex expresion for id now accepts strings, utils.js/getLabel checks if template exists. Changes for new addons (#1752)

This commit is contained in:
Diego del Corral 2018-02-16 16:33:03 +01:00 committed by Ruben S. Montero
parent 08376b52ed
commit 7f0cb7320e
2 changed files with 125 additions and 123 deletions

View File

@ -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));

View File

@ -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 = '<h6>' + Locale.tr('System Labels') + '</h6>' +
'<div class="labeltree-container">' +
Tree.html(_makeTree(labels_yaml), false) +
'</div>';
}
labelsDropdown.html(
'<div>' +
'<h6>' + Locale.tr('Edit Labels') + '</h6>' +
'<div class="labeltree-container">' +
Tree.html(_makeTree(labels), false) +
'</div>' +
html_yaml+
'<div class="input-container">' +
'<input type="text" class="newLabelInput" placeholder="' + Locale.tr("Add Label") + '"/>' +
'</div>' +
'</div>');
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 = '<h6>' + Locale.tr('System Labels') + '</h6>' +
'<div class="labeltree-container">' +
Tree.html(_makeTree(labels_yaml), false) +
'</div>';
}
labelsDropdown.html(
'<div>' +
'<h6>' + Locale.tr('Edit Labels') + '</h6>' +
'<div class="labeltree-container">' +
Tree.html(_makeTree(labels), false) +
'</div>' +
html_yaml +
'<div class="input-container">' +
'<input type="text" class="newLabelInput" placeholder="' + Locale.tr("Add Label") + '"/>' +
'</div>' +
'</div>');
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 =
'<span class="secondary one-label" persis="true" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
'<span class="secondary one-label" persis="true" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
folderName +
'</span>';
'</span>';
} else if (yaml) {
var htmlStr =
'<span class="secondary one-label" yaml="true" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
folderName +
folderName +
'</span>';
} else {
var htmlStr =
var htmlStr =
'<span class="secondary one-label" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
folderName +
folderName +
'</span>';
}
@ -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 '';
}