You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2015/11/19 16:41:55 UTC

deltaspike git commit: DELTASPIKE-1028 WindowHandler: JS error on IE8 DELTASPIKE-1027 WindowHandler: "screenshot" still clickable in IE8 DELTASPIKE-1026 WindowHandler: Loading... not displayed in IE8 DELTASPIKE-1025 WindowHandler: Remember every body att

Repository: deltaspike
Updated Branches:
  refs/heads/master cf886865c -> d9e7eac3b


DELTASPIKE-1028 WindowHandler: JS error on IE8
DELTASPIKE-1027 WindowHandler: "screenshot" still clickable in IE8
DELTASPIKE-1026 WindowHandler: Loading... not displayed in IE8
DELTASPIKE-1025 WindowHandler: Remember every body attr for the windowhandler.html
DELTASPIKE-1024 WindowHandler: Loading... not displayed in initial request in new tab
DELTASPIKE-1023 WindowHandling: refactor screenshot handling/remember scroll position

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

Branch: refs/heads/master
Commit: d9e7eac3bc35ce7446505f9673219b14f9166166
Parents: cf88686
Author: tandraschko <ta...@apache.org>
Authored: Thu Nov 19 16:41:21 2015 +0100
Committer: tandraschko <ta...@apache.org>
Committed: Thu Nov 19 16:41:21 2015 +0100

----------------------------------------------------------------------
 .../resources/deltaspike/windowhandler.js       | 44 +++++++++++++-
 .../main/resources/static/windowhandler.html    | 63 +++++++++-----------
 2 files changed, 70 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/d9e7eac3/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
index 923231d..eac5c98 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
+++ b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
@@ -235,11 +235,22 @@ window.dswh = window.dswh || {
                     }
                 }
                 localStorage.setItem(window.name + '_css', dswh.utils.stringify(oldSS));
+
                 var body = document.getElementsByTagName("body")[0];
                 localStorage.setItem(window.name + '_body', body.innerHTML);
-                //X TODO: store ALL attributes of the body tag
-                localStorage.setItem(window.name + '_bodyAttrs', body.getAttribute("class"));
-                return true;
+
+                var attributes = {};
+                for (var i = 0; i < body.attributes.length; i++) {
+                    var attribute = body.attributes[i];
+                    attributes[attribute.name] = attribute.value;
+                }
+                localStorage.setItem(window.name + '_bodyAttributes', dswh.utils.stringify(attributes));
+
+                var scrollTop = (window.pageYOffset || document.documentElement.scrollTop) - (document.documentElement.clientTop || 0);
+                localStorage.setItem(window.name + '_scrollTop', scrollTop);
+
+                var scrollLeft = (window.pageXOffset || document.documentElement.scrollLeft) - (document.documentElement.clientLeft || 0);
+                localStorage.setItem(window.name + '_scrollLeft', scrollLeft);
             },
 
             cleanupCookies : function() {
@@ -444,3 +455,30 @@ window.dswh = window.dswh || {
         }
     }
 };
