| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| |
| dojo.provide("dojo.widget.TreeDocIconExtension"); |
| |
| dojo.require("dojo.widget.HtmlWidget"); |
| dojo.require("dojo.widget.TreeExtension"); |
| |
| // selector extension to emphasize node |
| |
| dojo.widget.defineWidget( |
| "dojo.widget.TreeDocIconExtension", |
| [dojo.widget.TreeExtension], |
| { |
| /** |
| * can't unlisten |
| */ |
| |
| templateCssPath: dojo.uri.dojoUri("src/widget/templates/TreeDocIcon.css"), |
| |
| |
| listenTreeEvents: ["afterChangeTree","afterSetFolder","afterUnsetFolder"], |
| |
| listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget }, |
| |
| getnodeDocType: function(node) { |
| var nodeDocType = node.getnodeDocType(); |
| if (!nodeDocType) { // set default type |
| nodeDocType = node.isFolder ? "Folder" : "Document"; |
| } |
| return nodeDocType; |
| }, |
| |
| setnodeDocTypeClass: function(node) { |
| |
| var reg = new RegExp("(^|\\s)"+node.tree.classPrefix+"Icon\\w+",'g'); |
| |
| var clazz = dojo.html.getClass(node.iconNode).replace(reg,'') + ' ' + node.tree.classPrefix+'Icon'+this.getnodeDocType(node); |
| dojo.html.setClass(node.iconNode, clazz); |
| }, |
| |
| |
| onAfterSetFolder: function(message) { |
| //dojo.debug("FOLDER"); |
| if (message.source.iconNode) { |
| // on node-initialize time when folder is set there is no iconNode |
| // this case will be processed in treeChange anyway |
| this.setnodeDocTypeClass(message.source); |
| } |
| }, |
| |
| |
| onAfterUnsetFolder: function(message) { |
| this.setnodeDocTypeClass(message.source); |
| }, |
| |
| |
| listenNode: function(node) { |
| /** |
| * add node with document type icon to node template and Tree.iconNodeTemplate |
| * it will be set to TreeNode.iconNode on node creation |
| * we do not assign document type yet, its node specific |
| */ |
| //dojo.debug("listenNode in "+node); |
| |
| node.contentIconNode = document.createElement("div"); |
| var clazz = node.tree.classPrefix+"IconContent"; |
| if (dojo.render.html.ie) { |
| clazz = clazz+' '+ node.tree.classPrefix+"IEIconContent"; |
| } |
| dojo.html.setClass(node.contentIconNode, clazz); |
| |
| node.contentNode.parentNode.replaceChild(node.contentIconNode, node.expandNode); |
| |
| node.iconNode = document.createElement("div"); |
| dojo.html.setClass(node.iconNode, node.tree.classPrefix+"Icon"+' '+node.tree.classPrefix+'Icon'+this.getnodeDocType(node)); |
| |
| node.contentIconNode.appendChild(node.expandNode); |
| node.contentIconNode.appendChild(node.iconNode); |
| |
| dojo.dom.removeNode(node.contentNode); |
| node.contentIconNode.appendChild(node.contentNode); |
| |
| |
| |
| //dojo.html.insertAfter(node.iconNode, node.expandNode); |
| |
| //dojo.debug("listenNode out "+node); |
| |
| }, |
| |
| |
| onAfterChangeTree: function(message) { |
| var _this = this; |
| |
| //dojo.debug(message.node) |
| |
| if (!message.oldTree || !this.listenedTrees[message.oldTree.widgetId]) { |
| // moving from old tree to our tree |
| this.processDescendants(message.node, |
| this.listenNodeFilter, |
| this.listenNode |
| ); |
| } |
| |
| } |
| |
| |
| }); |