summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Voborník <pvoborni@redhat.com>2012-01-24 15:31:18 +0100
committerEndi S. Dewata <edewata@redhat.com>2012-01-31 08:40:47 -0600
commit30c52db28b8f19f8b51f514834e7417c4a115407 (patch)
treeabbe7fc0f4e1406c9672cfd9caa54ccfd6ca8087
parent0021ce57b94d050948ad3683fcafa48b6fdf162f (diff)
downloadfreeipa.git-30c52db28b8f19f8b51f514834e7417c4a115407.tar.gz
freeipa.git-30c52db28b8f19f8b51f514834e7417c4a115407.tar.xz
freeipa.git-30c52db28b8f19f8b51f514834e7417c4a115407.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
-rw-r--r--install/ui/dns.js121
-rw-r--r--install/ui/search.js4
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;