fckcontextmenu.js
上传用户:wlfwy2004
上传日期:2016-12-12
资源大小:33978k
文件大小:9k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * FCKeditor - The text editor for internet
  3.  * Copyright (C) 2003-2005 Frederico Caldeira Knabben
  4.  * 
  5.  * Licensed under the terms of the GNU Lesser General Public License:
  6.  *  http://www.opensource.org/licenses/lgpl-license.php
  7.  * 
  8.  * For further information visit:
  9.  *  http://www.fckeditor.net/
  10.  * 
  11.  * File Name: fckcontextmenu.js
  12.  *  Defines the FCKContextMenu object that is responsible for all
  13.  *  Context Menu operations.
  14.  * 
  15.  * File Authors:
  16.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  17.  */
  18. var FCKContextMenu = new Object() ;
  19. // This property is internally used to indicate that the context menu has been created.
  20. FCKContextMenu._IsLoaded = false ;
  21. // This method creates the context menu inside a DIV tag. Take a look at the end of this file for a sample output.
  22. FCKContextMenu.Reload = function()
  23. {
  24. // Create the Main DIV that holds the Context Menu.
  25. this._Div = this._Document.createElement( 'DIV' ) ;
  26. this._Div.className = 'CM_ContextMenu' ;
  27. this._Div.style.position = 'absolute' ;
  28. this._Div.style.visibility = 'hidden' ;
  29. this._Document.body.appendChild( this._Div );
  30. // Create the main table for the menu items.
  31. var oTable = this._Document.createElement( 'TABLE' ) ;
  32. oTable.cellSpacing = 0 ;
  33. oTable.cellPadding = 0 ;
  34. oTable.border = 0 ;
  35. this._Div.appendChild( oTable ) ;
  36. // Load all configured groups.
  37. this.Groups = new Object() ;
  38. for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
  39. {
  40. var sGroup = FCKConfig.ContextMenu[i] ;
  41. this.Groups[ sGroup ] = this._GetGroup( sGroup ) ;
  42. this.Groups[ sGroup ].CreateTableRows( oTable ) ;
  43. }
  44. this._IsLoaded = true ;
  45. }
  46. FCKContextMenu._GetGroup = function( groupName )
  47. {
  48. var oGroup ;
  49. switch ( groupName )
  50. {
  51. case 'Generic' :
  52. // Generic items that are always available.
  53. oGroup = new FCKContextMenuGroup() ;
  54. with ( oGroup )
  55. {
  56. Add( new FCKContextMenuItem( this, 'Cut' , FCKLang.Cut , true ) ) ;
  57. Add( new FCKContextMenuItem( this, 'Copy' , FCKLang.Copy , true ) ) ;
  58. Add( new FCKContextMenuItem( this, 'Paste' , FCKLang.Paste , true ) ) ;
  59. }
  60. break ;
  61. case 'Link' :
  62. oGroup = new FCKContextMenuGroup() ;
  63. with ( oGroup )
  64. {
  65. Add( new FCKContextMenuSeparator() ) ;
  66. Add( new FCKContextMenuItem( this, 'Link' , FCKLang.EditLink , true ) ) ;
  67. Add( new FCKContextMenuItem( this, 'Unlink' , FCKLang.RemoveLink, true ) ) ;
  68. }
  69. break ;
  70. case 'TableCell' :
  71. oGroup = new FCKContextMenuGroup() ;
  72. with ( oGroup )
  73. {
  74. Add( new FCKContextMenuSeparator() ) ;
  75. Add( new FCKContextMenuItem( this, 'TableInsertRow' , FCKLang.InsertRow, true ) ) ;
  76. Add( new FCKContextMenuItem( this, 'TableDeleteRows' , FCKLang.DeleteRows, true ) ) ;
  77. Add( new FCKContextMenuSeparator() ) ;
  78. Add( new FCKContextMenuItem( this, 'TableInsertColumn' , FCKLang.InsertColumn, true ) ) ;
  79. Add( new FCKContextMenuItem( this, 'TableDeleteColumns' , FCKLang.DeleteColumns, true ) ) ;
  80. Add( new FCKContextMenuSeparator() ) ;
  81. Add( new FCKContextMenuItem( this, 'TableInsertCell' , FCKLang.InsertCell, true ) ) ;
  82. Add( new FCKContextMenuItem( this, 'TableDeleteCells' , FCKLang.DeleteCells, true ) ) ;
  83. Add( new FCKContextMenuItem( this, 'TableMergeCells' , FCKLang.MergeCells, true ) ) ;
  84. Add( new FCKContextMenuItem( this, 'TableSplitCell' , FCKLang.SplitCell, true ) ) ;
  85. Add( new FCKContextMenuSeparator() ) ;
  86. Add( new FCKContextMenuItem( this, 'TableCellProp' , FCKLang.CellProperties, true ) ) ;
  87. Add( new FCKContextMenuItem( this, 'TableProp' , FCKLang.TableProperties, true ) ) ;
  88. }
  89. break ;
  90. case 'Table' :
  91. return new FCKContextMenuGroup( true, this, 'Table', FCKLang.TableProperties, true ) ;
  92. case 'Image' :
  93. return new FCKContextMenuGroup( true, this, 'Image', FCKLang.ImageProperties, true ) ;
  94. case 'Flash' :
  95. return new FCKContextMenuGroup( true, this, 'Flash', FCKLang.FlashProperties, true ) ;
  96. case 'Form' :
  97. return new FCKContextMenuGroup( true, this, 'Form', FCKLang.FormProp, true ) ;
  98. case 'Checkbox' :
  99. return new FCKContextMenuGroup( true, this, 'Checkbox', FCKLang.CheckboxProp, true ) ;
  100. case 'Radio' :
  101. return new FCKContextMenuGroup( true, this, 'Radio', FCKLang.RadioButtonProp, true ) ;
  102. case 'TextField' :
  103. return new FCKContextMenuGroup( true, this, 'TextField', FCKLang.TextFieldProp, true ) ;
  104. case 'HiddenField' :
  105. return new FCKContextMenuGroup( true, this, 'HiddenField', FCKLang.HiddenFieldProp, true ) ;
  106. case 'ImageButton' :
  107. return new FCKContextMenuGroup( true, this, 'ImageButton', FCKLang.ImageButtonProp, true ) ;
  108. case 'Button' :
  109. return new FCKContextMenuGroup( true, this, 'Button', FCKLang.ButtonProp, true ) ;
  110. case 'Select' :
  111. return new FCKContextMenuGroup( true, this, 'Select', FCKLang.SelectionFieldProp, true ) ;
  112. case 'Textarea' :
  113. return new FCKContextMenuGroup( true, this, 'Textarea', FCKLang.TextareaProp, true ) ;
  114. case 'BulletedList' :
  115. return new FCKContextMenuGroup( true, this, 'BulletedList', FCKLang.BulletedListProp, true ) ;
  116. case 'NumberedList' :
  117. return new FCKContextMenuGroup( true, this, 'NumberedList', FCKLang.NumberedListProp, true ) ;
  118. case 'Anchor' :
  119. return new FCKContextMenuGroup( true, this, 'Anchor', FCKLang.AnchorProp, true ) ;
  120. }
  121. return oGroup ;
  122. }
  123. FCKContextMenu.RefreshState = function()
  124. {
  125.    // Get the actual selected tag (if any).
  126. var oTag = FCKSelection.GetSelectedElement() ;
  127. var sTagName ;
  128. if ( oTag )
  129. {
  130. sTagName = oTag.tagName ;
  131. }
  132. // Set items visibility.
  133. // var bIsAnchor = ( sTagName == 'A' && oTag.name.length > 0 && oTag.href.length == 0 ) ;
  134. if ( this.Groups['Link'] ) this.Groups['Link'].SetVisible( /*!bIsAnchor &&*/ FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) ;
  135. if ( this.Groups['TableCell'] ) this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' && FCKSelection.HasAncestorNode('TABLE') ) ;
  136. if ( this.Groups['Table'] ) this.Groups['Table'].SetVisible( sTagName == 'TABLE' ) ;
  137. if ( this.Groups['Image'] ) this.Groups['Image'].SetVisible( sTagName == 'IMG' && !oTag.getAttribute('_fckflash') && !oTag.getAttribute('_fckanchor') ) ;
  138. if ( this.Groups['Flash'] ) this.Groups['Flash'].SetVisible( sTagName == 'IMG' && oTag.getAttribute('_fckflash') ) ;
  139. if ( this.Groups['Anchor'] ) this.Groups['Anchor'].SetVisible( sTagName == 'IMG' && oTag.getAttribute('_fckanchor') ) ;
  140. if ( this.Groups['BulletedList'] ) this.Groups['BulletedList'].SetVisible( FCKSelection.HasAncestorNode('UL') ) ;
  141. if ( this.Groups['NumberedList'] ) this.Groups['NumberedList'].SetVisible( FCKSelection.HasAncestorNode('OL') ) ;
  142. if ( this.Groups['Select'] ) this.Groups['Select'].SetVisible( sTagName == 'SELECT' ) ;
  143. if ( this.Groups['Textarea'] ) this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' ) ;
  144. if ( this.Groups['Form'] ) this.Groups['Form'].SetVisible( FCKSelection.HasAncestorNode('FORM') ) ;
  145. if ( this.Groups['Checkbox'] ) this.Groups['Checkbox'].SetVisible( sTagName == 'INPUT' && oTag.type == 'checkbox' ) ;
  146. if ( this.Groups['Radio'] ) this.Groups['Radio'].SetVisible( sTagName == 'INPUT' && oTag.type == 'radio' ) ;
  147. if ( this.Groups['TextField'] ) this.Groups['TextField'].SetVisible( sTagName == 'INPUT' && ( oTag.type == 'text' || oTag.type == 'password' ) ) ;
  148. if ( this.Groups['HiddenField'] ) this.Groups['HiddenField'].SetVisible( sTagName == 'INPUT' && oTag.type == 'hidden' ) ;
  149. if ( this.Groups['ImageButton'] ) this.Groups['ImageButton'].SetVisible( sTagName == 'INPUT' && oTag.type == 'image' ) ;
  150. if ( this.Groups['Button'] ) this.Groups['Button'].SetVisible( sTagName == 'INPUT' && ( oTag.type == 'button' || oTag.type == 'submit' || oTag.type == 'reset' ) ) ;
  151. // Refresh the state of all visible items (active/disactive)
  152. for ( var o in this.Groups )
  153. {
  154. this.Groups[o].RefreshState() ;
  155. }
  156. }
  157. /*
  158. Sample Context Menu Output
  159. -----------------------------------------
  160. <div class="CM_ContextMenu">
  161. <table cellSpacing="0" cellPadding="0" border="0">
  162. <tr class="CM_Disabled">
  163. <td class="CM_Icon"><img alt="" src="icons/cut.gif" width="21" height="20" unselectable="on"></td>
  164. <td class="CM_Label" unselectable="on">Cut</td>
  165. </tr>
  166. <tr class="CM_Disabled">
  167. <td class="CM_Icon"><img height="20" alt="" src="icons/copy.gif" width="21"></td>
  168. <td class="CM_Label">Copy</td>
  169. </tr>
  170. <tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  171. <td class="CM_Icon"><img height="20" alt="" src="icons/paste.gif" width="21"></td>
  172. <td class="CM_Label">Paste</td>
  173. </tr>
  174. <tr class="CM_Separator">
  175. <td class="CM_Icon"></td>
  176. <td class="CM_Label"><div></div></td>
  177. </tr>
  178. <tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  179. <td class="CM_Icon"><img height="20" alt="" src="icons/print.gif" width="21"></td>
  180. <td class="CM_Label">Print</td>
  181. </tr>
  182. <tr class="CM_Separator">
  183. <td class="CM_Icon"></td>
  184. <td class="CM_Label"><div></div></td>
  185. </tr>
  186. <tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  187. <td class="CM_Icon"></td>
  188. <td class="CM_Label">Do Something</td>
  189. </tr>
  190. <tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  191. <td class="CM_Icon"></td>
  192. <td class="CM_Label">Just Testing</td>
  193. </tr>
  194. </table>
  195. </div>
  196. */