diff options
Diffstat (limited to 'install/ui/association.js')
-rw-r--r-- | install/ui/association.js | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/install/ui/association.js b/install/ui/association.js index 3c847c59c..883bb2b42 100644 --- a/install/ui/association.js +++ b/install/ui/association.js @@ -671,7 +671,7 @@ IPA.association_facet = function (spec) { spec = spec || {}; - var that = IPA.facet(spec); + var that = IPA.table_facet(spec); that.attribute_member = spec.attribute_member; that.indirect_attribute_member = spec.indirect_attribute_member; @@ -688,49 +688,34 @@ IPA.association_facet = function (spec) { that.add_method = spec.add_method || 'add_member'; that.remove_method = spec.remove_method || 'remove_member'; - that.columns = $.ordered_map(); that.adder_columns = $.ordered_map(); that.page_length = spec.page_length === undefined ? 20 : spec.page_length; - that.get_column = function(name) { - return that.columns.get(name); - }; - - that.add_column = function(column) { - that.columns.put(column.name, column); - }; - - that.create_column = function(spec) { - var column = IPA.column(spec); - that.add_column(column); - return column; - }; - that.get_adder_column = function(name) { return that.adder_columns.get(name); }; that.add_adder_column = function(column) { + column.entity_name = that.managed_entity_name; that.adder_columns.put(column.name, column); }; that.create_adder_column = function(spec) { - var column = IPA.column(spec); + var column; + if (spec instanceof Object) { + var factory = spec.factory || IPA.column; + column = factory(spec); + } else { + column = IPA.column({ name: spec }); + } that.add_adder_column(column); return column; }; - var i; - if (spec.columns){ - for (i = 0; i < spec.columns.length; i+= 1){ - that.create_column(spec.columns[i]); - } - } - if (spec.adder_columns){ - for (i = 0; i < spec.adder_columns.length; i+= 1){ - that.create_adder_column(spec.adder_columns[i]); - } + var adder_columns = spec.adder_columns || []; + for (var i=0; i<adder_columns.length; i++) { + that.create_adder_column(adder_columns[i]); } that.init = function() { @@ -785,7 +770,38 @@ IPA.association_facet = function (spec) { column.entity_name = that.other_entity; } + that.table.prev_page = function() { + if (that.table.current_page > 1) { + IPA.nav.push_state({ page: that.table.current_page-1 }); + } + }; + + that.table.next_page = function() { + if (that.table.current_page < that.table.total_pages) { + IPA.nav.push_state({ page: that.table.current_page+1 }); + } + }; + + that.table.set_page = function(page) { + if (page < 1) { + page = 1; + } else if (page > that.total_pages) { + page = that.total_pages; + } + IPA.nav.push_state({ page: page }); + }; + that.table.refresh = function() { + var page = parseInt(IPA.nav.get_state('page'), 10) || 1; + if (page < 1) { + IPA.nav.push_state({ page: 1 }); + return; + } else if (page > that.table.total_pages) { + IPA.nav.push_state({ page: that.table.total_pages }); + return; + } + that.table.current_page = page; + that.table.current_page_input.val(page); that.refresh_table(); }; @@ -1095,7 +1111,7 @@ IPA.association_facet = function (spec) { that.table.total_pages = 1; } - that.refresh_table(); + that.table.refresh(); } var pkey = IPA.get_entity(that.entity_name).get_primary_key(); |