diff --git a/struts2-jquery-showcase/src/main/java/com/jgeppert/struts2/jquery/showcase/tree/JsonTreeSearch.java b/struts2-jquery-showcase/src/main/java/com/jgeppert/struts2/jquery/showcase/tree/JsonTreeSearch.java new file mode 100644 index 000000000..87572e296 --- /dev/null +++ b/struts2-jquery-showcase/src/main/java/com/jgeppert/struts2/jquery/showcase/tree/JsonTreeSearch.java @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 com.jgeppert.struts2.jquery.showcase.tree; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Result; + +import com.jgeppert.struts2.jquery.tree.result.TreeNode; +import com.opensymphony.xwork2.ActionSupport; + +public class JsonTreeSearch extends ActionSupport { + + private static final long serialVersionUID = -9222182010123442253L; + private static final List treeSource = new ArrayList<>(); + private List nodes = new ArrayList(); + private String id = ""; + private String str; + Set nodeIds = new HashSet<>(); + + static { + TreeNode treeRoot = new TreeNode("1", "Struts 2", new ArrayList()); + treeRoot.setHasChildren(Boolean.TRUE); + treeSource.add(treeRoot); + + TreeNode nodeGeneral = new TreeNode("11", "General", new ArrayList()); + nodeGeneral.setHasChildren(Boolean.TRUE); + treeSource.add(nodeGeneral); + + TreeNode nodePlugins = new TreeNode("12", "Plugins", new ArrayList()); + nodePlugins.setHasChildren(Boolean.TRUE); + treeSource.add(nodePlugins); + + TreeNode nodeBlogs = new TreeNode("13", "Blogs", new ArrayList()); + nodeBlogs.setHasChildren(Boolean.TRUE); + treeSource.add(nodeBlogs); + + TreeNode nodeStruts2 = new TreeNode("111", "Struts 2"); + nodeStruts2.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2); + + TreeNode nodeStruts2FB = new TreeNode("112", "Struts 2 @ Facebook"); + nodeStruts2FB.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2FB); + + TreeNode nodeStruts2TW = new TreeNode("113", "Struts 2 @ Twitter"); + nodeStruts2TW.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2TW); + + TreeNode nodeStruts2Pins = new TreeNode("121", "Struts 2 Plugins"); + nodeStruts2Pins.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2Pins); + + TreeNode nodeStruts2JQ = new TreeNode("122", "Struts 2 JQuery Plugin"); + nodeStruts2JQ.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2JQ); + + TreeNode nodeStruts2BS = new TreeNode("123", "Struts 2 Bootstrap Plugin"); + nodeStruts2BS.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2BS); + + TreeNode nodeStruts2JQNews = new TreeNode("131", "Struts2 JQuery News"); + nodeStruts2JQNews.setHasChildren(Boolean.FALSE); + treeSource.add(nodeStruts2JQNews); + + } + + @Action(value = "json-tree-search-data", results = @Result(name = SUCCESS, type = "json", params = { "root", + "nodes" })) + public String data() { + for (TreeNode n : treeSource) { + if ((this.id == null || "".equals(id)) && n.getId().equals("1")) { + this.nodes.add(n); + break; + } else if (this.id != null && !"".equals(id) && n.getId().startsWith(id) + && n.getId().length() == (this.id.length() + 1)) { + this.nodes.add(n); + } + } + + return SUCCESS; + } + + @Override + @Action(value = "json-tree-search", results = @Result(name = SUCCESS, type = "json", params = { "root", + "nodeIds" })) + public String execute() { + if (this.str != null && !"".equals(str)) { + for (TreeNode n : treeSource) { + if (n.getText().toLowerCase().contains(str.toLowerCase())) { + String nodeId = n.getId(); + do { + this.nodeIds.add(nodeId); + nodeId = nodeId.substring(0, nodeId.length() - 1); + } while (nodeId.length() > 0); + } + } + } + + return SUCCESS; + } + + public List getNodes() { + return nodes; + } + + public void setId(String id) { + this.id = id; + } + + public void setStr(String str) { + this.str = str; + } + + public Set getNodeIds() { + return this.nodeIds; + } + +} diff --git a/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree-json.jsp b/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree-json.jsp index fa5e7741d..7a0c4a743 100644 --- a/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree-json.jsp +++ b/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree-json.jsp @@ -16,9 +16,10 @@ nodeTargets="result" onClickTopics="treeClicked" /> -
Click on the AJAX links above.
+ + @@ -138,3 +139,174 @@ public class JsonTreeData extends ActionSupport implements ServletContextAware { +

+ A Tree Component with a JSON Data Source and search plugin with AJAX / JSON. +

+ + + + +
+ + +
+ +

+ More about JsTree 3 plugins (unique, sort, massload, drag and drop,...) on JsTree official website +

+ + + +
+
+            
+<s:url var="treeDataUrl" action="json-tree-data" namespace="/tree"/>
+<s:url var="echo" value="/echo.action"/>
+<div>
+    <input type="text" id="searchField"  />
+    <sj:submit value="Search" button="true" 
+    onclick="$('#jsonTreeSearch').jstree('search', $('#searchField').val())" />
+</div>
+<sjt:tree
+    id="jsonTreeSearch"
+    href="%{treeSearchDataUrl}"
+    plugins="{search:{ajax:{url:'%{treeSearchUrl}'}}}"
+/>
+            
+      
+
+
+
+            
+package com.jgeppert.struts2.jquery.showcase.tree;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+
+import com.jgeppert.struts2.jquery.tree.result.TreeNode;
+import com.opensymphony.xwork2.ActionSupport;
+
+public class JsonTreeSearch extends ActionSupport {
+
+    private static final long serialVersionUID = -9222182010123442253L;
+    private static final List<TreeNode> treeSource = new ArrayList<>();
+    private List<TreeNode> nodes = new ArrayList<TreeNode>();
+    private String id = "";
+    private String str;
+    Set<String> nodeIds = new HashSet<>();
+
+    static {
+        TreeNode treeRoot = new TreeNode("1", "Struts 2", new ArrayList<TreeNode>());
+        treeRoot.setHasChildren(Boolean.TRUE);
+        treeSource.add(treeRoot);
+
+        TreeNode nodeGeneral = new TreeNode("11", "General", new ArrayList<TreeNode>());
+        nodeGeneral.setHasChildren(Boolean.TRUE);
+        treeSource.add(nodeGeneral);
+
+        TreeNode nodePlugins = new TreeNode("12", "Plugins", new ArrayList<TreeNode>());
+        nodePlugins.setHasChildren(Boolean.TRUE);
+        treeSource.add(nodePlugins);
+
+        TreeNode nodeBlogs = new TreeNode("13", "Blogs", new ArrayList<TreeNode>());
+        nodeBlogs.setHasChildren(Boolean.TRUE);
+        treeSource.add(nodeBlogs);
+
+        TreeNode nodeStruts2 = new TreeNode("111", "Struts 2");
+        nodeStruts2.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2);
+
+        TreeNode nodeStruts2FB = new TreeNode("112", "Struts 2 @ Facebook");
+        nodeStruts2FB.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2FB);
+
+        TreeNode nodeStruts2TW = new TreeNode("113", "Struts 2 @ Twitter");
+        nodeStruts2TW.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2TW);
+
+        TreeNode nodeStruts2Pins = new TreeNode("121", "Struts 2 Plugins");
+        nodeStruts2Pins.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2Pins);
+
+        TreeNode nodeStruts2JQ = new TreeNode("122", "Struts 2 JQuery Plugin");
+        nodeStruts2JQ.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2JQ);
+
+        TreeNode nodeStruts2BS = new TreeNode("123", "Struts 2 Bootstrap Plugin");
+        nodeStruts2BS.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2BS);
+
+        TreeNode nodeStruts2JQNews = new TreeNode("131", "Struts2 JQuery News");
+        nodeStruts2JQNews.setHasChildren(Boolean.FALSE);
+        treeSource.add(nodeStruts2JQNews);
+
+    }
+
+    @Action(value = "json-tree-search-data", results = @Result(name = SUCCESS, type = "json", params = { "root",
+            "nodes" }))
+    public String data() {
+        for (TreeNode n : treeSource) {
+            if ((this.id == null || "".equals(id)) && n.getId().equals("1")) {
+                this.nodes.add(n);
+                break;
+            } else if (this.id != null && !"".equals(id) && n.getId().startsWith(id)
+                    && n.getId().length() == (this.id.length() + 1)) {
+                this.nodes.add(n);
+            }
+        }
+
+        return SUCCESS;
+    }
+
+    @Override
+    @Action(value = "json-tree-search", results = @Result(name = SUCCESS, type = "json", params = { "root",
+            "nodeIds" }))
+    public String execute() {
+        if (this.str != null && !"".equals(str)) {
+            for (TreeNode n : treeSource) {
+                if (n.getText().toLowerCase().contains(str.toLowerCase())) {
+                    String nodeId = n.getId();
+                    do {
+                        this.nodeIds.add(nodeId);
+                        nodeId = nodeId.substring(0, nodeId.length() - 1);
+                    } while (nodeId.length() > 0);
+                }
+            }
+        }
+
+        return SUCCESS;
+    }
+
+    public List<TreeNode> getNodes() {
+        return nodes;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public void setStr(String str) {
+        this.str = str;
+    }
+
+    public Set<String> getNodeIds() {
+        return this.nodeIds;
+    }
+
+}
+
+            
+      
+
+
diff --git a/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree.jsp b/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree.jsp index 75700e367..a261e3722 100644 --- a/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree.jsp +++ b/struts2-jquery-showcase/src/main/webapp/WEB-INF/content/tree/tree.jsp @@ -157,6 +157,35 @@
+

