https://fedorahosted.org/freeipa/ticket/1043
From cb6c4e428c43ddb05f653c77f84cd2aadd2860ee Mon Sep 17 00:00:00 2001
From: Adam Young <ayo...@redhat.com>
Date: Sat, 18 Jun 2011 23:22:48 -0400
Subject: [PATCH] editable entity_select

---
 install/ui/host.js   |   14 ++++++++++++-
 install/ui/widget.js |   52 ++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/install/ui/host.js b/install/ui/host.js
index fe35e0f1fe60928eb5af01752722d3315482ec72..bd149178e452bf8c77eecedec7f0d899154b3a67 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -87,7 +87,19 @@ IPA.entity_factories.host = function () {
         }).
         standard_association_facets().
         adder_dialog({
-            fields: ['fqdn', {factory:IPA.force_host_add_checkbox_widget}]
+            width:500,
+            fields:[
+                {
+                    factory:IPA.entity_select_widget,
+                    name: 'fqdn',
+                    field_name:'idnsname',
+                    entity: 'dnszone',
+                    label: IPA.messages.objects.service.host,
+                    editable: true,
+                    undo: false
+                },
+                {factory:IPA.force_host_add_checkbox_widget}
+            ] 
         }).
         build();
 };
diff --git a/install/ui/widget.js b/install/ui/widget.js
index 9f013a0a75168200ac338f79a2943e8781eb6dcc..63d9b6836f88487027f6495782c4fd2fe5f506c2 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -324,6 +324,20 @@ IPA.widget = function(spec) {
     return that;
 };
 
+/*uses a browser specific technique to select a range.*/
+IPA.select_range = function(input,start, end) {
+    if (input[0].setSelectionRange) {
+        input.focus();
+        input[0].setSelectionRange(start, end);
+    } else if (input[0].createTextRange) {
+        var range = that.input[0].createTextRange();
+        range.collapse(true);
+        range.moveEnd('character', end);
+        range.moveStart('character', start);
+        range.select();
+    }
+};
+
 
 IPA.text_widget = function(spec) {
 
@@ -334,6 +348,10 @@ IPA.text_widget = function(spec) {
     that.size = spec.size || 30;
     that.type = spec.type || 'text';
 
+    that.select_range = function(start, end){
+        IPA.select_range(that.input, start, end);
+    }
+
     that.create = function(container) {
 
         $('<label/>', {
@@ -1545,6 +1563,7 @@ IPA.entity_select_widget = function(spec) {
     var that = IPA.widget(spec);
     var entity = spec.entity || 'group';
     var field_name = spec.field_name || 'cn';
+    var editable = spec.editable || false;
 
     function populate_select(value) {
         function find_success(result) {
@@ -1588,9 +1607,25 @@ IPA.entity_select_widget = function(spec) {
 
     that.create = function(container) {
 
+        if (editable){
+            that.edit_box = $('<input />',{
+                        type: 'text',
+            });
+
+            $('<div style:"display=block;" />').
+                append(that.edit_box).
+                appendTo(container);
+        }
+
         that.entity_select = $('<select/>', {
             id: that.name + '-entity-select',
             change: function(){
+                if (editable){
+                    that.edit_box.val(
+                        $('option:selected', that.entity_select).val());
+                    that.edit_box.focus();
+                    IPA.select_range(that.edit_box,0,0);
+                }
                 that.set_dirty(that.test_dirty());
             }
         }).appendTo(container);
@@ -1601,7 +1636,7 @@ IPA.entity_select_widget = function(spec) {
             id: 'entity_filter',
             style: 'display: none;',
             keyup: function(){
-                populate_select($('option:selected', that.entity_select).val());
+                populate_select(current_value());
             }
         }).appendTo(container);
 
@@ -1630,6 +1665,9 @@ IPA.entity_select_widget = function(spec) {
         that.entity_filter.val(that.values[0]);
         that.set_dirty(false);
         populate_select(that.values[0]);
+        if (editable){
+            that.edit_box.val(that.values[0]);
+        }
     };
 
     that.load = function(record) {
@@ -1642,8 +1680,18 @@ IPA.entity_select_widget = function(spec) {
         that.reset();
     };
 
+    function current_value(){
+        var value;
+        if (editable){
+            value = that.edit_box.val();
+        }else{
+            value = $('option:selected', that.entity_select).val();
+        }
+        return value
+    }
+
     that.save = function() {
-        var value = $('option:selected', that.entity_select).val();
+        var value = current_value();
         return [value];
     };
 
-- 
1.7.5.2

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

Reply via email to