WICKET-4423 allow dragging over iframe

with pointer-events=none

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c51cf875
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c51cf875
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c51cf875

Branch: refs/heads/WICKET-6563
Commit: c51cf875f59ce0438a5f339aae71eb92fa915a1c
Parents: ace845c
Author: Sven Meier <svenme...@apache.org>
Authored: Mon Oct 15 23:29:14 2018 +0200
Committer: Sven Meier <svenme...@apache.org>
Committed: Mon Oct 15 23:31:17 2018 +0200

----------------------------------------------------------------------
 .../ajax/markup/html/modal/res/modal.js         | 154 +------------------
 1 file changed, 6 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c51cf875/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js
index 6bcebf2..8b66687 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js
@@ -56,142 +56,6 @@
        }
 
        /**
-        * Supporting code for getting mouse move and mouse up events from 
iframes.
-        * The problem when dragging a div with an iframe is that when the 
mouse cursor
-        * gets over an iframe, all mouse events are received by the iframe's 
document. (IE and FF)
-        *
-        * This code can recursively traverse all iframes in document and 
temporarily forward
-        * events from their documents to parent document.
-        */
-       Wicket.Iframe = {
-
-               /**
-                * Returns the horizontal position of given element (in pixels).
-                */
-               findPosX: function(e) {
-                       if (e.offsetParent) {
-                               var c = 0;
-                               while (e) {
-                                       c += e.offsetLeft;
-                                       e = e.offsetParent;
-                               }
-                               return c;
-                       } else if (e.x) {
-                               return e.x;
-                       } else {
-                               return 0;
-                       }
-               },
-
-               /**
-                * Returns the vertical position of given element (in pixels).
-                */
-               findPosY: function(e) {
-                       if (e.offsetParent) {
-                               var c = 0;
-                               while (e) {
-                                       c += e.offsetTop;
-                                       e = e.offsetParent;
-                               }
-                               return c;
-                       } else if (e.y) {
-                               return e.y;
-                       } else {
-                               return 0;
-                       }
-               },
-
-               /**
-                * Forwards the events from iframe to the parent document 
(works recursively).
-                * @param {Document} doc - document to which the events will be 
forwarded
-                * @param {HTMLElement} iframe - source iframe
-                * @param {Array} revertList - list to which altered iframes 
will be added
-                */
-               forwardEvents: function(doc, iframe, revertList) {
-                       try {
-                               var idoc = iframe.contentWindow.document;
-                               idoc.old_onmousemove = idoc.onmousemove;
-                               idoc.onmousemove = function(evt) {
-                                       if (!evt) {
-                                               evt = 
iframe.contentWindow.event;
-                                       }
-                                       var e = {};
-
-                                       var dx = 0;
-                                       var dy = 0;
-                                       if (Wicket.Browser.isIELessThan11() || 
Wicket.Browser.isGecko()) {
-                                               dx = Wicket.Window.getScrollX();
-                                               dy = Wicket.Window.getScrollY();
-                                       }
-
-                                       e.clientX = evt.clientX + 
Wicket.Iframe.findPosX(iframe) - dx;
-                                       e.clientY = evt.clientY + 
Wicket.Iframe.findPosY(iframe) - dy;
-                                       doc.onmousemove(e);
-                               };
-                               idoc.old_onmouseup = idoc.old_onmousemove;
-                               idoc.onmouseup = function(evt) {
-                                       if (!evt) {
-                                               evt = 
iframe.contentWindow.event;
-                                       }
-                                       var e = {};
-
-                                       var dx = 0;
-                                       var dy = 0;
-                                       if (Wicket.Browser.isIELessThan11() || 
Wicket.Browser.isGecko()) {
-                                               dx = Wicket.Window.getScrollX();
-                                               dy = Wicket.Window.getScrollY();
-                                       }
-
-                                       e.clientX = evt.clientX + 
Wicket.Iframe.findPosX(iframe) - dx;
-                                       e.clientY = evt.clientY + 
Wicket.Iframe.findPosY(iframe) - dy;
-                                       doc.onmouseup(e);
-                               };
-                               revertList.push(iframe);
-                               Wicket.Iframe.documentFix(idoc, revertList);
-                       } catch (ignore) {
-                       }
-               },
-
-               /**
-                * Reverts the changes made to the given iframe.
-                * @param {HTMLElement} iframe
-                */
-               revertForward: function(iframe) {
-                       var idoc = iframe.contentWindow.document;
-                       idoc.onmousemove = idoc.old_onmousemove;
-                       idoc.onmouseup = idoc.old_onmouseup;
-                       idoc.old_onmousemove = null;
-                       idoc.old_onmouseup = null;
-               },
-
-               /**
-                * Forward events from all iframes of the given document 
(recursive)
-                * @param {Document} doc - document to be fixed
-                * @param {Array} revertList - all affected iframes will be 
stored here
-                */
-               documentFix: function(doc, revertList) {
-                       var iframes = doc.getElementsByTagName("iframe");
-                       for (var i = 0; i < iframes.length; ++i) {
-                               var iframe = iframes[i];
-                               if (iframe.tagName) {
-                                       Wicket.Iframe.forwardEvents(doc, 
iframe, revertList);
-                               }
-                       }
-               },
-
-               /**
-                * Reverts the changes made to each iframe in the given array.
-                * @param {Array} revertList
-                */
-               documentRevert: function(revertList) {
-                       for (var i = 0; i < revertList.length; ++i) {
-                               var iframe = revertList[i];
-                               Wicket.Iframe.revertForward(iframe);
-                       }
-               }
-       };
-
-       /**
         * Draggable (and optionally resizable) window that can either hold a 
div
         * or an iframe.
         */
@@ -907,10 +771,7 @@
                                return false;
                        }
 
-                       if (this.isIframe() && (Wicket.Browser.isGecko() || 
Wicket.Browser.isIELessThan11() || Wicket.Browser.isSafari())) {
-                               this.revertList = [];
-                               Wicket.Iframe.documentFix(document, 
this.revertList);
-                       }
+                       
jQuery(this.window).find('iframe').css('pointer-events', 'none');
                        
                        return true;
                },
@@ -919,14 +780,11 @@
                 * Called when dragging has ended.
                 */
                onEnd: function(object) {
-                       if (this.revertList) {
-                               Wicket.Iframe.documentRevert(this.revertList);
-                               this.revertList = null;
-                               if (Wicket.Browser.isKHTML() || 
this.content.style.visibility==='hidden') {
-                                       this.content.style.visibility='hidden';
-                                       
window.setTimeout(Wicket.bind(function() { 
this.content.style.visibility='visible'; }, this),  0 );
-                               }
-                               this.revertList = null;
+                       
jQuery(this.window).find('iframe').css('pointer-events', 'auto');
+
+                       if (Wicket.Browser.isKHTML() || 
this.content.style.visibility==='hidden') {
+                               this.content.style.visibility='hidden';
+                               window.setTimeout(Wicket.bind(function() { 
this.content.style.visibility='visible'; }, this),  0 );
                        }
 
                        this.savePosition();

Reply via email to