radio_webfxtreeitem_common.js
上传用户:huijianzhu
上传日期:2009-11-25
资源大小:9825k
文件大小:10k
源码类别:

电子政务应用

开发平台:

Java

  1. /*
  2.  * Sub class that adds a check box in front of the tree item icon
  3.  *
  4.  * Created by Erik Arvidsson (http://webfx.eae.net/contact.html#erik)
  5.  *
  6.  * Disclaimer: This is not any official WebFX component. It was created due to
  7.  * demand and is just a quick and dirty implementation. If you are
  8.  * interested in this functionality the contact us
  9.  * http://webfx.eae.net/contact.html
  10.  *
  11.  * Notice that you'll need to add a css rule the sets the size of the input box.
  12.  * Something like this will do fairly good in both Moz and IE
  13.  *
  14.  * input.tree-radio {
  15.  * width: auto;
  16.  * margin: 0;
  17.  * padding: 0;
  18.  * height: 14px;
  19.  * vertical-align: middle;
  20.  * }
  21.  *
  22.  */
  23. /*
  24.  *  updated history                             author     zww
  25.  *                                                 
  26.  *  method   : Constructor 
  27.  *  function : added id property, make id set by youself
  28.  *  upDate   : 2004-7-15
  29.  *
  30.  *  method   : WebFXRadioTreeItem.prototype.toString :   
  31.  *  function : added hasRadio switch for tree
  32.  *  upDate   : 2004-7-15
  33.  *      
  34.  *  method   : WebFXRadioTreeItem.prototype.hasCheckedAll :
  35.  *             WebFXRadioTreeItem.prototype.hasCheckedChildren :
  36.  *  function : if there is node checked in sub tree whose root is this, return true; else return false
  37.  *  upDate   : 2004-7-15
  38.  *
  39.  *  method   : WebFXRadioTreeItem.prototype.setExpand :
  40.  *             WebFXRadioTreeItem.prototype.setExpandChildren :
  41.  *  function : if this.children.checked , this.expand()
  42.  *  upDate   : 2004-7-15
  43.  *
  44.  */
  45. var WebFXRadioTreeConfig = {
  46. autoExpand : true
  47. };
  48. /*
  49.  * WebFXTreeRadioTree class
  50.  */
  51. function WebFXRadioTree(sText, sId, sReturnValue, sAction, sTarget, hasRadio, bChecked, radioName, sBehavior, sIcon, sOpenIcon) {
  52. this.base = WebFXTree;
  53. this.base(sText, sId, sReturnValue, sAction, sTarget, sBehavior, sIcon, sOpenIcon);
  54.     this._hasRadio = hasRadio || false;
  55. this._checked = bChecked || false;
  56. this._radioName = radioName || "webFXRadio";
  57. }
  58.  
  59. WebFXRadioTree.prototype = new WebFXTree;
  60. WebFXRadioTree.prototype.expand = function() {
  61.     this.doExpand();
  62. if(WebFXRadioTreeConfig.autoExpand) {
  63.     for (var i = 0; i < this.childNodes.length; i++) {
  64.     this.childNodes[i].setExpand();
  65.         }
  66. }
  67. }
  68. WebFXRadioTree.prototype.toString = function() {
  69. var str = "<div id="" + this.id + "" ondblclick="webFXTreeHandler.toggle(this);" class="webfx-tree-item" onkeydown="return webFXTreeHandler.keydown(this, event)" nowrap>";
  70. // insert radio box
  71. //2005-4-10 added hasRadio switch for tree by zww
  72. if(this._hasRadio) {
  73. str += "<input type="radio"" +
  74. " name="" + this._radioName + """ +
  75. " value="" + this.returnValue + """ +
  76. " class="tree-radio"" +
  77. (this._checked ? " checked="checked"" : "") +
  78. " onclick="setvalue('" + this.id + "', '" + this.target + "');"" +
  79. " />";
  80. }
  81. // end insert radio
  82.     if(this.action && this.action != webFXTreeConfig.defaultAction) {
  83.     str += "<img id="" + this.id + "-icon" class="webfx-tree-icon" src="" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "" onclick="webFXTreeHandler.select(this);">" +
  84. "<a href="" + this.action + "" id="" + this.id + "-anchor" onfocus="webFXTreeHandler.focus(this);" onblur="webFXTreeHandler.blur(this);"" +
  85. (this.target ? " target="" + this.target + """ : "") +
  86. ">" + this.text + "</a></div>" +
  87. "<div id="" + this.id + "-cont" class="webfx-tree-container" style="display: " + ((this.open)?'block':'none') + ";">";
  88. }
  89. else {
  90. str += "<img id="" + this.id + "-icon" class="webfx-tree-icon" src="" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "" onclick="webFXTreeHandler.select(this);">" +
  91. "<span id="" + this.id + "-anchor" onfocus="webFXTreeHandler.focus(this);" onblur="webFXTreeHandler.blur(this);">" + this.text + "</span></div>" +
  92. "<div id="" + this.id + "-cont" class="webfx-tree-container" style="display: " + ((this.open)?'block':'none') + ";">";
  93. }
  94. var sb = [];
  95. for (var i = 0; i < this.childNodes.length; i++) {
  96. sb[i] = this.childNodes[i].toString(i, this.childNodes.length);
  97. }
  98. this.rendered = true;
  99. return str + sb.join("") + "</div>";
  100. };
  101. /*
  102.  * WebFXRadioTreeItem class
  103.  */
  104. function WebFXRadioTreeItem(sText, sId, sReturnValue, sAction, sTarget, hasRadio, bChecked, radioName, eParent, sIcon, sOpenIcon) {
  105. this.base = WebFXTreeItem;
  106. this.base(sText, sId, sReturnValue, sAction, sTarget, eParent, sIcon, sOpenIcon);
  107. this._hasRadio = hasRadio || false;
  108. this._checked = bChecked || false;
  109. this._radioName = radioName || "webFXRadio";
  110. }
  111. WebFXRadioTreeItem.prototype = new WebFXTreeItem;
  112. //edited 2004-7-15 by zww
  113. //can get treeItem with radio use id
  114. WebFXRadioTreeItem.prototype.toString = function (nItem, nItemCount) {
  115. var foo = this.parentNode;
  116. var indent = '';
  117. if (nItem + 1 == nItemCount) { this.parentNode._last = true; }
  118. var i = 0;
  119. while (foo.parentNode) {
  120. foo = foo.parentNode;
  121. indent = "<img id="" + this.id + "-indent-" + i + "" src="" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "">" + indent;
  122. i++;
  123. }
  124. this._level = i;
  125. if (this.childNodes.length) { this.folder = 1; }
  126. else { this.open = false; }
  127. if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) {
  128. if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; }
  129. if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; }
  130. }
  131. else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; }
  132. var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  133. var str = "<div id="" + this.id + "" ondblclick="webFXTreeHandler.toggle(this);" class="webfx-tree-item" onkeydown="return webFXTreeHandler.keydown(this, event)" nowrap>";
  134. str += indent;
  135. str += "<img id="" + this.id + "-plus" src="" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "" onclick="webFXTreeHandler.toggle(this);">"
  136. // insert radio box
  137. //2004-7-15 added hasRadio switch for tree by zww
  138. if(this._hasRadio) {
  139. str += "<input type="radio"" +
  140. " name="" + this._radioName + """ +
  141. " value="" + this.returnValue + """ +
  142. " class="tree-radio"" +
  143. (this._checked ? " checked="checked"" : "") +
  144. //" onclick="setvalue('" + this.id + "', '" + this.text + "');"" +
  145. " />";
  146. }
  147. // end insert radio
  148. if(this.action && this.action != webFXTreeConfig.defaultAction) {
  149.     str += "<img id="" + this.id + "-icon" class="webfx-tree-icon" src="" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "" onclick="webFXTreeHandler.select(this);"><a href="" + this.action + "" target="" + this.target + "" id="" + this.id + "-anchor" onfocus="webFXTreeHandler.focus(this);" onblur="webFXTreeHandler.blur(this);">" + label + "</a></div>";
  150. }
  151. else {
  152. str += "<img id="" + this.id + "-icon" class="webfx-tree-icon" src="" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "" onclick="webFXTreeHandler.select(this);"><span id="" + this.id + "-anchor" onfocus="webFXTreeHandler.focus(this);" onblur="webFXTreeHandler.blur(this);">" + label + "</span></div>";
  153. }
  154. str += "<div id="" + this.id + "-cont" class="webfx-tree-container" style="display: " + ((this.open)?'block':'none') + ";">";
  155. for (var i = 0; i < this.childNodes.length; i++) {
  156. str += this.childNodes[i].toString(i,this.childNodes.length);
  157. }
  158. str += "</div>";
  159. this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon);
  160. this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon);
  161. return str;
  162. }
  163. WebFXRadioTreeItem.prototype.getChecked = function () {
  164. var divEl = document.getElementById(this.id);
  165. var inputEl = divEl.getElementsByTagName("INPUT")[0];
  166. return this._checked = inputEl.checked;
  167. };
  168. WebFXRadioTreeItem.prototype.setChecked = function (bChecked) {
  169. if (bChecked != this.getChecked()) {
  170. var divEl = document.getElementById(this.id);
  171. var inputEl = divEl.getElementsByTagName("INPUT")[0];
  172. this._checked = inputEl.checked = bChecked;
  173. if (typeof this.onchange == "function")
  174. this.onchange();
  175. }
  176. };
  177. //added bu zww 2004-7-14 
  178. //once this onclick, setCheckedAll happened and its children.checked equals this.checked 
  179. //WebFXRadioTreeItem.prototype.setCheckedAll = function (bChecked) {
  180. // this.expandAll();
  181. // this.setChecked(bChecked);
  182. // this.setCheckedChildren(bChecked);  
  183. //
  184. //};
  185. //WebFXRadioTreeItem.prototype.setCheckedChildren = function (bChecked) {
  186. // for (var i = 0; i < this.childNodes.length; i++) {
  187. // this.childNodes[i].setCheckedAll(bChecked);
  188. //    }
  189. //};
  190. //added bu zww 2004-7-14 
  191. //if there is node checked in sub tree whose root is this, return true; else return false 
  192. WebFXRadioTreeItem.prototype.hasCheckedAll = function () {
  193. if(this.hasCheckedChildren()) {
  194. return true;
  195. }
  196. if(this._checked) {
  197. return true;
  198. }
  199. };
  200. WebFXRadioTreeItem.prototype.hasCheckedChildren = function () {
  201. for (var i = 0; i < this.childNodes.length; i++) {
  202. this.childNodes[i].setCheckedAll();
  203.     }
  204. };
  205. //added bu zww 2004-7-14 
  206. //if this.children.checked , this.expand(); 
  207. WebFXRadioTreeItem.prototype.setExpand = function () {
  208. //this.expandAll();
  209. if(this.setExpandChildren()) {
  210. this.expand();
  211. return true;
  212. }
  213. if(this._checked) {
  214. return true;
  215. }
  216. };
  217. WebFXRadioTreeItem.prototype.setExpandChildren = function () {
  218. var isChecked = false;
  219. for (var i = 0; i < this.childNodes.length; i++) {
  220. if(this.childNodes[i].setExpand()) {
  221. isChecked = true;
  222. }
  223.     }
  224. return isChecked;
  225. };