fckselection_ie.js
上传用户:ah_jiwei
上传日期:2022-07-24
资源大小:54044k
文件大小:5k
源码类别:

数据库编程

开发平台:

Visual C++

  1. /*
  2.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3.  * Copyright (C) 2003-2007 Frederico Caldeira Knabben
  4.  *
  5.  * == BEGIN LICENSE ==
  6.  *
  7.  * Licensed under the terms of any of the following licenses at your
  8.  * choice:
  9.  *
  10.  *  - GNU General Public License Version 2 or later (the "GPL")
  11.  *    http://www.gnu.org/licenses/gpl.html
  12.  *
  13.  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  14.  *    http://www.gnu.org/licenses/lgpl.html
  15.  *
  16.  *  - Mozilla Public License Version 1.1 or later (the "MPL")
  17.  *    http://www.mozilla.org/MPL/MPL-1.1.html
  18.  *
  19.  * == END LICENSE ==
  20.  *
  21.  * Active selection functions. (IE specific implementation)
  22.  */
  23. // Get the selection type.
  24. FCKSelection.GetType = function()
  25. {
  26. // It is possible that we can still get a text range object even when type=='None' is returned by IE.
  27. // So we'd better check the object returned by createRange() rather than by looking at the type.
  28. try
  29. {
  30. var ieType = FCK.EditorDocument.selection.type ;
  31. if ( ieType == 'Control' || ieType == 'Text' )
  32. return ieType ;
  33. if ( FCK.EditorDocument.selection.createRange().parentElement )
  34. return 'Text' ;
  35. }
  36. catch(e)
  37. {
  38. // Nothing to do, it will return None properly.
  39. }
  40. return 'None' ;
  41. } ;
  42. // Retrieves the selected element (if any), just in the case that a single
  43. // element (object like and image or a table) is selected.
  44. FCKSelection.GetSelectedElement = function()
  45. {
  46. if ( this.GetType() == 'Control' )
  47. {
  48. var oRange = FCK.EditorDocument.selection.createRange() ;
  49. if ( oRange && oRange.item )
  50. return FCK.EditorDocument.selection.createRange().item(0) ;
  51. }
  52. return null ;
  53. } ;
  54. FCKSelection.GetParentElement = function()
  55. {
  56. switch ( this.GetType() )
  57. {
  58. case 'Control' :
  59. var el = FCKSelection.GetSelectedElement() ;
  60. return el ? el.parentElement : null ;
  61. case 'None' :
  62. return null ;
  63. default :
  64. return FCK.EditorDocument.selection.createRange().parentElement() ;
  65. }
  66. } ;
  67. FCKSelection.GetBoundaryParentElement = function( startBoundary )
  68. {
  69. switch ( this.GetType() )
  70. {
  71. case 'Control' :
  72. var el = FCKSelection.GetSelectedElement() ;
  73. return el ? el.parentElement : null ;
  74. case 'None' :
  75. return null ;
  76. default :
  77. var doc = FCK.EditorDocument ;
  78. var range = doc.selection.createRange() ;
  79. range.collapse( startBoundary !== false ) ;
  80. var el = range.parentElement() ;
  81. // It may happen that range is comming from outside "doc", so we
  82. // must check it (#1204).
  83. return FCKTools.GetElementDocument( el ) == doc ? el : null ;
  84. }
  85. } ;
  86. FCKSelection.SelectNode = function( node )
  87. {
  88. FCK.Focus() ;
  89. FCK.EditorDocument.selection.empty() ;
  90. var oRange ;
  91. try
  92. {
  93. // Try to select the node as a control.
  94. oRange = FCK.EditorDocument.body.createControlRange() ;
  95. oRange.addElement( node ) ;
  96. }
  97. catch(e)
  98. {
  99. // If failed, select it as a text range.
  100. oRange = FCK.EditorDocument.body.createTextRange() ;
  101. oRange.moveToElementText( node ) ;
  102. }
  103. oRange.select() ;
  104. } ;
  105. FCKSelection.Collapse = function( toStart )
  106. {
  107. FCK.Focus() ;
  108. if ( this.GetType() == 'Text' )
  109. {
  110. var oRange = FCK.EditorDocument.selection.createRange() ;
  111. oRange.collapse( toStart == null || toStart === true ) ;
  112. oRange.select() ;
  113. }
  114. } ;
  115. // The "nodeTagName" parameter must be Upper Case.
  116. FCKSelection.HasAncestorNode = function( nodeTagName )
  117. {
  118. var oContainer ;
  119. if ( FCK.EditorDocument.selection.type == "Control" )
  120. {
  121. oContainer = this.GetSelectedElement() ;
  122. }
  123. else
  124. {
  125. var oRange  = FCK.EditorDocument.selection.createRange() ;
  126. oContainer = oRange.parentElement() ;
  127. }
  128. while ( oContainer )
  129. {
  130. if ( oContainer.tagName == nodeTagName ) return true ;
  131. oContainer = oContainer.parentNode ;
  132. }
  133. return false ;
  134. } ;
  135. // The "nodeTagName" parameter must be UPPER CASE.
  136. FCKSelection.MoveToAncestorNode = function( nodeTagName )
  137. {
  138. var oNode, oRange ;
  139. if ( ! FCK.EditorDocument )
  140. return null ;
  141. if ( FCK.EditorDocument.selection.type == "Control" )
  142. {
  143. oRange = FCK.EditorDocument.selection.createRange() ;
  144. for ( i = 0 ; i < oRange.length ; i++ )
  145. {
  146. if (oRange(i).parentNode)
  147. {
  148. oNode = oRange(i).parentNode ;
  149. break ;
  150. }
  151. }
  152. }
  153. else
  154. {
  155. oRange  = FCK.EditorDocument.selection.createRange() ;
  156. oNode = oRange.parentElement() ;
  157. }
  158. while ( oNode && oNode.nodeName != nodeTagName )
  159. oNode = oNode.parentNode ;
  160. return oNode ;
  161. } ;
  162. FCKSelection.Delete = function()
  163. {
  164. // Gets the actual selection.
  165. var oSel = FCK.EditorDocument.selection ;
  166. // Deletes the actual selection contents.
  167. if ( oSel.type.toLowerCase() != "none" )
  168. {
  169. oSel.clear() ;
  170. }
  171. return oSel ;
  172. } ;