The IPA.records_facet has been converted into a subclass of
IPA.search_facet. This helps remove duplicate table code and provide
consistent DOM element attributes for Selenium tests.

--
Endi S. Dewata
From 0982fd17fa0f5052c3249f5fd0f464dc19bafc5f Mon Sep 17 00:00:00 2001
From: Endi S. Dewata <edew...@redhat.com>
Date: Mon, 9 May 2011 20:46:52 -0500
Subject: [PATCH] Updated DNS interface.

The IPA.records_facet has been converted into a subclass of
IPA.search_facet. This helps remove duplicate table code and provide
consistent DOM element attributes for Selenium tests.
---
 install/ui/dns.js     |  378 ++++++++++++++++++++++---------------------------
 install/ui/entitle.js |    4 +-
 install/ui/search.js  |    5 +-
 install/ui/widget.js  |    7 +-
 4 files changed, 180 insertions(+), 214 deletions(-)

diff --git a/install/ui/dns.js b/install/ui/dns.js
index bd8d6e1858afc14013a91cdcd53a8ea11362c0ca..6784584b6bd8ab14aff4b1dd4bf2af0d79375530 100644
--- a/install/ui/dns.js
+++ b/install/ui/dns.js
@@ -26,36 +26,53 @@
 /* DNS */
 IPA.entity_factories.dnszone = function() {
 
-    if (!IPA.dns_enabled){
+    if (!IPA.dns_enabled) {
         throw "DNS not enabled on server";
     }
 
-    return  IPA.entity_builder().
+    return IPA.entity_builder().
         entity('dnszone').
         search_facet({
             columns:['idnsname']
         }).
-        details_facet({sections:[{
-            name:'identity',
-            fields:[
-                'idnsname',
-                'idnszoneactive',
-                'idnssoamname',
-                'idnssoarname',
-                'idnssoaserial',
-                'idnssoarefresh',
-                'idnssoaretry',
-                'idnssoaexpire',
-                'idnssoaminimum',
-                'dnsttl',
-                'dnsclass',
-                'idnsallowdynupdate',
-                'idnsupdatepolicy']}]}).
+        details_facet({
+            sections:[{
+                name:'identity',
+                fields:[
+                    'idnsname',
+                    'idnszoneactive',
+                    'idnssoamname',
+                    'idnssoarname',
+                    'idnssoaserial',
+                    'idnssoarefresh',
+                    'idnssoaretry',
+                    'idnssoaexpire',
+                    'idnssoaminimum',
+                    'dnsttl',
+                    'dnsclass',
+                    'idnsallowdynupdate',
+                    'idnsupdatepolicy']}]
+        }).
         facet({
             factory: IPA.records_facet,
-            'name': 'records',
-            'facet_group':'Member',
-            'label': IPA.metadata.objects.dnsrecord.label
+            name: 'records',
+            facet_group:'Member',
+            label: IPA.metadata.objects.dnsrecord.label,
+            columns: [
+                {
+                    name: 'idnsname',
+                    label: IPA.get_entity_param('dnsrecord', 'idnsname').label,
+                    primary_key: true
+                },
+                {
+                    name: 'type',
+                    label: 'Record Type'
+                },
+                {
+                    name: 'data',
+                    label: 'Data'
+                }
+            ]
         }).
         standard_association_facets().
         adder_dialog({
@@ -68,7 +85,7 @@ IPA.entity_factories.dnszone = function() {
         build();
 };
 
-IPA.force_dnszone_add_checkbox_widget = function (spec){
+IPA.force_dnszone_add_checkbox_widget = function(spec) {
     var param_info = IPA.get_method_option('dnszone_add', 'force');
     spec.name = 'force';
     spec.label = param_info.label;
@@ -77,18 +94,44 @@ IPA.force_dnszone_add_checkbox_widget = function (spec){
     return  IPA.checkbox_widget(spec);
 };
 
-IPA.records_facet = function (spec){
+IPA.records_facet = function(spec) {
 
     spec = spec || {};
 
-    var that = IPA.facet(spec);
+    var that = IPA.search_facet(spec);
 
-    that.record = null;
+    var record_types = [
+        'a', 'aaaa', 'dname', 'cname', 'mx', 'ns', 'ptr',
+        'srv', 'txt', 'a6', 'afsdb', 'cert', 'ds',
+        'key', 'kx', 'loc',  'naptr', 'nsec',
+        'rrsig', 'sshfp'
+    ];
 
-    var record_types =[ 'a', 'aaaa', 'dname', 'cname', 'mx', 'ns', 'ptr',
-                        'srv', 'txt', 'a6', 'afsdb', 'cert', 'ds',
-                        'key', 'kx', 'loc',  'naptr', 'nsec',
-                        'rrsig', 'sshfp'];
+    that.init = function() {
+
+        that.facet_init();
+
+        that.table = IPA.table_widget({
+            name: 'search',
+            label: IPA.metadata.objects[that.entity_name].label,
+            entity_name: that.entity_name
+        });
+
+        for (var i=0; i<that.columns.length; i++) {
+            var column = that.columns[i];
+            that.table.add_column(column);
+        }
+
+        that.table.select_changed = function() {
+            that.select_changed();
+        };
+
+        that.table.refresh = function() {
+            that.refresh();
+        };
+
+        that.table.init();
+    };
 
     function create_type_select(id,add_none) {
         var type_select = $('<select/>',{
@@ -96,7 +139,7 @@ IPA.records_facet = function (spec){
         });
 
         if (add_none){
-            type_select.append($('<option/>',{
+            type_select.append($('<option/>', {
                 text: '(any)',
                 value: ''
             }));
@@ -152,13 +195,13 @@ IPA.records_facet = function (spec){
             }).appendTo(dd);
         };
 
-        dialog.add_button(IPA.messages.buttons.add_many, function() {
+        dialog.add_button(IPA.messages.buttons.add, function() {
             dialog.add();
+            dialog.close();
         });
 
-        dialog.add_button(IPA.messages.buttons.add_and_close, function() {
+        dialog.add_button(IPA.messages.buttons.add_and_add_another, function() {
             dialog.add();
-            dialog.close();
         });
 
         dialog.add_button(IPA.messages.buttons.cancel, function() {
@@ -180,7 +223,7 @@ IPA.records_facet = function (spec){
                 args: [pkey, resource],
                 options: options,
                 on_success: function(data, text_status, xhr) {
-                    reload();
+                    that.refresh();
                 }
             });
 
@@ -194,34 +237,25 @@ IPA.records_facet = function (spec){
 
     that.remove = function() {
 
+        var values = that.table.get_selected_rows();
+
+        if (!values.length) {
+            return;
+        }
+
         var zone = $.bbq.getState('dnszone-pkey', true);
 
-        var thead = that.records_table.find('thead');
-        thead.find("INPUT[type='checkbox']").
-            attr('checked', false);
-
-        var tbody = that.records_table.find('tbody');
-
         var records = [];
 
-        $('input[type=checkbox]:checked', tbody).each(
-            function(index, input){
-                var tr = $(input).parents('tr');
-                var resource = $('[title=idnsname]', tr).text();
-                var type = $('[title=type]', tr).text().toLowerCase();
-                var data = $('[title=data]', tr).text();
+        values.each(function() {
+            var tr = $(this);
 
-                records.push({
-                    resource: resource,
-                    type: type,
-                    data: data
-                });
-            }
-        );
-
-        if (records.length === 0){
-            return;
-        }
+            records.push({
+                resource: $('span[name=idnsname]', tr).text(),
+                type: $('span[name=type]', tr).text().toLowerCase(),
+                data: $('span[name=data]', tr).text()
+            });
+        });
 
         var dialog = IPA.dialog({
             title: IPA.messages.buttons.remove
@@ -259,11 +293,11 @@ IPA.records_facet = function (spec){
 
             var batch = IPA.batch_command({
                 on_success: function() {
-                    reload();
+                    that.refresh();
                     dialog.close();
                 },
                 on_error: function() {
-                    reload();
+                    that.refresh();
                     dialog.close();
                 }
             });
@@ -304,15 +338,21 @@ IPA.records_facet = function (spec){
 
         that.facet_create_header(container);
 
-        $('<input/>', {
+        that.filter = $('<input/>', {
             type: 'text',
-            id: 'dns-record-resource-filter',
             name: 'filter'
         }).appendTo(that.controls);
 
+        that.filter.keypress(function(e) {
+            /* if the key pressed is the enter key */
+            if (e.which == 13) {
+                that.find();
+            }
+        });
+
         /*
-          THe OLD DNS plugin allowed for search based on record type.
-          This one does not.  If the plugin gets modified to support
+          The old DNS plugin allowed for search based on record type.
+          This one does not. If the plugin gets modified to support
           Record type searches, uncomment the following lines and
           adjust the code that modifies the search parameters.
 
@@ -325,7 +365,7 @@ IPA.records_facet = function (spec){
             label: IPA.messages.buttons.find,
             icon: 'ui-icon-search',
             click: function(){
-                that.refresh();
+                that.find();
                 return false;
             }
         }).appendTo(that.controls);
@@ -336,6 +376,7 @@ IPA.records_facet = function (spec){
             label: IPA.messages.buttons.remove,
             icon: 'ui-icon-trash',
             click: function() {
+                if (that.remove_button.hasClass('input_link_disabled')) return false;
                 that.remove();
                 return false;
             }
@@ -353,50 +394,14 @@ IPA.records_facet = function (spec){
 
     that.create_content = function(container) {
 
-        var details = $('<div/>', {
-            'name': 'details'
-        }).appendTo(container);
-
-        details.append('<span class="records-buttons"></span>');
-
-        var records_results = $('<div/>', {
-            'class': 'records-results'
-        }).appendTo(details);
-
-        that.records_table = $('<table/>', {
-            'class': 'search-table'
-        }).appendTo(records_results);
-
-        var thead = $('<thead><tr></tr></thead>').appendTo(that.records_table);
-        var tbody = $('<tbody></tbody>').appendTo(that.records_table);
-        var tfoot = $('<tfoot></tfoot>').appendTo(that.records_table);
-
-        var tr = thead.find('tr');
-        tr.append($('<th style="width: 15px" />').append(
-            $('<input />',{
-                type: 'checkbox',
-                click : function (evt){
-                    tbody.find("INPUT[type='checkbox']").
-                        attr('checked', this.checked);
-                }
-            })));
-        tr.append($('<th/>',{
-            text: IPA.get_entity_param("dnsrecord", "idnsname").label  }));
-         tr.append($('<th>Record Type</th>'));
-        tr.append($('<th>Data</th>'));
-
+        that.table.create(container);
+        that.table.setup(container);
     };
 
     that.setup = function(container) {
 
         that.facet_setup(container);
 
-        that.record = $.bbq.getState(that.entity_name + '-record', true) || '';
-
-        that.pkey = $.bbq.getState(that.entity_name+'-pkey', true) || '';
-        $('h1',container).
-            html("<span id='headerpkey' />"+IPA.messages.objects.dnsrecord.title+":" + that.pkey);
-
         //commented out until data is searchable
         //control_span.append('Data');
         //control_span.append($('<input />',{
@@ -409,35 +414,78 @@ IPA.records_facet = function (spec){
     that.show = function() {
         that.facet_show();
 
+        that.record = $.bbq.getState(that.entity_name + '-record', true) || '';
         that.pkey = $.bbq.getState(that.entity_name+'-pkey', true) || '';
         that.entity.header.set_pkey(that.pkey);
 
         that.entity.header.back_link.css('visibility', 'visible');
         that.entity.header.facet_tabs.css('visibility', 'visible');
+
+        var title = IPA.messages.objects.dnsrecord.title+': '+that.pkey;
+        that.set_title(this.container, title);
     };
 
-    function load_on_win(data){
-        display(that.entity_name,data);
-    }
+    that.get_record = function(result, index) {
+        var record = {};
 
-    function load_on_fail(data){
-        display(that.entity_name,data);
-    }
+        if (result.idnsname) {
+            record.idnsname = result.idnsname[0];
+        } else {
+            record.idnsname = result.dn.split(',')[0].split('=')[1];
+        }
 
-    function  reload(){
-        that.refresh();
-    }
+        for (var i=0; i<record_types.length; i++){
+            var type = record_types[i];
+            var data = result[type+'record'];
+            if (data) {
+                record.type = type;
+                record.data = data[0];
+                break;
+            }
+        }
 
+        return record;
+    };
 
     that.refresh = function() {
 
+        function on_success(data, text_status, xhr) {
+
+            that.table.empty();
+
+            var result = data.result.result;
+            for (var i = 0; i<result.length; i++) {
+                var record = that.get_record(result[i], 0);
+                that.table.add_record(record);
+            }
+
+            var summary = $('span[name=summary]', that.table.tfoot);
+            if (data.result.truncated) {
+                var message = IPA.messages.search.truncated;
+                message = message.replace('${counter}', data.result.count);
+                summary.text(message);
+            } else {
+                summary.text(data.result.summary);
+            }
+
+            that.filter.focus();
+            that.select_changed();
+        }
+
+        function on_error(xhr, text_status, error_thrown) {
+            var summary = $('span[name=summary]', that.table.tfoot).empty();
+            summary.append('<p>Error: '+error_thrown.name+'</p>');
+            summary.append('<p>'+error_thrown.title+'</p>');
+            summary.append('<p>'+error_thrown.message+'</p>');
+        }
+
         var options = {};
 
-        var resource_filter = that.container.
-            find("#dns-record-resource-filter").val();
-//        if (resource_filter){
-//            options.idnsname = resource_filter;
-//        }
+        var filter = that.filter.val();
+/*
+        if (filter){
+            options.idnsname = filter;
+        }
 
         var type_filter = that.container.find("#dns-record-type-filter").val();
         if (type_filter){
@@ -448,105 +496,23 @@ IPA.records_facet = function (spec){
         if (data_filter){
             options.data = data_filter;
         }
+*/
+        var args = [$.bbq.getState(that.entity_name + '-pkey', true)];
 
-        var pkey = [$.bbq.getState(that.entity_name + '-pkey', true)];
-
-        if (resource_filter){
-            pkey.push(resource_filter);
+        if (filter) {
+            args.push(filter);
         }
+
         IPA.command({
             entity: 'dnsrecord',
             method: 'find',
-            args: pkey,
+            args: args,
             options: options,
-            on_success: load_on_win,
-            on_error:load_on_fail
+            on_success: on_success,
+            on_error: on_error
         }).execute();
     };
 
-
-    function generate_tr(thead, tbody, result){
-        function generate_checkbox_td(tr, pkey) {
-            var checkbox = $('<input />', {
-                name: pkey,
-                title: pkey,
-                type: 'checkbox',
-                'class': 'search-selector'
-            });
-            var td = $('<td></td>');
-
-            td.append(checkbox);
-            tr.append(td);
-        }
-
-        var tr = $('<tr></tr>').appendTo(tbody);
-
-        generate_checkbox_td(tr, /*pkey_value*/ '');
-
-        //TODO get this fixed on the back end.  For now, workaround
-
-        if (result.idnsname){
-        tr.append($('<td/>',{
-            title:'idnsname',
-            text: result.idnsname[0]
-        }));
-        }else{
-            tr.append($('<td/>',{
-                title:'idnsname',
-                text: result.dn.split(',')[0].split('=')[1]
-            }));
-
-        }
-
-        for (var i = 0; i < record_types.length; i += 1){
-            var field_name =  record_types[i];
-            var field = result[field_name+'record'];
-            if ( field ){
-                var record_type = field_name;
-                var record_data = field[0];
-                break;
-            }
-        }
-
-        tr.append($('<td/>',{
-            title:'type',
-            text: record_type
-        }));
-        tr.append($('<td/>',{
-            title:'data',
-            text: record_data
-        }));
-    }
-
-    //TODO this is cut and pasted from search, we need to unify
-    function display(obj_name, data){
-        var selector = '.entity[name=' + obj_name + ']';
-        var thead = $(selector + ' thead');
-        var tbody = $(selector + ' tbody');
-        var tfoot = $(selector + ' tfoot');
-
-        tbody.find('tr').remove();
-
-        var result = data.result.result;
-        for (var i = 0; i < result.length; ++i){
-            generate_tr(thead, tbody, result[i]);
-        }
-
-        tfoot.find('td').remove();
-        if (data.result.truncated) {
-            var message = IPA.messages.search.truncated;
-            message = message.replace('${counter}', data.result.count);
-            tfoot.append($('<td />',{
-                colspan:2,
-                text:message}));
-        } else {
-            tfoot.append($('<td/>',{
-                colspan:2,
-                text:data.result.summary}));
-        }
-
-    }
-
     return that;
 };
 
diff --git a/install/ui/entitle.js b/install/ui/entitle.js
index 513cb6b415e8c33dd7c4e82388ce6e9782f5aa8d..6368ba8e98064c191fe1ad74faac6093712cc7ab 100644
--- a/install/ui/entitle.js
+++ b/install/ui/entitle.js
@@ -311,11 +311,11 @@ IPA.entitle.search_facet = function(spec) {
         }).appendTo(that.consume_buttons);
     };
 
-     that.show = function() {
+    that.show = function() {
         that.facet_show();
 
         that.entity.header.set_pkey(null);
-         that.entity.header.back_link.css('visibility', 'hidden');
+        that.entity.header.back_link.css('visibility', 'hidden');
         that.entity.header.facet_tabs.css('visibility', 'hidden');
     };
 
diff --git a/install/ui/search.js b/install/ui/search.js
index c63bf3cdf6200a392ed5f3088834e53dd393ee9f..0047bdd479fdab1d90ad477f8fb4b2663a0c998b 100644
--- a/install/ui/search.js
+++ b/install/ui/search.js
@@ -91,7 +91,6 @@ IPA.search_facet = function(spec) {
         };
 
         that.table.init();
-
     };
 
     that.create_header = function(container) {
@@ -124,7 +123,6 @@ IPA.search_facet = function(spec) {
         that.remove_button = IPA.action_button({
             label: IPA.messages.buttons.remove,
             icon: 'ui-icon-trash',
-            'class': 'input_link_disabled',
             click: function() {
                 if (that.remove_button.hasClass('input_link_disabled')) return false;
                 that.remove();
@@ -264,7 +262,8 @@ IPA.search_facet = function(spec) {
                 summary.text(data.result.summary);
             }
 
-            $('.search-filter input[type=text]', that.container).focus();
+            that.filter.focus();
+            that.select_changed();
         }
 
         function on_error(xhr, text_status, error_thrown) {
diff --git a/install/ui/widget.js b/install/ui/widget.js
index a376c3ac68bf6979217b97a0197f3d9d65662b99..dd2288886fb662e3c1c93e3204ead55ef5b2f9c7 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -1218,11 +1218,9 @@ IPA.table_widget = function (spec) {
         }).appendTo(td);
     };
 
-
     that.select_changed = function(){
     };
 
-
     that.setup = function(container) {
 
         that.widget_setup(container);
@@ -1292,6 +1290,10 @@ IPA.table_widget = function (spec) {
         return values;
     };
 
+    that.get_selected_rows = function() {
+        return $('input[name="select"]:checked', that.tbody).closest('tr');
+    };
+
     that.get_record = function(result, index) {
         var record = {};
         for (var i=0; i<that.columns.length; i++){
@@ -1325,7 +1327,6 @@ IPA.table_widget = function (spec) {
                 $('input[name="select"]', tr).click(function(){
                     that.select_changed();
                 });
-
             }
 
             var span = $('span[name="'+column.name+'"]', tr);
-- 
1.7.4

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to