+
+// required for IE8
+if (!Function.prototype.bind) {
+    Function.prototype.bind = function (oThis) {
+        if (typeof this !== 'function') {
+            // closest thing possible to the ECMAScript 5
+            // internal IsCallable function
+            throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
+        }
+
+        var aArgs = Array.prototype.slice.call(arguments, 1),
+                fToBind = this,
+                fNOP = function () {
+                },
+                fBound = function () {
+                    return fToBind.apply(this instanceof fNOP && oThis
+                            ? this
+                            : oThis,
+                            aArgs.concat(Array.prototype.slice.call(arguments)));
+                };
+
+        fNOP.prototype = this.prototype;
+        fBound.prototype = new fNOP();
+
+        return fBound;
+    };
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/d9e7eac3/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
index 48fbb64..c4a956b 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
+++ b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
@@ -45,16 +45,6 @@
 
         <script type="text/javascript">
             //<![CDATA[
-            function getOldBody() {
-                return localStorage.getItem(window.name + '_body');
-            }
-            function getOldBodyAttrs() {
-                return localStorage.getItem(window.name + '_bodyAttrs');
-            }
-            function getOldCss() {
-                return dswh.utils.unstringify(localStorage.getItem(window.name + '_css'));
-            }
-
             function addCss(url) {
                 var newSS = document.createElement("style");
                 newSS.setAttribute("rel", "stylesheet");
@@ -64,15 +54,12 @@
             }
 
             function loadCss(clean) {
-                if (!dswh.utils.isHtml5()) { // only do this stuff on html5 browsers
+                // We don't need to restore the old css on initial requests or if < html5
+                if (!dswh.utils.isHtml5() || !window.name) {
                     return;
                 }
-                
-                if (!window.name || window.name.length === null) {
-                    return;
-                }
-                
-                var oldCss = getOldCss();
+
+                var oldCss = dswh.utils.unstringify(localStorage.getItem(window.name + '_css'));
                 if (oldCss) {
                     for (var i = 0; i < oldCss.length; i++) {
                         addCss(oldCss[i]);
@@ -84,35 +71,43 @@
             }
 
             function replaceContent() {
-                if (!dswh.utils.isHtml5()) { // only do this stuff on html browsers
+                if (document.body.textContent) {
                     document.getElementById('message').textContent = "Loading...";
-                    return;
+                } else {
+                    document.getElementById('message').innerText = "Loading...";
                 }
-                
-                if (!window.name || window.name.length === null) {
+
+                // We don't need to restore the old windowtree on initial requests or if < html5
+                if (!dswh.utils.isHtml5() || !window.name) {
                     return;
                 }
-                
+
                 loadCss(false);
 
-                var oldBody = getOldBody();
+                var oldBody = localStorage.getItem(window.name + '_body');
                 if (oldBody) {
                     document.body.innerHTML = oldBody;
 
-                    //X TODO should restore all attributes of the body tag
-                    document.body.setAttribute("class", getOldBodyAttrs());
-                    document.body.setAttribute("style", " cursor: wait !important;");
+                    var attributes = dswh.utils.unstringify(localStorage.getItem(window.name + '_bodyAttributes'));
+                    for (var attributeName in attributes) {
+                        if (attributes.hasOwnProperty(attributeName)) {
+                            document.body.setAttribute(attributeName, attributes[attributeName]);
+                        }
+                    }
+
+                    window.scrollTo(localStorage.getItem(window.name + '_scrollLeft'),
+                                    localStorage.getItem(window.name + '_scrollTop'));
 
                     localStorage.removeItem(window.name + '_body');
-                    localStorage.removeItem(window.name + '_bodyAttrs');
+                    localStorage.removeItem(window.name + '_bodyAttributes');
+                    localStorage.removeItem(window.name + '_scrollTop');
+                    localStorage.removeItem(window.name + '_scrollLeft');
 
                     // overlay the doc with an un-clickable full-size div
-                    var newDiv = document.createElement("div");
-                    newDiv.setAttribute("style", "position:absolute; z-index:1000; background-color:transparent; top:0; left:0; width:100%; height: 100%");
-                    newDiv.setAttribute("class", "fulldiv");
-                    document.body.appendChild(newDiv);
-                } else {
-                    document.getElementById('message').textContent = "Loading...";
+                    var overlay = document.createElement("div");
+                    overlay.setAttribute("style", "cursor: wait !important; position:absolute; z-index:1000; background-color:transparent; top:0; left:0; width:100%; height: 100%; background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);");
+                    overlay.setAttribute("class", "fulldiv");
+                    document.body.appendChild(overlay);
                 }
             }
 
@@ -120,7 +115,7 @@
 
             window.onload = function() {
                 // uncomment the following line to debug the intermediate page
-                // if (!confirm('reload?')) { return true; }
+                //if (!confirm('reload?')) { return true; }
 
                 loadCss(true);