diff options
author | Petr VobornÃk <pvoborni@redhat.com> | 2012-01-24 15:31:18 +0100 |
---|---|---|
committer | Endi S. Dewata <edewata@redhat.com> | 2012-01-31 08:39:12 -0600 |
commit | 191f05e4774a2b62f43f1445c6e08e9057539f98 (patch) | |
tree | 527ae42f75d6925f7fa5e8a1e6d217bc2d6268e5 /install | |
parent | 1f3d8003f7ccb7793be6452942f62d10433e7f27 (diff) | |
download | freeipa-191f05e4774a2b62f43f1445c6e08e9057539f98.tar.gz freeipa-191f05e4774a2b62f43f1445c6e08e9057539f98.tar.xz freeipa-191f05e4774a2b62f43f1445c6e08e9057539f98.zip |
Added paging to DNS record search facet
Paging in DNS record search facet was disabled because there was a mismatch between primary keys sent by server and values displayed in the facet.
The facet was modified to enable paging. To preserve amount of information which was displayed before, current rows have variable height - they can contain more that one line depending on number of values in the record. Each record has a checkbox and indsname in its first line to distinguish one record from others. Because there is only one checkbox for record, delete command is called with --rem-all option which causes that entire record is removed. Individual values can be deleted in record's details facet.
https://fedorahosted.org/freeipa/ticket/2094
Diffstat (limited to 'install')
-rw-r--r-- | install/ui/dns.js | 121 | ||||
-rw-r--r-- | install/ui/search.js | 4 |
2 files changed, 74 insertions, 51 deletions
diff --git a/install/ui/dns.js b/install/ui/dns.js index d30cc312..65c331f5 100644 --- a/install/ui/dns.js +++ b/install/ui/dns.js @@ -105,7 +105,7 @@ IPA.dns.zone_entity = function(spec) { facet_group: 'dnsrecord', nested_entity : 'dnsrecord', name: 'records', - pagination: false, + deleter_dialog: IPA.dns.record_search_deleter_dialog, title: IPA.metadata.objects.dnszone.label_singular, label: IPA.metadata.objects.dnsrecord.label, columns: [ @@ -468,80 +468,101 @@ IPA.dns.record_search_facet = function(spec) { var that = IPA.nested_search_facet(spec); - that.load_all = function(data) { + that.get_records = function(pkeys, on_success, on_error) { + + var batch = IPA.batch_command({ + name: that.get_records_command_name(), + on_success: on_success, + on_error: on_error + }); + + var zone = IPA.nav.get_state('dnszone-pkey'); + + for (var i=0; i<pkeys.length; i++) { + var pkey = pkeys[i]; + + var command = IPA.command({ + entity: that.table.entity.name, + method: 'show', + args: [zone, pkey], + options: { all: true } + }); + + batch.add_command(command); + } + + batch.execute(); + }; + + + that.load_records = function(records) { + that.table.empty(); var types = IPA.dns_record_types(); - var result = data.result.result; - var records = []; + for (var i=0; i<records.length; i++) { - for (var i=0; i<result.length; i++) { - var record = result[i]; + var original = records[i]; + var record = { + idnsname: original.idnsname, + values: [] + }; for (var j=0; j<types.length; j++) { var type = types[j]; - if (!record[type.value]) continue; + if (!original[type.value]) continue; - var values = record[type.value]; + var values = original[type.value]; for (var k=0; k<values.length; k++) { - records.push({ - idnsname: record.idnsname, + record.values.push({ type: type.label, data: values[k] }); } } + + that.add_record(record); } + that.table.set_values(that.selected_values); + }; - that.load_records(records); + that.add_record = function(record) { - if (data.result.truncated) { - var message = IPA.messages.search.truncated; - message = message.replace('${counter}', data.result.count); - that.table.summary.text(message); - } else { - that.table.summary.text(data.result.summary); + for (var i=0; i<record.values.length; i++) { + + var value = record.values[i]; + + if (i === 0) { + value.idnsname = record.idnsname; + } + + var tr = that.table.add_record(value); + + if (i > 0) { + $('input[name="'+that.table.name+'"]', tr).remove(); + } } }; - that.get_selected_values = function() { + return that; +}; - var values = []; +IPA.dns.record_search_deleter_dialog = function(spec) { - var records = {}; - var value; - var record_type; - - $('input[name="idnsname"]:checked', that.table.tbody).each(function() { - $('div', $(this).parent().parent()).each(function() { - var div = $(this); - var name = div.attr('name'); - var text = div.text(); - - if (name === 'idnsname') { - value = records[text]; - if (!value) { - value = { pkey: text }; - records[text] = value; - } - } else if (name === 'type') { - record_type = text.toLowerCase()+'record'; - - } else if (name === 'data') { - if (!value[record_type]) { - value[record_type] = text; - } else { - value[record_type] += ',' + text; - } - } - }); - }); + spec = spec || {}; - for (var key in records) { - values.push(records[key]); + var that = IPA.search_deleter_dialog(spec); + + that.create_command = function() { + + var batch = that.search_deleter_dialog_create_command(); + + for (var i=0; i<batch.commands.length; i++) { + var command = batch.commands[i]; + command.set_option('del_all', true); } - return values; + return batch; }; return that; diff --git a/install/ui/search.js b/install/ui/search.js index 99990528..4f26c040 100644 --- a/install/ui/search.js +++ b/install/ui/search.js @@ -38,6 +38,8 @@ IPA.search_facet = function(spec) { var that = IPA.table_facet(spec); + that.deleter_dialog = spec.deleter_dialog || IPA.search_deleter_dialog; + var init = function() { that.init_table(that.managed_entity); @@ -144,7 +146,7 @@ IPA.search_facet = function(spec) { var dialog = that.managed_entity.get_dialog('remove'); if (!dialog) { - dialog = IPA.search_deleter_dialog(); + dialog = that.deleter_dialog(); } dialog.entity_name = that.managed_entity.name; |