mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-28 18:01:23 -06:00
d92f5bf8bb
The labels for the following fields in Host details page have been changed: - fqdn: Fully Qualified Host Name - serverhostname: Host Name The ipa_details_field_create_input() and _ipa_create_text_input() has been converted into methods in ipa_details_field class. The code has been modified to display read-only fields as labels instead of disabled text fields. The attributelevelrights in host test data files have been updated.
1304 lines
32 KiB
JavaScript
Executable File
1304 lines
32 KiB
JavaScript
Executable File
/* 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/>.
|
|
*/
|
|
|
|
/* REQUIRES: ipa.js */
|
|
|
|
function ipa_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = {};
|
|
|
|
that.id = spec.id;
|
|
that.name = spec.name;
|
|
that.label = spec.label;
|
|
that.read_only = spec.read_only;
|
|
that._entity_name = spec.entity_name;
|
|
|
|
that.width = spec.width;
|
|
that.height = spec.height;
|
|
|
|
that.undo = typeof spec.undo == 'undefined' ? true : spec.undo;
|
|
|
|
that.init = spec.init || init;
|
|
that.create = spec.create || create;
|
|
that.setup = spec.setup || setup;
|
|
that.load = spec.load || load;
|
|
that.save = spec.save || save;
|
|
that.update = spec.update || update;
|
|
that.validate_input = spec.validate_input || validate_input;
|
|
that.param_info = spec.param_info;
|
|
|
|
that.__defineGetter__("entity_name", function(){
|
|
return that._entity_name;
|
|
});
|
|
|
|
that.__defineSetter__("entity_name", function(entity_name){
|
|
that._entity_name = entity_name;
|
|
});
|
|
|
|
/*returns true and clears the error message if the field value passes
|
|
the validation pattern. If the field value does not pass validation,
|
|
displays the error message and returns false. */
|
|
function validate_input(text) {
|
|
if (!(that.param_info && that.param_info.pattern)) {
|
|
return true;
|
|
}
|
|
var error_link = that.get_error_link();
|
|
if (!error_link) {
|
|
return true;
|
|
}
|
|
var regex = new RegExp( that.param_info.pattern );
|
|
//If the field is empty, don't validate
|
|
if ( !text || text.match(regex) ) {
|
|
error_link.css('display', 'none');
|
|
return true;
|
|
}else{
|
|
error_link.css('display', 'block');
|
|
if (that.param_info.pattern_errmsg) {
|
|
error_link.html(that.param_info.pattern_errmsg);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
if (that.entity_name && !that.label){
|
|
that.param_info = ipa_get_param_info(that.entity_name, that.name);
|
|
if ((that.param_info) && (that.label === undefined)){
|
|
that.label = that.param_info.label;
|
|
}
|
|
}
|
|
}
|
|
|
|
function create(container) {
|
|
}
|
|
|
|
function setup(container) {
|
|
that.container = container;
|
|
}
|
|
|
|
function load(record) {
|
|
that.record = record;
|
|
that.reset();
|
|
}
|
|
|
|
that.reset = function() {
|
|
that.hide_undo();
|
|
that.update();
|
|
};
|
|
|
|
function update() {
|
|
}
|
|
|
|
function save() {
|
|
return [];
|
|
}
|
|
|
|
that.is_dirty = function() {
|
|
|
|
var values = that.save();
|
|
if (!values && !that.values) return false;
|
|
if (!values || !that.values) return true;
|
|
|
|
if (values.length != that.values.length) return true;
|
|
for (var i=0; i<values.length; i++) {
|
|
if (values[i] != that.values[i]) return true;
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
that.get_undo = function() {
|
|
return $('span[name="undo"]', that.container);
|
|
};
|
|
|
|
that.show_undo = function() {
|
|
var undo = that.get_undo();
|
|
undo.css('display', 'inline');
|
|
};
|
|
|
|
that.hide_undo = function() {
|
|
var undo = that.get_undo();
|
|
undo.css('display', 'none');
|
|
};
|
|
|
|
that.get_error_link = function() {
|
|
return $('span[name="error_link"]', that.container);
|
|
};
|
|
|
|
that.show_error_link = function() {
|
|
var error_link = that.get_error_link();
|
|
error_link.css('display', 'inline');
|
|
};
|
|
|
|
that.hide_error_link = function() {
|
|
var error_link = that.get_error_link();
|
|
error_link.css('display', 'none');
|
|
};
|
|
|
|
that.set_enabled = function() {
|
|
};
|
|
|
|
that.refresh = function() {
|
|
};
|
|
|
|
// methods that should be invoked by subclasses
|
|
that.widget_init = that.init;
|
|
that.widget_create = that.create;
|
|
that.widget_setup = that.setup;
|
|
that.widget_reset = that.reset;
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_text_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_widget(spec);
|
|
|
|
that.size = spec.size || 30;
|
|
|
|
that.create = function(container) {
|
|
|
|
$('<input/>', {
|
|
'type': 'text',
|
|
'name': that.name,
|
|
'size': that.size
|
|
}).appendTo(container);
|
|
|
|
$('<span/>', {
|
|
'name': 'undo',
|
|
'style': 'display: none;',
|
|
'html': 'undo'
|
|
}).appendTo(container);
|
|
|
|
$("<span/>",{
|
|
name:'error_link',
|
|
html:"Text does not match field pattern",
|
|
"class":"ui-state-error ui-corner-all",
|
|
style:"display:none"
|
|
}).appendTo(container);
|
|
};
|
|
|
|
that.setup = function(container) {
|
|
|
|
this.widget_setup(container);
|
|
|
|
var input = $('input[name="'+that.name+'"]', that.container);
|
|
input.keyup(function() {
|
|
if(that.undo){
|
|
that.show_undo();
|
|
}
|
|
var value = $('input[name="'+that.name+'"]', that.container).val();
|
|
that.validate_input(value);
|
|
});
|
|
|
|
var undo = that.get_undo();
|
|
undo.click(function() {
|
|
that.reset();
|
|
});
|
|
};
|
|
|
|
that.load = function(record) {
|
|
|
|
that.values = record[that.name] || [''];
|
|
|
|
if (that.read_only) {
|
|
var input = $('input[name="'+that.name+'"]', that.container);
|
|
var label = $('<label/>', {
|
|
'name': that.name,
|
|
'html': that.values[0]
|
|
});
|
|
input.replaceWith(label);
|
|
|
|
} else {
|
|
that.reset();
|
|
}
|
|
};
|
|
|
|
that.save = function() {
|
|
if (that.read_only) {
|
|
return that.values;
|
|
} else {
|
|
var value = $('input[name="'+that.name+'"]', that.container).val();
|
|
return [value];
|
|
}
|
|
};
|
|
|
|
that.update = function() {
|
|
var value = that.values && that.values.length ? that.values[0] : '';
|
|
if (that.read_only) {
|
|
$('label[name="'+that.name+'"]', that.container).val(value);
|
|
} else {
|
|
$('input[name="'+that.name+'"]', that.container).val(value);
|
|
}
|
|
};
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_checkbox_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
var is_checked = spec.checked || '';
|
|
var that = ipa_widget(spec);
|
|
|
|
that.create = function(container) {
|
|
|
|
$('<input/>', {
|
|
type: 'checkbox',
|
|
name: that.name,
|
|
checked : is_checked
|
|
}).appendTo(container);
|
|
|
|
if (that.undo) {
|
|
$('<span/>', {
|
|
'name': 'undo',
|
|
'style': 'display: none;',
|
|
'html': 'undo'
|
|
}).appendTo(container);
|
|
}
|
|
};
|
|
|
|
that.setup = function(container) {
|
|
|
|
that.widget_setup(container);
|
|
|
|
var input = $('input[name="'+that.name+'"]', that.container);
|
|
input.change(function() {
|
|
that.show_undo();
|
|
});
|
|
|
|
var undo = that.get_undo();
|
|
undo.click(function() {
|
|
that.reset();
|
|
});
|
|
};
|
|
|
|
that.load = function(record) {
|
|
that.values = record[that.name] || [false];
|
|
that.reset();
|
|
};
|
|
|
|
that.save = function() {
|
|
var value = $('input[name="'+that.name+'"]', that.container).is(':checked');
|
|
return [value];
|
|
};
|
|
|
|
that.update = function() {
|
|
var value = that.values && that.values.length ? that.values[0] : false;
|
|
$('input[name="'+that.name+'"]', that.container).get(0).checked = value;
|
|
};
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_radio_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_widget(spec);
|
|
|
|
that.options = spec.options;
|
|
|
|
that.create = function(container) {
|
|
|
|
for (var i=0; i<that.options.length; i++) {
|
|
var option = that.options[i];
|
|
|
|
$('<input/>', {
|
|
'type': 'radio',
|
|
'name': that.name,
|
|
'value': option.value
|
|
}).appendTo(container);
|
|
|
|
container.append(option.label);
|
|
}
|
|
|
|
if (that.undo) {
|
|
$('<span/>', {
|
|
'name': 'undo',
|
|
'style': 'display: none;',
|
|
'html': 'undo'
|
|
}).appendTo(container);
|
|
}
|
|
};
|
|
|
|
that.setup = function(container) {
|
|
|
|
that.widget_setup(container);
|
|
|
|
var input = $('input[name="'+that.name+'"]', that.container);
|
|
input.change(function() {
|
|
that.show_undo();
|
|
});
|
|
|
|
var undo = that.get_undo();
|
|
undo.click(function() {
|
|
that.reset();
|
|
});
|
|
};
|
|
|
|
that.load = function(record) {
|
|
that.values = record[that.name] || [''];
|
|
that.reset();
|
|
};
|
|
|
|
that.save = function() {
|
|
var input = $('input[name="'+that.name+'"]:checked', that.container);
|
|
if (!input.length) return [];
|
|
return [input.val()];
|
|
};
|
|
|
|
that.update = function() {
|
|
if (that.values && that.values.length) {
|
|
var input = $('input[name="'+that.name+'"][value="'+that.values[0]+'"]', that.container);
|
|
if (input.length) {
|
|
input.get(0).checked = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
$('input[name="'+that.name+'"]', that.container).each(function() {
|
|
var input = this;
|
|
input.checked = false;
|
|
});
|
|
};
|
|
|
|
// methods that should be invoked by subclasses
|
|
that.radio_save = that.save;
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_textarea_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_widget(spec);
|
|
|
|
that.rows = spec.rows || 5;
|
|
that.cols = spec.cols || 40;
|
|
|
|
that.create = function(container) {
|
|
|
|
$('<textarea/>', {
|
|
'rows': that.rows,
|
|
'cols': that.cols,
|
|
'name': that.name
|
|
}).appendTo(container);
|
|
|
|
if (that.undo) {
|
|
$('<span/>', {
|
|
'name': 'undo',
|
|
'style': 'display: none;',
|
|
'html': 'undo'
|
|
}).appendTo(container);
|
|
}
|
|
};
|
|
|
|
that.setup = function(container) {
|
|
|
|
that.widget_setup(container);
|
|
|
|
var input = $('textarea[name="'+that.name+'"]', that.container);
|
|
input.keyup(function() {
|
|
undo.css('display', 'inline');
|
|
});
|
|
|
|
var undo = that.get_undo();
|
|
undo.click(function() {
|
|
that.reset();
|
|
});
|
|
};
|
|
|
|
that.load = function(record) {
|
|
that.values = record[that.name] || [''];
|
|
that.reset();
|
|
};
|
|
|
|
that.save = function() {
|
|
var value = $('textarea[name="'+that.name+'"]', that.container).val();
|
|
return [value];
|
|
};
|
|
|
|
that.update = function() {
|
|
var value = that.values && that.values.length ? that.values[0] : '';
|
|
$('textarea[name="'+that.name+'"]', that.container).val(value);
|
|
};
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_button_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
spec.setup = spec.setup || setup;
|
|
spec.load = spec.load || load;
|
|
spec.save = spec.save || save;
|
|
|
|
var that = ipa_widget(spec);
|
|
|
|
that.click = spec.click;
|
|
|
|
function setup(container) {
|
|
|
|
that.widget_setup(container);
|
|
|
|
var input = $('[name="'+that.name+'"]', that.container);
|
|
input.replaceWith(ipa_button({ 'label': that.label, 'click': that.click }));
|
|
}
|
|
|
|
function load(record) {
|
|
}
|
|
|
|
function save() {
|
|
return [];
|
|
}
|
|
|
|
return that;
|
|
}
|
|
|
|
|
|
function ipa_column(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = {};
|
|
|
|
that.name = spec.name;
|
|
that.label = spec.label;
|
|
that.primary_key = spec.primary_key;
|
|
that.width = spec.width;
|
|
that.entity_name = spec.entity_name;
|
|
|
|
that.setup = spec.setup || setup;
|
|
|
|
that.init = function() {
|
|
if (that.entity_name && !that.label) {
|
|
var param_info = ipa_get_param_info(that.entity_name, that.name);
|
|
if (param_info) that.label = param_info.label;
|
|
}
|
|
};
|
|
|
|
function setup(container, record) {
|
|
|
|
container.empty();
|
|
|
|
var value = record[that.name];
|
|
value = value ? value.toString() : '';
|
|
|
|
container.append(value);
|
|
}
|
|
|
|
return that;
|
|
}
|
|
|
|
function ipa_table_widget(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_widget(spec);
|
|
|
|
that.scrollable = spec.scrollable;
|
|
that.save_values = typeof spec.save_values == 'undefined' ? true : spec.save_values;
|
|
|
|
that.columns = [];
|
|
that.columns_by_name = {};
|
|
|
|
that.get_columns = function() {
|
|
return that.columns;
|
|
};
|
|
|
|
that.get_column = function(name) {
|
|
return that.columns_by_name[name];
|
|
};
|
|
|
|
that.add_column = function(column) {
|
|
that.columns.push(column);
|
|
that.columns_by_name[column.name] = column;
|
|
};
|
|
|
|
that.set_columns = function(columns) {
|
|
that.clear_columns();
|
|
for (var i=0; i<columns.length; i++) {
|
|
that.add_column(columns[i]);
|
|
}
|
|
};
|
|
|
|
that.clear_columns = function() {
|
|
that.columns = [];
|
|
that.columns_by_name = {};
|
|
};
|
|
|
|
that.create_column = function(spec) {
|
|
var column = ipa_column(spec);
|
|
that.add_column(column);
|
|
return column;
|
|
};
|
|
|
|
that.init = function() {
|
|
that.widget_init();
|
|
|
|
for (var i=0; i<that.columns.length; i++) {
|
|
var column = that.columns[i];
|
|
column.init();
|
|
}
|
|
};
|
|
|
|
that.create = function(container) {
|
|
|
|
var table = $('<table/>', {
|
|
'class': 'search-table'
|
|
}).appendTo(container);
|
|
|
|
if (that.scrollable) {
|
|
table.addClass('scrollable');
|
|
}
|
|
|
|
var thead = $('<thead/>').appendTo(table);
|
|
|
|
var tr = $('<tr/>').appendTo(thead);
|
|
|
|
var th = $('<th/>', {
|
|
'style': 'width: 22px;'
|
|
}).appendTo(tr);
|
|
|
|
$('<input/>', {
|
|
'type': 'checkbox',
|
|
'name': 'select'
|
|
}).appendTo(th);
|
|
|
|
for (var i=0; i<that.columns.length; i++) {
|
|
var column = that.columns[i];
|
|
|
|
th = $('<th/>').appendTo(tr);
|
|
|
|
if (that.scrollable && (i == that.columns.length-1)) {
|
|
if (column.width) {
|
|
var width = parseInt(column.width.substring(0, column.width.length-2),10);
|
|
width += 16;
|
|
th.css('width', width+'px');
|
|
}
|
|
} else {
|
|
if (column.width) {
|
|
th.css('width', column.width);
|
|
}
|
|
}
|
|
|
|
var label = column.label;
|
|
|
|
$('<span/>', {
|
|
'style': 'float: left;',
|
|
'html': label
|
|
}).appendTo(th);
|
|
|
|
if (i == that.columns.length-1) {
|
|
$('<span/>', {
|
|
'name': 'buttons',
|
|
'style': 'float: right;'
|
|
}).appendTo(th);
|
|
}
|
|
}
|
|
|
|
var tbody = $('<tbody/>').appendTo(table);
|
|
|
|
if (that.height) {
|
|
tbody.css('height', that.height);
|
|
}
|
|
|
|
tr = $('<tr/>').appendTo(tbody);
|
|
|
|
var td = $('<td/>', {
|
|
'style': 'width: 22px;'
|
|
}).appendTo(tr);
|
|
|
|
$('<input/>', {
|
|
'type': 'checkbox',
|
|
'name': 'select',
|
|
'value': 'user'
|
|
}).appendTo(td);
|
|
|
|
for (/* var */ i=0; i<that.columns.length; i++) {
|
|
/* var */ column = that.columns[i];
|
|
|
|
td = $('<td/>').appendTo(tr);
|
|
if (column.width) {
|
|
td.css('width', column.width);
|
|
}
|
|
|
|
$('<span/>', {
|
|
'name': column.name
|
|
}).appendTo(td);
|
|
}
|
|
|
|
var tfoot = $('<tfoot/>').appendTo(table);
|
|
|
|
tr = $('<tr/>').appendTo(tfoot);
|
|
|
|
td = $('<td/>', { colspan: that.columns.length+1 }).appendTo(tr);
|
|
|
|
$('<span/>', {
|
|
'name': 'summary'
|
|
}).appendTo(td);
|
|
};
|
|
|
|
|
|
that.select_changed = function(){
|
|
};
|
|
|
|
|
|
that.setup = function(container) {
|
|
|
|
that.widget_setup(container);
|
|
|
|
that.table = $('table', that.container);
|
|
that.thead = $('thead', that.table);
|
|
that.tbody = $('tbody', that.table);
|
|
that.tfoot = $('tfoot', that.table);
|
|
|
|
var select_all_checkbox = $('input[name=select]', that.thead);
|
|
select_all_checkbox.attr('title', 'Select All');
|
|
|
|
select_all_checkbox.change(function() {
|
|
var checked = select_all_checkbox.is(':checked');
|
|
select_all_checkbox.attr('title', checked ? 'Unselect All' : 'Select All');
|
|
var checkboxes = $('input[name=select]', that.tbody).get();
|
|
for (var i=0; i<checkboxes.length; i++) {
|
|
checkboxes[i].checked = checked;
|
|
}
|
|
that.select_changed();
|
|
return false;
|
|
});
|
|
|
|
that.row = that.tbody.children().first();
|
|
that.row.detach();
|
|
};
|
|
|
|
that.empty = function() {
|
|
that.tbody.empty();
|
|
};
|
|
|
|
that.load = function(result) {
|
|
|
|
that.empty();
|
|
|
|
that.values = result[that.name];
|
|
if (!that.values) return;
|
|
|
|
for (var i=0; i<that.values.length; i++) {
|
|
var record = that.get_record(result, i);
|
|
that.add_record(record);
|
|
}
|
|
};
|
|
|
|
that.save = function() {
|
|
if (that.save_values) {
|
|
var values = [];
|
|
|
|
$('input[name="select"]', that.tbody).each(function() {
|
|
values.push($(this).val());
|
|
});
|
|
|
|
return values;
|
|
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
that.get_selected_values = function() {
|
|
var values = [];
|
|
|
|
$('input[name="select"]:checked', that.tbody).each(function() {
|
|
values.push($(this).val());
|
|
});
|
|
|
|
return values;
|
|
};
|
|
|
|
that.get_record = function(result, index) {
|
|
var record = {};
|
|
for (var i=0; i<that.columns.length; i++){
|
|
var name = that.columns[i].name;
|
|
var values = result[name];
|
|
if (!values) continue;
|
|
if (values instanceof Array){
|
|
record[name] = values[index];
|
|
}else{
|
|
record[name] = values;
|
|
}
|
|
}
|
|
return record;
|
|
};
|
|
|
|
that.add_record = function(record) {
|
|
|
|
var tr = that.row.clone();
|
|
tr.appendTo(that.tbody);
|
|
|
|
for (var i=0; i<that.columns.length; i++){
|
|
var column = that.columns[i];
|
|
|
|
var value = record[column.name];
|
|
value = value ? value.toString() : '';
|
|
|
|
if (column.primary_key) {
|
|
// set checkbox value
|
|
$('input[name="select"]', tr).val(value);
|
|
|
|
$('input[name="select"]', tr).click(function(){
|
|
that.select_changed();
|
|
});
|
|
|
|
}
|
|
|
|
var span = $('span[name="'+column.name+'"]', tr);
|
|
|
|
column.setup(span, record);
|
|
}
|
|
};
|
|
|
|
that.add_rows = function(rows) {
|
|
for (var i=0; i<rows.length; i++) {
|
|
that.tbody.append(rows[i]);
|
|
}
|
|
};
|
|
|
|
that.remove_selected_rows = function() {
|
|
var rows = [];
|
|
that.tbody.children().each(function() {
|
|
var tr = $(this);
|
|
if (!$('input[name="select"]', tr).get(0).checked) return;
|
|
tr.detach();
|
|
rows.push(tr);
|
|
});
|
|
return rows;
|
|
};
|
|
|
|
that.set_enabled = function(enabled) {
|
|
if (enabled) {
|
|
$('input[name="select"]', that.table).attr('disabled', false);
|
|
} else {
|
|
$('input[name="select"]', that.table).attr('disabled', true);
|
|
}
|
|
};
|
|
|
|
that.refresh = function() {
|
|
|
|
function on_success(data, text_status, xhr) {
|
|
that.load(data.result.result);
|
|
}
|
|
|
|
function on_error(xhr, text_status, error_thrown) {
|
|
var summary = $('span[name=summary]', that.tfoot).empty();
|
|
summary.append('<p>Error: '+error_thrown.name+'</p>');
|
|
summary.append('<p>'+error_thrown.title+'</p>');
|
|
summary.append('<p>'+error_thrown.message+'</p>');
|
|
}
|
|
|
|
var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
|
|
ipa_cmd('show', [pkey], {'all': true, 'rights': true}, on_success, on_error, that.entity_name);
|
|
};
|
|
|
|
if (spec.columns) {
|
|
for (var i=0; i<spec.columns; i++) {
|
|
that.create_column(spec.columns[i]);
|
|
}
|
|
}
|
|
|
|
// methods that should be invoked by subclasses
|
|
that.table_init = that.init;
|
|
that.table_create = that.create;
|
|
that.table_setup = that.setup;
|
|
that.table_set_enabled = that.set_enabled;
|
|
|
|
return that;
|
|
}
|
|
|
|
/**
|
|
* This is a base class for dialog boxes.
|
|
*/
|
|
function ipa_dialog(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = {};
|
|
|
|
that.name = spec.name;
|
|
that.title = spec.title;
|
|
that.template = spec.template;
|
|
that._entity_name = spec.entity_name;
|
|
|
|
that.width = spec.width || 400;
|
|
|
|
that.buttons = {};
|
|
|
|
that.fields = [];
|
|
that.fields_by_name = {};
|
|
|
|
that.__defineGetter__("entity_name", function(){
|
|
return that._entity_name;
|
|
});
|
|
|
|
that.__defineSetter__("entity_name", function(entity_name){
|
|
that._entity_name = entity_name;
|
|
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
that.fields[i].entity_name = entity_name;
|
|
}
|
|
});
|
|
|
|
that.add_button = function(name, handler) {
|
|
that.buttons[name] = handler;
|
|
};
|
|
|
|
that.get_field = function(name) {
|
|
return that.fields_by_name[name];
|
|
};
|
|
|
|
that.add_field = function(field) {
|
|
that.fields.push(field);
|
|
that.fields_by_name[field.name] = field;
|
|
};
|
|
|
|
that.init = function() {
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
var field = that.fields[i];
|
|
field.entity_name = that.entity_name;
|
|
field.init();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Create content layout
|
|
*/
|
|
that.create = function() {
|
|
|
|
var table = $('<table/>').appendTo(that.container);
|
|
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
var field = that.fields[i];
|
|
|
|
var tr = $('<tr/>').appendTo(table);
|
|
|
|
var td = $('<td/>', {
|
|
'style': 'vertical-align: top;'
|
|
}).appendTo(tr);
|
|
td.append(field.label+': ');
|
|
|
|
td = $('<td/>', {
|
|
'style': 'vertical-align: top;'
|
|
}).appendTo(tr);
|
|
|
|
var span = $('<span/>', { 'name': field.name }).appendTo(td);
|
|
field.create(span);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Setup behavior
|
|
*/
|
|
that.setup = function() {
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
var field = that.fields[i];
|
|
|
|
var span = $('span[name="'+field.name+'"]', that.container);
|
|
field.setup(span);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Open dialog
|
|
*/
|
|
that.open = function(container) {
|
|
|
|
that.container = $('<div/>').appendTo(container);
|
|
|
|
if (that.template) {
|
|
var template = IPA.get_template(that.template);
|
|
that.container.load(
|
|
template,
|
|
function(data, text_status, xhr) {
|
|
that.setup();
|
|
that.container.dialog({
|
|
'title': that.title,
|
|
'modal': true,
|
|
'width': that.width,
|
|
'height': that.height,
|
|
'buttons': that.buttons
|
|
});
|
|
}
|
|
);
|
|
|
|
} else {
|
|
that.create();
|
|
that.setup();
|
|
|
|
that.container.dialog({
|
|
'title': that.title,
|
|
'modal': true,
|
|
'width': that.width,
|
|
'height': that.height,
|
|
'buttons': that.buttons
|
|
});
|
|
}
|
|
};
|
|
|
|
that.option = function(name, value) {
|
|
that.container.dialog('option', name, value);
|
|
};
|
|
|
|
that.get_record = function() {
|
|
var record = {};
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
var field = that.fields[i];
|
|
var values = field.save();
|
|
record[field.name] = values[0];
|
|
}
|
|
return record;
|
|
};
|
|
|
|
that.close = function() {
|
|
that.container.dialog('destroy');
|
|
that.container.remove();
|
|
};
|
|
|
|
that.reset = function() {
|
|
for (var i=0; i<that.fields.length; i++) {
|
|
var field = that.fields[i];
|
|
field.reset();
|
|
}
|
|
};
|
|
|
|
that.dialog_init = that.init;
|
|
that.dialog_create = that.create;
|
|
that.dialog_setup = that.setup;
|
|
that.dialog_open = that.open;
|
|
|
|
return that;
|
|
}
|
|
|
|
/**
|
|
* This dialog provides an interface for searching and selecting
|
|
* values from the available results.
|
|
*/
|
|
function ipa_adder_dialog(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_dialog(spec);
|
|
|
|
that.width = spec.width || '600px';
|
|
|
|
that.columns = [];
|
|
that.columns_by_name = {};
|
|
|
|
that.get_column = function(name) {
|
|
return that.columns_by_name[name];
|
|
};
|
|
|
|
that.add_column = function(column) {
|
|
that.columns.push(column);
|
|
that.columns_by_name[column.name] = column;
|
|
};
|
|
|
|
that.set_columns = function(columns) {
|
|
that.clear_columns();
|
|
for (var i=0; i<columns.length; i++) {
|
|
that.add_column(columns[i]);
|
|
}
|
|
};
|
|
|
|
that.clear_columns = function() {
|
|
that.columns = [];
|
|
that.columns_by_name = {};
|
|
};
|
|
|
|
that.create_column = function(spec) {
|
|
var column = ipa_column(spec);
|
|
that.add_column(column);
|
|
return column;
|
|
};
|
|
|
|
that.init = function() {
|
|
that.available_table = ipa_table_widget({
|
|
name: 'available',
|
|
scrollable: true,
|
|
height: '151px'
|
|
});
|
|
|
|
that.available_table.set_columns(that.columns);
|
|
|
|
that.available_table.init();
|
|
|
|
that.selected_table = ipa_table_widget({
|
|
name: 'selected',
|
|
scrollable: true,
|
|
height: '151px'
|
|
});
|
|
|
|
that.selected_table.set_columns(that.columns);
|
|
|
|
that.selected_table.init();
|
|
|
|
that.dialog_init();
|
|
};
|
|
|
|
that.create = function() {
|
|
|
|
// do not call that.dialog_create();
|
|
|
|
var search_panel = $('<div/>', {
|
|
'class': 'adder-dialog-filter'
|
|
}).appendTo(that.container);
|
|
|
|
$('<input/>', {
|
|
type: 'text',
|
|
name: 'filter',
|
|
style: 'width: 244px'
|
|
}).appendTo(search_panel);
|
|
|
|
search_panel.append(' ');
|
|
|
|
$('<input/>', {
|
|
type: 'button',
|
|
name: 'find',
|
|
value: 'Find'
|
|
}).appendTo(search_panel);
|
|
|
|
$('<input/>', {
|
|
type: 'checkbox',
|
|
name: 'hidememb',
|
|
id: 'hidememb',
|
|
checked: 'checked',
|
|
style: 'margin-left: 5px; vertical-align: middle'
|
|
}).appendTo(search_panel);
|
|
|
|
var label = $('<label/>', {
|
|
'for': 'hidememb',
|
|
style: 'margin-left: 3px'
|
|
});
|
|
|
|
label.text('Hide already enrolled.');
|
|
|
|
label.appendTo(search_panel);
|
|
|
|
var results_panel = $('<div/>', {
|
|
'class': 'adder-dialog-results'
|
|
}).appendTo(that.container);
|
|
|
|
var available_panel = $('<div/>', {
|
|
name: 'available',
|
|
'class': 'adder-dialog-available'
|
|
}).appendTo(results_panel);
|
|
|
|
$('<div/>', {
|
|
html: 'Available',
|
|
'class': 'ui-widget-header'
|
|
}).appendTo(available_panel);
|
|
|
|
that.available_table.create(available_panel);
|
|
|
|
var buttons_panel = $('<div/>', {
|
|
name: 'buttons',
|
|
'class': 'adder-dialog-buttons'
|
|
}).appendTo(results_panel);
|
|
|
|
var p = $('<p/>').appendTo(buttons_panel);
|
|
$('<input />', {
|
|
type: 'button',
|
|
name: 'remove',
|
|
value: '<<'
|
|
}).appendTo(p);
|
|
|
|
p = $('<p/>').appendTo(buttons_panel);
|
|
$('<input />', {
|
|
type: 'button',
|
|
name: 'add',
|
|
value: '>>'
|
|
}).appendTo(p);
|
|
|
|
var selected_panel = $('<div/>', {
|
|
name: 'selected',
|
|
'class': 'adder-dialog-selected'
|
|
}).appendTo(results_panel);
|
|
|
|
$('<div/>', {
|
|
html: 'Prospective',
|
|
'class': 'ui-widget-header'
|
|
}).appendTo(selected_panel);
|
|
|
|
that.selected_table.create(selected_panel);
|
|
};
|
|
|
|
that.setup = function() {
|
|
|
|
// do not call that.dialog_setup();
|
|
|
|
var available_panel = $('div[name=available]', that.container);
|
|
that.available_table.setup(available_panel);
|
|
|
|
var selected_panel = $('div[name=selected]', that.container);
|
|
that.selected_table.setup(selected_panel);
|
|
|
|
that.filter_field = $('input[name=filter]', that.container);
|
|
|
|
var button = $('input[name=find]', that.container);
|
|
that.find_button = ipa_button({
|
|
'label': button.val(),
|
|
'icon': 'ui-icon-search',
|
|
'click': function() { that.search(); }
|
|
});
|
|
button.replaceWith(that.find_button);
|
|
|
|
button = $('input[name=remove]', that.container);
|
|
that.remove_button = ipa_button({
|
|
'label': button.val(),
|
|
'icon': 'ui-icon-trash',
|
|
'click': function() {
|
|
that.remove();
|
|
}
|
|
});
|
|
button.replaceWith(that.remove_button);
|
|
|
|
button = $('input[name=add]', that.container);
|
|
that.add_button = ipa_button({
|
|
'label': button.val(),
|
|
'icon': 'ui-icon-plus',
|
|
'click': function() {
|
|
that.add();
|
|
}
|
|
});
|
|
button.replaceWith(that.add_button);
|
|
|
|
that.search();
|
|
};
|
|
|
|
that.open = function(container) {
|
|
that.buttons = {
|
|
'Enroll': function() {
|
|
that.execute();
|
|
},
|
|
'Cancel': function() {
|
|
that.close();
|
|
}
|
|
};
|
|
|
|
that.dialog_open(container);
|
|
};
|
|
|
|
that.add = function() {
|
|
var rows = that.available_table.remove_selected_rows();
|
|
that.selected_table.add_rows(rows);
|
|
};
|
|
|
|
that.remove = function() {
|
|
var rows = that.selected_table.remove_selected_rows();
|
|
that.available_table.add_rows(rows);
|
|
};
|
|
|
|
that.get_filter = function() {
|
|
return that.filter_field.val();
|
|
};
|
|
|
|
that.get_hide_checkbox = function() {
|
|
return that.hide_checkbox.checked;
|
|
};
|
|
|
|
that.clear_available_values = function() {
|
|
that.available_table.empty();
|
|
};
|
|
|
|
that.clear_selected_values = function() {
|
|
that.selected_table.empty();
|
|
};
|
|
|
|
that.add_available_value = function(record) {
|
|
that.available_table.add_record(record);
|
|
};
|
|
|
|
that.get_selected_values = function() {
|
|
return that.selected_table.save();
|
|
};
|
|
|
|
that.close = function() {
|
|
that.container.dialog('close');
|
|
};
|
|
|
|
that.adder_dialog_init = that.init;
|
|
that.adder_dialog_create = that.create;
|
|
that.adder_dialog_setup = that.setup;
|
|
|
|
return that;
|
|
}
|
|
|
|
/**
|
|
* This dialog displays the values to be deleted.
|
|
*/
|
|
function ipa_deleter_dialog(spec) {
|
|
|
|
spec = spec || {};
|
|
|
|
var that = ipa_dialog(spec);
|
|
|
|
that.title = spec.title || IPA.messages.button.remove;
|
|
that.remove = spec.remove;
|
|
|
|
that.values = spec.values || [];
|
|
|
|
that.add_value = function(value) {
|
|
that.values.push(value);
|
|
};
|
|
|
|
that.set_values = function(values) {
|
|
that.values = that.values.concat(values);
|
|
};
|
|
|
|
that.create = function() {
|
|
var ul = $('<ul/>');
|
|
ul.appendTo(that.container);
|
|
|
|
for (var i=0; i<that.values.length; i++) {
|
|
$('<li/>',{
|
|
'text': that.values[i]
|
|
}).appendTo(ul);
|
|
}
|
|
|
|
$('<p/>', {
|
|
'text': IPA.messages.search.delete_confirm
|
|
}).appendTo(that.container);
|
|
};
|
|
|
|
that.open = function(container) {
|
|
that.buttons = {
|
|
'Delete': that.remove,
|
|
'Cancel': that.close
|
|
};
|
|
|
|
that.dialog_open(container);
|
|
};
|
|
|
|
return that;
|
|
}
|