TV20.js
上传用户:lsj999sz
上传日期:2022-06-15
资源大小:4717k
文件大小:15k
源码类别:

ICQ/即时通讯

开发平台:

Java

  1. //========================================
  2. //Envrionment to hold Listeners
  3. //========================================
  4. tv_listeners = new Array() ;
  5. function listener( type , handler )   {
  6. this.type = type ;
  7. this.handler = handler ;
  8. this.id = tv_listeners.length ;
  9. tv_listeners[ tv_listeners.length ] = this ;
  10. }
  11. function addListener( type , handler )  {
  12.     new listener( type , handler ) ;  
  13.  }
  14. //=== END =====
  15. //=========================================
  16. // Hold the top item
  17. //=========================================
  18. tv_topnodeitem = null ;
  19. //===== END =======
  20. //=========================================
  21. //Hold nodeitems , and supply a nodeitem Register
  22. //=========================================
  23. nodeitems = new Array() ;
  24. function nodeitemRegister( obj )   {
  25.     nodeitems[ nodeitems.length ] = obj ;
  26. return nodeitems.length - 1 ;
  27. }
  28. //=== END =======
  29. //=================================
  30. //Custom a stack
  31. //Class         : stack
  32. //metheds    :  get()
  33. //                    put( obj )
  34. //=================================
  35. function stack() {
  36.     this.value = new Array() ;
  37. this.cursor = 0 ;
  38. }
  39. function stack_get()  {
  40.      this.cursor = this.cursor - 1 ;
  41.  return this.value[ this.cursor ] ;
  42. }
  43. function stack_put( obj )   {
  44.       this.value[ this.cursor ] = obj ;
  45.       this.cursor = this.cursor + 1 ;
  46. }
  47. stack.prototype.get = stack_get ;
  48. stack.prototype.put = stack_put ;
  49. //=======END ==========
  50. //=========================================
  51. // Define a public stack
  52. //=========================================
  53. userstack = new stack() ;
  54. //====== END ===========
  55. //=========================================
  56. //Image List
  57. //=========================================
  58. treeview_box_0_none = "../images/4_clos.gif"  ;
  59. treeview_box_0_line = "../images/4_none.gif" ;
  60. treeview_box_2_open = "../images/2_open.gif" ;
  61. treeview_box_2_none = "../images/2_none.gif" ;
  62. treeview_box_2_close = "../images/2_clos.gif" ;
  63. treeview_box_1_open = "../images/3_open.gif" ;
  64. treeview_box_1_none = "../images/3_none.gif" ;
  65. treeview_box_1_close = "../images/3_clos.gif" ;
  66. //===============================================
  67. //Class : nodeitem
  68. //status------------------------1:two-direction       0:nobox       0: disactivite
  69. //                              2:three-0direction     1:close-box   1: activite
  70. //                                                    2:open-box                    
  71. //===============================================
  72. function nodeitem( parentkey , key , lable , img )  {
  73.     this.lable = lable ;
  74. this.key = key ;
  75.     this.parent = findNode( parentkey ) ;
  76. if( this.parent != null )  {
  77.     aa = this.parent.status ;
  78.     if( aa.substring( 1 , 2 ) == "0" )
  79.         this.parent.status = aa.substring( 0 , 1 ) + "1" + aa.substring( 2 , 3 ) ;
  80.     if( this.parent.maxsubitem != null ) 
  81.         this.parent.maxsubitem.status = "2" + this.parent.maxsubitem.status.substring( 1 , 3 ) ;
  82.         this.parent.subitems[ this.parent.subitems.length ] = this ;
  83.         this.parent.maxsubitem = this ; 
  84.     }
  85.     else  {
  86.     if( tv_topnodeitem != null )   {
  87.      alert( "不能有两个顶项!" ) ;
  88.  return ;
  89.         }
  90.         tv_topnodeitem = this ;
  91.     }
  92.  
  93. this.img = img ;
  94. this.tag = null ;
  95.     this.status = "100" ;
  96. this.subitems = new Array() ;
  97. this.maxsubitem = null ;
  98.     this.id = nodeitemRegister( this ) ;
  99. //**********************
  100. this.questionId = 0;
  101. this.description = "";
  102. //this.url = null;
  103. //**********************
  104. //added by msb for the sort and move up/down
  105. /*if ( this == tv_topnodeitem )
  106. {
  107. this.nodeIndex = 0;
  108. } else {
  109. this.nodeIndex = this.parent.subitems.length;
  110. }*/
  111. //end added
  112. }
  113. //added by msb for the sort and move up/down
  114. function nodeitem_moveUp() {
  115. if (this == tv_topnodeitem) return; //topitem 
  116. ssubitems = this.parent.subitems;
  117. for ( i=0; i<ssubitems.length; i++ ) {
  118. if( ssubitems[i] == this ) {
  119. break;
  120. }
  121. }
  122. if (i==0) return;
  123. ssubitems[i] = ssubitems[i-1];
  124. ssubitems[i-1] = this;
  125. if (i==ssubitems.length-1) {
  126. ssubitems[i-1].status = "2" + ssubitems[i-1].status.substring(1, 3);
  127. ssubitems[i].status = "1" + ssubitems[i].status.substring(1, 3);
  128. }
  129. /*
  130. itemTemp = this;
  131. ssubitems[this.nodeIndex-1] */
  132. /* for ( i=0; i<ssubitems.length; i++ ) {
  133. if( ssubitems[i] != null && ssubitems[i].nodeIndex == (this.nodeIndex-1) )
  134. previousitem = ssubitems[i]
  135. }
  136. previousitem.nodeIndex = this.nodeIndex;
  137. this.nodeIndex = this.nodeIndex -1;
  138. swap(this,previousitem);
  139. */
  140. //label_on_click(this.id);
  141. this.parent.refresh();
  142. lable_on_click(this.id);
  143. }//moveUp()
  144. function nodeitem_moveDown() {
  145. if (this == tv_topnodeitem) return; //topitem
  146. ssubitems = this.parent.subitems;
  147. for ( i=0; i<ssubitems.length; i++ ) {
  148. if( ssubitems[i] == this ) {
  149. break;
  150. }
  151. }
  152. if (i==ssubitems.length-1) return;
  153. ssubitems[i] = ssubitems[i+1];
  154. ssubitems[i+1] = this;
  155. if (i==ssubitems.length-2) {
  156. ssubitems[i+1].status = "1" + ssubitems[i+1].status.substring(1, 3);
  157. ssubitems[i].status = "2" + ssubitems[i].status.substring(1, 3);
  158. }
  159. this.parent.refresh();
  160. lable_on_click(this.id);
  161. }//moveDown()
  162. /*function swap (item1, item2) {
  163. nodeitems[item1.id] = item2;
  164. nodeitems[item2.id] = item1;
  165. idTemp = item1.id;
  166. item1.id = item2.id;
  167. item2.id = idTemp;
  168. }*/
  169. //end added
  170. function nodeitem_setTag( obj ) {
  171.     this.tag = obj ;
  172. }
  173. function nodeitem_getTag() {
  174.     return this.tag ;
  175. }
  176. function nodeitem_show()  {
  177. str = "<span id = 'preface" + this.id + "'><table border='0' cellspacing='0' cellpadding='0'><tr><td>" ;
  178.     str_f = "" ;
  179.     for( j = this.parent ; j != null ; j = j.parent )  {
  180.     if( j.status.substring( 0 , 1 ) == 1 )
  181.     str_f = "<img src = '" + treeview_box_0_none + "' align='absmiddle'>" + str_f ;
  182.         else
  183.     str_f = "<img src = '" + treeview_box_0_line + "' align='absmiddle'>" + str_f ;
  184.     }
  185.     str = str + str_f ;
  186.     str += "<img id = 'box" + this.id + "' nodeid = '" + this.id + "' src = '" ;
  187.     switch( this.status.substring( 0 , 2 ) )   {
  188.         case "10" : str += treeview_box_1_none ; break ;
  189.         case "11" : str += treeview_box_1_close ; break ;
  190.         case "12" : str += treeview_box_1_open ; break ;
  191.         case "20" : str += treeview_box_2_none ; break ;
  192.         case "21" : str += treeview_box_2_close ; break ;
  193.         case "22" : str += treeview_box_2_open ; break ;
  194.     }
  195.     str += "' align='absmiddle' onclick='box_on_click(this)'>" ;
  196.     if( this.img == "" )
  197.     str += this.img ;
  198.     else
  199.     str += "<img src = '" + this.img + "' align='absmiddle' width='16' height='16'>" ;
  200.     str += "</td><td><table border='0' cellspacing='1' cellpadding='1' style='font-size:9pt; color:#333333' id='lablePanel" + this.id + "'><tr><td ondblclick = 'lable_on_dblclick(" + this.id + ")' onclick='lable_on_click(" + this.id + ")' style='cursor:hand' id='f_lablePanel" + this.id + "' nowrap>" + this.lable + "</td></tr></table></td></tr></table>" ;  
  201. str += "</span><span id = 'tv_panel_" + this.id + "' style='display:" ;
  202. if( this.status.substring( 1 , 2 ) == '2' )
  203.    str += "" ;
  204. else
  205.    str += "none" ;
  206.  
  207.     str += "'></span>" ;
  208. if( this.parent == null )  
  209.       for(var i in document.all){
  210.           if (document.all[i].tagName == "BODY")
  211.           {
  212.       document.all[i].insertAdjacentHTML( "AfterBegin" , str ) ;
  213.               break
  214.           }
  215.        }
  216. else   
  217. document.all( "tv_panel_" + this.parent.id ).insertAdjacentHTML( "BeforeEnd" , str ) ;
  218. //alert("before id " + this.id);
  219.     for( m = 0 ; m < this.subitems.length ; m ++ ) {
  220. //      alert("after id " + this.id); 
  221.    if( this.subitems[ m ] != null )  {
  222.    userstack.put( m ) ;
  223.    this.subitems[ m ].show() ;
  224.    m = userstack.get() ;
  225.      }
  226.   }
  227.   
  228.     
  229. }
  230. function nodeitem_refresh()  {
  231. str = "<table border='0' cellspacing='0' cellpadding='0'><tr><td>" ;
  232.     str_f = "" ;
  233.     for( j = this.parent ; j != null ; j = j.parent )  {
  234.     if( j.status.substring( 0 , 1 ) == 1 )
  235.    str_f = "<img src = '" + treeview_box_0_none + "' align='absmiddle'>" + str_f ;
  236.         else
  237.    str_f = "<img src = '" + treeview_box_0_line + "' align='absmiddle'>" + str_f ;
  238.     }
  239. str = str + str_f ;
  240.     str += "<img id = 'box" + this.id + "' nodeid = '" + this.id + "' src = '" ;
  241.     switch( this.status.substring( 0 , 2 ) )   {
  242.         case "10" : str += treeview_box_1_none ; break ;
  243.         case "11" : str += treeview_box_1_close ; break ;
  244.         case "12" : str += treeview_box_1_open ; break ;
  245.         case "20" : str += treeview_box_2_none ; break ;
  246.         case "21" : str += treeview_box_2_close ; break ;
  247.         case "22" : str += treeview_box_2_open ; break ;
  248.     }
  249.     str += "' align='absmiddle' onclick='box_on_click(this)'>" ;
  250.     if( this.img == "" )
  251.     str += this.img ;
  252.     else
  253.     str += "<img src = '" + this.img + "' align='absmiddle' width='16' height='16'>" ;
  254.     str += "</td><td><table border='0' cellspacing='1' cellpadding='1' style='font-size:9pt; color:#333333' id='lablePanel" + this.id + "'><tr><td ondblclick = 'lable_on_dblclick(" + this.id + ")' onclick='lable_on_click(" + this.id + ")' style='cursor:hand' id='f_lablePanel" + this.id + "' nowrap>" + this.lable + "</td></tr></table></td></tr></table>" ;  
  255. document.all( "preface" + this.id ).innerHTML = str ;
  256.     document.all( "tv_panel_" + this.id ).innerHTML = "" ;
  257. for( m = 0 ; m < this.subitems.length ; m ++ )
  258.    if( this.subitems[ m ] != null )  {
  259.    userstack.put( m ) ;
  260.    this.subitems[ m ].show() ;
  261.    m = userstack.get() ;
  262.        }
  263. }
  264. function nodeitem_remove()  {
  265.     pparent = this.parent ;
  266. if( pparent == null )   {
  267.         removenodeitem( this.id ) ;
  268.         for(var i in document.all){
  269.            if (document.all[i].tagName == "BODY")
  270.              {
  271.    document.all[i].innerHTML = "" ;
  272.                break
  273.              }
  274.           }
  275. return ;
  276. }
  277. lastsubitem = null ;
  278. for( i = 0 ; i < pparent.subitems.length ; i ++ )
  279.    if( pparent.subitems[ i ] != null )  
  280.    if ( pparent.subitems[ i ] == this ) 
  281.        pparent.subitems[ i ] = null ;
  282.            else
  283.        lastsubitem = pparent.subitems[ i ] ;
  284.     pparent.maxsubitem = lastsubitem ; 
  285. if( lastsubitem == null )   
  286.         pparent.status = pparent.status.substring( 0 , 1 ) + "0" + pparent.status.substring( 2 , 3 ) ;
  287.     else   
  288.     pparent.maxsubitem.status = "1" + pparent.maxsubitem.status.substring( 1 , 3 ) ;
  289.      removenodeitem( this.id ) ;
  290. //added by msb for move up/down
  291. arrTemp = new Array();
  292. j = 0;
  293. for ( i=0; i<pparent.subitems.length; i++ ) {
  294. if ( pparent.subitems[i] != null ) {
  295. arrTemp[j] = pparent.subitems[i];
  296. j++;
  297. }
  298. }
  299. this.parent.subitems = arrTemp;
  300. //end added
  301.  pparent.refresh() ;
  302.  //tv_topnodeitem.refresh() ;
  303. }
  304. function removenodeitem( id )   {
  305.     curitem = nodeitems[ id ] ;
  306. nodeitems[ id ] = null ;
  307. for( m = 0 ; m < curitem.subitems.length ; m ++ ) 
  308.      if( curitem.subitems[ m ] != null )   {
  309.    userstack.put( m ) ;
  310.    removenodeitem( curitem.subitems[ m ].id ) ;
  311.    m = userstack.get() ;
  312.        }
  313. }
  314. function nodeitem_boxclick()  {
  315.      if( this.status.substring( 1 ,2 ) == "0" )
  316.        return ; 
  317.  if( this.status.substring( 1 ,2 ) == "1" )   
  318.         this.open() ;
  319.  else  
  320.         this.close() ;
  321. }
  322. function nodeitem_close()  {
  323.      this.status = this.status.substring( 0 , 1 ) + "1" + this.status.substring( 2 , 3 ) ;
  324.      document.all( "tv_panel_" + this.id ).style.display = "none" ;
  325.      eval( "document.all( 'box' + this.id ).src = treeview_box_" + this.status.substring( 0 , 1 ) +"_close" ) ;
  326. }
  327. function nodeitem_open()  {
  328.      this.status = this.status.substring( 0 , 1 ) + "2" + this.status.substring( 2 , 3 ) ;
  329.      document.all( "tv_panel_" + this.id ).style.display = "" ;
  330.      eval( "document.all( 'box' + this.id ).src = treeview_box_" + this.status.substring( 0 , 1 ) +"_open" ) ;
  331. }
  332. //added by msb for the move up/down
  333. nodeitem.prototype.moveUp = nodeitem_moveUp;
  334. nodeitem.prototype.moveDown = nodeitem_moveDown;
  335. //end added
  336. nodeitem.prototype.show = nodeitem_show ;
  337. nodeitem.prototype.refresh = nodeitem_refresh ;
  338. nodeitem.prototype.boxclick = nodeitem_boxclick ;
  339. nodeitem.prototype.close = nodeitem_close ;
  340. nodeitem.prototype.open = nodeitem_open ;
  341. nodeitem.prototype.remove = nodeitem_remove ;
  342. nodeitem.prototype.setTag = nodeitem_setTag ;
  343. nodeitem.prototype.getTag = nodeitem_getTag ;
  344. //==========================================================
  345. // Public Methods
  346. //==========================================================
  347. function showTV()  {
  348.      tv_topnodeitem.show() ;
  349. }
  350. function findNode( key )   {
  351. pppp = null;
  352.     for( i = 0 ; i < nodeitems.length ; i ++ ) {
  353.    if( nodeitems[ i ] != null ) {
  354.       if( nodeitems[ i ].key == key ) {
  355.          pppp = nodeitems[ i ] ;
  356.   }
  357.    }
  358. }
  359.     return pppp ;
  360. }
  361. function addNode(  parentkey , key , lable , img  )   {
  362.     return new nodeitem( parentkey , key , lable , img ) ;
  363. }
  364. function deleteNode(  key )   {
  365.     curNode = findNode( key ) ;
  366. if( curNode == null )
  367.   return false ;
  368.     curNode.remove() ; 
  369.     return true ;
  370. }
  371. //====== END ================
  372. //===========================================================
  373. // Events
  374. //===========================================================
  375. function box_on_click( obj )  {
  376.     nodeitems[ obj.nodeid ].boxclick() ;
  377. }
  378. tv_curlable = null ;
  379. tv_curlable_f = null ;
  380. function lable_on_click( id )  {
  381.        key = nodeitems[ id ].key ;
  382.        if( nodeitems[ id ].parent == null )
  383.       parentkey = "" ;
  384.        else
  385.       parentkey = nodeitems[ id ].parent.key ;
  386.           
  387.    if( tv_curlable != null )  {
  388.    tv_curlable.bgColor = "transparent" ;
  389.    tv_curlable.style.color = "#333333" ;
  390.    tv_curlable_f.bgColor = "transparent" ;
  391.        }
  392.        tv_curlable = document.all("lablePanel"+id) ;
  393.    tv_curlable.bgColor = "#000000" ;
  394.    tv_curlable.style.color = "#FFFFFF" ;
  395.        tv_curlable_f = document.all("f_lablePanel"+id) ;
  396.    tv_curlable_f.bgColor = "#888888" ;
  397.    for( i = 0 ; i < tv_listeners.length ; i ++ )  
  398.       if( tv_listeners[ i ].type == "click" )  {
  399.    h = tv_listeners[ i ].handler ;
  400.    eval( h + "( '" + key + "' , '" + parentkey + "' ) ; " ) ; 
  401.            }
  402. }
  403. function lable_on_dblclick( id ) {
  404. key = nodeitems[ id ].key ;
  405.        if( nodeitems[ id ].parent == null )
  406.       parentkey = "" ;
  407.        else
  408.       parentkey = nodeitems[ id ].parent.key ;
  409.           
  410.    if( tv_curlable != null )  {
  411.    tv_curlable.bgColor = "transparent" ;
  412.    tv_curlable.style.color = "#333333" ;
  413.    tv_curlable_f.bgColor = "transparent" ;
  414.        }
  415.        tv_curlable = document.all("lablePanel"+id) ;
  416.    tv_curlable.bgColor = "#000000" ;
  417.    tv_curlable.style.color = "#FFFFFF" ;
  418.        tv_curlable_f = document.all("f_lablePanel"+id) ;
  419.    tv_curlable_f.bgColor = "#888888" ;
  420.    for( i = 0 ; i < tv_listeners.length ; i ++ )  
  421.       if( tv_listeners[ i ].type == "dblclick" )  {
  422.    h = tv_listeners[ i ].handler ;
  423.    eval( h + "( '" + key + "' , '" + parentkey + "' ) ; " ) ; 
  424.            }
  425. }