Revision: 18479
Author:   abogaart
Date:     2009-06-11 13:16:45 +0200 (Thu, 11 Jun 2009)
Log Message:
-----------
HREPTWO-2687: UI: Tree should keep scroll-state when ajax-call is made 
http://issues.onehippo.com/browse/HREPTWO-2687

- Changed javascript code to support one pre/post ajax call handler for 
multiple tree's

Modified Paths:
--------------
    
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/FolderTreePlugin.java

Added Paths:
-----------
    
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/ScrollBehavior.java
    
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/init_scroll.js
    
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/scroll.js

Modified: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/FolderTreePlugin.java
===================================================================
--- 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/FolderTreePlugin.java
  2009-06-11 11:11:29 UTC (rev 18478)
+++ 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/FolderTreePlugin.java
  2009-06-11 11:16:45 UTC (rev 18479)
@@ -111,6 +111,8 @@
         addExtensionPoint("extension.addfolder");
 
         onModelChanged();
+
+        add(new ScrollBehavior());
     }
 
     @Override

Added: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/ScrollBehavior.java
===================================================================
--- 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/ScrollBehavior.java
                            (rev 0)
+++ 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/ScrollBehavior.java
    2009-06-11 11:16:45 UTC (rev 18479)
@@ -0,0 +1,67 @@
+/*
+ *  Copyright 2008 Hippo.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.hippoecm.frontend.plugins.cms.browse.tree;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.wicket.ResourceReference;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.markup.html.resources.JavascriptResourceReference;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.util.template.PackagedTextTemplate;
+import org.apache.wicket.util.template.TextTemplateHeaderContributor;
+
+public class ScrollBehavior extends AbstractDefaultAjaxBehavior {
+    @SuppressWarnings("unused")
+    private final static String SVN_ID = "$Id$";
+    private static final long serialVersionUID = 1L;
+
+    private static final ResourceReference SCRIPT = new 
JavascriptResourceReference(ScrollBehavior.class, "scroll.js");
+    private static final PackagedTextTemplate INIT = new 
PackagedTextTemplate(ScrollBehavior.class, "init_scroll.js");
+    private final ParameterModel model = new ParameterModel();
+
+    public ScrollBehavior() {
+        super();
+    }
+
+    @Override
+    public void renderHead(IHeaderResponse response) {
+        super.renderHead(response);
+        response.renderJavascriptReference(SCRIPT);
+        TextTemplateHeaderContributor.forJavaScript(INIT, 
model).renderHead(response);
+    }
+
+    @Override
+    protected void respond(AjaxRequestTarget target) {
+        // NOP
+    }
+
+    class ParameterModel extends AbstractReadOnlyModel {
+        private static final long serialVersionUID = 1L;
+
+        final Map<String, Object> parameters = new HashMap<String, Object>();
+
+        @Override
+        public Object getObject() {
+            parameters.put("id", getComponent().getMarkupId());
+            return parameters;
+        }
+
+    }
+}


Property changes on: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/ScrollBehavior.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Added: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/init_scroll.js
===================================================================
--- 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/init_scroll.js
                         (rev 0)
+++ 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/init_scroll.js
 2009-06-11 11:16:45 UTC (rev 18479)
@@ -0,0 +1,25 @@
+/*
+ *  Copyright 2008 Hippo.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+if(!Hippo_scroll_registered) {
+
+       Wicket.Ajax.registerPreCallHandler(Hippo_scroll_savePosition);
+       Wicket.Ajax.registerPostCallHandler(Hippo_scroll_loadPosition);
+
+       Hippo_scroll_registered = true;
+}
+
+Hippo_scroll_setTreeId('${id}'); 
+


Property changes on: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/init_scroll.js
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Added: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/scroll.js
===================================================================
--- 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/scroll.js
                              (rev 0)
+++ 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/scroll.js
      2009-06-11 11:16:45 UTC (rev 18479)
@@ -0,0 +1,93 @@
+/*
+ *  Copyright 2008 Hippo.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+var Hippo_scroll_registered = false;
+var Hippo_scroll_element_id = null;
+
+function Hippo_scroll_setTreeId(id) {
+    Hippo_scroll_element_id = id;
+}
+
+function Hippo_scroll_savePosition() {
+    var el = Hippo_scroll_getElement();
+    if(el == null)
+        return;
+       var offsetY = el.pageYOffset || el.scrollTop;
+       Hippo_scroll_setCookie('Hippo_scroll_offsetY', offsetY);
+}
+
+function Hippo_scroll_getElement() {
+    var classname = 'hippo-tree';
+    var elId = Hippo_scroll_element_id;
+    var node = document.getElementById(elId);
+    if(node == null) 
+        return null;
+    var re = new RegExp('\\b' + classname + '\\b');
+    var els = node.getElementsByTagName("*");
+    for(var i=0,j=els.length; i<j; i++) {
+        if(re.test(els[i].className)) {
+            return els[i];
+        }
+    }
+    return null;
+}
+
+
+function Hippo_scroll_loadPosition() {
+    var el = Hippo_scroll_getElement();
+    if(el == null)
+        return;
+       var y = Hippo_scroll_getCookie('Hippo_scroll_offsetY');
+       if (y) {
+               el.scrollTop = y;
+               Hippo_scroll_deleteCookie('Hippo_scroll_offsetY');
+       }
+}
+
+function Hippo_scroll_setCookie(name, value, expires, path, domain, secure) {
+       var curCookie = name + "=" + escape(value)
+                       + ((expires) ? "; expires=" + expires.toGMTString() : 
"")
+                       + ((path) ? "; path=" + path : "")
+                       + ((domain) ? "; domain=" + domain : "")
+                       + ((secure) ? "; secure" : "");
+       document.cookie = curCookie;
+}
+
+function Hippo_scroll_getCookie(name) {
+       var dc = document.cookie;
+       var prefix = name + "=";
+       var begin = dc.indexOf("; " + prefix);
+       if (begin == -1) {
+               begin = dc.indexOf(prefix);
+               if (begin != 0) {
+                       return null;
+               }
+       } else {
+               begin += 2;
+       }
+       var end = document.cookie.indexOf(";", begin);
+       if (end == -1) {
+               end = dc.length;
+       }
+       return unescape(dc.substring(begin + prefix.length, end));
+}
+
+function Hippo_scroll_deleteCookie(name, path, domain) {
+       if (Hippo_scroll_getCookie(name)) {
+               document.cookie = name + "=" + ((path) ? "; path=" + path : "")
+                               + ((domain) ? "; domain=" + domain : "")
+                               + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
+       }
+}


Property changes on: 
hippo-ecm/trunk/addon/cms/browse/src/main/java/org/hippoecm/frontend/plugins/cms/browse/tree/scroll.js
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

_______________________________________________
Hippocms-svn mailing list
[email protected]
http://lists.hippo.nl/mailman/listinfo/hippocms-svn

Reply via email to