summaryrefslogtreecommitdiffstats
path: root/install/static/details.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/static/details.js')
-rw-r--r--install/static/details.js342
1 files changed, 199 insertions, 143 deletions
diff --git a/install/static/details.js b/install/static/details.js
index 2daf0a21b..cb4aab111 100644
--- a/install/static/details.js
+++ b/install/static/details.js
@@ -25,6 +25,144 @@
/* REQUIRES: ipa.js */
var ipa_details_cache = {};
+var ipa_entity_details_list = {};
+
+
+function ipa_stanza(spec){
+ var that = {};
+
+ that.name = spec.name || '';
+ that.label = spec.label || '';
+
+ function input(spec){
+
+ /*Was ipa_details_field_setup*/
+ function setup(container, dl, section) {
+
+ var obj_name = container.attr('title');
+ var title = this.name;
+ var label = '';
+ var param_info = ipa_get_param_info(obj_name, this.name);
+ if (param_info)
+ label = param_info['label'];
+ if (!label)
+ label = this.label;
+ $('<dt></dt>', {
+ id: this.name,
+ title: title,
+ html: label + ':'
+ }).appendTo(dl);
+ }
+
+ /*Was ipa_details_field_load*/
+ function load(container, dt, entry_attrs) {
+
+ var obj_name = container.attr('id');
+ var multivalue = false;
+ var hint_span = null;
+ var dd;
+
+ var param_info = ipa_get_param_info(obj_name, this.name);
+ if (param_info) {
+ if (param_info['multivalue'] || param_info['class'] == 'List')
+ multivalue = true;
+ var hint = param_info['hint'];
+ if (hint){
+ hint_span = $('<span />',{
+ 'class': 'attrhint',
+ 'html': 'Hint: ' + hint});
+ }
+ }
+
+ var value = entry_attrs[this.name];
+ if (value) {
+ dd = ipa_create_first_dd(
+ this.name, ipa_create_input(obj_name, this.name, value[0],hint_span)
+ );
+ dt.after(dd);
+ var last_dd = dd;
+ for (var i = 1; i < value.length; ++i) {
+ dd = ipa_create_other_dd(
+ this.name, ipa_create_input(obj_name, this.name, value[i],hint_span)
+ );
+ last_dd.after(dd);
+ last_dd = dd;
+ }
+ if (multivalue) {
+ dd = ipa_create_other_dd(
+ this.name, _ipa_a_add_template.replace('A', this.name)
+ );
+ last_dd.after(dd);
+ }
+ } else {
+ if (multivalue) {
+ dd = ipa_create_first_dd(
+ this.name, _ipa_a_add_template.replace('A', this.name) /*.append(hint_span)*/
+ );
+ dt.after(dd);
+ } else {
+ dd = ipa_create_first_dd(
+ this.name, ipa_create_input(obj_name, this.name, '') /*.append(hint_span)*/
+ );
+ dt.after(dd);
+ }
+ }
+ }
+ /*Was ipa_details_field_save*/
+ function save(container) {
+ var field = this;
+ var values = [];
+
+ var dd = $('dd[title='+field.name+']', container);
+ dd.each(function () {
+ var input = $('input', $(this));
+ if (!input.length) return;
+
+ if (input.is('strikethrough')) return;
+
+ var value = $.trim(input.val());
+ if (!value) value = '';
+
+ values.push(value);
+ });
+
+ return values;
+ }
+
+ that.fields.push(spec);
+ that.controls[spec.name] = spec;
+
+ if (!spec.setup){
+ spec.setup = setup;
+ }
+ if (!spec.load){
+ spec.load = load;
+ }
+
+ if (!spec.save){
+ spec.save = save;
+ }
+
+ return that;
+ };
+ that.input = input;
+ that.fields = [];
+ that.controls={};
+ return that;
+};
+
+
+
+function ipa_make_button(which,text,details_class){
+
+ var button_class= details_class +
+ " ui-state-default ui-corner-all input_link ";
+ return $('<a ></a>',{
+ "class": button_class
+ }).
+ append('<span class="ui-icon ' + which +'" ></span> ').
+ append(text);
+}
function ipa_details_create(container, sections)
{
@@ -45,8 +183,8 @@ function ipa_details_create(container, sections)
'class': 'details-buttons'
}).appendTo(details);
- buttons.append('<a class="details-reset ui-state-default ui-corner-all input_link " href="jslink"><span class="ui-icon ui-icon-refresh" ></span> Reset</a>');
- buttons.append('<a class="details-update ui-state-default ui-corner-all input_link " href="jslink"><span class="ui-icon ui-icon-check" ></span>Update</a>');
+ buttons.append(ipa_make_button('ui-icon-refresh','Reset','details-reset'));
+ buttons.append(ipa_make_button('ui-icon-check','Update','details-update'));
details.append('<hr />');
@@ -55,9 +193,6 @@ function ipa_details_create(container, sections)
ipa_details_section_setup(container, details, section);
}
- details.append('<div class="details-back"></div>');
- var jobj = details.children().last();
- jobj.append('<a href="#details-viewtype">Back to Top</a>');
}
@@ -83,35 +218,12 @@ function ipa_details_section_setup(container, details, section)
for (var i = 0; i < fields.length; ++i) {
var field = fields[i];
- if (field.setup) {
- field.setup.call(field, container, dl, section);
-
- } else {
- ipa_details_field_setup.call(field, container, dl, section);
- }
+ field.setup(container, dl, section);
}
details.append('<hr/>');
}
-function ipa_details_field_setup(container, dl, section) {
-
- var obj_name = container.attr('title');
-
- var title = this.name;
- var label = '';
- var param_info = ipa_get_param_info(obj_name, this.name);
- if (param_info)
- label = param_info['label'];
- if (!label)
- label = this.label;
-
- $('<dt></dt>', {
- id: this.name,
- title: title,
- html: label + ':'
- }).appendTo(dl);
-}
function ipa_details_load(container, pkey, on_win, on_fail)
{
@@ -182,18 +294,13 @@ function ipa_details_update(container, pkey, on_win, on_fail)
for (var j=0; j<fields.length; j++) {
var field = fields[j];
- if (field.save) {
- values = field.save.call(field, container);
-
- } else {
- values = ipa_details_field_save.call(field, container);
- }
+ values = field.save(container);
var param_info = ipa_get_param_info(obj_name, field.name);
if (param_info) {
if (param_info['primary_key']) continue;
- if (values.length) modlist[field.name] = values[0];
-
+ if (values.length === 1) modlist[field.name] = values[0];
+ if (values.length > 1) modlist[field.name] = values;
} else {
if (values.length) attrs_wo_option[field.name] = values;
}
@@ -210,23 +317,6 @@ function ipa_details_update(container, pkey, on_win, on_fail)
ipa_cmd('mod', [pkey], modlist, update_on_win, update_on_fail, obj_name);
}
-function ipa_details_field_save(container) {
- var field = this;
- var values = [];
-
- var dd = $('dd[title='+field.name+']', container);
- dd.each(function () {
- var input = $('input', dd);
- if (!input.length) return;
-
- var value = $.trim(input.val());
- if (!value) value = '';
-
- values.push(value);
- });
-
- return values;
-}
/* HTML templates for ipa_details_display() */
var _ipa_a_add_template =
@@ -234,6 +324,8 @@ var _ipa_a_add_template =
var _ipa_span_doc_template = '<span class="attrhint">Hint: D</span>';
var _ipa_span_hint_template = '<span class="attrhint">Hint: D</span>';
+
+
/* populate definition lists with the class 'entryattrs' with entry attributes
*
* The list has to be specially crafted for this function to work properly:
@@ -267,73 +359,14 @@ function ipa_details_display(container, entry_attrs)
var field = fields[j];
var dt = $('dt[title='+field.name+']', container);
if (!dt.length) continue;
-
- if (field.load) {
- field.load.call(field, dt, entry_attrs);
-
- } else {
- ipa_details_field_load.call(field, container, dt, entry_attrs);
- }
+ field.load(container, dt, entry_attrs);
}
}
}
-function ipa_details_field_load(container, dt, entry_attrs) {
- var obj_name = container.attr('id');
-
- var multivalue = false;
- var hint_span = null;
- var dd;
- var param_info = ipa_get_param_info(obj_name, this.name);
- if (param_info) {
- if (param_info['multivalue'] || param_info['class'] == 'List')
- multivalue = true;
- var hint = param_info['hint'];
- if (hint){
- hint_span = $('<span />',{
- 'class': 'attrhint',
- 'html': 'Hint: ' + hint});
- }
- }
- var value = entry_attrs[this.name];
- if (value) {
- dd = ipa_create_first_dd(
- this.name, ipa_create_input(obj_name, this.name, value[0],hint_span)
- );
- dt.after(dd);
- var last_dd = dd;
- for (var i = 1; i < value.length; ++i) {
- dd = ipa_create_other_dd(
- this.name, ipa_create_input(obj_name, this.name, value[i],hint_span)
- );
- last_dd.after(dd);
- last_dd = dd;
- }
- if (multivalue) {
- dd = ipa_create_other_dd(
- this.name, _ipa_a_add_template.replace('A', this.name)
- );
- last_dd.after(dd);
- }
- } else {
- if (multivalue) {
- dd = ipa_create_first_dd(
- this.name, _ipa_a_add_template.replace('A', this.name) /*.append(hint_span)*/
- );
- dt.after(dd);
- } else {
- dd = ipa_create_first_dd(
- this.name, ipa_create_input(obj_name, this.name, '') /*.append(hint_span)*/
- );
- dt.after(dd);
- }
- }
-}
-
-function ipa_create_first_dd(field_name, content)
-{
+function ipa_create_first_dd(field_name, content){
return $('<dd/>', {
'class': 'first',
@@ -341,14 +374,24 @@ function ipa_create_first_dd(field_name, content)
}).append(content);
}
-function ipa_create_other_dd(field_name, content)
-{
+function ipa_create_other_dd(field_name, content){
return $('<dd/>', {
'class': 'other',
'title': field_name
}).append(content);
}
+function ipa_insert_first_dd(jobj, content){
+ ipa_insert_dd(jobj, content, "first");
+}
+
+function ipa_insert_dd(jobj, content, dd_class){
+ jobj.after( $('<dd/>',{
+ "class": dd_class
+ }).append(content))
+}
+
+
/* mapping of parameter types to handlers used to create inputs */
var _ipa_param_type_2_handler_map = {
@@ -381,14 +424,12 @@ function ipa_create_input(obj_name, attr, value,hint)
/* call handler by param class */
var handler = _ipa_param_type_2_handler_map[param_info['class']];
if (handler) {
+ input = handler(attr, value, param_info);
if (param_info['multivalue'] || param_info['class'] == 'List') {
- input = handler(attr, value, param_info) +
- _ipa_create_remove_link(attr, param_info);
- }else{
- input = (handler(attr, value, param_info));
- if (hint){
- input.after(hint);
- }
+ input.append( _ipa_create_remove_link(attr, param_info));
+ }
+ if (hint){
+ input.after(hint);
}
}
}
@@ -417,7 +458,23 @@ function _ipa_create_remove_link(attr, param_info)
/* creates a input box for editing a string attribute */
function _ipa_create_text_input(attr, value, param_info)
{
- return $("<input/>",{
+
+ function calculate_dd_index(jobj){
+ var index = 0;
+ var dd = jobj.parents('dd').slice(0, 1)[0];
+ dd = dd.previousElementSibling;
+
+ while(dd.nodeName === 'dd'){
+ dd = dd.previousElementSibling;
+ index += 1;
+ if (index > 100 )
+ break;
+ }
+ return index;
+ }
+
+ var input = $("<Span />");
+ input.append($("<input/>",{
type:"text",
name:attr,
value:value.toString(),
@@ -430,7 +487,8 @@ function _ipa_create_text_input(attr, value, param_info)
error_link.style.display ="block";
}
}
- }).after($("<a/>",{
+ }));
+ input.append($("<a/>",{
html:"undo",
"class":"ui-state-highlight ui-corner-all",
style:"display:none",
@@ -438,16 +496,26 @@ function _ipa_create_text_input(attr, value, param_info)
var key = this.previousElementSibling.name;
var entity_divs = $(this).parents('.details-container');
var entry_attrs = ipa_details_cache[entity_divs[0].id];
+
+ index = calculate_dd_index($(this));
+
var previous_value = entry_attrs[key] || "";
+ if (previous_value.length >= index){
+ previous_value= previous_value[index];
+ }else{
+ previous_value = '';
+ }
+
this.previousElementSibling.value = previous_value;
this.style.display = "none";
}
- })).after($("<span/>",{
+ }));
+ input.append($("<span/>",{
html:"Does not match pattern",
"class":"ui-state-error ui-corner-all",
style:"display:none"
}));
-
+ return input;
}
function ipa_details_reset(container)
@@ -470,10 +538,9 @@ function _ipa_add_on_click(obj)
var obj_name = jobj.closest('.details-container').attr('title');
par.prepend(ipa_create_input(obj_name, attr, ''));
- var dd = ipa_create_other_dd(field.name, _ipa_a_add_template.replace('A', attr));
- par.after(dd);
jobj.next('input').focus();
jobj.remove();
+ par.after( ipa_create_other_dd(attr,_ipa_a_add_template.replace('A', attr)));
return (false);
}
@@ -484,19 +551,8 @@ function _ipa_remove_on_click(obj)
var attr = jobj.attr('title');
var par = jobj.parent();
- var next = par.next('dd[title='+attr+']');
- if (next.length) {
- if (par.hasClass('first')) {
- var hint = par.children('span').detach();
- next.append(hint);
- next.addClass('first');
- next.removeClass('other');
- }
- par.remove();
- } else {
- par.empty();
- par.append(_ipa_a_add_template.replace('A', attr));
- }
+ var input = par.find('input');
+ input.addClass('strikethrough');
return (false);
}