Tree with search plugin

+ +

+ A Tree with a search field, jstreethemeVariant set as "large" and jstreeResponsive set as "true". +

+
+ + +
+ + + + + + + + + + + + + + + +

Source Code

@@ -317,6 +346,35 @@ </sjt:treeItem> </sjt:treeItem> </sjt:tree> + +<h2>Tree with search plugin</h2> + +<p class="text"> + A Tree with a search field, jstreethemeVariant set as "large" and jstreeResponsive set as "true". +</p> +<div> + <input type="text" id="searchField" /> + <sj:submit value="Search" button="true" + onclick="$('#treeSearch').jstree('search', $('#searchField').val())" /> +</div> +<sjt:tree + id="treeSearch" jstreetheme="default-dark" jstreethemeVariant="large" jstreethemeResponsive="true" + plugins="{search:{ajax:false}}" + > + <sjt:treeItem title="General"> + <sjt:treeItem title="Struts2" href="http://struts.apache.org"/> + <sjt:treeItem title="Struts2 @ Facebook" href="https://www.facebook.com/apachestruts"/> + <sjt:treeItem title="Struts2 @ Twitter" href="https://twitter.com/TheApacheStruts"/> + </sjt:treeItem> + <sjt:treeItem title="Plugins"> + <sjt:treeItem title="Struts2 Plugins" href="https://cwiki.apache.org/S2PLUGINS/home.html"/> + <sjt:treeItem title="Struts2 jQuery Plugin" href="https://github.com/struts-community-plugins/struts2-jquery/"/> + <sjt:treeItem title="Struts2 Bootstrap Plugin" href="https://github.com/struts-community-plugins/struts2-bootstrap/"/> + </sjt:treeItem> + <sjt:treeItem title="Blogs"> + <sjt:treeItem title="Struts2 jQuery News" href="http://www.jgeppert.com"/> + </sjt:treeItem> +</sjt:tree>
diff --git a/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/components/Tree.java b/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/components/Tree.java index 121cbd8bb..9a32f6d74 100755 --- a/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/components/Tree.java +++ b/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/components/Tree.java @@ -49,6 +49,8 @@ public class Tree extends AbstractContainer { public static final String JQUERYACTION = "tree"; protected String jstreetheme; + protected String jstreethemeVariant; + protected String jstreethemeResponsive; protected String htmlTitles; protected String animation; protected String initiallyOpen; @@ -66,6 +68,7 @@ public class Tree extends AbstractContainer { protected String openAllOnLoad; protected String openAllOnRefresh; protected String contextmenu; + protected String plugins; protected String types; protected String showThemeDots; protected String showThemeIcons; @@ -97,6 +100,10 @@ public void evaluateExtraParams() { if (this.jstreetheme != null) addParameter("jstreetheme", findString(this.jstreetheme)); + if (this.jstreethemeResponsive != null) + addParameter("jstreethemeResponsive", findValue(this.jstreethemeResponsive, Boolean.class)); + if (this.jstreethemeVariant != null) + addParameter("jstreethemeVariant", findString(this.jstreethemeVariant)); if (this.animation != null) addParameter("animation", findValue(animation, Number.class)); if (this.htmlTitles != null) @@ -135,6 +142,8 @@ public void evaluateExtraParams() { findValue(this.openAllOnRefresh, Boolean.class)); if (contextmenu != null) addParameter("contextmenu", findString(contextmenu)); + if (plugins != null) + addParameter("plugins", findString(plugins)); if (types != null) addParameter("types", findString(types)); if (this.showThemeDots != null) @@ -193,8 +202,20 @@ public String getTheme() { public void setJstreetheme(String jstreetheme) { this.jstreetheme = jstreetheme; } + + - @StrutsTagAttribute(description = "Defines whether titles can contain HTML code.", type = "Boolean", defaultValue = "false") + @StrutsTagAttribute(description = "jstree theme variant, if your theme support it.", defaultValue = "") + public void setJstreethemeVariant(String jstreethemeVariant) { + this.jstreethemeVariant = jstreethemeVariant; + } + + @StrutsTagAttribute(description = "wether to use the responsive version of the theme, if the theme support it", type = "Boolean", defaultValue = "false") + public void setJstreethemeResponsive(String jstreethemeResponsive) { + this.jstreethemeResponsive = jstreethemeResponsive; + } + + @StrutsTagAttribute(description = "Defines whether titles can contain HTML code.", type = "Boolean", defaultValue = "false") public void setHtmlTitles(String htmlTitles) { this.htmlTitles = htmlTitles; } @@ -294,6 +315,11 @@ public void setOpenAllOnRefresh(String openAllOnRefresh) { public void setContextmenu(String contextmenu) { this.contextmenu = contextmenu; } + + @StrutsTagAttribute(description = "Expects an JavaScript object containing plugin to activate in key and conf object/function in value. e.g. {search: {ajax : {...}, ... } , sort : function(n1,n2){...} }. Warning, settings here can override other plugins config defined in other tag attribute (eg : contextmenu)") + public void setPlugins(String plugins) { + this.plugins = plugins; + } @StrutsTagAttribute(description = "The types enables node types - each node can have a type, and you can define rules on how that type should behave - maximum children count, maximum depth, valid children types, selectable or not, etc.") public void setTypes(String types) { diff --git a/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/views/jsp/ui/TreeTag.java b/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/views/jsp/ui/TreeTag.java index 8c3ae36e4..58a98e4a4 100755 --- a/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/views/jsp/ui/TreeTag.java +++ b/struts2-jquery-tree-plugin/src/main/java/com/jgeppert/struts2/jquery/tree/views/jsp/ui/TreeTag.java @@ -36,6 +36,8 @@ public class TreeTag extends AbstractContainerTag { private static final long serialVersionUID = -6297851020849153739L; protected String jstreetheme; + protected String jstreethemeVariant; + protected String jstreethemeResponsive; protected String htmlTitles; protected String animation; protected String initiallyOpen; @@ -53,6 +55,7 @@ public class TreeTag extends AbstractContainerTag { protected String openAllOnLoad; protected String openAllOnRefresh; protected String contextmenu; + protected String plugins; protected String types; protected String showThemeDots; protected String showThemeIcons; @@ -75,6 +78,8 @@ protected void populateParams() { Tree tree = (Tree) component; tree.setJstreetheme(jstreetheme); + tree.setJstreethemeVariant(jstreethemeVariant); + tree.setJstreethemeResponsive(jstreethemeResponsive); tree.setAnimation(animation); tree.setHtmlTitles(htmlTitles); tree.setInitiallyOpen(initiallyOpen); @@ -92,6 +97,7 @@ protected void populateParams() { tree.setOpenAllOnLoad(openAllOnLoad); tree.setOpenAllOnRefresh(openAllOnRefresh); tree.setContextmenu(contextmenu); + tree.setPlugins(plugins); tree.setTypes(types); tree.setShowThemeDots(showThemeDots); tree.setShowThemeIcons(showThemeIcons); @@ -107,8 +113,16 @@ protected void populateParams() { public void setJstreetheme(String jstreetheme) { this.jstreetheme = jstreetheme; } + + public void setJstreethemeVariant(String jstreethemeVariant) { + this.jstreethemeVariant = jstreethemeVariant; + } - public void setHtmlTitles(String htmlTitles) { + public void setJstreethemeResponsive(String jstreethemeResponsive) { + this.jstreethemeResponsive = jstreethemeResponsive; + } + + public void setHtmlTitles(String htmlTitles) { this.htmlTitles = htmlTitles; } @@ -171,8 +185,12 @@ public void setOpenAllOnRefresh(String openAllOnRefresh) { public void setContextmenu(String contextmenu) { this.contextmenu = contextmenu; } + + public void setPlugins(String plugins) { + this.plugins = plugins; + } - public void setTypes(String types) { + public void setTypes(String types) { this.types = types; } diff --git a/struts2-jquery-tree-plugin/src/main/resources/template/jquery/tree-close.ftl b/struts2-jquery-tree-plugin/src/main/resources/template/jquery/tree-close.ftl index a134c3e50..69f59bb2f 100755 --- a/struts2-jquery-tree-plugin/src/main/resources/template/jquery/tree-close.ftl +++ b/struts2-jquery-tree-plugin/src/main/resources/template/jquery/tree-close.ftl @@ -27,6 +27,12 @@ jQuery(document).ready(function () { <#if parameters.jstreetheme?if_exists != ""> options_${escapedOptionId?html}.treetheme = "${parameters.jstreetheme?html}"; + <#if parameters.jstreethemeVariant?if_exists != ""> + options_${escapedOptionId?html}.treethemeVariant = "${parameters.jstreethemeVariant?html}"; + + <#if parameters.jstreethemeResponsive??> + options_${escapedOptionId?html}.treethemeResponsive = ${parameters.jstreethemeResponsive?string}; + <#if parameters.animation??> options_${escapedOptionId?html}.animation = ${parameters.animation?c}; @@ -69,6 +75,9 @@ jQuery(document).ready(function () { <#if parameters.contextmenu?if_exists != ""> options_${escapedOptionId?html}.contextmenu = ${parameters.contextmenu?string}; + <#if parameters.plugins?if_exists != ""> + options_${escapedOptionId?html}.pluginsconf = ${parameters.plugins?string}; + <#if parameters.types?if_exists != ""> options_${escapedOptionId?html}.types = ${parameters.types?string}; diff --git a/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.js b/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.js index 69f07f2f7..ccbd92a4e 100755 --- a/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.js +++ b/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.js @@ -48,13 +48,19 @@ $.jstree.defaults.core.themes.url = true; $.jstree.defaults.core.themes.dir = path + "js/jstree/themes"; }); - o.plugins = $.jstree.defaults.plugins != null ? $.jstree.defaults.plugins : []; + o.plugins = $.jstree.defaults.plugins != null ? $.jstree.defaults.plugins.slice() : []; o.core = {}; if (o.treetheme) { o.core.themes = {}; o.core.themes.name = o.treetheme; o.core.themes.dots = o.dots; o.core.themes.icons = o.icons; + if (o.treethemeVariant){ + o.core.themes.variant = o.treethemeVariant; + } + if (o.treethemeResponsive){ + o.core.themes.responsive = o.treethemeResponsive; + } } else { o.plugins.push("themeroller"); } @@ -82,7 +88,15 @@ }); $(self.escId(o.id+'_hidden')).val( $elem.jstree("get_checked", false) ); } - + if (o.pluginsconf){ + //We permit overriding other plugins conf. Possible to modify this behaviour here + $.each(o.pluginsconf,function(plugin,conf){ + if (o.plugins.indexOf(plugin) === -1){ + o.plugins.push(plugin); + } + o[plugin] = conf; + }); + } if(o.toogleAllTopics) { self.subscribeTopics($elem, o.toogleAllTopics, self.handler.toggle_checkboxes, o); } @@ -194,7 +208,6 @@ o.core = {}; o.core.animation = o.animation; } - $elem.jstree(o); }, diff --git a/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.min.js b/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.min.js index 55822ab53..6d7e3561a 100755 --- a/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.min.js +++ b/struts2-jquery-tree-plugin/src/main/resources/template/js/struts2/jquery.tree.struts2.min.js @@ -13,11 +13,12 @@ http://www.gnu.org/licenses/gpl.html */ -'use strict';(function(b){b.struts2_jquery_tree={handler:{show_checkboxes:"_s2j_show_checkboxes",hide_checkboxes:"_s2j_hide_checkboxes",check_checkboxes:"_s2j_check_checkboxes",uncheck_checkboxes:"_s2j_uncheck_checkboxes",toggle_checkboxes:"_s2j_toggle_all"},tree:function(d,a){var c=this,m=null;c.loadAtOnce||c.require("js/base/jquery.cookie"+c.minSuffix+".js");m=b.scriptPath?b.scriptPath:"";c.require("js/jstree/jquery.hotkeys"+c.minSuffix+".js");c.require("js/jstree/jquery.jstree"+c.minSuffix+".js", -function(){b.jstree.defaults.core.themes.url=!0;b.jstree.defaults.core.themes.dir=m+"js/jstree/themes"});a.plugins=null!=b.jstree.defaults.plugins?b.jstree.defaults.plugins:[];a.core={};a.treetheme?(a.core.themes={},a.core.themes.name=a.treetheme,a.core.themes.dots=a.dots,a.core.themes.icons=a.icons):a.plugins.push("themeroller");a.contextmenu&&(a.core.check_callback=!0,a.plugins.push("contextmenu"));a.types&&a.plugins.push("types");a.checkbox&&(a.plugins.push("checkbox"),a.checkbox={override_ui:!0, -real_checkboxes:!0,real_checkboxes_names:function(b){return[a.name,b.attr?b.attr("id"):0]}},a.two_state&&(a.checkbox.two_state=!0),d.bind("loaded.jstree",function(a,c){d.find("li").each(function(a){1==b(this).data("checked")&&d.jstree("check_node",b(this))})}),d.on("changed.jstree",function(k,e){b(c.escId(a.id+"_hidden")).val(d.jstree("get_checked",!1))}),b(c.escId(a.id+"_hidden")).val(d.jstree("get_checked",!1)));a.toogleAllTopics&&c.subscribeTopics(d,a.toogleAllTopics,c.handler.toggle_checkboxes, -a);a.checkShowTopics&&c.subscribeTopics(d,a.checkShowTopics,c.handler.show_checkboxes,a);a.checkHideTopics&&c.subscribeTopics(d,a.checkHideTopics,c.handler.hide_checkboxes,a);a.checkAllTopics&&c.subscribeTopics(d,a.checkAllTopics,c.handler.check_checkboxes,a);a.uncheckAllTopics&&c.subscribeTopics(d,a.uncheckAllTopics,c.handler.uncheck_checkboxes,a);a.url&&(a.core.data={},a.core.data.url=a.url,a.core.data.data=function(a){return{id:"#"===a.id?"":a.id}},a.onsuc&&(a.core.data.success=function(k,e,f){b.each(a.onsuc.split(","), -function(b,g){var h={};h.data=k;h.status=e;h.request=f;c.publishTopic(d,g,h);c.publishTopic(d,a.onalw,h)})}),a.oncom&&(a.core.data.complete=function(k,e){b.each(a.oncom.split(","),function(b,l){var g={};g.request=k;g.status=e;c.publishTopic(d,l,g);c.publishTopic(d,a.onalw,g)})}),a.onerr&&(a.core.data.error=function(k,e,f){b.each(a.onerr.split(","),function(b,g){var h={};h.request=k;h.status=e;h.error=f;c.publishTopic(d,g,h);c.publishTopic(d,a.onalw,h)})}));d.on("select_node.jstree",function(k,e){var f= -{};f.data=e;f.event=k;a.onclick&&c.publishTopic(d,a.onclick,f);if(e.node.a_attr.href&&"javascript:void(0)"!==e.node.a_attr.href&&"#"!==e.node.a_attr.href)window.open(e.node.a_attr.href,"_blank");else{var l=e.node.a_attr.id,g=b(c.escId(l)),f=g.data("targets");void 0===f&&(f=a.nodeTargets);f&&b.each(f.split(","),function(d,e){if(b(c.escId(e)).isSubscribed("_sj_action_"+l+e))g.publish("_sj_action_"+l+e);else{var f=a.nodeHref;a.nodeHrefParamName&&(f=c.addParam(f,a.nodeHrefParamName+"\x3d"+l));b(c.escId(e)).load(f)}return!1})}}); -a.openload&&d.bind("loaded.jstree",function(a,b){d.jstree("open_all")});a.openrefresh&&d.bind("refresh.jstree",function(a,b){d.jstree("open_all")});a.animation&&(a.core={},a.core.animation=a.animation);d.jstree(a)},treeitem:function(b,a){this.anchor(b,a)}};b.subscribeHandler(b.struts2_jquery_tree.handler.show_checkboxes,function(d,a){b(this).jstree("show_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.hide_checkboxes,function(d,a){b(this).jstree("hide_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.toggle_checkboxes, -function(d,a){b(this).jstree("toggle_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.check_checkboxes,function(d,a){b(this).jstree("check_all")});b.subscribeHandler(b.struts2_jquery_tree.handler.uncheck_checkboxes,function(d,a){b(this).jstree("uncheck_all")});b.extend(!0,b.struts2_jquery_tree,b.struts2_jquery);b.struts2_jquery_tree.debugPrefix="[struts2_jquery_tree] "})(jQuery); \ No newline at end of file +'use strict';(function(b){b.struts2_jquery_tree={handler:{show_checkboxes:"_s2j_show_checkboxes",hide_checkboxes:"_s2j_hide_checkboxes",check_checkboxes:"_s2j_check_checkboxes",uncheck_checkboxes:"_s2j_uncheck_checkboxes",toggle_checkboxes:"_s2j_toggle_all"},tree:function(c,a){var d=this,m=null;d.loadAtOnce||d.require("js/base/jquery.cookie"+d.minSuffix+".js");m=b.scriptPath?b.scriptPath:"";d.require("js/jstree/jquery.hotkeys"+d.minSuffix+".js");d.require("js/jstree/jquery.jstree"+d.minSuffix+".js", +function(){b.jstree.defaults.core.themes.url=!0;b.jstree.defaults.core.themes.dir=m+"js/jstree/themes"});a.plugins=null!=b.jstree.defaults.plugins?b.jstree.defaults.plugins.slice():[];a.core={};a.treetheme?(a.core.themes={},a.core.themes.name=a.treetheme,a.core.themes.dots=a.dots,a.core.themes.icons=a.icons,a.treethemeVariant&&(a.core.themes.variant=a.treethemeVariant),a.treethemeResponsive&&(a.core.themes.responsive=a.treethemeResponsive)):a.plugins.push("themeroller");a.contextmenu&&(a.core.check_callback= +!0,a.plugins.push("contextmenu"));a.types&&a.plugins.push("types");a.checkbox&&(a.plugins.push("checkbox"),a.checkbox={override_ui:!0,real_checkboxes:!0,real_checkboxes_names:function(b){return[a.name,b.attr?b.attr("id"):0]}},a.two_state&&(a.checkbox.two_state=!0),c.bind("loaded.jstree",function(a,d){c.find("li").each(function(a){1==b(this).data("checked")&&c.jstree("check_node",b(this))})}),c.on("changed.jstree",function(k,e){b(d.escId(a.id+"_hidden")).val(c.jstree("get_checked",!1))}),b(d.escId(a.id+ +"_hidden")).val(c.jstree("get_checked",!1)));a.pluginsconf&&b.each(a.pluginsconf,function(b,c){-1===a.plugins.indexOf(b)&&a.plugins.push(b);a[b]=c});a.toogleAllTopics&&d.subscribeTopics(c,a.toogleAllTopics,d.handler.toggle_checkboxes,a);a.checkShowTopics&&d.subscribeTopics(c,a.checkShowTopics,d.handler.show_checkboxes,a);a.checkHideTopics&&d.subscribeTopics(c,a.checkHideTopics,d.handler.hide_checkboxes,a);a.checkAllTopics&&d.subscribeTopics(c,a.checkAllTopics,d.handler.check_checkboxes,a);a.uncheckAllTopics&& +d.subscribeTopics(c,a.uncheckAllTopics,d.handler.uncheck_checkboxes,a);a.url&&(a.core.data={},a.core.data.url=a.url,a.core.data.data=function(a){return{id:"#"===a.id?"":a.id}},a.onsuc&&(a.core.data.success=function(k,e,f){b.each(a.onsuc.split(","),function(b,g){var h={};h.data=k;h.status=e;h.request=f;d.publishTopic(c,g,h);d.publishTopic(c,a.onalw,h)})}),a.oncom&&(a.core.data.complete=function(k,e){b.each(a.oncom.split(","),function(b,l){var g={};g.request=k;g.status=e;d.publishTopic(c,l,g);d.publishTopic(c, +a.onalw,g)})}),a.onerr&&(a.core.data.error=function(k,e,f){b.each(a.onerr.split(","),function(b,g){var h={};h.request=k;h.status=e;h.error=f;d.publishTopic(c,g,h);d.publishTopic(c,a.onalw,h)})}));c.on("select_node.jstree",function(k,e){var f={};f.data=e;f.event=k;a.onclick&&d.publishTopic(c,a.onclick,f);if(e.node.a_attr.href&&"javascript:void(0)"!==e.node.a_attr.href&&"#"!==e.node.a_attr.href)window.open(e.node.a_attr.href,"_blank");else{var l=e.node.a_attr.id,g=b(d.escId(l)),f=g.data("targets"); +void 0===f&&(f=a.nodeTargets);f&&b.each(f.split(","),function(c,e){if(b(d.escId(e)).isSubscribed("_sj_action_"+l+e))g.publish("_sj_action_"+l+e);else{var f=a.nodeHref;a.nodeHrefParamName&&(f=d.addParam(f,a.nodeHrefParamName+"\x3d"+l));b(d.escId(e)).load(f)}return!1})}});a.openload&&c.bind("loaded.jstree",function(a,b){c.jstree("open_all")});a.openrefresh&&c.bind("refresh.jstree",function(a,b){c.jstree("open_all")});a.animation&&(a.core={},a.core.animation=a.animation);c.jstree(a)},treeitem:function(b, +a){this.anchor(b,a)}};b.subscribeHandler(b.struts2_jquery_tree.handler.show_checkboxes,function(c,a){b(this).jstree("show_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.hide_checkboxes,function(c,a){b(this).jstree("hide_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.toggle_checkboxes,function(c,a){b(this).jstree("toggle_checkboxes")});b.subscribeHandler(b.struts2_jquery_tree.handler.check_checkboxes,function(c,a){b(this).jstree("check_all")});b.subscribeHandler(b.struts2_jquery_tree.handler.uncheck_checkboxes, +function(c,a){b(this).jstree("uncheck_all")});b.extend(!0,b.struts2_jquery_tree,b.struts2_jquery);b.struts2_jquery_tree.debugPrefix="[struts2_jquery_tree] "})(jQuery); \ No newline at end of file diff --git a/struts2-jquery-tree-plugin/src/site/docs/tree.html b/struts2-jquery-tree-plugin/src/site/docs/tree.html index 699769119..7c6c9067d 100755 --- a/struts2-jquery-tree-plugin/src/site/docs/tree.html +++ b/struts2-jquery-tree-plugin/src/site/docs/tree.html @@ -641,6 +641,22 @@

Attributes

String jstree theme. default, default-rtl, classic or apple + + jstreethemeResponsive + false + false + false + Boolean + wether to use the responsive version of the theme, if the theme support it + + + jstreethemeVariant + false + + false + String + jstree theme variant, if your theme support it. + key false @@ -985,6 +1001,14 @@

Attributes

String Set template to use for opening the rendered html. + + plugins + false + + false + String + Expects an JavaScript object containing plugin to activate in key and conf object/function in value. e.g. {search: {ajax : {...}, ... } , sort : function(n1,n2){...} }. Warning, settings here can override other plugins config defined in other tag attribute (eg : contextmenu) + reloadTopics false