You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/11/01 16:27:24 UTC

svn commit: r591052 - in /tapestry/tapestry4/trunk/tapestry-framework/src/js: tapestry/widget/TimePicker.js tapestry/widget/Widget.js tests/widget/test_TimePicker.html

Author: jkuhnert
Date: Thu Nov  1 08:27:24 2007
New Revision: 591052

URL: http://svn.apache.org/viewvc?rev=591052&view=rev
Log:
Fixes TAPESTRY-1877.  Created a literal reference to widget.domNode by attaching it to the dropdownNode which gets destroyed anyways to prevent dojo from randomly destroying any nodes it can find.  (wtf is that...)

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/TimePicker.js
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/Widget.js
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/widget/test_TimePicker.html

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/TimePicker.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/TimePicker.js?rev=591052&r1=591051&r2=591052&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/TimePicker.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/TimePicker.js Thu Nov  1 08:27:24 2007
@@ -34,6 +34,7 @@
         this.inputNode = dojo.byId(this.inputNodeId);
 
         this.dropdownNode = document.createElement("div");
+        this.domNode = this.dropdownNode;
         this.dropdownNode.setAttribute("id", this.widgetId + "dropdown");
         this.dropdownNode.style["display"] = "none";
         dojo.html.setClass(this.dropdownNode, this.dropdownClass);
@@ -247,29 +248,34 @@
             || dojo.html.hasClass(node, this.dropdownClass);
     },
 
-    destroyRendering: function(finalize){
+    uninitialize: function(){
         try{
-            dojo.widget.HtmlWidget.prototype.destroyRendering.call(this, finalize);
-
+            if (this.showing){
+                this.hide();
+            }
+            if (tapestry.widget.currentTimePicker == this) {
+                delete tapestry.widget.currentTimePicker;
+            }
+            
             dojo.event.disconnect(this.inputNode, "onclick", this, "onInputClick");
             dojo.event.disconnect(this.inputNode, "onblur", this, "onInputBlur");
             dojo.event.disconnect(this.inputNode, "onkeyup", this, "onInputKeyUp");
             dojo.event.disconnect(this.inputNode, "onkeydown", this, "onInputKeyDown");
-            dojo.event.browser.clean(this.inputNode);
+            dojo.event.disconnect(this.inputNode, "onchange", this, "onChange");
 
             dojo.event.disconnect(this.dropdownNode, "onmouseover", this, "onDropdownMouseOver");
             dojo.event.disconnect(this.dropdownNode, "onmouseout", this, "onDropdownMouseOut");
-
             dojo.dom.destroyNode(this.dropdownNode);
-            delete this.dropdownNode;
 
             dojo.event.disconnect(dojo.body(), "onkeyup", this, "onKeyUp");
 
              if (this.bgIframe){
                 this.bgIframe.remove();
             }
-        } catch (e) { }
+        } catch (e) {}
     },
+
+    destroyRendering: function(){},
 
     _selectOption:function(node){
         if (!node) { return; }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/Widget.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/Widget.js?rev=591052&r1=591051&r2=591052&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/Widget.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/widget/Widget.js Thu Nov  1 08:27:24 2007
@@ -46,7 +46,7 @@
 			this.createWidget(widgetId, type, props, position);
 		} else if (destroy){
 			widget.destroy();
-			this.createWidget(widgetId, type, props, position);
+            this.createWidget(widgetId, type, props, position);
 		} else {
 			this.setWidgetProperties(widget, props);
 		}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/widget/test_TimePicker.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/widget/test_TimePicker.html?rev=591052&r1=591051&r2=591052&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/widget/test_TimePicker.html (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/widget/test_TimePicker.html Thu Nov  1 08:27:24 2007
@@ -24,12 +24,13 @@
 <body>
 <script type="text/javascript">
     dojo.require("tapestry.namespace");
-
+    dojo.require("tapestry.widget.Widget");
+            
     dojo.addOnLoad(function() {
 
         dojo.widget.createWidget("tapestry:TimePicker", {
             widgetId: "test",
-            inputNodeId:"timeInput",
+            inputNodeId:"test",
             optionValues:["12:00am","12:30am","1:00am","1:30am","2:00am","2:30am","3:00am","3:30am","4:00am","4:30am",
                     "5:00am","5:30am","6:00am","6:30am","7:00am","7:30am","8:00am","8:30am","9:00am","9:30am","10:00am",
                     "10:30am","11:00am","11:30am","12:00pm","12:30pm","1:00pm","1:30pm","2:00pm","2:30pm","3:00pm","3:30pm",
@@ -58,6 +59,17 @@
                     "10:00pm","10:30pm","11:00pm","11:30pm"]
         });
     });
+
+    function destroyWidget(){
+        tapestry.widget.synchronizeWidgetState("test", "tapestry:timepicker", {"inputNodeId":"test"
+
+,"optionValues":["12:00 AM","12:30 AM","1:00 AM","1:30 AM","2:00 AM","2:30 AM","3:00 AM","3:30 AM","4:00 AM",
+                "4:30 AM","5:00 AM","5:30 AM","6:00 AM","6:30 AM","7:00 AM","7:30 AM","8:00 AM","8:30 AM",
+                "9:00 AM","9:30 AM","10:00 AM","10:30 AM","11:00 AM","11:30 AM","12:00 PM","12:30 PM","1:00 PM","1:30 PM"
+                ,"2:00 PM","2:30 PM","3:00 PM","3:30 PM","4:00 PM","4:30 PM","5:00 PM","5:30 PM","6:00 PM","6:30 PM"
+                ,"7:00 PM","7:30 PM","8:00 PM","8:30 PM","9:00 PM","9:30 PM","10:00 PM","10:30 PM","11:00 PM",
+                "11:30PM"],"selectedIndex":18}, true);
+    }
 </script>
 
 <style type="text/css">
@@ -79,12 +91,14 @@
     }
 </style>
 
+<a href="#" onclick="destroyWidget(); return false;" >Destroy / Re-create widget</a>
+
 <form action="#">
     <fieldset>
         <table>
             <tr>
                 <td>
-                    <input id="timeInput" type="text" size="7" value="8:24am" />
+                    <input id="test" type="text" size="7" value="8:24am" />
                 </td>
                 <td>
                     <input id="another" type="text" size="11" />