mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
jQuery ordered map.
The ordered map is a jQuery extension for creating a collection which can be accessed both as an ordered list and as a map. This collection can be used to store various objects including entities, fields, columns, and dialogs. A test suite for this class has been added as well. Ticket #1232
This commit is contained in:
committed by
Adam Young
parent
00abd47de4
commit
46137fdf89
@@ -25,6 +25,7 @@ app_DATA = \
|
|||||||
jquery-ui.js \
|
jquery-ui.js \
|
||||||
jquery.ba-bbq.js \
|
jquery.ba-bbq.js \
|
||||||
jquery-ui.css \
|
jquery-ui.css \
|
||||||
|
jquery.ordered-map.js \
|
||||||
certificate.js \
|
certificate.js \
|
||||||
entitle.js \
|
entitle.js \
|
||||||
group.js \
|
group.js \
|
||||||
|
@@ -102,8 +102,9 @@ IPA.add_dialog = function (spec) {
|
|||||||
|
|
||||||
var field, value;
|
var field, value;
|
||||||
|
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
field = fields[i];
|
||||||
if (!field.valid) return;
|
if (!field.valid) return;
|
||||||
|
|
||||||
value = record[field.name];
|
value = record[field.name];
|
||||||
@@ -119,8 +120,9 @@ IPA.add_dialog = function (spec) {
|
|||||||
for (var j=0; j<that.sections.length; j++) {
|
for (var j=0; j<that.sections.length; j++) {
|
||||||
var section = that.sections[j];
|
var section = that.sections[j];
|
||||||
|
|
||||||
for (var k=0; k<section.fields.length; k++) {
|
var section_fields = section.fields.values;
|
||||||
field = section.fields[k];
|
for (var k=0; k<section_fields.length; k++) {
|
||||||
|
field = section_fields[k];
|
||||||
if (!field.valid) return;
|
if (!field.valid) return;
|
||||||
|
|
||||||
value = record[field.name];
|
value = record[field.name];
|
||||||
|
@@ -309,16 +309,14 @@ IPA.association_table_widget = function (spec) {
|
|||||||
that.add_method = spec.add_method || 'add_member';
|
that.add_method = spec.add_method || 'add_member';
|
||||||
that.remove_method = spec.remove_method || 'remove_member';
|
that.remove_method = spec.remove_method || 'remove_member';
|
||||||
|
|
||||||
that.adder_columns = [];
|
that.adder_columns = $.ordered_map();
|
||||||
that.adder_columns_by_name = {};
|
|
||||||
|
|
||||||
that.get_adder_column = function(name) {
|
that.get_adder_column = function(name) {
|
||||||
return that.adder_columns_by_name[name];
|
return that.adder_columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_adder_column = function(column) {
|
that.add_adder_column = function(column) {
|
||||||
that.adder_columns.push(column);
|
that.adder_columns.put(column.name, column);
|
||||||
that.adder_columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_adder_column = function(spec) {
|
that.create_adder_column = function(spec) {
|
||||||
@@ -362,13 +360,15 @@ IPA.association_table_widget = function (spec) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
column = that.columns[i];
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
column = columns[i];
|
||||||
column.entity_name = that.other_entity;
|
column.entity_name = that.other_entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j=0; j<that.adder_columns.length; j++) {
|
var adder_columns = that.adder_columns.values;
|
||||||
column = that.adder_columns[j];
|
for (var j=0; j<adder_columns.length; j++) {
|
||||||
|
column = adder_columns[j];
|
||||||
column.entity_name = that.other_entity;
|
column.entity_name = that.other_entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,8 +504,9 @@ IPA.association_table_widget = function (spec) {
|
|||||||
|
|
||||||
that.empty();
|
that.empty();
|
||||||
|
|
||||||
if (that.columns.length == 1) { // show pkey only
|
var columns = that.columns.values;
|
||||||
var name = that.columns[0].name;
|
if (columns.length == 1) { // show pkey only
|
||||||
|
var name = columns[0].name;
|
||||||
for (var i=0; i<that.values.length; i++) {
|
for (var i=0; i<that.values.length; i++) {
|
||||||
var record = {};
|
var record = {};
|
||||||
record[name] = that.values[i];
|
record[name] = that.values[i];
|
||||||
@@ -548,8 +549,9 @@ IPA.association_table_widget = function (spec) {
|
|||||||
|
|
||||||
var dialog = that.create_add_dialog();
|
var dialog = that.create_add_dialog();
|
||||||
|
|
||||||
if (that.adder_columns.length) {
|
var columns = that.adder_columns.values;
|
||||||
dialog.set_columns(that.adder_columns);
|
if (columns.length) {
|
||||||
|
dialog.set_columns(columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog.execute = function() {
|
dialog.execute = function() {
|
||||||
@@ -674,19 +676,15 @@ IPA.association_facet = function (spec) {
|
|||||||
that.add_method = spec.add_method || 'add_member';
|
that.add_method = spec.add_method || 'add_member';
|
||||||
that.remove_method = spec.remove_method || 'remove_member';
|
that.remove_method = spec.remove_method || 'remove_member';
|
||||||
|
|
||||||
that.columns = [];
|
that.columns = $.ordered_map();
|
||||||
that.columns_by_name = {};
|
that.adder_columns = $.ordered_map();
|
||||||
|
|
||||||
that.adder_columns = [];
|
|
||||||
that.adder_columns_by_name = {};
|
|
||||||
|
|
||||||
that.get_column = function(name) {
|
that.get_column = function(name) {
|
||||||
return that.columns_by_name[name];
|
return that.columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_column = function(column) {
|
that.add_column = function(column) {
|
||||||
that.columns.push(column);
|
that.columns.put(column.name, column);
|
||||||
that.columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_column = function(spec) {
|
that.create_column = function(spec) {
|
||||||
@@ -699,12 +697,11 @@ IPA.association_facet = function (spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.get_adder_column = function(name) {
|
that.get_adder_column = function(name) {
|
||||||
return that.adder_columns_by_name[name];
|
return that.adder_columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_adder_column = function(column) {
|
that.add_adder_column = function(column) {
|
||||||
that.adder_columns.push(column);
|
that.adder_columns.put(column.name, column);
|
||||||
that.adder_columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_adder_column = function(spec) {
|
that.create_adder_column = function(spec) {
|
||||||
@@ -744,8 +741,9 @@ IPA.association_facet = function (spec) {
|
|||||||
other_entity: that.other_entity
|
other_entity: that.other_entity
|
||||||
});
|
});
|
||||||
|
|
||||||
if (that.columns.length) {
|
var columns = that.columns.values;
|
||||||
that.table.set_columns(that.columns);
|
if (columns.length) {
|
||||||
|
that.table.set_columns(columns);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -774,13 +772,14 @@ IPA.association_facet = function (spec) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<that.columns.length; i++) {
|
for (i=0; i<columns.length; i++) {
|
||||||
column = that.columns[i];
|
column = columns[i];
|
||||||
column.entity_name = that.other_entity;
|
column.entity_name = that.other_entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<that.adder_columns.length; i++) {
|
var adder_columns = that.adder_columns.values;
|
||||||
column = that.adder_columns[i];
|
for (i=0; i<adder_columns.length; i++) {
|
||||||
|
column = adder_columns[i];
|
||||||
column.entity_name = that.other_entity;
|
column.entity_name = that.other_entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -871,8 +870,9 @@ IPA.association_facet = function (spec) {
|
|||||||
'attribute_member': that.attribute_member
|
'attribute_member': that.attribute_member
|
||||||
});
|
});
|
||||||
|
|
||||||
if (that.adder_columns.length) {
|
var adder_columns = that.adder_columns.values;
|
||||||
dialog.set_columns(that.adder_columns);
|
if (adder_columns.length) {
|
||||||
|
dialog.set_columns(adder_columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog.execute = function() {
|
dialog.execute = function() {
|
||||||
@@ -995,8 +995,9 @@ IPA.association_facet = function (spec) {
|
|||||||
var pkeys = data.result.result[that.name];
|
var pkeys = data.result.result[that.name];
|
||||||
if (!pkeys) return;
|
if (!pkeys) return;
|
||||||
|
|
||||||
if (that.table.columns.length == 1) { // show pkey only
|
var columns = that.table.columns.values;
|
||||||
var name = that.table.columns[0].name;
|
if (columns.length == 1) { // show pkey only
|
||||||
|
var name = columns[0].name;
|
||||||
for (var i=0; i<pkeys.length; i++) {
|
for (var i=0; i<pkeys.length; i++) {
|
||||||
var record = {};
|
var record = {};
|
||||||
record[name] = pkeys[i];
|
record[name] = pkeys[i];
|
||||||
|
@@ -40,8 +40,7 @@ IPA.details_section = function(spec) {
|
|||||||
that.template = spec.template;
|
that.template = spec.template;
|
||||||
that._entity_name = spec.entity_name;
|
that._entity_name = spec.entity_name;
|
||||||
|
|
||||||
that.fields = [];
|
that.fields = $.ordered_map();
|
||||||
that.fields_by_name = {};
|
|
||||||
|
|
||||||
that.__defineGetter__('entity_name', function() {
|
that.__defineGetter__('entity_name', function() {
|
||||||
return that._entity_name;
|
return that._entity_name;
|
||||||
@@ -50,19 +49,19 @@ IPA.details_section = function(spec) {
|
|||||||
that.__defineSetter__('entity_name', function(entity_name) {
|
that.__defineSetter__('entity_name', function(entity_name) {
|
||||||
that._entity_name = entity_name;
|
that._entity_name = entity_name;
|
||||||
|
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
that.fields[i].entity_name = entity_name;
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
fields[i].entity_name = entity_name;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
that.get_field = function(name) {
|
that.get_field = function(name) {
|
||||||
return that.fields_by_name[name];
|
return that.fields.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_field = function(field) {
|
that.add_field = function(field) {
|
||||||
field.entity_name = that.entity_name;
|
field.entity_name = that.entity_name;
|
||||||
that.fields.push(field);
|
that.fields.put(field.name, field);
|
||||||
that.fields_by_name[field.name] = field;
|
|
||||||
return field;
|
return field;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -97,8 +96,9 @@ IPA.details_section = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.init = function() {
|
that.init = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
field.init();
|
field.init();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -107,8 +107,8 @@ IPA.details_section = function(spec) {
|
|||||||
|
|
||||||
if (that.template) return;
|
if (that.template) return;
|
||||||
|
|
||||||
var fields = that.fields;
|
var fields = that.fields.values;
|
||||||
for (var i = 0; i < fields.length; ++i) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
|
|
||||||
var span = $('<span/>', { 'name': field.name }).appendTo(container);
|
var span = $('<span/>', { 'name': field.name }).appendTo(container);
|
||||||
@@ -122,8 +122,8 @@ IPA.details_section = function(spec) {
|
|||||||
|
|
||||||
if (that.template) return;
|
if (that.template) return;
|
||||||
|
|
||||||
var fields = that.fields;
|
var fields = that.fields.values;
|
||||||
for (var i = 0; i < fields.length; ++i) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
|
|
||||||
var span = $('span[name='+field.name+']', this.container).first();
|
var span = $('span[name='+field.name+']', this.container).first();
|
||||||
@@ -135,14 +135,14 @@ IPA.details_section = function(spec) {
|
|||||||
|
|
||||||
that.record = record;
|
that.record = record;
|
||||||
|
|
||||||
var fields = that.fields;
|
var fields = that.fields.values;
|
||||||
|
|
||||||
if (that.template) {
|
if (that.template) {
|
||||||
var template = IPA.get_template(that.template);
|
var template = IPA.get_template(that.template);
|
||||||
this.container.load(
|
this.container.load(
|
||||||
template,
|
template,
|
||||||
function(data, text_status, xhr) {
|
function(data, text_status, xhr) {
|
||||||
for (var i = 0; i < fields.length; ++i) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
var span = $('span[name='+field.name+']', this.container).first();
|
var span = $('span[name='+field.name+']', this.container).first();
|
||||||
field.setup(span);
|
field.setup(span);
|
||||||
@@ -161,16 +161,18 @@ IPA.details_section = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.reset = function() {
|
that.reset = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
var span = $('span[name='+field.name+']', this.container).first();
|
var span = $('span[name='+field.name+']', this.container).first();
|
||||||
field.reset();
|
field.reset();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
that.is_dirty = function() {
|
that.is_dirty = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
if (field.is_dirty()) {
|
if (field.is_dirty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -234,8 +236,8 @@ IPA.details_list_section = function(spec) {
|
|||||||
'class': 'entryattrs'
|
'class': 'entryattrs'
|
||||||
}).appendTo(container);
|
}).appendTo(container);
|
||||||
|
|
||||||
var fields = that.fields;
|
var fields = that.fields.values;
|
||||||
for (var i = 0; i < fields.length; ++i) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
|
|
||||||
var label = field.label || '';
|
var label = field.label || '';
|
||||||
@@ -539,8 +541,9 @@ IPA.details_facet = function(spec) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j=0; j<section.fields.length; j++) {
|
var section_fields = section.fields.values;
|
||||||
var field = section.fields[j];
|
for (var j=0; j<section_fields.length; j++) {
|
||||||
|
var field = section_fields[j];
|
||||||
|
|
||||||
var span = $('span[name='+field.name+']', section.container).first();
|
var span = $('span[name='+field.name+']', section.container).first();
|
||||||
values = field.save();
|
values = field.save();
|
||||||
|
@@ -40,8 +40,7 @@ IPA.dialog = function(spec) {
|
|||||||
|
|
||||||
that.buttons = {};
|
that.buttons = {};
|
||||||
|
|
||||||
that.fields = [];
|
that.fields = $.ordered_map();
|
||||||
that.fields_by_name = {};
|
|
||||||
|
|
||||||
that.sections = [];
|
that.sections = [];
|
||||||
|
|
||||||
@@ -52,8 +51,9 @@ IPA.dialog = function(spec) {
|
|||||||
that.__defineSetter__("entity_name", function(entity_name){
|
that.__defineSetter__("entity_name", function(entity_name){
|
||||||
that._entity_name = entity_name;
|
that._entity_name = entity_name;
|
||||||
|
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
that.fields[i].entity_name = entity_name;
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
fields[i].entity_name = entity_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j=0; j<that.sections.length; j++) {
|
for (var j=0; j<that.sections.length; j++) {
|
||||||
@@ -66,12 +66,11 @@ IPA.dialog = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.get_field = function(name) {
|
that.get_field = function(name) {
|
||||||
return that.fields_by_name[name];
|
return that.fields.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_field = function(field) {
|
that.add_field = function(field) {
|
||||||
that.fields.push(field);
|
that.fields.put(field.name, field);
|
||||||
that.fields_by_name[field.name] = field;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.field = function(field) {
|
that.field = function(field) {
|
||||||
@@ -80,8 +79,9 @@ IPA.dialog = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.is_valid = function() {
|
that.is_valid = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
if (!field.valid) return false;
|
if (!field.valid) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -116,8 +116,9 @@ IPA.dialog = function(spec) {
|
|||||||
|
|
||||||
that.entity = IPA.get_entity(that.entity_name);
|
that.entity = IPA.get_entity(that.entity_name);
|
||||||
|
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
field.entity_name = that.entity_name;
|
field.entity_name = that.entity_name;
|
||||||
field.init();
|
field.init();
|
||||||
}
|
}
|
||||||
@@ -136,8 +137,9 @@ IPA.dialog = function(spec) {
|
|||||||
|
|
||||||
var table = $('<table/>').appendTo(that.container);
|
var table = $('<table/>').appendTo(that.container);
|
||||||
|
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
if (field.hidden) continue;
|
if (field.hidden) continue;
|
||||||
|
|
||||||
var tr = $('<tr/>').appendTo(table);
|
var tr = $('<tr/>').appendTo(table);
|
||||||
@@ -172,8 +174,9 @@ IPA.dialog = function(spec) {
|
|||||||
* Setup behavior
|
* Setup behavior
|
||||||
*/
|
*/
|
||||||
that.setup = function() {
|
that.setup = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
|
|
||||||
var span = $('span[name="'+field.name+'"]', that.container);
|
var span = $('span[name="'+field.name+'"]', that.container);
|
||||||
field.setup(span);
|
field.setup(span);
|
||||||
@@ -241,8 +244,9 @@ IPA.dialog = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.save = function(record) {
|
that.save = function(record) {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
var values = field.save();
|
var values = field.save();
|
||||||
record[field.name] = values.join(',');
|
record[field.name] = values.join(',');
|
||||||
}
|
}
|
||||||
@@ -262,8 +266,9 @@ IPA.dialog = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.reset = function() {
|
that.reset = function() {
|
||||||
for (var i=0; i<that.fields.length; i++) {
|
var fields = that.fields.values;
|
||||||
var field = that.fields[i];
|
for (var i=0; i<fields.length; i++) {
|
||||||
|
var field = fields[i];
|
||||||
field.reset();
|
field.reset();
|
||||||
}
|
}
|
||||||
for (var j=0; j<that.sections.length; j++) {
|
for (var j=0; j<that.sections.length; j++) {
|
||||||
@@ -318,16 +323,14 @@ IPA.adder_dialog = function (spec) {
|
|||||||
|
|
||||||
that.width = spec.width || '600px';
|
that.width = spec.width || '600px';
|
||||||
|
|
||||||
that.columns = [];
|
that.columns = $.ordered_map();
|
||||||
that.columns_by_name = {};
|
|
||||||
|
|
||||||
that.get_column = function(name) {
|
that.get_column = function(name) {
|
||||||
return that.columns_by_name[name];
|
return that.columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_column = function(column) {
|
that.add_column = function(column) {
|
||||||
that.columns.push(column);
|
that.columns.put(column.name, column);
|
||||||
that.columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.set_columns = function(columns) {
|
that.set_columns = function(columns) {
|
||||||
@@ -338,8 +341,7 @@ IPA.adder_dialog = function (spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.clear_columns = function() {
|
that.clear_columns = function() {
|
||||||
that.columns = [];
|
that.columns.empty();
|
||||||
that.columns_by_name = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_column = function(spec) {
|
that.create_column = function(spec) {
|
||||||
@@ -355,7 +357,8 @@ IPA.adder_dialog = function (spec) {
|
|||||||
height: '151px'
|
height: '151px'
|
||||||
});
|
});
|
||||||
|
|
||||||
that.available_table.set_columns(that.columns);
|
var columns = that.columns.values;
|
||||||
|
that.available_table.set_columns(columns);
|
||||||
|
|
||||||
that.available_table.init();
|
that.available_table.init();
|
||||||
|
|
||||||
@@ -365,7 +368,7 @@ IPA.adder_dialog = function (spec) {
|
|||||||
height: '151px'
|
height: '151px'
|
||||||
});
|
});
|
||||||
|
|
||||||
that.selected_table.set_columns(that.columns);
|
that.selected_table.set_columns(columns);
|
||||||
|
|
||||||
that.selected_table.init();
|
that.selected_table.init();
|
||||||
|
|
||||||
|
@@ -117,8 +117,9 @@ IPA.records_facet = function(spec) {
|
|||||||
entity_name: that.entity_name
|
entity_name: that.entity_name
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
var column = that.columns[i];
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
var column = columns[i];
|
||||||
that.table.add_column(column);
|
that.table.add_column(column);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -37,8 +37,7 @@ IPA.facet = function (spec) {
|
|||||||
that.title = spec.title || that.label;
|
that.title = spec.title || that.label;
|
||||||
that._entity_name = spec.entity_name;
|
that._entity_name = spec.entity_name;
|
||||||
|
|
||||||
that.dialogs = [];
|
that.dialogs = $.ordered_map();
|
||||||
that.dialogs_by_name = {};
|
|
||||||
|
|
||||||
// facet group name
|
// facet group name
|
||||||
that.facet_group = spec.facet_group;
|
that.facet_group = spec.facet_group;
|
||||||
@@ -52,19 +51,19 @@ IPA.facet = function (spec) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
that.get_dialog = function(name) {
|
that.get_dialog = function(name) {
|
||||||
return that.dialogs_by_name[name];
|
return that.dialogs.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.dialog = function(dialog) {
|
that.dialog = function(dialog) {
|
||||||
that.dialogs.push(dialog);
|
that.dialogs.put(dialog.name, dialog);
|
||||||
that.dialogs_by_name[dialog.name] = dialog;
|
|
||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.init = function() {
|
that.init = function() {
|
||||||
|
|
||||||
for (var i=0; i<that.dialogs.length; i++){
|
var dialogs = that.dialogs.values;
|
||||||
var dialog = that.dialogs[i];
|
for (var i=0; i<dialogs.length; i++){
|
||||||
|
var dialog = dialogs[i];
|
||||||
dialog.entity_name = that._entity_name;
|
dialog.entity_name = that._entity_name;
|
||||||
dialog.init();
|
dialog.init();
|
||||||
}
|
}
|
||||||
@@ -148,8 +147,7 @@ IPA.table_facet = function(spec) {
|
|||||||
|
|
||||||
var that = IPA.facet(spec);
|
var that = IPA.facet(spec);
|
||||||
|
|
||||||
that.columns = [];
|
that.columns = $.ordered_map();
|
||||||
that.columns_by_name = {};
|
|
||||||
|
|
||||||
that.__defineGetter__('entity_name', function() {
|
that.__defineGetter__('entity_name', function() {
|
||||||
return that._entity_name;
|
return that._entity_name;
|
||||||
@@ -158,23 +156,23 @@ IPA.table_facet = function(spec) {
|
|||||||
that.__defineSetter__('entity_name', function(entity_name) {
|
that.__defineSetter__('entity_name', function(entity_name) {
|
||||||
that._entity_name = entity_name;
|
that._entity_name = entity_name;
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
that.columns[i].entity_name = entity_name;
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
columns[i].entity_name = entity_name;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
that.get_columns = function() {
|
that.get_columns = function() {
|
||||||
return that.columns;
|
return that.columns.values;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_column = function(name) {
|
that.get_column = function(name) {
|
||||||
return that.columns_by_name[name];
|
return that.columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_column = function(column) {
|
that.add_column = function(column) {
|
||||||
column.entity_name = that.entity_name;
|
column.entity_name = that.entity_name;
|
||||||
that.columns.push(column);
|
that.columns.put(column.name, column);
|
||||||
that.columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_column = function(spec) {
|
that.create_column = function(spec) {
|
||||||
@@ -214,16 +212,14 @@ IPA.facet_group = function(spec) {
|
|||||||
that.name = spec.name;
|
that.name = spec.name;
|
||||||
that.label = spec.label;
|
that.label = spec.label;
|
||||||
|
|
||||||
that.facets = [];
|
that.facets = $.ordered_map();
|
||||||
that.facets_by_name = {};
|
|
||||||
|
|
||||||
that.add_facet = function(facet) {
|
that.add_facet = function(facet) {
|
||||||
that.facets.push(facet);
|
that.facets.put(facet.name, facet);
|
||||||
that.facets_by_name[facet.name] = facet;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_facet = function(name) {
|
that.get_facet = function(name) {
|
||||||
return that.facets_by_name[name];
|
return that.facets.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
return that;
|
return that;
|
||||||
@@ -240,20 +236,16 @@ IPA.entity = function (spec) {
|
|||||||
|
|
||||||
that.header = spec.header || IPA.entity_header({entity: that});
|
that.header = spec.header || IPA.entity_header({entity: that});
|
||||||
|
|
||||||
that.dialogs = [];
|
that.dialogs = $.ordered_map();
|
||||||
that.dialogs_by_name = {};
|
|
||||||
|
|
||||||
that.facets = [];
|
that.facets = $.ordered_map();
|
||||||
that.facets_by_name = {};
|
that.facet_groups = $.ordered_map();
|
||||||
|
|
||||||
// current facet
|
// current facet
|
||||||
that.facet_name = null;
|
that.facet_name = null;
|
||||||
|
|
||||||
that.facet_groups = [];
|
|
||||||
that.facet_groups_by_name = {};
|
|
||||||
|
|
||||||
that.get_dialog = function(name) {
|
that.get_dialog = function(name) {
|
||||||
return that.dialogs_by_name[name];
|
return that.dialogs.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_dialog = function(dialog) {
|
that.add_dialog = function(dialog) {
|
||||||
@@ -262,45 +254,43 @@ IPA.entity = function (spec) {
|
|||||||
|
|
||||||
that.dialog = function(dialog) {
|
that.dialog = function(dialog) {
|
||||||
dialog.entity_name = that.name;
|
dialog.entity_name = that.name;
|
||||||
that.dialogs.push(dialog);
|
that.dialogs.put(dialog.name, dialog);
|
||||||
that.dialogs_by_name[dialog.name] = dialog;
|
|
||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_facet_group = function(facet_group) {
|
that.add_facet_group = function(facet_group) {
|
||||||
that.facet_groups.push(facet_group);
|
that.facet_groups.put(facet_group.name, facet_group);
|
||||||
that.facet_groups_by_name[facet_group.name] = facet_group;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_facet_group = function(name) {
|
that.get_facet_group = function(name) {
|
||||||
return that.facet_groups_by_name[name];
|
return that.facet_groups.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.remove_facet_groups = function() {
|
that.remove_facet_groups = function() {
|
||||||
that.facet_groups = [];
|
that.facet_groups.empty();
|
||||||
that.facet_groups_by_name = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_facet = function(name) {
|
that.get_facet = function(name) {
|
||||||
if (name === 'default') {
|
if (name === 'default') {
|
||||||
// return the first facet in the first facet group
|
// return the first facet in the first facet group
|
||||||
for (var i=0; i<that.facet_groups.length; i++) {
|
var facet_groups = that.facet_groups.values;
|
||||||
var facet_group = that.facet_groups[i];
|
for (var i=0; i<facet_groups.length; i++) {
|
||||||
if (!facet_group.facets.length) continue;
|
var facet_group = facet_groups[i];
|
||||||
return facet_group.facets[0];
|
var facets = facet_group.facets.values;
|
||||||
|
if (!facets.length) continue;
|
||||||
|
return facets[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return that.facets[0];
|
return that.facets.values[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return that.facets_by_name[name];
|
return that.facets.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_facet = function(facet) {
|
that.add_facet = function(facet) {
|
||||||
facet.entity_name = that.name;
|
facet.entity_name = that.name;
|
||||||
that.facets.push(facet);
|
that.facets.put(facet.name, facet);
|
||||||
that.facets_by_name[facet.name] = facet;
|
|
||||||
|
|
||||||
if (facet.facet_group) {
|
if (facet.facet_group) {
|
||||||
var facet_group = that.get_facet_group(facet.facet_group);
|
var facet_group = that.get_facet_group(facet.facet_group);
|
||||||
if (facet_group) {
|
if (facet_group) {
|
||||||
@@ -313,14 +303,16 @@ IPA.entity = function (spec) {
|
|||||||
|
|
||||||
that.init = function() {
|
that.init = function() {
|
||||||
|
|
||||||
for (var i=0; i<that.facets.length; i++) {
|
var facets = that.facets.values;
|
||||||
var facet = that.facets[i];
|
for (var i=0; i<facets.length; i++) {
|
||||||
|
var facet = facets[i];
|
||||||
facet.entity = that;
|
facet.entity = that;
|
||||||
facet.init();
|
facet.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j=0; j<that.dialogs.length; j++) {
|
var dialogs = that.dialogs.values;
|
||||||
that.dialogs[j].init();
|
for (var j=0; j<dialogs.length; j++) {
|
||||||
|
dialogs[j].init();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -382,8 +374,9 @@ IPA.entity = function (spec) {
|
|||||||
|
|
||||||
IPA.current_facet = function (entity){
|
IPA.current_facet = function (entity){
|
||||||
var facet_name = $.bbq.getState(entity.name + '-facet', true);
|
var facet_name = $.bbq.getState(entity.name + '-facet', true);
|
||||||
if (!facet_name && entity.facets.length) {
|
var facets = entity.facets.values;
|
||||||
facet_name = entity.facets[0].name;
|
if (!facet_name && facets.length) {
|
||||||
|
facet_name = facets[0].name;
|
||||||
}
|
}
|
||||||
return facet_name;
|
return facet_name;
|
||||||
};
|
};
|
||||||
@@ -526,8 +519,9 @@ IPA.entity_header = function(spec) {
|
|||||||
'class': 'facet-tab'
|
'class': 'facet-tab'
|
||||||
}).appendTo(section);
|
}).appendTo(section);
|
||||||
|
|
||||||
for (var i=0; i<facet_group.facets.length; i++) {
|
var facets = facet_group.facets.values;
|
||||||
var facet = facet_group.facets[i];
|
for (var i=0; i<facets.length; i++) {
|
||||||
|
var facet = facets[i];
|
||||||
that.facet_link(ul, facet);
|
that.facet_link(ul, facet);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -574,7 +568,7 @@ IPA.entity_header = function(spec) {
|
|||||||
'class': 'entity-tabs'
|
'class': 'entity-tabs'
|
||||||
}).appendTo(container);
|
}).appendTo(container);
|
||||||
|
|
||||||
var facet_groups = that.entity.facet_groups;
|
var facet_groups = that.entity.facet_groups.values;
|
||||||
for (var i=0; i<facet_groups.length; i++) {
|
for (var i=0; i<facet_groups.length; i++) {
|
||||||
var facet_group = facet_groups[i];
|
var facet_group = facet_groups[i];
|
||||||
if (facet_group.facets.length) {
|
if (facet_group.facets.length) {
|
||||||
|
@@ -434,8 +434,9 @@ IPA.hbacrule_details_facet = function (spec) {
|
|||||||
for (var i=0; i<that.sections.length; i++) {
|
for (var i=0; i<that.sections.length; i++) {
|
||||||
var section = that.sections[i];
|
var section = that.sections[i];
|
||||||
|
|
||||||
for (var j=0; j<section.fields.length; j++) {
|
var section_fields = section.fields.values;
|
||||||
var field = section.fields[j];
|
for (var j=0; j<section_fields.length; j++) {
|
||||||
|
var field = section_fields[j];
|
||||||
|
|
||||||
var span = $('span[name='+field.name+']', section.container).first();
|
var span = $('span[name='+field.name+']', section.container).first();
|
||||||
var values = field.save();
|
var values = field.save();
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
<script type="text/javascript" src="jquery.js"></script>
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
<script type="text/javascript" src="jquery-ui.js"></script>
|
<script type="text/javascript" src="jquery-ui.js"></script>
|
||||||
<script type="text/javascript" src="jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="jquery.ba-bbq.js"></script>
|
||||||
|
<script type="text/javascript" src="jquery.ordered-map.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="ipa.js"></script>
|
<script type="text/javascript" src="ipa.js"></script>
|
||||||
<script type="text/javascript" src="widget.js"></script>
|
<script type="text/javascript" src="widget.js"></script>
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
/*jsl:import jquery.ordered-map.js */
|
||||||
/* Authors:
|
/* Authors:
|
||||||
* Pavel Zuna <pzuna@redhat.com>
|
* Pavel Zuna <pzuna@redhat.com>
|
||||||
* Adam Young <ayoung@redhat.com>
|
* Adam Young <ayoung@redhat.com>
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* REQUIRES: jquery.ordered-map.js */
|
||||||
/*global $:true, location:true */
|
/*global $:true, location:true */
|
||||||
|
|
||||||
var IPA = ( function () {
|
var IPA = ( function () {
|
||||||
@@ -47,11 +49,9 @@ var IPA = ( function () {
|
|||||||
that.messages = {};
|
that.messages = {};
|
||||||
that.whoami = {};
|
that.whoami = {};
|
||||||
|
|
||||||
that.entities = [];
|
that.entities = $.ordered_map();
|
||||||
that.entity_factories = {};
|
that.entity_factories = {};
|
||||||
|
|
||||||
that.entities_by_name = {};
|
|
||||||
|
|
||||||
that.layout = $.bbq.getState('layout');
|
that.layout = $.bbq.getState('layout');
|
||||||
that.layouts_dir = 'layouts';
|
that.layouts_dir = 'layouts';
|
||||||
|
|
||||||
@@ -127,27 +127,19 @@ var IPA = ( function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.get_entities = function() {
|
that.get_entities = function() {
|
||||||
return that.entities;
|
return that.entities.values;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_entity = function(name) {
|
that.get_entity = function(name) {
|
||||||
return that.entities_by_name[name];
|
return that.entities.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_entity = function(entity) {
|
that.add_entity = function(entity) {
|
||||||
that.entities.push(entity);
|
that.entities.put(entity.name, entity);
|
||||||
that.entities_by_name[entity.name] = entity;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.remove_entity = function(name) {
|
that.remove_entity = function(name) {
|
||||||
for (var i=0; i<that.entities.length; i++) {
|
that.entities.remove(name);
|
||||||
var entity = that.entities[i];
|
|
||||||
if (name == entity.name) {
|
|
||||||
that.entities.splice(i, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delete that.entities_by_name[entity.name];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.start_entities = function() {
|
that.start_entities = function() {
|
||||||
|
68
install/ui/jquery.ordered-map.js
Executable file
68
install/ui/jquery.ordered-map.js
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
/* Authors:
|
||||||
|
* Endi Dewata <edewata@redhat.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Red Hat
|
||||||
|
* see file 'COPYING' for use and warranty information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
jQuery.ordered_map = jQuery.fn.ordered_map = function() {
|
||||||
|
|
||||||
|
var that = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These variables can be read directly but should not be
|
||||||
|
* modified directly. Use the provided methods instead.
|
||||||
|
*/
|
||||||
|
that.keys = [];
|
||||||
|
that.values = [];
|
||||||
|
that.map = {};
|
||||||
|
|
||||||
|
that.__defineGetter__('length', function() {
|
||||||
|
return that.keys.length;
|
||||||
|
});
|
||||||
|
|
||||||
|
that.get = function(key) {
|
||||||
|
return that.map[key];
|
||||||
|
};
|
||||||
|
|
||||||
|
that.put = function(key, value) {
|
||||||
|
that.keys.push(key);
|
||||||
|
that.values.push(value);
|
||||||
|
that.map[key] = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
that.remove = function(key) {
|
||||||
|
|
||||||
|
var i = that.keys.indexOf(key);
|
||||||
|
if (i<0) return null;
|
||||||
|
|
||||||
|
that.keys.splice(i, 1);
|
||||||
|
that.values.splice(i, 1);
|
||||||
|
|
||||||
|
var value = that.map[key];
|
||||||
|
delete that.map[key];
|
||||||
|
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
that.empty = function() {
|
||||||
|
that.keys = [];
|
||||||
|
that.values = [];
|
||||||
|
that.map = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
@@ -117,6 +117,7 @@
|
|||||||
+define alert
|
+define alert
|
||||||
+define $
|
+define $
|
||||||
+define JSON
|
+define JSON
|
||||||
|
+define jQuery
|
||||||
|
|
||||||
### Files
|
### Files
|
||||||
# Specify which files to lint
|
# Specify which files to lint
|
||||||
@@ -124,6 +125,7 @@
|
|||||||
# To add a set of files, use "+process FileName", "+process Folder\Path\*.js",
|
# To add a set of files, use "+process FileName", "+process Folder\Path\*.js",
|
||||||
# or "+process Folder\Path\*.htm".
|
# or "+process Folder\Path\*.htm".
|
||||||
#
|
#
|
||||||
|
+process jquery.ordered-map.js
|
||||||
+process ipa.js
|
+process ipa.js
|
||||||
+process widget.js
|
+process widget.js
|
||||||
+process dialog.js
|
+process dialog.js
|
||||||
|
@@ -67,8 +67,9 @@ IPA.search_facet = function(spec) {
|
|||||||
search_all: that.search_all
|
search_all: that.search_all
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
var column = that.columns[i];
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
var column = columns[i];
|
||||||
|
|
||||||
var param_info = IPA.get_entity_param(that.entity_name, column.name);
|
var param_info = IPA.get_entity_param(that.entity_name, column.name);
|
||||||
column.primary_key = param_info && param_info['primary_key'];
|
column.primary_key = param_info && param_info['primary_key'];
|
||||||
|
@@ -450,8 +450,9 @@ IPA.sudorule_details_facet = function (spec) {
|
|||||||
for (var i=0; i<that.sections.length; i++) {
|
for (var i=0; i<that.sections.length; i++) {
|
||||||
var section = that.sections[i];
|
var section = that.sections[i];
|
||||||
|
|
||||||
for (var j=0; j<section.fields.length; j++) {
|
var section_fields = section.fields.values;
|
||||||
var field = section.fields[j];
|
for (var j=0; j<section_fields.length; j++) {
|
||||||
|
var field = section_fields[j];
|
||||||
|
|
||||||
var span = $('span[name='+field.name+']', section.container).first();
|
var span = $('span[name='+field.name+']', section.container).first();
|
||||||
var values = field.save();
|
var values = field.save();
|
||||||
@@ -1097,7 +1098,8 @@ IPA.sudo.rule_association_adder_dialog = function (spec) {
|
|||||||
name: 'available'
|
name: 'available'
|
||||||
});
|
});
|
||||||
|
|
||||||
that.available_table.set_columns(that.columns);
|
var columns = that.columns.values;
|
||||||
|
that.available_table.set_columns(columns);
|
||||||
|
|
||||||
that.available_table.init();
|
that.available_table.init();
|
||||||
|
|
||||||
@@ -1105,7 +1107,7 @@ IPA.sudo.rule_association_adder_dialog = function (spec) {
|
|||||||
name: 'selected'
|
name: 'selected'
|
||||||
});
|
});
|
||||||
|
|
||||||
that.selected_table.set_columns(that.columns);
|
that.selected_table.set_columns(columns);
|
||||||
|
|
||||||
that.selected_table.init();
|
that.selected_table.init();
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../widget.js"></script>
|
<script type="text/javascript" src="../widget.js"></script>
|
||||||
<script type="text/javascript" src="../dialog.js"></script>
|
<script type="text/javascript" src="../dialog.js"></script>
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../widget.js"></script>
|
<script type="text/javascript" src="../widget.js"></script>
|
||||||
<script type="text/javascript" src="../dialog.js"></script>
|
<script type="text/javascript" src="../dialog.js"></script>
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
<script type="text/javascript" src="../navigation.js"></script>
|
<script type="text/javascript" src="../navigation.js"></script>
|
||||||
<script type="text/javascript" src="../certificate.js"></script>
|
<script type="text/javascript" src="../certificate.js"></script>
|
||||||
<script type="text/javascript" src="../aci.js"></script>
|
<script type="text/javascript" src="../aci.js"></script>
|
||||||
|
<script type="text/javascript" src="ordered_map_tests.js"></script>
|
||||||
<script type="text/javascript" src="ipa_tests.js"></script>
|
<script type="text/javascript" src="ipa_tests.js"></script>
|
||||||
<script type="text/javascript" src="details_tests.js"></script>
|
<script type="text/javascript" src="details_tests.js"></script>
|
||||||
<script type="text/javascript" src="entity_tests.js"></script>
|
<script type="text/javascript" src="entity_tests.js"></script>
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../details.js"></script>
|
<script type="text/javascript" src="../details.js"></script>
|
||||||
<script type="text/javascript" src="../search.js"></script>
|
<script type="text/javascript" src="../search.js"></script>
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../details.js"></script>
|
<script type="text/javascript" src="../details.js"></script>
|
||||||
<script type="text/javascript" src="../search.js"></script>
|
<script type="text/javascript" src="../search.js"></script>
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../widget.js"></script>
|
<script type="text/javascript" src="../widget.js"></script>
|
||||||
<script type="text/javascript" src="../dialog.js"></script>
|
<script type="text/javascript" src="../dialog.js"></script>
|
||||||
|
@@ -62,7 +62,7 @@ test("Testing IPA.details_section.create().", function() {
|
|||||||
section.entity_name = 'user';
|
section.entity_name = 'user';
|
||||||
section.init();
|
section.init();
|
||||||
|
|
||||||
var fields = section.fields;
|
var fields = section.fields.values;
|
||||||
var container = $("<div/>");
|
var container = $("<div/>");
|
||||||
section.create(container);
|
section.create(container);
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ test("Testing IPA.details_section_setup again()",function(){
|
|||||||
text({name:'cn', label:'Entity Name'}).
|
text({name:'cn', label:'Entity Name'}).
|
||||||
text({name:'description', label:'Description'}).
|
text({name:'description', label:'Description'}).
|
||||||
text({name:'number', label:'Entity ID'});
|
text({name:'number', label:'Entity ID'});
|
||||||
var fields = section.fields;
|
var fields = section.fields.values;
|
||||||
var container = $("<div title='entity'/>");
|
var container = $("<div title='entity'/>");
|
||||||
var details = $("<div/>");
|
var details = $("<div/>");
|
||||||
container.append(details);
|
container.append(details);
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
<script type="text/javascript" src="qunit.js"></script>
|
<script type="text/javascript" src="qunit.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../widget.js"></script>
|
<script type="text/javascript" src="../widget.js"></script>
|
||||||
<script type="text/javascript" src="../dialog.js"></script>
|
<script type="text/javascript" src="../dialog.js"></script>
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
<div id="content">
|
<div id="content">
|
||||||
<a href="all_tests.html">Complete Test Suite</a>
|
<a href="all_tests.html">Complete Test Suite</a>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="ordered_map_tests.html">Ordered Map Test Suite</a>
|
||||||
<li><a href="ipa_tests.html">Core Test Suite</a>
|
<li><a href="ipa_tests.html">Core Test Suite</a>
|
||||||
<li><a href="entity_tests.html">Entity Test Suite</a>
|
<li><a href="entity_tests.html">Entity Test Suite</a>
|
||||||
<li><a href="details_tests.html">Details Test Suite</a>
|
<li><a href="details_tests.html">Details Test Suite</a>
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="ipa_tests.js"></script>
|
<script type="text/javascript" src="ipa_tests.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../entity.js"></script>
|
<script type="text/javascript" src="../entity.js"></script>
|
||||||
<script type="text/javascript" src="../navigation.js"></script>
|
<script type="text/javascript" src="../navigation.js"></script>
|
||||||
|
21
install/ui/test/ordered_map_tests.html
Executable file
21
install/ui/test/ordered_map_tests.html
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Ordered Map Test Suite</title>
|
||||||
|
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../jquery-ui.css" />
|
||||||
|
|
||||||
|
<script type="text/javascript" src="qunit.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
|
<script type="text/javascript" src="ordered_map_tests.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 id="qunit-header">Ordered Map Test Suite</h1>
|
||||||
|
<h2 id="qunit-banner"></h2>
|
||||||
|
<div id="qunit-testrunner-toolbar"></div>
|
||||||
|
<h2 id="qunit-userAgent"></h2>
|
||||||
|
<ol id="qunit-tests"></ol>
|
||||||
|
<div id="qunit-fixture"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
128
install/ui/test/ordered_map_tests.js
Executable file
128
install/ui/test/ordered_map_tests.js
Executable file
@@ -0,0 +1,128 @@
|
|||||||
|
/* Authors:
|
||||||
|
* Endi Sukma Dewata <edewata@redhat.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Red Hat
|
||||||
|
* see file 'COPYING' for use and warranty information
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module('ordered_map');
|
||||||
|
|
||||||
|
test("Testing $.ordered_map constructor.", function() {
|
||||||
|
|
||||||
|
var test = $.ordered_map();
|
||||||
|
|
||||||
|
strictEqual(test.length, 0, "Checking length.");
|
||||||
|
deepEqual(test.keys, [], "Checking keys.");
|
||||||
|
deepEqual(test.values, [], "Checking values.");
|
||||||
|
deepEqual(test.map, {}, "Checking map.");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Testing $.ordered_map.put().", function() {
|
||||||
|
|
||||||
|
var test = $.ordered_map();
|
||||||
|
|
||||||
|
var key1 = 'key1';
|
||||||
|
var value1 = 'value1';
|
||||||
|
|
||||||
|
var key2 = 'key2';
|
||||||
|
var value2 = 'value2';
|
||||||
|
|
||||||
|
var map = {};
|
||||||
|
map[key1] = value1;
|
||||||
|
map[key2] = value2;
|
||||||
|
|
||||||
|
test.put(key1, value1);
|
||||||
|
test.put(key2, value2);
|
||||||
|
|
||||||
|
strictEqual(test.length, 2, 'Checking length.');
|
||||||
|
deepEqual(test.keys, [key1, key2], 'Checking keys.');
|
||||||
|
deepEqual(test.values, [value1, value2], 'Checking values.');
|
||||||
|
deepEqual(test.map, map, 'Checking map.');
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Testing $.ordered_map.get().", function() {
|
||||||
|
|
||||||
|
var test = $.ordered_map();
|
||||||
|
|
||||||
|
var key1 = 'key1';
|
||||||
|
var value1 = 'value1';
|
||||||
|
|
||||||
|
var key2 = 'key2';
|
||||||
|
var value2 = 'value2';
|
||||||
|
|
||||||
|
var map = {};
|
||||||
|
map[key1] = value1;
|
||||||
|
map[key2] = value2;
|
||||||
|
|
||||||
|
test.put(key1, value1);
|
||||||
|
test.put(key2, value2);
|
||||||
|
|
||||||
|
var result1 = test.get(key1);
|
||||||
|
var result2 = test.get(key2);
|
||||||
|
|
||||||
|
strictEqual(test.length, 2, 'Checking length.');
|
||||||
|
deepEqual(test.keys, [key1, key2], 'Checking keys.');
|
||||||
|
deepEqual(test.values, [value1, value2], 'Checking values.');
|
||||||
|
deepEqual(test.map, map, 'Checking map.');
|
||||||
|
strictEqual(result1, value1, 'Checking result 1.');
|
||||||
|
strictEqual(result2, value2, 'Checking result 2.');
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Testing $.ordered_map.remove().", function() {
|
||||||
|
|
||||||
|
var test = $.ordered_map();
|
||||||
|
|
||||||
|
var key1 = 'key1';
|
||||||
|
var value1 = 'value1';
|
||||||
|
|
||||||
|
var key2 = 'key2';
|
||||||
|
var value2 = 'value2';
|
||||||
|
|
||||||
|
var map = {};
|
||||||
|
map[key2] = value2;
|
||||||
|
|
||||||
|
test.put(key1, value1);
|
||||||
|
test.put(key2, value2);
|
||||||
|
|
||||||
|
var result1 = test.remove(key1);
|
||||||
|
|
||||||
|
strictEqual(test.length, 1, 'Checking length.');
|
||||||
|
deepEqual(test.keys, [key2], 'Checking keys.');
|
||||||
|
deepEqual(test.values, [value2], 'Checking values.');
|
||||||
|
deepEqual(test.map, map, 'Checking map.');
|
||||||
|
strictEqual(result1, value1, 'Checking result.');
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Testing $.ordered_map.empty().", function() {
|
||||||
|
|
||||||
|
var test = $.ordered_map();
|
||||||
|
|
||||||
|
var key1 = 'key1';
|
||||||
|
var value1 = 'value1';
|
||||||
|
|
||||||
|
var key2 = 'key2';
|
||||||
|
var value2 = 'value2';
|
||||||
|
|
||||||
|
test.put(key1, value1);
|
||||||
|
test.put(key2, value2);
|
||||||
|
|
||||||
|
test.empty();
|
||||||
|
|
||||||
|
strictEqual(test.length, 0, 'Checking length.');
|
||||||
|
deepEqual(test.keys, [], 'Checking keys.');
|
||||||
|
deepEqual(test.values, [], 'Checking values.');
|
||||||
|
deepEqual(test.map, {}, 'Checking map.');
|
||||||
|
});
|
@@ -10,6 +10,7 @@
|
|||||||
<script type="text/javascript" src="../jquery.js"></script>
|
<script type="text/javascript" src="../jquery.js"></script>
|
||||||
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
<script type="text/javascript" src="../jquery.ba-bbq.js"></script>
|
||||||
<script type="text/javascript" src="../jquery-ui.js"></script>
|
<script type="text/javascript" src="../jquery-ui.js"></script>
|
||||||
|
<script type="text/javascript" src="../jquery.ordered-map.js"></script>
|
||||||
<script type="text/javascript" src="../ipa.js"></script>
|
<script type="text/javascript" src="../ipa.js"></script>
|
||||||
<script type="text/javascript" src="../widget.js"></script>
|
<script type="text/javascript" src="../widget.js"></script>
|
||||||
|
|
||||||
|
@@ -1078,20 +1078,18 @@ IPA.table_widget = function (spec) {
|
|||||||
that.scrollable = spec.scrollable;
|
that.scrollable = spec.scrollable;
|
||||||
that.save_values = typeof spec.save_values == 'undefined' ? true : spec.save_values;
|
that.save_values = typeof spec.save_values == 'undefined' ? true : spec.save_values;
|
||||||
|
|
||||||
that.columns = [];
|
that.columns = $.ordered_map();
|
||||||
that.columns_by_name = {};
|
|
||||||
|
|
||||||
that.get_columns = function() {
|
that.get_columns = function() {
|
||||||
return that.columns;
|
return that.columns.values;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.get_column = function(name) {
|
that.get_column = function(name) {
|
||||||
return that.columns_by_name[name];
|
return that.columns.get(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.add_column = function(column) {
|
that.add_column = function(column) {
|
||||||
that.columns.push(column);
|
that.columns.put(column.name, column);
|
||||||
that.columns_by_name[column.name] = column;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.set_columns = function(columns) {
|
that.set_columns = function(columns) {
|
||||||
@@ -1102,8 +1100,7 @@ IPA.table_widget = function (spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.clear_columns = function() {
|
that.clear_columns = function() {
|
||||||
that.columns = [];
|
that.columns.empty();
|
||||||
that.columns_by_name = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.create_column = function(spec) {
|
that.create_column = function(spec) {
|
||||||
@@ -1115,8 +1112,9 @@ IPA.table_widget = function (spec) {
|
|||||||
that.init = function() {
|
that.init = function() {
|
||||||
that.widget_init();
|
that.widget_init();
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
var column = that.columns[i];
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
var column = columns[i];
|
||||||
column.init();
|
column.init();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1144,12 +1142,13 @@ IPA.table_widget = function (spec) {
|
|||||||
'name': 'select'
|
'name': 'select'
|
||||||
}).appendTo(th);
|
}).appendTo(th);
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++) {
|
var columns = that.columns.values;
|
||||||
var column = that.columns[i];
|
for (var i=0; i<columns.length; i++) {
|
||||||
|
var column = columns[i];
|
||||||
|
|
||||||
th = $('<th/>').appendTo(tr);
|
th = $('<th/>').appendTo(tr);
|
||||||
|
|
||||||
if (that.scrollable && (i == that.columns.length-1)) {
|
if (that.scrollable && (i == columns.length-1)) {
|
||||||
if (column.width) {
|
if (column.width) {
|
||||||
var width = parseInt(column.width.substring(0, column.width.length-2),10);
|
var width = parseInt(column.width.substring(0, column.width.length-2),10);
|
||||||
width += 16;
|
width += 16;
|
||||||
@@ -1168,7 +1167,7 @@ IPA.table_widget = function (spec) {
|
|||||||
'html': label
|
'html': label
|
||||||
}).appendTo(th);
|
}).appendTo(th);
|
||||||
|
|
||||||
if (i == that.columns.length-1) {
|
if (i == columns.length-1) {
|
||||||
$('<span/>', {
|
$('<span/>', {
|
||||||
'name': 'buttons',
|
'name': 'buttons',
|
||||||
'style': 'float: right;'
|
'style': 'float: right;'
|
||||||
@@ -1194,8 +1193,8 @@ IPA.table_widget = function (spec) {
|
|||||||
'value': 'user'
|
'value': 'user'
|
||||||
}).appendTo(td);
|
}).appendTo(td);
|
||||||
|
|
||||||
for (/* var */ i=0; i<that.columns.length; i++) {
|
for (/* var */ i=0; i<columns.length; i++) {
|
||||||
/* var */ column = that.columns[i];
|
/* var */ column = columns[i];
|
||||||
|
|
||||||
td = $('<td/>').appendTo(tr);
|
td = $('<td/>').appendTo(tr);
|
||||||
if (column.width) {
|
if (column.width) {
|
||||||
@@ -1211,7 +1210,7 @@ IPA.table_widget = function (spec) {
|
|||||||
|
|
||||||
tr = $('<tr/>').appendTo(tfoot);
|
tr = $('<tr/>').appendTo(tfoot);
|
||||||
|
|
||||||
td = $('<td/>', { colspan: that.columns.length+1 }).appendTo(tr);
|
td = $('<td/>', { colspan: columns.length+1 }).appendTo(tr);
|
||||||
|
|
||||||
$('<span/>', {
|
$('<span/>', {
|
||||||
'name': 'summary'
|
'name': 'summary'
|
||||||
@@ -1295,17 +1294,22 @@ IPA.table_widget = function (spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.get_record = function(result, index) {
|
that.get_record = function(result, index) {
|
||||||
|
|
||||||
var record = {};
|
var record = {};
|
||||||
for (var i=0; i<that.columns.length; i++){
|
|
||||||
var name = that.columns[i].name;
|
var columns = that.columns.values;
|
||||||
|
for (var i=0; i<columns.length; i++){
|
||||||
|
var name = columns[i].name;
|
||||||
var values = result[name];
|
var values = result[name];
|
||||||
if (!values) continue;
|
if (!values) continue;
|
||||||
|
|
||||||
if (values instanceof Array){
|
if (values instanceof Array){
|
||||||
record[name] = values[index];
|
record[name] = values[index];
|
||||||
}else{
|
}else{
|
||||||
record[name] = values;
|
record[name] = values;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1314,8 +1318,9 @@ IPA.table_widget = function (spec) {
|
|||||||
var tr = that.row.clone();
|
var tr = that.row.clone();
|
||||||
tr.appendTo(that.tbody);
|
tr.appendTo(that.tbody);
|
||||||
|
|
||||||
for (var i=0; i<that.columns.length; i++){
|
var columns = that.columns.values;
|
||||||
var column = that.columns[i];
|
for (var i=0; i<columns.length; i++){
|
||||||
|
var column = columns[i];
|
||||||
|
|
||||||
var value = record[column.name];
|
var value = record[column.name];
|
||||||
value = value ? value.toString() : '';
|
value = value ? value.toString() : '';
|
||||||
|
Reference in New Issue
Block a user