diff options
Diffstat (limited to 'install/static/widget.js')
-rwxr-xr-x | install/static/widget.js | 194 |
1 files changed, 121 insertions, 73 deletions
diff --git a/install/static/widget.js b/install/static/widget.js index f4869c99..1bdb0d4f 100755 --- a/install/static/widget.js +++ b/install/static/widget.js @@ -66,7 +66,7 @@ function ipa_widget(spec) { that.container = container; } - function load(result) { + function load(record) { } function save() { @@ -77,12 +77,16 @@ function ipa_widget(spec) { } that.is_dirty = function() { - if (!that.values) return true; + 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; }; @@ -159,9 +163,9 @@ function ipa_text_widget(spec) { }); }; - that.load = function(result) { + that.load = function(record) { - that.values = result[that.name] || ['']; + that.values = record[that.name] || ['']; if (that.read_only) { var input = $('input[name="'+that.name+'"]', that.container); @@ -237,8 +241,8 @@ function ipa_checkbox_widget(spec) { }); }; - that.load = function(result) { - that.values = result[that.name] || [false]; + that.load = function(record) { + that.values = record[that.name] || [false]; that.reset(); }; @@ -305,20 +309,28 @@ function ipa_radio_widget(spec) { }); }; - that.load = function(result) { - that.values = result[that.name] || ['']; + that.load = function(record) { + that.values = record[that.name] || ['']; that.reset(); }; that.save = function() { - var value = $('input[name="'+that.name+'"]:checked', that.container).val(); - return [value]; + var input = $('input[name="'+that.name+'"]:checked', that.container); + if (!input.length) return []; + return [input.val()]; }; that.set_values = function(values) { - var input = $('input[name="'+that.name+'"][value="'+values[0]+'"]', that.container); - if (!input.length) return; - input.get(0).checked = true; + if (values.length) { + var input = $('input[name="'+that.name+'"][value="'+values[0]+'"]', that.container); + if (input.length) { + input.get(0).checked = true; + } else { + that.clear(); + } + } else { + that.clear(); + } }; that.clear = function() { @@ -328,6 +340,9 @@ function ipa_radio_widget(spec) { }); }; + // methods that should be invoked by subclasses + that.radio_save = that.save; + return that; } @@ -372,8 +387,8 @@ function ipa_textarea_widget(spec) { }); }; - that.load = function(result) { - that.values = result[that.name] || ['']; + that.load = function(record) { + that.values = record[that.name] || ['']; that.reset(); }; @@ -413,7 +428,7 @@ function ipa_button_widget(spec) { input.replaceWith(ipa_button({ 'label': that.label, 'click': that.click })); } - function load(result) { + function load(record) { } function save() { @@ -465,6 +480,7 @@ function ipa_table_widget(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 = {}; @@ -515,12 +531,12 @@ function ipa_table_widget(spec) { 'class': 'search-table' }).appendTo(container); - var thead = $('<thead/>').appendTo(table); - if (that.scrollable) { - thead.css('display', 'block'); + table.addClass('scrollable'); } + var thead = $('<thead/>').appendTo(table); + var tr = $('<tr/>').appendTo(thead); var th = $('<th/>', { @@ -566,11 +582,6 @@ function ipa_table_widget(spec) { var tbody = $('<tbody/>').appendTo(table); - if (that.scrollable) { - tbody.css('display', 'block'); - tbody.css('overflow', 'auto'); - } - if (that.height) { tbody.css('height', that.height); } @@ -651,23 +662,28 @@ function ipa_table_widget(spec) { that.empty(); - var values = result[that.name]; - if (!values) return; + that.values = result[that.name]; + if (!that.values) return; - for (var i=0; i<values.length; i++) { + for (var i=0; i<that.values.length; i++) { var record = that.get_record(result, i); that.add_record(record); } }; that.save = function() { - var values = []; + if (that.save_values) { + var values = []; - $('input[name="select"]', that.tbody).each(function() { - values.push($(this).val()); - }); + $('input[name="select"]', that.tbody).each(function() { + values.push($(this).val()); + }); - return values; + return values; + + } else { + return null; + } }; that.get_selected_values = function() { @@ -777,6 +793,7 @@ function ipa_dialog(spec) { that.name = spec.name; that.title = spec.title; + that.template = spec.template; that._entity_name = spec.entity_name; that.width = spec.width || 400; @@ -864,15 +881,34 @@ function ipa_dialog(spec) { that.container = $('<div/>').appendTo(container); - that.create(); - that.setup(); + 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 + }); + } + ); - that.container.dialog({ - 'title': that.title, - 'modal': true, - 'width': that.width, - '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) { @@ -955,7 +991,7 @@ function ipa_adder_dialog(spec) { that.available_table = ipa_table_widget({ name: 'available', scrollable: true, - height: 150 + height: '151px' }); that.available_table.set_columns(that.columns); @@ -965,62 +1001,57 @@ function ipa_adder_dialog(spec) { that.selected_table = ipa_table_widget({ name: 'selected', scrollable: true, - height: 150 + 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/>').appendTo(that.container); + var search_panel = $('<div/>', { + 'class': 'adder-dialog-filter' + }).appendTo(that.container); $('<input/>', { type: 'text', - name: 'filter' + name: 'filter', + style: 'width: 244px' }).appendTo(search_panel); + search_panel.append(' '); + $('<input/>', { type: 'button', name: 'find', value: 'Find' }).appendTo(search_panel); - var results_panel = $('<div/>').appendTo(that.container); - results_panel.css('border', '2px solid rgb(0, 0, 0)'); - results_panel.css('position', 'relative'); - results_panel.css('width', '100%'); - results_panel.css('height', '200px'); - - var available_title = $('<div/>', { - html: 'Available', - style: 'float: left; width: 250px;' - }).appendTo(results_panel); - - var buttons_title = $('<div/>', { - html: ' ', - style: 'float: left; width: 50px;' - }).appendTo(results_panel); - - var selected_title = $('<div/>', { - html: 'Prospective', - style: 'float: left; width: 250px;' - }).appendTo(results_panel); + var results_panel = $('<div/>', { + 'class': 'adder-dialog-results' + }).appendTo(that.container); var available_panel = $('<div/>', { name: 'available', - style: 'clear:both; float: left; width: 250px; height: 150px;' + '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', - style: 'float: left; width: 50px; height: 150px; text-align: center;' + 'class': 'adder-dialog-buttons' }).appendTo(results_panel); var p = $('<p/>').appendTo(buttons_panel); @@ -1039,9 +1070,14 @@ function ipa_adder_dialog(spec) { var selected_panel = $('<div/>', { name: 'selected', - style: 'float: left; width: 250px; height: 150px;' + 'class': 'adder-dialog-selected' }).appendTo(results_panel); + $('<div/>', { + html: 'Prospective', + 'class': 'ui-widget-header' + }).appendTo(selected_panel); + that.selected_table.create(selected_panel); }; @@ -1070,8 +1106,7 @@ function ipa_adder_dialog(spec) { 'label': button.val(), 'icon': 'ui-icon-trash', 'click': function() { - var rows = that.selected_table.remove_selected_rows(); - that.available_table.add_rows(rows); + that.remove(); } }); button.replaceWith(that.remove_button); @@ -1081,8 +1116,7 @@ function ipa_adder_dialog(spec) { 'label': button.val(), 'icon': 'ui-icon-plus', 'click': function() { - var rows = that.available_table.remove_selected_rows(); - that.selected_table.add_rows(rows); + that.add(); } }); button.replaceWith(that.add_button); @@ -1092,13 +1126,27 @@ function ipa_adder_dialog(spec) { that.open = function(container) { that.buttons = { - 'Enroll': that.add, - 'Cancel': that.close + '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(); }; |