mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
parent
7734743c3d
commit
b882f5f41e
@ -131,6 +131,17 @@ class SunstoneViews
|
||||
@views.keys
|
||||
end
|
||||
|
||||
def get_all_labels(group_name)
|
||||
labels = []
|
||||
if @views_config['labels_groups'][group_name]
|
||||
@views_config['labels_groups'][group_name].each{|l| labels.push(l)}
|
||||
end
|
||||
if @views_config['labels_groups']['default']
|
||||
@views_config['labels_groups']['default'].each{|l| labels.push(l)}
|
||||
end
|
||||
return labels
|
||||
end
|
||||
|
||||
def logo
|
||||
@views_config['logo']
|
||||
end
|
||||
|
@ -16,6 +16,9 @@
|
||||
|
||||
define(function(require) {
|
||||
var Locale = require('utils/locale');
|
||||
var OpenNebulaUser = require('opennebula/user');
|
||||
var Sunstone = require('sunstone');
|
||||
var TemplateUtils = require('utils/template-utils');
|
||||
|
||||
/*
|
||||
CONSTRUCTOR
|
||||
@ -61,6 +64,8 @@ define(function(require) {
|
||||
html = '<li><i class="left tree-toggle fa fa-fw fa-angle-right"></i> ';
|
||||
} else {
|
||||
var title = $(tree.htmlStr).attr('title');
|
||||
var persis = $(tree.htmlStr).attr('persis');
|
||||
var yaml = $(tree.htmlStr).attr('yaml');
|
||||
var color = _labelHue(title);
|
||||
|
||||
if (title != undefined && title != "") {
|
||||
@ -82,6 +87,8 @@ define(function(require) {
|
||||
html = '<li><i class="left tree-toggle fa fa-fw fa-angle-down"></i> ';
|
||||
} else {
|
||||
var title = $(tree.htmlStr).attr('title');
|
||||
var persis = $(tree.htmlStr).attr('persis');
|
||||
var yaml = $(tree.htmlStr).attr('yaml');
|
||||
var color = _labelHue(title);
|
||||
|
||||
if (title != undefined && title != "") {
|
||||
@ -89,7 +96,13 @@ define(function(require) {
|
||||
} else {
|
||||
html = '<li>';
|
||||
}
|
||||
|
||||
if (!yaml) {
|
||||
if (!persis) {
|
||||
html += '<a class="lock" type="unlock" title="' + title + '"><i class="left fa fa-fw fa-unlock" style="color:hsl(' + color + ', 90%, 70%);"></i></a>';
|
||||
} else {
|
||||
html += '<a class="lock" type="lock" title="' + title + '"><i class="left fa fa-fw fa-lock" style="color:hsl(' + color + ', 90%, 70%);"></i></a>';
|
||||
}
|
||||
}
|
||||
html += '<i class="left fa fa-fw fa-tag"></i> ';
|
||||
}
|
||||
|
||||
@ -131,6 +144,48 @@ define(function(require) {
|
||||
$('.one-label', this).addClass('active');
|
||||
}
|
||||
});
|
||||
|
||||
$(".lock", context).on("click", function(){
|
||||
var type = $(this).attr("type");
|
||||
var title = $(this).attr("title");
|
||||
if (type == "unlock"){
|
||||
$(".fa-unlock", this).attr("class", "left fa fa-fw fa-lock");
|
||||
$(this).attr("type", "lock");
|
||||
} else {
|
||||
$(".fa-lock", this).attr("class", "left fa fa-fw fa-unlock");
|
||||
$(this).attr("type", "unlock");
|
||||
}
|
||||
var that = this;
|
||||
OpenNebulaUser.show({
|
||||
data : {
|
||||
id: config['user_id']
|
||||
},
|
||||
success: function(request, user_json) {
|
||||
var final_template = {};
|
||||
if (user_json["USER"]["TEMPLATE"]) {
|
||||
if (user_json["USER"]["TEMPLATE"]["LABELS"]) {
|
||||
var titles = user_json["USER"]["TEMPLATE"]["LABELS"].split(",");
|
||||
var pos = titles.indexOf(title);
|
||||
if (type == "lock" && pos != -1){ //unlock
|
||||
titles.splice(pos, 1);
|
||||
$(this).removeAttr("locked");
|
||||
} else if (type == "unlock" && pos == -1) { //lock
|
||||
titles.push(title);
|
||||
$(this).attr("locked", "true");
|
||||
}
|
||||
user_json["USER"]["TEMPLATE"]["LABELS"] = titles.join(",");
|
||||
} else {
|
||||
user_json["USER"]["TEMPLATE"]["LABELS"] = title;
|
||||
}
|
||||
if (user_json["USER"]["TEMPLATE"]["LABELS"] == ""){
|
||||
delete user_json["USER"]["TEMPLATE"]["LABELS"];
|
||||
}
|
||||
template_str = TemplateUtils.templateToString(user_json["USER"]["TEMPLATE"]);
|
||||
Sunstone.runAction("User.update_template", config['user_id'], template_str);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
|
||||
|
@ -23,6 +23,7 @@ define(function(require) {
|
||||
var Locale = require('utils/locale');
|
||||
var Notifier = require('utils/notifier');
|
||||
var TemplateUtils = require('utils/template-utils');
|
||||
var OpenNebulaUser = require('opennebula/user');
|
||||
|
||||
var LABELS_ATTR = 'LABELS';
|
||||
|
||||
@ -117,20 +118,59 @@ define(function(require) {
|
||||
|
||||
var labelsDropdown = $('#' + tabName + 'LabelsDropdown');
|
||||
|
||||
var labels = _getLabels(dataTable, labelsColumn);
|
||||
labelsDropdown.html(
|
||||
'<div>' +
|
||||
'<h6>' + Locale.tr('Edit Labels') + '</h6>' +
|
||||
'<div class="labeltree-container">' +
|
||||
Tree.html(_makeTree(labels), false) +
|
||||
'</div>' +
|
||||
'<div class="input-container">' +
|
||||
'<input type="text" class="newLabelInput" placeholder="' + Locale.tr("Add Label") + '"/>' +
|
||||
'</div>' +
|
||||
'</div>');
|
||||
|
||||
Tree.setup(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"];
|
||||
}
|
||||
}
|
||||
var labels = _getLabels(dataTable, labelsColumn);
|
||||
labels_persis = _deserializeLabels(labels_persis);
|
||||
var array_labels_yaml = [];
|
||||
$.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]];
|
||||
}
|
||||
})
|
||||
var 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);
|
||||
labelsDropdown.html(
|
||||
'<div>' +
|
||||
'<h6>' + Locale.tr('Edit Labels') + '</h6>' +
|
||||
'<div class="labeltree-container">' +
|
||||
Tree.html(_makeTree(labels), false) +
|
||||
'</div>' +
|
||||
'<h6>' + Locale.tr('System Labels') + '</h6>' +
|
||||
'<div class="labeltree-container">' +
|
||||
Tree.html(_makeTree(labels_yaml), false) +
|
||||
'</div>' +
|
||||
'<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
|
||||
@ -183,12 +223,6 @@ define(function(require) {
|
||||
$('.newLabelInput', labelsDropdown).focus();
|
||||
}
|
||||
|
||||
recountLabels();
|
||||
$('[data-toggle="' + tabName + 'LabelsDropdown"]').off('click');
|
||||
$('[data-toggle="' + tabName + 'LabelsDropdown"]').on('click', function(){
|
||||
recountLabels();
|
||||
});
|
||||
|
||||
/*
|
||||
Check/Uncheck label & Update Templates
|
||||
*/
|
||||
@ -204,25 +238,44 @@ define(function(require) {
|
||||
action = 'remove';
|
||||
$(that).removeClass('fa-check-square-o fa-minus-square-o').addClass('fa-square-o');
|
||||
}
|
||||
|
||||
var labelName = $('.one-label', $(that).closest('li')).attr('one-label-full-name');
|
||||
var labelsArray, labelIndex;
|
||||
var selectedItems = tabTable.elements();
|
||||
$.each(selectedItems, function(index, resourceId) {
|
||||
labelsStr = _getLabel(tabName, dataTable, labelsColumn, resourceId);
|
||||
if (labelsStr != '') {
|
||||
labelsArray = labelsStr.split(',')
|
||||
} else {
|
||||
labelsArray = []
|
||||
}
|
||||
|
||||
labelIndex = $.inArray(labelName, labelsArray);
|
||||
if (action == 'add' && labelIndex == -1) {
|
||||
labelsArray.push(labelName)
|
||||
_updateResouceLabels(tabName, resourceId, labelsArray);
|
||||
} else if (action == 'remove' && labelIndex != -1) {
|
||||
labelsArray.splice(labelIndex, 1);
|
||||
_updateResouceLabels(tabName, resourceId, labelsArray);
|
||||
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"];
|
||||
}
|
||||
}
|
||||
var labelName = $('.one-label', $(that).closest('li')).attr('one-label-full-name');
|
||||
var labelsArray,labelsArray_persis, labelIndex;
|
||||
var selectedItems = tabTable.elements();
|
||||
if (labels_persis != '') {
|
||||
labelsArray_persis = labels_persis.split(',')
|
||||
} else {
|
||||
labelsArray_persis = []
|
||||
}
|
||||
$.each(selectedItems, function(index, resourceId) {
|
||||
labelsStr = _getLabel(tabName, dataTable, labelsColumn, resourceId);
|
||||
if (labelsStr != '') {
|
||||
labelsArray = labelsStr.split(',')
|
||||
} else {
|
||||
labelsArray = []
|
||||
}
|
||||
labelIndex = $.inArray(labelName, labelsArray);
|
||||
if (action == 'add' && labelIndex == -1) {
|
||||
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))) {
|
||||
labelsArray.splice(labelIndex, 1);
|
||||
_updateResouceLabels(tabName, resourceId, labelsArray);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -342,11 +395,47 @@ define(function(require) {
|
||||
}
|
||||
|
||||
function _makeSubTree(parentName, folderName, childs, currentLabel) {
|
||||
var name_split = folderName.split("_");
|
||||
var persis = false;
|
||||
var yaml = false;
|
||||
if(name_split.indexOf("PERSIS") > -1){
|
||||
folderName = "";
|
||||
$.each(name_split, function(value){
|
||||
if(name_split[value] != "PERSIS"){
|
||||
folderName += name_split[value]+"_";
|
||||
}
|
||||
});
|
||||
folderName = folderName.slice(0,-1);
|
||||
persis = true;
|
||||
}
|
||||
else if(name_split.indexOf("YAML") > -1){
|
||||
folderName = "";
|
||||
$.each(name_split, function(value){
|
||||
if(name_split[value] != "YAML"){
|
||||
folderName += name_split[value]+"_";
|
||||
}
|
||||
});
|
||||
folderName = folderName.slice(0,-1);
|
||||
yaml = true;
|
||||
}
|
||||
var fullName = parentName + folderName;
|
||||
var htmlStr =
|
||||
'<span class="secondary one-label" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
|
||||
if(persis){
|
||||
var htmlStr =
|
||||
'<span class="secondary one-label" persis="true" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
|
||||
folderName +
|
||||
'</span>';
|
||||
} else if (yaml) {
|
||||
var htmlStr =
|
||||
'<span class="secondary one-label" yaml="true" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
|
||||
folderName +
|
||||
'</span>';
|
||||
} else {
|
||||
var htmlStr =
|
||||
'<span class="secondary one-label" title="' + fullName + '" one-label-full-name="' + fullName + '">' +
|
||||
folderName +
|
||||
'</span>';
|
||||
}
|
||||
|
||||
|
||||
var tree = {
|
||||
htmlStr: htmlStr,
|
||||
|
@ -22,6 +22,9 @@
|
||||
var available_views = JSON.parse('["<%=
|
||||
$views_config.available_views(session[:user], session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_labels = JSON.parse('["<%=
|
||||
$views_config.get_all_labels(session[:user_gname]).join('","')
|
||||
%>"]')
|
||||
var all_views = JSON.parse('["<%=
|
||||
$views_config.get_all_views.join('","')
|
||||
%>"]')
|
||||
@ -42,6 +45,7 @@
|
||||
},
|
||||
'view' : view,
|
||||
'available_views' : available_views,
|
||||
'all_labels' : all_labels,
|
||||
'all_views' : all_views,
|
||||
'user_id' : '<%= session[:user_id] %>',
|
||||
'user_gid' : '<%= session[:user_gid] %>',
|
||||
|
Loading…
x
Reference in New Issue
Block a user