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

电子政务应用

开发平台:

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, sAction, sTarget, hasRadio, bChecked, radioName, sBehavior, sIcon, sOpenIcon) {
  52. this.base = WebFXTree;
  53. this.base(sText, sId, 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.id + """ +
  76. " class="tree-radio"" +
  77. (this._checked ? " checked="checked"" : "") +
  78. " onclick="setvalue('" + this.id + "', '" + this.target + "');"" +
  79. " />";
  80. }
  81. // end insert radio
  82. str += "<img id="" + this.id + "-icon" class="webfx-tree-icon" src="" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "" onclick="webFXTreeHandler.select(this);">" +
  83. "<span id="" + this.id + "-anchor" onfocus="webFXTreeHandler.focus(this);" onblur="webFXTreeHandler.blur(this);"" +
  84. (this.target ? " target="" + this.target + """ : "") +
  85. ">" + this.text + "</span></div>" +
  86. "<div id="" + this.id + "-cont" class="webfx-tree-container" style="display: " + ((this.open)?'block':'none') + ";">";
  87. var sb = [];
  88. for (var i = 0; i < this.childNodes.length; i++) {
  89. sb[i] = this.childNodes[i].toString(i, this.childNodes.length);
  90. }
  91. this.rendered = true;
  92. return str + sb.join("") + "</div>";
  93. };
  94. /*
  95.  * WebFXRadioTreeItem class
  96.  */
  97. function WebFXRadioTreeItem(sText, sId, sAction, sTarget, hasRadio, bChecked, radioName, eParent, sIcon, sOpenIcon) {
  98. this.base = WebFXTreeItem;
  99. this.base(sText, sId, sAction, sTarget, eParent, sIcon, sOpenIcon);
  100. this._hasRadio = hasRadio || false;
  101. this._checked = bChecked || false;
  102. this._radioName = radioName || "webFXRadio";
  103. }
  104. WebFXRadioTreeItem.prototype = new WebFXTreeItem;
  105. //edited 2004-7-15 by zww
  106. //can get treeItem with radio use id
  107. WebFXRadioTreeItem.prototype.toString = function (nItem, nItemCount) {
  108. var foo = this.parentNode;
  109. var indent = '';
  110. if (nItem + 1 == nItemCount) { this.parentNode._last = true; }
  111. var i = 0;
  112. while (foo.parentNode) {
  113. foo = foo.parentNode;
  114. indent = "<img id="" + this.id + "-indent-" + i + "" src="" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "">" + indent;
  115. i++;
  116. }
  117. this._level = i;
  118. if (this.childNodes.length) { this.folder = 1; }
  119. else { this.open = false; }
  120. if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) {
  121. if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; }
  122. if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; }
  123. }
  124. else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; }
  125. var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  126. var str = "<div id="" + this.id + "" ondblclick="webFXTreeHandler.toggle(this);" class="webfx-tree-item" onkeydown="return webFXTreeHandler.keydown(this, event)" nowrap>";
  127. str += indent;
  128. 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);">"
  129. // insert radio box
  130. //2004-7-15 added hasRadio switch for tree by zww
  131. if(this._hasRadio) {
  132. str += "<input type="radio"" +
  133. " name="" + this._radioName + """ +
  134. " value="" + this.id + """ +
  135. " class="tree-radio"" +
  136. (this._checked ? " checked="checked"" : "") +
  137. " onclick="setvalue('" + this.id + "', '" + this.target + "');"" +
  138. " />";
  139. }
  140. // end insert radio
  141. 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>";
  142. str += "<div id="" + this.id + "-cont" class="webfx-tree-container" style="display: " + ((this.open)?'block':'none') + ";">";
  143. for (var i = 0; i < this.childNodes.length; i++) {
  144. str += this.childNodes[i].toString(i,this.childNodes.length);
  145. }
  146. str += "</div>";
  147. this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon);
  148. this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon);
  149. return str;
  150. }
  151. WebFXRadioTreeItem.prototype.getChecked = function () {
  152. var divEl = document.getElementById(this.id);
  153. var inputEl = divEl.getElementsByTagName("INPUT")[0];
  154. return this._checked = inputEl.checked;
  155. };
  156. WebFXRadioTreeItem.prototype.setChecked = function (bChecked) {
  157. if (bChecked != this.getChecked()) {
  158. var divEl = document.getElementById(this.id);
  159. var inputEl = divEl.getElementsByTagName("INPUT")[0];
  160. this._checked = inputEl.checked = bChecked;
  161. if (typeof this.onchange == "function")
  162. this.onchange();
  163. }
  164. };
  165. //added bu zww 2004-7-14 
  166. //once this onclick, setCheckedAll happened and its children.checked equals this.checked 
  167. //WebFXRadioTreeItem.prototype.setCheckedAll = function (bChecked) {
  168. // this.expandAll();
  169. // this.setChecked(bChecked);
  170. // this.setCheckedChildren(bChecked);  
  171. //
  172. //};
  173. //WebFXRadioTreeItem.prototype.setCheckedChildren = function (bChecked) {
  174. // for (var i = 0; i < this.childNodes.length; i++) {
  175. // this.childNodes[i].setCheckedAll(bChecked);
  176. //    }
  177. //};
  178. //added bu zww 2004-7-14 
  179. //if there is node checked in sub tree whose root is this, return true; else return false 
  180. WebFXRadioTreeItem.prototype.hasCheckedAll = function () {
  181. if(this.hasCheckedChildren()) {
  182. return true;
  183. }
  184. if(this._checked) {
  185. return true;
  186. }
  187. };
  188. WebFXRadioTreeItem.prototype.hasCheckedChildren = function () {
  189. for (var i = 0; i < this.childNodes.length; i++) {
  190. this.childNodes[i].setCheckedAll();
  191.     }
  192. };
  193. //added bu zww 2004-7-14 
  194. //if this.children.checked , this.expand(); 
  195. WebFXRadioTreeItem.prototype.setExpand = function () {
  196. //this.expandAll();
  197. if(this.setExpandChildren()) {
  198. this.expand();
  199. return true;
  200. }
  201. if(this._checked) {
  202. return true;
  203. }
  204. };
  205. WebFXRadioTreeItem.prototype.setExpandChildren = function () {
  206. var isChecked = false;
  207. for (var i = 0; i < this.childNodes.length; i++) {
  208. if(this.childNodes[i].setExpand()) {
  209. isChecked = true;
  210. }
  211.     }
  212. return isChecked;
  213. };