diff --git a/install/ui/add.js b/install/ui/add.js index 73a423f00..33df62abc 100644 --- a/install/ui/add.js +++ b/install/ui/add.js @@ -32,7 +32,7 @@ IPA.add_dialog = function (spec) { that.name = spec.name; that.title = spec.title; that._entity_name = spec.entity_name; - + that.method = spec.method || 'add'; that.init = function() { that.add_button(IPA.messages.buttons.add, function() { @@ -102,7 +102,7 @@ IPA.add_dialog = function (spec) { var command = IPA.command({ entity: that.entity_name, - method: 'add', + method: that.method, on_success: on_success, on_error: on_error }); diff --git a/install/ui/automount.js b/install/ui/automount.js index f865fe73f..d008c964f 100644 --- a/install/ui/automount.js +++ b/install/ui/automount.js @@ -63,7 +63,8 @@ IPA.entity_factories.automountmap = function() { nested_entity : 'automountkey', label : IPA.metadata.objects.automountkey.label, name: 'keys', - columns:['description'] + get_values: IPA.get_option_values, + columns:['automountkey','automountinformation'] }). details_facet({ sections:[ @@ -75,7 +76,27 @@ IPA.entity_factories.automountmap = function() { ] }). adder_dialog({ - fields:['automountmapname','description'] + factory: IPA.automountmap_adder_dialog, + fields:[{factory:IPA.method_radio_widget, + name: 'method', + undo: false, + label:'Map Type', + options:[{value:'add',label:'Direct'}, + {value:'add_indirect',label:'Indirect'}] + }, + 'automountmapname','description', + { + name:'key', + label:'Mount Point', + conditional:true, + undo: false + }, + { + name:'parentmap', + label:'Parent Map', + conditional:true, + undo: false + }] }). build(); }; @@ -99,3 +120,64 @@ IPA.entity_factories.automountkey = function() { }). build(); }; + + +IPA.automountmap_adder_dialog = function(spec){ + var that = IPA.add_dialog(spec); + + that.super_setup = that.setup; + that.setup = function(container) { + that.super_setup(container); + that.disable_conditional_fields(); + }; + + return that; +}; + + +IPA.get_option_values = function(){ + + var values = []; + $('input[name="select"]:checked', this.table.tbody).each(function() { + var value = {}; + $('span',$(this).parent().parent()).each(function(){ + var name = this.attributes['name'].value; + + value[name] = $(this).text(); + }); + values.push (value); + }); + return values; +}; + +IPA.method_radio_widget = function(spec){ + var direct = true; + + var that = IPA.radio_widget(spec); + + that.setup = function(container) { + + var input = $('input[name="'+that.name+'"]', that.container); + input. + filter("[value="+ that.dialog.method+"]"). + attr('checked', true); + + + input.change(function() { + that.dialog.method = this.value; + + if (this.value === 'add_indirect'){ + that.dialog.enable_conditional_fields(); + }else{ + that.dialog.disable_conditional_fields(); + } + }); + }; + + that.reset = function(){ + var input = $('input[name="'+that.name+'"]', that.container); + input.filter("[value=add]").click(); + }; + + return that; +}; diff --git a/install/ui/dialog.js b/install/ui/dialog.js index 4f93760bf..3bcb4556d 100644 --- a/install/ui/dialog.js +++ b/install/ui/dialog.js @@ -43,6 +43,31 @@ IPA.dialog = function(spec) { that.fields = $.ordered_map(); that.sections = $.ordered_map(); + that.conditional_fields = []; + + that.enable_conditional_fields = function(){ + for (var i =0; i < that.conditional_fields.length; i+=1) { + $('label[id='+ + that.conditional_fields[i] +'-label]', + that.container).css('visibility','visible'); + $('input[name='+ + that.conditional_fields[i] + + ']',that.container).css('visibility','visible'); + } + }; + + that.disable_conditional_fields = function(){ + for (var i =0; i < that.conditional_fields.length; i+=1) { + $('label[id='+ + that.conditional_fields[i] +'-label]', + that.container).css('visibility','hidden'); + + $('input[name='+ + that.conditional_fields[i] + + ']',that.container).css('visibility','hidden'); + } + }; + that.__defineGetter__("entity_name", function(){ return that._entity_name; }); @@ -70,7 +95,12 @@ IPA.dialog = function(spec) { }; that.add_field = function(field) { + field.dialog = that; that.fields.put(field.name, field); + if (field.conditional){ + that.conditional_fields.push(field.name); + } + }; that.field = function(field) { @@ -149,7 +179,8 @@ IPA.dialog = function(spec) { style: 'vertical-align: top;', title: field.label }).appendTo(tr); - td.append(field.label+': '); + td.append($('',{id: field.name+'-label', + text:field.label+': '})); td = $('