https://fedorahosted.org/freeipa/ticket/1788

Removed code duplication of undo links.
Simplified code of widget creation to be more readable.
--
Petr Vobornik
From c1e47469cd394c8934e0a6bf3cc84e88b5a6bb5a Mon Sep 17 00:00:00 2001
From: Petr Vobornik <pvobo...@redhat.com>
Date: Tue, 13 Sep 2011 13:53:54 +0200
Subject: [PATCH] Code cleanup: widget creation

https://fedorahosted.org/freeipa/ticket/1788

Removed code duplication of undo links.
Simplified code of widget creation to be more readable.
---
 install/ui/aci.js    |    3 -
 install/ui/widget.js |  182 +++++++++++++++++++-------------------------------
 2 files changed, 70 insertions(+), 115 deletions(-)

diff --git a/install/ui/aci.js b/install/ui/aci.js
index a0399f501aaff6cd89e08e03c1de865b03222077..15219e7fef9372e2bbd75b8d8da47e8aa60d4b34 100644
--- a/install/ui/aci.js
+++ b/install/ui/aci.js
@@ -261,9 +261,6 @@ IPA.attributes_widget = function(spec) {
 
         if (that.undo) {
             that.create_undo(container);
-            that.get_undo().click(function(){
-                that.reset();
-            });
         }
 
         if (that.object_type){
diff --git a/install/ui/widget.js b/install/ui/widget.js
index 12a6b966c999d598576d53132c4f37fff685d3b1..58698486894ce9e72842ea1cf011a5fb75286421 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -287,7 +287,15 @@ IPA.widget = function(spec) {
         return that.dirty;
     };
 
-    that.create_undo = function(container) {
+    /**
+     * This function creates an undo link in the container.
+     * On_undo is a link click callback. It can be specified to custom
+     * callback. If a callback isn't set, default callback is used. If
+     * spefified to value other than a function, no callback is registered.
+     */
+    that.create_undo = function(container, on_undo) {
+        container.append(' ');
+
         that.undo_span =
             $('<span/>', {
                 name: 'undo',
@@ -295,6 +303,16 @@ IPA.widget = function(spec) {
                 'class': 'ui-state-highlight ui-corner-all undo',
                 html: 'undo'
             }).appendTo(container);
+
+        if(on_undo === undefined) {
+            on_undo = function() {
+                that.reset();
+            };
+        }
+
+        if(typeof on_undo === 'function') {
+            that.undo_span.click(on_undo);
+        }
     };
 
     that.set_dirty = function(dirty) {
@@ -389,61 +407,48 @@ IPA.text_widget = function(spec) {
         IPA.select_range(that.input, start, end);
     };
 
-
     that.create = function(container) {
 
         that.widget_create(container);
 
         container.addClass('text-widget');
 
-        $('<label/>', {
+        that.display_control = $('<label/>', {
             name: that.name,
             style: 'display: none;'
         }).appendTo(container);
 
-        $('<input/>', {
+        that.input = $('<input/>', {
             type: that.type,
             name: that.name,
             disabled: that.disabled,
             size: that.size,
-            title: that.tooltip
+            title: that.tooltip,
+            keyup: function() {
+                that.set_dirty(that.test_dirty());
+                that.validate();
+            }
         }).appendTo(container);
 
         if (that.undo) {
-            container.append(' ');
             that.create_undo(container);
         }
 
         that.create_error_link(container);
-
-        var input = $('input[name="'+that.name+'"]', that.container);
-        input.keyup(function() {
-            that.set_dirty(that.test_dirty());
-            that.validate();
-        });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
-        that.input = input;
     };
 
     that.update = function() {
         var value = that.values && that.values.length ? that.values[0] : '';
 
-        var label = $('label[name="'+that.name+'"]', that.container);
-        var input = $('input[name="'+that.name+'"]', that.container);
-
         if (that.read_only || !that.writable) {
-            label.html(value);
-            label.css('display', 'inline');
-            input.css('display', 'none');
+            that.display_control.html(value);
+            that.display_control.css('display', 'inline');
+            that.input.css('display', 'none');
 
         } else {
-            $('input[name="'+that.name+'"]', that.container).val(value);
-            label.css('display', 'none');
-            input.css('display', 'inline');
+            that.input.val(value);
+            that.display_control.css('display', 'none');
+            that.input.css('display', 'inline');
         }
     };
 
@@ -452,8 +457,7 @@ IPA.text_widget = function(spec) {
             return null;
 
         } else {
-            var input = $('input[name="'+that.name+'"]', that.container);
-            var value = input.val();
+            var value = that.input.val();
             return value === '' ? [] : [value];
         }
     };
@@ -540,9 +544,11 @@ IPA.multivalued_text_widget = function(spec) {
 
         container.addClass('multivalued-text-widget');
 
-        var div = $('<div/>', {
+        //create template row
+
+        that.template = $('<div/>', {
             name: 'value'
-        }).appendTo(container);
+        });
 
         $('<input/>', {
             type: 'text',
@@ -550,20 +556,19 @@ IPA.multivalued_text_widget = function(spec) {
             disabled: that.disabled,
             size: that.size,
             title: that.tooltip
-        }).appendTo(div);
+        }).appendTo(that.template);
 
-        div.append(' ');
+        that.template.append(' ');
 
         $('<a/>', {
             name: 'remove',
             href: 'jslink',
             title: IPA.messages.buttons.remove,
             html: IPA.messages.buttons.remove
-        }).appendTo(div);
+        }).appendTo(that.template);
 
         if (that.undo) {
-            div.append(' ');
-            that.create_undo(div);
+            that.create_undo(that.template, false /* no callback */);
         }
 
         that.create_error_link(container);
@@ -572,33 +577,28 @@ IPA.multivalued_text_widget = function(spec) {
             name: 'add',
             href: 'jslink',
             title: IPA.messages.buttons.add,
-            html: IPA.messages.buttons.add
+            html: IPA.messages.buttons.add,
+            click: function() {
+                that.add_row('');
+                var input = $('input[name="'+that.name+'"]:last', that.container);
+                input.focus();
+                return false;
+            }
         }).appendTo(container);
 
+        //create other
+
         container.append(' ');
 
         $('<span/>', {
             name: 'undo_all',
             style: 'display: none;',
             'class': 'ui-state-highlight ui-corner-all undo',
-            html: 'undo all'
+            html: 'undo all',
+            click: function() {
+                that.reset();
+            }
         }).appendTo(container);
-
-        that.template = $('div[name=value]', that.container);
-        that.template.detach();
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
-
-        var add_link = $('a[name=add]', that.container);
-        add_link.click(function() {
-            that.add_row('');
-            var input = $('input[name="'+that.name+'"]:last', that.container);
-            input.focus();
-            return false;
-        });
     };
 
     that.save = function() {
@@ -770,26 +770,19 @@ IPA.checkbox_widget = function (spec) {
 
         container.addClass('checkbox-widget');
 
-        $('<input/>', {
+        that.input = $('<input/>', {
             type: 'checkbox',
             name: that.name,
             checked : that.checked,
-            title: that.tooltip
+            title: that.tooltip,
+            change: function() {
+                that.set_dirty(that.test_dirty());
+            }
         }).appendTo(container);
 
         if (that.undo) {
             that.create_undo(container);
         }
-
-        var input = $('input[name="'+that.name+'"]', that.container);
-        input.change(function() {
-            that.set_dirty(that.test_dirty());
-        });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
     };
 
     that.load = function(record) {
@@ -798,7 +791,7 @@ IPA.checkbox_widget = function (spec) {
     };
 
     that.save = function() {
-        var value = $('input[name="'+that.name+'"]', that.container).is(':checked');
+        var value = that.input.is(':checked');
         return [value];
     };
 
@@ -811,7 +804,7 @@ IPA.checkbox_widget = function (spec) {
             value = true;
         }
 
-        $('input[name="'+that.name+'"]', that.container).get(0).checked = value;
+        that.input.attr('checked', value);
     };
 
     return that;
@@ -865,11 +858,6 @@ IPA.checkboxes_widget = function (spec) {
         input.change(function() {
             that.set_dirty(that.test_dirty());
         });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
     };
 
 
@@ -890,10 +878,7 @@ IPA.checkboxes_widget = function (spec) {
 
     that.update = function() {
         var inputs = $('input[name="'+that.name+'"]', that.container);
-
-        for (var i=0; i<inputs.length; i++) {
-            inputs.get(i).checked = false;
-        }
+        inputs.attr('checked', false);
 
         for (var j=0; that.values && j<that.values.length; j++) {
             var value = that.values[j];
@@ -943,11 +928,6 @@ IPA.radio_widget = function(spec) {
         input.change(function() {
             that.set_dirty(that.test_dirty());
         });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
     };
 
     that.load = function(record) {
@@ -1013,7 +993,6 @@ IPA.select_widget = function(spec) {
         }
 
         if (that.undo) {
-            container.append(' ');
             that.create_undo(container);
         }
 
@@ -1021,11 +1000,6 @@ IPA.select_widget = function(spec) {
         that.select.change(function() {
             that.set_dirty(that.test_dirty());
         });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
     };
 
     that.load = function(record) {
@@ -1077,32 +1051,23 @@ IPA.textarea_widget = function (spec) {
 
         container.addClass('textarea-widget');
 
-        $('<textarea/>', {
+        that.input = $('<textarea/>', {
             name: that.name,
             rows: that.rows,
             cols: that.cols,
             disabled: that.disabled,
-            title: that.tooltip
+            title: that.tooltip,
+            keyup: function() {
+                that.set_dirty(that.test_dirty());
+                that.validate();
+            }
         }).appendTo(container);
 
         if (that.undo) {
-            container.append(' ');
             that.create_undo(container);
         }
 
         that.create_error_link(container);
-
-        var input = $('textarea[name="'+that.name+'"]', that.container);
-        input.keyup(function() {
-            that.set_dirty(that.test_dirty());
-            that.validate();
-
-        });
-
-        var undo = that.get_undo();
-        undo.click(function() {
-            that.reset();
-        });
     };
 
     that.load = function(record) {
@@ -1116,13 +1081,13 @@ IPA.textarea_widget = function (spec) {
     };
 
     that.save = function() {
-        var value = $('textarea[name="'+that.name+'"]', that.container).val();
+        var value = that.input.val();
         return [value];
     };
 
     that.update = function() {
         var value = that.values && that.values.length ? that.values[0] : '';
-        $('textarea[name="'+that.name+'"]', that.container).val(value);
+        that.input.val(value);
     };
 
     return that;
@@ -1155,7 +1120,6 @@ IPA.column = function (spec) {
 
     function setup(container, record) {
 
-
         container.empty();
 
         var value = record[that.name];
@@ -1731,13 +1695,7 @@ IPA.combobox_widget = function(spec) {
         }).appendTo(div);
 
         if (that.undo) {
-            container.append(' ');
             that.create_undo(container);
-
-            var undo = that.get_undo();
-            undo.click(function() {
-                that.reset();
-            });
         }
 
         that.create_error_link(container);
-- 
1.7.6

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

Reply via email to