diff options
author | Adam Young <ayoung@redhat.com> | 2010-10-13 13:07:43 -0400 |
---|---|---|
committer | Adam Young <ayoung@redhat.com> | 2010-10-15 12:51:30 -0400 |
commit | acf5f9cad7438268148dff6c6b74d8c63048409a (patch) | |
tree | 04b5c2bd2529c68f7ec3cb59bb7f2f0cf19417be | |
parent | 538646c04ccbbef8249da3705eb455e63d075589 (diff) | |
download | freeipa-acf5f9cad7438268148dff6c6b74d8c63048409a.tar.gz freeipa-acf5f9cad7438268148dff6c6b74d8c63048409a.tar.xz freeipa-acf5f9cad7438268148dff6c6b74d8c63048409a.zip |
multivalue fixes
metadata for phone numbers
test date for users
Undo works for multivalue
JQuery UI buttons have custom classes
inputs/fields are now managed inside of objects
removed the use of .call. as it was confusing the issue of
mismatched parameter lists.
Fixed the parameter lists, too.
-rw-r--r-- | install/static/details.js | 342 | ||||
-rw-r--r-- | install/static/entity.js | 12 | ||||
-rw-r--r-- | install/static/group.js | 11 | ||||
-rw-r--r-- | install/static/host.js | 9 | ||||
-rw-r--r-- | install/static/hostgroup.js | 7 | ||||
-rw-r--r-- | install/static/ipa.css | 4 | ||||
-rw-r--r-- | install/static/netgroup.js | 9 | ||||
-rw-r--r-- | install/static/policy.js | 76 | ||||
-rw-r--r-- | install/static/search.js | 12 | ||||
-rw-r--r-- | install/static/serverconfig.js | 51 | ||||
-rw-r--r-- | install/static/service.js | 24 | ||||
-rw-r--r-- | install/static/test/data/json_metadata.json | 668 | ||||
-rw-r--r-- | install/static/test/data/user_mod.json | 32 | ||||
-rw-r--r-- | install/static/test/data/user_show.json | 43 | ||||
-rw-r--r-- | install/static/test/details_tests.html | 2 | ||||
-rw-r--r-- | install/static/test/details_tests.js | 202 | ||||
-rw-r--r-- | install/static/user.js | 78 |
17 files changed, 1213 insertions, 369 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); } diff --git a/install/static/entity.js b/install/static/entity.js index c911c0f23..913a751c1 100644 --- a/install/static/entity.js +++ b/install/static/entity.js @@ -23,7 +23,9 @@ var ipa_entity_search_list = {}; var ipa_entity_add_list = {}; -var ipa_entity_details_list = {}; + +//moving this to details +//var ipa_entity_details_list = {}; var ipa_entity_association_list = {}; /* use this to track individual changes between two hashchange events */ @@ -139,11 +141,9 @@ function _ipa_entity_setup(container, unspecified) { var filter = $.bbq.getState(obj_name + '-filter', true) || ''; search_create(obj_name, ipa_entity_search_list[obj_name], container); - $('<input />',{ - type:"submit", - value: ipa_messages.button.add, - click:new_on_click - }).appendTo($( "div#" + obj_name + " > div.search-controls")); + ipa_make_button( 'ui-icon-plus',ipa_messages.button.add). + click(new_on_click). + appendTo($( "div#" + obj_name + " > div.search-controls")) search_load(container, filter, null, null); } diff --git a/install/static/group.js b/install/static/group.js index 3770e1fb1..1a66c9289 100644 --- a/install/static/group.js +++ b/install/static/group.js @@ -36,12 +36,11 @@ ipa_entity_set_add_definition('group', [ ] ]); -ipa_entity_set_details_definition('group', [ - {name:'identity', label:'Group Details', fields:[ - {name:'cn', label:'Group Name'}, - {name:'description', label:'Description'}, - {name:'gidnumber', label:'Group ID'} - ]} +ipa_entity_set_details_definition('group',[ + ipa_stanza({name:'identity', label:'Group Details'}). + input({name:'cn', label:'Group Name'}). + input({name:'description', label:'Description'}). + input({name:'gidnumber', label:'Group ID'}) ]); ipa_entity_set_association_definition('group', { diff --git a/install/static/host.js b/install/static/host.js index 907f24dfd..d2cdd7d50 100644 --- a/install/static/host.js +++ b/install/static/host.js @@ -35,11 +35,10 @@ ipa_entity_set_add_definition('host', [ ]); ipa_entity_set_details_definition('host', [ - {name:'host', label:'Host Details', fields:[ - {name:'fqdn', label:'Fully Qualified Domain Name'}, - {name:'krbprincipalname', label:'Kerberos Principal'}, - {name:'serverhostname', label:'Server Host Name'} - ]} + ipa_stanza({name:'host', label:'Host Details'}). + input({name:'fqdn', label:'Fully Qualified Domain Name'}). + input({name:'krbprincipalname', label:'Kerberos Principal'}). + input({name:'serverhostname', label:'Server Host Name'}) ]); ipa_entity_set_association_definition('host', { diff --git a/install/static/hostgroup.js b/install/static/hostgroup.js index 58a20588a..37af6d6e5 100644 --- a/install/static/hostgroup.js +++ b/install/static/hostgroup.js @@ -34,8 +34,7 @@ ipa_entity_set_add_definition('hostgroup', [ ]); ipa_entity_set_details_definition('hostgroup', [ - {name:'identity', label:'Hostgroup Details', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'} - ]} + ipa_stanza({name:'identity', label:'Hostgroup Details'}). + input({name:'cn', label:'Name'}). + input({name: 'description', label:'Description'}) ]); diff --git a/install/static/ipa.css b/install/static/ipa.css index c562a20b3..eb5396db0 100644 --- a/install/static/ipa.css +++ b/install/static/ipa.css @@ -10,7 +10,7 @@ body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;} .demoHeaders { margin-top: 2em; } -.input_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;} +.input_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative; cursor: pointer; } .input_link span.ui-icon {margin: 0 5px 0 0;position: absolute;left: .2em;top: 50%;margin-top: -8px;} @@ -275,3 +275,5 @@ span.main-separator{ display:inline; cursor: pointer; } + +.strikethrough { text-decoration: line-through; } diff --git a/install/static/netgroup.js b/install/static/netgroup.js index 7e8868fed..9a738877d 100644 --- a/install/static/netgroup.js +++ b/install/static/netgroup.js @@ -34,10 +34,9 @@ ipa_entity_set_add_definition('netgroup', [ ]); ipa_entity_set_details_definition('netgroup', [ - {name:'identity', label:'Netgroup Details', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'}, - {name:'nisdomainname', label:'NIS Domain'} - ]} + ipa_stanza({name:'identity', label:'Netgroup Details'}). + input({name:'cn', label:'Name'}). + input({name:'description', label:'Description'}). + input({name:'nisdomainname', label:'NIS Domain'}) ]); diff --git a/install/static/policy.js b/install/static/policy.js index 257ede592..9d55e1cf0 100644 --- a/install/static/policy.js +++ b/install/static/policy.js @@ -33,16 +33,15 @@ ipa_entity_set_add_definition('hbac', [ ]); ipa_entity_set_details_definition('hbac', [ - {name:'identity', label:'HBAC Details', fields:[ - {name:'cn', label:'HBAC Name'}, - {name:'accessruletype', label:'Rule Type'}, - {name:'description', label:'Description'}, - {name:'hostcategory', label:'Host Category'}, - {name:'ipaenabledflag', label:'Enabled'}, - {name:'servicecategory', label:'Service Category'}, - {name:'sourcehostcategory', label:'Source Host Category'}, - {name:'usercategory', label:'User Category'} - ]} + ipa_stanza({name:'identity', label:'HBAC Details'}). + input({name:'cn', label:'HBAC Name'}). + input({name:'accessruletype', label:'Rule Type'}). + input({name:'description', label:'Description'}). + input({name:'hostcategory', label:'Host Category'}). + input({name:'ipaenabledflag', label:'Enabled'}). + input({name:'servicecategory', label:'Service Category'}). + input({name:'sourcehostcategory', label:'Source Host Category'}). + input({name:'usercategory', label:'User Category'}) ]); ipa_entity_set_association_definition('hbac', { @@ -63,21 +62,20 @@ ipa_entity_set_add_definition('dns', [ ]); ipa_entity_set_details_definition('dns', [ - {name:'identity', label:'DNS Zone Details', fields:[ - {name:'idnsname', label:'DNS Name'}, - {name:'idnszoneactive', label:'Zone Active'}, - {name:'idnssoamname', label:'Authoritative name server'}, - {name:'idnssoarname', label:'administrator e-mail address'}, - {name:'idnssoaserial', label:'SOA serial'}, - {name:'idnssoarefresh', label:'SOA refresh'}, - {name:'idnssoaretry', label:'SOA retry'}, - {name:'idnssoaexpire',label:'SOA expire'}, - {name:'idnssoaminimum', label:'SOA minimum'}, - {name:'dnsttl', label:'SOA time to live'}, - {name:'dnsclass', label:'SOA class'}, - {name:'idnsallowdynupdate', label:'allow dynamic update?'}, - {name:'idnsupdatepolicy', label:'BIND update policy'} - ]} + ipa_stanza({name:'identity', label:'DNS Zone Details'}). + input({name:'idnsname', label:'DNS Name'}). + input({name:'idnszoneactive', label:'Zone Active'}). + input({name:'idnssoamname', label:'Authoritative name server'}). + input({name:'idnssoarname', label:'administrator e-mail address'}). + input({name:'idnssoaserial', label:'SOA serial'}). + input({name:'idnssoarefresh', label:'SOA refresh'}). + input({name:'idnssoaretry', label:'SOA retry'}). + input({name:'idnssoaexpire', label:'SOA expire'}). + input({name:'idnssoaminimum', label:'SOA minimum'}). + input({name:'dnsttl', label:'SOA time to live'}). + input({name:'dnsclass', label:'SOA class'}). + input({name:'idnsallowdynupdate', label:'allow dynamic update?'}). + input({name:'idnsupdatepolicy', label:'BIND update policy'}) ]); ipa_entity_set_association_definition('dns', { @@ -99,9 +97,8 @@ ipa_entity_set_add_definition('automountlocation', [ ]); ipa_entity_set_details_definition('automountlocation', [ - {name:'identity', label:'Automount Location Details', fields:[ - {name:'cn', label:'Automount Location'} - ]} + ipa_stanza({name:'identity', label:'Automount Location Details'}). + input({name:'cn', label:'Automount Location'}) ]); ipa_entity_set_association_definition('automountlocation', { @@ -123,13 +120,13 @@ ipa_entity_set_add_definition('pwpolicy', [ ]); ipa_entity_set_details_definition('pwpolicy', [ - {name:'identity', label:'Password Policy', fields:[ - {name:'krbmaxpwdlife', label:'Max Password Life'}, - {name:'krbminpwdlife', label:'Min Password Life'}, - {name:'krbpwdhistorylength', label:'Password History Length'}, - {name:'krbpwdmindiffchars', label:'Min Different Characters'}, - {name:'krbpwdminlength', label:'Password Minimum Length'} - ]} + ipa_stanza({name:'identity', label:'Password Policy'}). + input({name:'krbmaxpwdlife',label:'Max Password Life'}). + input({name:'krbminpwdlife',label:'Min Password Life'}). + input({name:'krbpwdhistorylength',label:'Password History Length'}). + input({name:'krbpwdmindiffchars', + label:'Min Different Characters'}). + input({name:'krbpwdminlength', label:'Password Minimum Length'}) ]); ipa_entity_set_association_definition('pwpolicy', { @@ -142,11 +139,10 @@ ipa_entity_set_association_definition('pwpolicy', { */ ipa_entity_set_details_definition('krbtpolicy', [ - {name:'identity', label:'Krbtpolicy Location Details', fields:[ - {name:'cn', label:'Krbtpolicy Location'}, - {name:'krbmaxrenewableage', label:'Max Renewable Age'}, - {name:'krbmaxticketlife', label:'Max Ticket Life'} - ]} + ipa_stanza({name:'identity', label:'Krbtpolicy Location Details'}). + input({name:'cn', label:'Krbtpolicy Location'}). + input({name:'krbmaxrenewableage', label:'Max Renewable Age'}). + input({name:'krbmaxticketlife', label:'Max Ticket Life'}) ]); ipa_entity_set_association_definition('krbtpolicy', { diff --git a/install/static/search.js b/install/static/search.js index f968e91ca..91ee1bd8e 100644 --- a/install/static/search.js +++ b/install/static/search.js @@ -34,7 +34,7 @@ function search_create(obj_name, scl, container) $.bbq.pushState(state); }; - function delete_on_click() { + function delete_on_click_outer() { var delete_list = []; var delete_dialog = $('<div></div>', { title: ipa_messages.button.delete, @@ -94,10 +94,12 @@ function search_create(obj_name, scl, container) var jobj = div.children().last(); jobj.append('<input type="text" />'); jobj.children().last().attr('name', 'search-' + obj_name + '-filter') - jobj.append('<input type="submit" value="'+ipa_messages.button.find+ '" />'); - jobj.children().last().click(find_on_click); - jobj.append('<input type="submit" value="'+ipa_messages.button.delete+ '" />'); - jobj.children().last().click(delete_on_click); + ipa_make_button('ui-icon-search',ipa_messages.button.find). + click(find_on_click).appendTo(jobj); + + ipa_make_button('ui-icon-trash',ipa_messages.button.delete). + click(delete_on_click_outer).appendTo(jobj); + div.append('<span class="search-buttons"></span>'); var search_results = $('<div/>', { diff --git a/install/static/serverconfig.js b/install/static/serverconfig.js index 1d25a3b08..a73eb1349 100644 --- a/install/static/serverconfig.js +++ b/install/static/serverconfig.js @@ -37,13 +37,13 @@ ipa_entity_set_add_definition('aci', [ ]); ipa_entity_set_details_definition('aci', [ - {name:'ipaserver', label:'Aci Details', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'} - ]} + ipa_stanza({name:'ipaserver', label:'Aci Details'}). + input({name:'cn', label:'Name'}). + input({name:'description', label:'Description'}) ]); + /* Taskgroup*/ ipa_entity_set_search_definition('taskgroup', [ @@ -59,11 +59,11 @@ ipa_entity_set_add_definition('taskgroup', [ ] ]); + ipa_entity_set_details_definition('taskgroup', [ - {name:'ipaserver', label:'Taskgroup Details', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'} - ]} + ipa_stanza({name:'ipaserver', label:'Taskgroup Details'}). + input({name:'cn', label:'Name'}). + input({name:'description', label:'Description'}) ]); ipa_entity_set_association_definition('rolegroup', { @@ -89,10 +89,9 @@ ipa_entity_set_add_definition('rolegroup', [ ]); ipa_entity_set_details_definition('rolegroup', [ - {name:'ipaserver', label:'Rolegroup Details', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'} - ]} + ipa_stanza({name:'ipaserver', label:'Rolegroup Details'}). + input({name:'cn', label:'Name'}). + input({name:'description', label:'Description'}) ]); ipa_entity_set_association_definition('rolegroup', { @@ -101,18 +100,18 @@ ipa_entity_set_association_definition('rolegroup', { /* Configuration */ ipa_entity_set_details_definition('config',[ - {name:'ipaserver', label:'Configuration', fields:[ - {name:'cn', label:'Name'}, - {name:'description', label:'Description'}, - {name:'ipacertificatesubjectbase', label:'Certificat Subject Base'}, - {name:'ipadefaultloginshell', label:'Default Login Shell'}, - {name:'ipadefaultprimarygroup', label:'Default Primary Group'}, - {name:'ipagroupsearchfields', label:'Group Search Fields'}, - {name:'ipahomesrootdir', label:'Home Root Dir'}, - {name:'ipamaxusernamelength', label:'Max Username Length'}, - {name:'ipamigrationenabled', label:'Migration enabled?'}, - {name:'ipasearchrecordslimit', label:'Search Record Limit'}, - {name:'ipasearchtimelimit', label:'Search Time Limit'}, - {name:'ipausersearchfields', label:'User Search Fields'} - ]} + + ipa_stanza({name:'ipaserver', lable:'Configuration'}). + input({name:'cn', label:'Name'}). + input({name:'description', label:'Description'}). + input({name:'ipacertificatesubjectbase', label:'Certificat Subject Base'}). + input({name: 'ipadefaultloginshell', label:'Default Login Shell'}). + input({name:'ipadefaultprimarygroup', label:'Default Primary Group'}). + input({name:'ipagroupsearchfields', label:'Group Search Fields'}). + input({name:'ipahomesrootdir', label:'Home Root Dir'}). + input({name:'ipamaxusernamelength', label:'Max Username Length'}). + input({name:'ipamigrationenabled', label:'Migration enabled?'}). + input({name:'ipasearchrecordslimit', label:'Search Record Limit'}). + input({name:'ipasearchtimelimit', label:'Search Time Limit'}). + input({name:'ipausersearchfields', label:'User Search Fields'}) ]); diff --git a/install/static/service.js b/install/static/service.js index 0afcb4688..7b81c4d2e 100644 --- a/install/static/service.js +++ b/install/static/service.js @@ -34,12 +34,16 @@ ipa_entity_set_add_definition('service', [ ]); ipa_entity_set_details_definition('service', [ - {name:'identity', label:'Service Details', fields:[ - {name:'krbprincipalname', label:'Principal', setup:service_krbprincipalname_setup, load:service_krbprincipalname_load}, - {name:'service', label:'Service', load:service_service_load}, - {name:'host', label:'Host Name', load:service_host_load}, - {name:'usercertificate', label:'Certificate', load:service_usercertificate_load, save:service_usercertificate_save} - ]} + ipa_stanza({name:'identity', label:'Service Details'}). + input({name:'krbprincipalname', + label:'Principal', + setup:service_krbprincipalname_setup, + load:service_krbprincipalname_load}). + input({name:'service', label:'Service', load:service_service_load}). + input({name:'host', label:'Host Name', load:service_host_load}). + input({name:'usercertificate', label:'Certificate', + load:service_usercertificate_load, + save:service_usercertificate_save}) ]); function service_add_krbprincipalname(add_dialog, mode) { @@ -59,25 +63,25 @@ function service_krbprincipalname_setup(container, dl, section) { // skip krbprincipalname } -function service_krbprincipalname_load(dt, result) { +function service_krbprincipalname_load(container, dt, result) { // skip krbprincipalname } -function service_service_load(dt, result) { +function service_service_load(container, dt, result) { var krbprincipalname = result['krbprincipalname'][0]; var service = krbprincipalname.replace(/\/.*$/, ''); var dd = ipa_create_first_dd(this.name, service); dt.after(dd); } -function service_host_load(dt, result) { +function service_host_load(container, dt, result) { var krbprincipalname = result['krbprincipalname'][0]; var host = krbprincipalname.replace(/^.*\//, ''); var dd = ipa_create_first_dd(this.name, host); dt.after(dd); } -function service_usercertificate_load(dt, result) { +function service_usercertificate_load(container, dt, result) { var textarea = $("<textarea/>", { title: 'usercertificate', style: 'width: 300px; height: 200px;' diff --git a/install/static/test/data/json_metadata.json b/install/static/test/data/json_metadata.json index 4a732ac5f..cd617b48e 100644 --- a/install/static/test/data/json_metadata.json +++ b/install/static/test/data/json_metadata.json @@ -5,14 +5,12 @@ "messages": { "button": { "add": "Add", + "delete": "Delete", "enroll": "Enroll", "find": "Find", "reset": "Reset", "update": "Update" }, - "search":{ - "quick_links":"Quick Links" - }, "details": { "account": "Account Details", "contact": "Contact Details", @@ -22,9 +20,14 @@ "misc": "Misc. Information", "to_top": "Back to Top" }, - "login": { "header": "Logged In As" + }, + "search": { + "delete_confirm": "Do you really want to delete the selected entries?", + "quick_links": "Quick Links", + "select_all": "Select All", + "unselect_all": "Unselect All" } }, "metadata": { @@ -149,7 +152,7 @@ "objectclass", "aci" ], - "label": "Automount Location", + "label": "Automount", "methods": [ "add", "del", @@ -2865,6 +2868,89 @@ "query": false, "required": true, "type": "unicode" + } + ], + "uuid_attribute": "ipauniqueid" + }, + "sudocmd": { + "attribute_members": {}, + "container_dn": "cn=sudocmds,cn=accounts", + "default_attributes": [ + "cn", + "description" + ], + "hidden_attributes": [ + "objectclass", + "aci" + ], + "label": "SudoCmds", + "methods": [ + "add", + "del", + "find", + "mod", + "show" + ], + "name": "sudocmd", + "object_class": [ + "ipaobject", + "ipasudocmd" + ], + "object_class_config": null, + "object_name": "sudocmd", + "object_name_plural": "sudocmds", + "parent_object": "", + "primary_key": "cn", + "takes_params": [ + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "command", + "cli_short_name": null, + "default": null, + "doc": "Sudo Command", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Sudo Command", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "cn", + "pattern": null, + "pattern_errmsg": null, + "primary_key": true, + "query": false, + "required": true, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "desc", + "cli_short_name": null, + "default": null, + "doc": "A description of this command", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Description", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "description", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" }, { "attribute": false, @@ -2894,6 +2980,470 @@ ], "uuid_attribute": "ipauniqueid" }, + "sudocmdgroup": { + "attribute_members": { + "member": [ + "sudocmd", + "sudocmdgroup" + ], + "memberof": [ + "sudocmdgroup" + ] + }, + "container_dn": "cn=sudocmdgroups,cn=accounts", + "default_attributes": [ + "cn", + "description", + "member", + "memberof" + ], + "hidden_attributes": [ + "objectclass", + "aci" + ], + "label": "Sudo Command Groups", + "methods": [ + "add", + "add_member", + "del", + "find", + "mod", + "remove_member", + "show" + ], + "name": "sudocmdgroup", + "object_class": [ + "ipaobject", + "ipasudocmdgrp" + ], + "object_class_config": null, + "object_name": "sudocmdgroup", + "object_name_plural": "sudocmdgroups", + "parent_object": "", + "primary_key": "cn", + "takes_params": [ + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "name", + "cli_short_name": null, + "default": null, + "doc": "Sudo Command Group name", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Sudo Command Group name", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "cn", + "pattern": null, + "pattern_errmsg": null, + "primary_key": true, + "query": false, + "required": true, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "desc", + "cli_short_name": null, + "default": null, + "doc": "Group description", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Description", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "description", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": true, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "membercmd_sudocmd", + "cli_short_name": null, + "default": null, + "doc": "Commands", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Commands", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "membercmd_sudocmd", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "membercmd_sudocmdgroup", + "cli_short_name": null, + "default": null, + "doc": "Sudo Command Groups", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Sudo Command Groups", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "membercmd_sudocmdgroup", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + } + ], + "uuid_attribute": "ipauniqueid" + }, + "sudorule": { + "attribute_members": { + "memberallowcmd": [ + "sudocmd", + "sudocmdgroup" + ], + "memberdenycmd": [ + "sudocmd", + "sudocmdgroup" + ], + "memberhost": [ + "host", + "hostgroup" + ], + "memberuser": [ + "user", + "group" + ] + }, + "container_dn": "cn=sudorules", + "default_attributes": [ + "cn", + "description" + ], + "hidden_attributes": [ + "objectclass", + "aci" + ], + "label": "SudoRule", + "methods": [ + "add", + "add_allow_command", + "add_deny_command", + "add_host", + "add_user", + "del", + "find", + "mod", + "remove_allow_command", + "remove_deny_command", + "remove_host", + "remove_user", + "show" + ], + "name": "sudorule", + "object_class": [ + "ipaassociation", + "ipasudorule" + ], + "object_class_config": null, + "object_name": "Sudo Rule", + "object_name_plural": "Sudo Rules", + "parent_object": "", + "primary_key": "cn", + "takes_params": [ + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "name", + "cli_short_name": null, + "default": null, + "doc": "Rule name", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Rule name", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "cn", + "pattern": null, + "pattern_errmsg": null, + "primary_key": true, + "query": false, + "required": true, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "desc", + "cli_short_name": null, + "default": null, + "doc": "Description", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Description", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "description", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberuser_user", + "cli_short_name": null, + "default": null, + "doc": "Users", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Users", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberuser_user", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberhost_host", + "cli_short_name": null, + "default": null, + "doc": "Hosts", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Hosts", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberhost_host", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberhost_hostgroup", + "cli_short_name": null, + "default": null, + "doc": "Host Groups", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Host Groups", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberhost_hostgroup", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberallowcmd_sudocmd", + "cli_short_name": null, + "default": null, + "doc": "Sudo Allow Commands", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Sudo Allow Commands", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberallowcmd_sudocmd", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberdenycmd_sudocmd", + "cli_short_name": null, + "default": null, + "doc": "Sudo Deny Commands", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Sudo Deny Commands", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberdenycmd_sudocmd", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberallowcmd_sudocmdgroup", + "cli_short_name": null, + "default": null, + "doc": "Sudo Command Groups", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Sudo Command Groups", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberallowcmd_sudocmdgroup", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "memberdenycmd_sudocmdgroup", + "cli_short_name": null, + "default": null, + "doc": "Sudo Command Groups", + "exclude": null, + "flags": [ + "no_update", + "no_create", + "no_search" + ], + "hint": null, + "include": null, + "label": "Sudo Command Groups", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": false, + "name": "memberdenycmd_sudocmdgroup", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + } + ], + "uuid_attribute": "ipauniqueid" + }, "taskgroup": { "attribute_members": { "member": [ @@ -3102,11 +3652,11 @@ "methods": [ "add", "del", + "disable", + "enable", "find", - "lock", "mod", - "show", - "unlock" + "show" ], "name": "user", "object_class": [ @@ -3128,7 +3678,7 @@ "doc": "User login", "exclude": null, "flags": [], - "hint": "Numeric user Identifer", + "hint": null, "include": null, "label": "User login", "length": null, @@ -3507,6 +4057,106 @@ "query": false, "required": false, "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "phone", + "cli_short_name": null, + "default": null, + "doc": "Telephone Number", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Telephone Number", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "telephonenumber", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "mobile", + "cli_short_name": null, + "default": null, + "doc": "Mobile Telephone Number", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Mobile Telephone Number", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "mobile", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "pager", + "cli_short_name": null, + "default": null, + "doc": "Pager Number", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Pager Number", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "pager", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" + }, + { + "attribute": false, + "autofill": false, + "class": "Str", + "cli_name": "fax", + "cli_short_name": null, + "default": null, + "doc": "Fax Number", + "exclude": null, + "flags": [], + "hint": null, + "include": null, + "label": "Fax Number", + "length": null, + "maxlength": null, + "minlength": null, + "multivalue": true, + "name": "facsimiletelephonenumber", + "pattern": null, + "pattern_errmsg": null, + "primary_key": false, + "query": false, + "required": false, + "type": "unicode" } ], "uuid_attribute": "ipauniqueid" diff --git a/install/static/test/data/user_mod.json b/install/static/test/data/user_mod.json new file mode 100644 index 000000000..87c256273 --- /dev/null +++ b/install/static/test/data/user_mod.json @@ -0,0 +1,32 @@ +{ + "error": null, + "id": 6, + "result": { + "result": { + "givenname": [ + "Kermit" + ], + "homedirectory": [ + "/home/kfrog" + ], + "loginshell": [ + "/bin/sh" + ], + "memberof_group": [ + "ipausers", + "muppets" + ], + "sn": [ + "Frog" + ], + "title": [ + "reporter" + ], + "uid": [ + "kfrog" + ] + }, + "summary": "Modified user \"kfrog\"", + "value": "kfrog" + } +}
\ No newline at end of file diff --git a/install/static/test/data/user_show.json b/install/static/test/data/user_show.json index 149b24f68..d3e324fde 100644 --- a/install/static/test/data/user_show.json +++ b/install/static/test/data/user_show.json @@ -1,17 +1,20 @@ { "error": null, - "id": 0, + "id": 6, "result": { "result": { "cn": [ "Kermit Frog" ], - "dn": "uid=kfrog,cn=users,cn=accounts,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com", + "dn": "uid=kfrog,cn=users,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", + "facsimiletelephonenumber": [ + "415-111-0990" + ], "gecos": [ "kfrog" ], "gidnumber": [ - "1079249051" + "1155230701" ], "givenname": [ "Kermit" @@ -20,27 +23,23 @@ "/home/kfrog" ], "ipauniqueid": [ - "41bcf085-8baa-11df-8155-00163e26b89e" + "ddbc79a1-cd9a-11df-98ae-525400674dcd" ], "krbprincipalname": [ - "kfrog@IDM.LAB.BOS.REDHAT.COM" + "kfrog@AYOUNG.BOSTON.DEVEL.REDHAT.COM" ], "loginshell": [ "/bin/sh" ], "mail": [ - "kfrog@redhat.com" - ], - "memberof": [ - "cn=ipausers,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com", - "cn=muppets,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com" - ], - "memberof_group": [ - "ipausers", - "muppets" - ], + "kermit@muppets.com" + ], + "memberof_group": [ + "ipausers", + "muppets" + ], "mepmanagedentry": [ - "cn=kfrog,cn=groups,cn=accounts,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com" + "cn=kfrog,cn=groups,cn=accounts,dc=ayoung,dc=boston,dc=devel,dc=redhat,dc=com" ], "objectclass": [ "top", @@ -55,17 +54,25 @@ "ipaobject", "mepOriginEntry" ], + "pager": [ + "415-333-1882" + ], "sn": [ "Frog" ], + "telephonenumber": [ + "212-555-4444", + "415-333-1882", + "415-111-0990" + ], "uid": [ "kfrog" ], "uidnumber": [ - "1079249051" + "1155230701" ] }, "summary": null, "value": "kfrog" } -} +}
\ No newline at end of file diff --git a/install/static/test/details_tests.html b/install/static/test/details_tests.html index e1b35251c..7c323610c 100644 --- a/install/static/test/details_tests.html +++ b/install/static/test/details_tests.html @@ -9,6 +9,8 @@ <script type="text/javascript" src="../jquery-ui.js"></script> <script type="text/javascript" src="../ipa.js"></script> <script type="text/javascript" src="../details.js"></script> + <script type="text/javascript" src="../entity.js"></script> + <script type="text/javascript" src="details_tests.js"></script> </head> <body> diff --git a/install/static/test/details_tests.js b/install/static/test/details_tests.js index 1a7efc10b..78d633634 100644 --- a/install/static/test/details_tests.js +++ b/install/static/test/details_tests.js @@ -19,40 +19,149 @@ */ - test("Testing ipa_details_create().", function() { - var fields = [ - {name:'cn', label:'Entity Name'}, - {name:'description', label:'Description'}, - {name:'number', label:'Entity ID'} - ]; - - var sections = [ - {name:'identity', label:'Entity Details', fields:fields} - ]; - - var identity = sections[0]; - var key = 'entity'; - - var container = $("<div/>",{id: key}); - ipa_details_create(container, sections); - - same( - container[0].title, key, - "Checking container name" - ); - - var dl = container.find('dl#identity'); - ok( - dl, - "Checking section" - ); - - same( - dl[0].children.length, fields.length, - "Checking fields" - ); + var name = 'NAMENAMENAME'; + var identity = 'IDIDID'; + + var section = ipa_stanza({name:identity, label:name}). + input({name:'cn', label:'Entity Name'}). + input({name:'description', label:'Description'}). + input({name:'number', label:'Entity ID'}); + + + var details = section.fields; + var parent = $("<div/>"); + var container = $("<div title='entity'/>"); + parent.append(container); + ipa_details_section_setup(parent,container, section); + + ok(parent.find('hr').length); + + var h2= parent.find('h2'); + ok(h2.length); + ok(h2[0].innerHTML.indexOf(name) > 1,"find name in html"); + + var dl = parent.find('dl'); + ok(dl.length); + same(dl[0].children.length,3,"children tag count"); + same(dl[0].id, identity,"identity"); + same(details[0].name, dl[0].children[0].title,"name"); + var d = dl[0].children[0].innerHTML; + same(details[0].label+":",d); + same(details[2].name,dl[0].children[2].title); + d = dl[0].children[2].innerHTML; + same(details[2].label+":" ,d); + +}); + + + +test("Testing details lifecycle:setup, load, save ().", function(){ + + var setup_status_called = false; + var save_password_called= false; + var load_manager_called = false; + var load_success_called = false; + var load_failure_called = false; + var update_success_called = false; + var update_failure_called = false; + + function setup_status(){ + setup_status_called = true; + } + + function save_password(){ + save_password_called = true; + return []; + } + + function load_manager(){ + load_manager_called = true; + } + + function setup_st(){ + } + var container = $("<div/>"); + var obj_name = 'user'; + ipa_entity_set_details_definition(obj_name, [ + ipa_stanza({name:'identity', label:'Identity Details'}). + input({name:'title', label: 'Title'}). + input({name:'givenname', label:'First Name'}). + input({name:'sn', label:'Last Name'}). + input({name:'cn', label:'Full Name'}). + input({name:'displayname', label:'Dispaly Name'}). + input({name:'initials', label:'Initials'}), + ipa_stanza({name:'account', label:'Account Details'}). + input({name:'status', label:'Account Status', setup: setup_status}). + input({name:'uid', label:'Login'}). + input({name:'userpassword', label:'Password', save: save_password}). + input({name:'uidnumber', label:'UID'}). + input({name:'gidnumber', label:'GID'}). + input({name:'homedirectory', label:'homedirectory'}), + ipa_stanza({name:'contact', label:'Contact Details'}). + input({name:'mail', label:'E-mail Address'}). + input({name:'telephonenumber', label:'Numbers'}), + ipa_stanza({name:'address', label:'Mailing Address'}). + input({name:'street', label:'Address'}). + input({name:'location', label:'City'}). + input({name:'state', label:'State', setup: setup_st}). + input({name:'postalcode', label:'ZIP'}), + ipa_stanza({name:'employee', label:'Employee Information'}). + input({name:'ou', label:'Org. Unit'}). + input({name:'manager', label:'Manager', load: load_manager}), + ipa_stanza({name:'misc', label:'Misc. Information'}). + input({name:'carlicense', label:'Car License'}) + ]); + + ipa_details_create(container, ipa_entity_details_list[obj_name]); + + var contact = container.find('dl#contact.entryattrs'); + ok(contact); + var identity = container.find('dl#identity.entryattrs'); + ok(identity); + var dts= identity.find('dt'); + ok(dts); + same(6, dts.length); + same('initials',dts[5].title); + + //TODO extract into Fixture + ipa_ajax_options["async"] = false; + $.ajaxSetup(ipa_ajax_options); + ipa_json_url = './data'; + ipa_use_static_files = true; + + container.attr('id','user'); + + ok (setup_status_called , 'setup status called'); + + + ipa_details_load(container, + 'kfrog', + function(){load_success_called = true}, + function(){load_failure_called = true}) + + ok (load_success_called,'load success called'); + ok (!load_failure_called,'load failure not called'); + + + ok (load_manager_called, 'load manager called'); + + + ipa_details_load(container, + 'kfrog', + function(){load_success_called = true}, + function(){load_failure_called = true}) + + + ipa_details_update(container, + 'kfrog', + function(){update_success_called = true}, + function(){update_failure_called = true}) + + ok (update_success_called,'update success called'); + ok (!update_failure_called,'update failure not called'); + ok (save_password_called, 'save password called'); }); @@ -64,27 +173,22 @@ test("Testing _ipa_create_text_input().", function(){ var input = _ipa_create_text_input(name, value); ok(input,"input not null"); - same(input[0].name,name ); - same(input[0].value,value ); - same(input[0].type,"text" ); -}); + var text = input.find('input'); + ok(text); + same(text[0].name,name ); + same(text[0].value,value ); + same(text[0].type,"text" ); +}); test("Testing ipa_details_section_setup()",function(){ - var fields = [ - {name:'cn', label:'Entity Name'}, - {name:'description', label:'Description'}, - {name:'number', label:'Entity ID'} - ]; - - var section = { - name: 'IDIDID', - label: 'NAMENAMENAME', - fields: fields - }; - + var section = ipa_stanza({name: 'IDIDID', label: 'NAMENAMENAME'}). + input({name:'cn', label:'Entity Name'}). + input({name:'description', label:'Description'}). + input({name:'number', label:'Entity ID'}); + var fields = section.fields; var container = $("<div title='entity'/>"); var details = $("<div/>"); container.append(details); @@ -106,4 +210,4 @@ test("Testing ipa_details_section_setup()",function(){ same(dl[0].children[2].title, fields[2].name); same(dl[0].children[2].innerHTML, fields[2].label+":"); -});
\ No newline at end of file +}); diff --git a/install/static/user.js b/install/static/user.js index 34ced1ef1..e651d242c 100644 --- a/install/static/user.js +++ b/install/static/user.js @@ -38,40 +38,40 @@ ipa_entity_set_add_definition('user', [ ] ]); + ipa_entity_set_details_definition('user', [ - {name:'identity', label:'Identity Details', fields:[ - {name:'title', label:'Title'}, - {name:'givenname', label:'First Name'}, - {name:'sn', label:'Last Name'}, - {name:'cn', label:'Full Name'}, - {name:'displayname', label:'Dispaly Name'}, - {name:'initials', label:'Initials'} - ]}, - {name:'account', label:'Account Details', fields:[ - {name:'status', label:'Account Status', load:user_status_load}, - {name:'uid', label:'Login'}, - {name:'userpassword', label:'Password', load:user_password_load}, - {name:'uidnumber', label:'UID'}, - {name:'gidnumber', label:'GID'}, - {name:'homedirectory', label:'homedirectory'} - ]}, - {name:'contact', label:'Contact Details', fields:[ - {name:'mail', label:'E-mail Address'}, - {name:'telephonenumber', label:'Numbers', load:user_telephonenumber_load} - ]}, - {name:'address', label:'Mailing Address', fields:[ - {name:'street', label:'Address'}, - {name:'location', label:'City'}, - {name:'state', label:'State', load:user_state_load}, - {name:'postalcode', label:'ZIP'} - ]}, - {name:'employee', label:'Employee Information', fields:[ - {name:'ou', label:'Org. Unit'}, - {name:'manager', label:'Manager', load:user_manager_load} - ]}, - {name:'misc', label:'Misc. Information', fields:[ - {name:'carlicense', label:'Car License'} - ]} + ipa_stanza({name:'identity', label:'Identity Details'}). + input({name:'title', label: 'Title'}). + input({name:'givenname', label:'First Name'}). + input({name:'sn', label:'Last Name'}). + input({name:'cn', label:'Full Name'}). + input({name:'displayname', label:'Dispaly Name'}). + input({name:'initials', label:'Initials'}), + ipa_stanza({name:'account', label:'Account Details'}). + input({name:'status', label:'Account Status', load:user_status_load}). + input({name:'uid', label:'Login'}). + input({name:'userpassword', + label:'Password', + load: user_password_load}). + input({name:'uidnumber', label:'UID'}). + input({name:'gidnumber', label:'GID'}). + input({name:'homedirectory', label:'homedirectory'}), + ipa_stanza({name:'contact', label:'Contact Details'}). + input({name:'mail', label:'E-mail Address'}). + input({name:'telephonenumber', label:'Phone Numbers'}). + input({name:'pager', label:'Pager Numbers'}). + input({name:'mobile', label:'Mobile Phone Numbers'}). + input({name:'facsimiletelephonenumber', label:'Fax Numbers'}), + ipa_stanza({name:'address', label:'Mailing Address'}). + input({name:'street', label:'Address'}). + input({name:'location', label:'City'}). + input({name:'state', label:'State', load:user_state_load}). + input({name:'postalcode', label:'ZIP'}), + ipa_stanza({name:'employee', label:'Employee Information'}). + input({name:'ou', label:'Org. Unit'}). + input({name:'manager', label:'Manager'}), + ipa_stanza({name:'misc', label:'Misc. Information'}). + input({name:'carlicense', label:'Car License'}) ]); ipa_entity_set_association_definition('user', { @@ -151,7 +151,7 @@ function on_lock_win(data, textStatus, xhr) /* ATTRIBUTE CALLBACKS */ var toggle_temp = 'S <a href="jslink" onclick="return (toggle_on_click(this))" title="S">Toggle</a>'; -function user_status_load(dt, result) +function user_status_load(container, dt, result) { var memberof = result['memberof']; var dd; @@ -172,7 +172,7 @@ function user_status_load(dt, result) } var pwd_temp = '<a href="jslink" onclick="return (resetpwd_on_click(this))" title="A">Reset Password</a>'; -function user_password_load(dt, result) +function user_password_load(container, dt, result) { var dd = ipa_create_first_dd(this.name, pwd_temp.replace('A', 'userpassword')); dt.after(dd); @@ -188,7 +188,7 @@ var states = [ 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT', 'VI', 'VA', 'WA', 'WV', 'WI', 'WY', '' ]; -function user_state_load(dt, result) +function user_state_load(container, dt, result) { var next = dt.next(); next.css('clear', 'none'); @@ -208,10 +208,4 @@ function user_state_load(dt, result) sel.val(''); } -function user_telephonenumber_load(dt, result) -{ -} -function user_manager_load(dt, result) -{ -} |