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