fckfitwindow.js
上传用户:dbstep
上传日期:2022-08-06
资源大小:2803k
文件大小:7k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

ASP/ASPX

  1. /*
  2.  * FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3.  * Copyright (C) 2003-2009 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.  * Stretch the editor to full window size and back.
  22.  */
  23. var FCKFitWindow = function()
  24. {
  25. this.Name = 'FitWindow' ;
  26. }
  27. FCKFitWindow.prototype.Execute = function()
  28. {
  29. var eEditorFrame = window.frameElement ;
  30. var eEditorFrameStyle = eEditorFrame.style ;
  31. var eMainWindow = parent ;
  32. var eDocEl = eMainWindow.document.documentElement ;
  33. var eBody = eMainWindow.document.body ;
  34. var eBodyStyle = eBody.style ;
  35. var eParent ;
  36. // Save the current selection and scroll position.
  37. var oRange, oEditorScrollPos ;
  38. if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  39. {
  40. oRange = new FCKDomRange( FCK.EditorWindow ) ;
  41. oRange.MoveToSelection() ;
  42. oEditorScrollPos = FCKTools.GetScrollPosition( FCK.EditorWindow ) ;
  43. }
  44. else
  45. {
  46. var eTextarea = FCK.EditingArea.Textarea ;
  47. oRange = !FCKBrowserInfo.IsIE && [ eTextarea.selectionStart, eTextarea.selectionEnd ] ;
  48. oEditorScrollPos = [ eTextarea.scrollLeft, eTextarea.scrollTop ] ;
  49. }
  50. // No original style properties known? Go fullscreen.
  51. if ( !this.IsMaximized )
  52. {
  53. // Registering an event handler when the window gets resized.
  54. if( FCKBrowserInfo.IsIE )
  55. eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
  56. else
  57. eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
  58. // Save the scrollbars position.
  59. this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
  60. // Save and reset the styles for the entire node tree. They could interfere in the result.
  61. eParent = eEditorFrame ;
  62. // The extra () is to avoid a warning with strict error checking. This is ok.
  63. while( (eParent = eParent.parentNode) )
  64. {
  65. if ( eParent.nodeType == 1 )
  66. {
  67. eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
  68. eParent.style.zIndex = FCKConfig.FloatingPanelsZIndex - 1 ;
  69. }
  70. }
  71. // Hide IE scrollbars (in strict mode).
  72. if ( FCKBrowserInfo.IsIE )
  73. {
  74. this.documentElementOverflow = eDocEl.style.overflow ;
  75. eDocEl.style.overflow = 'hidden' ;
  76. eBodyStyle.overflow = 'hidden' ;
  77. }
  78. else
  79. {
  80. // Hide the scroolbars in Firefox.
  81. eBodyStyle.overflow = 'hidden' ;
  82. eBodyStyle.width = '0px' ;
  83. eBodyStyle.height = '0px' ;
  84. }
  85. // Save the IFRAME styles.
  86. this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
  87. // Resize.
  88. var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
  89. eEditorFrameStyle.position = "absolute";
  90. eEditorFrame.offsetLeft ; // Kludge for Safari 3.1 browser bug, do not remove. See #2066.
  91. eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1;
  92. eEditorFrameStyle.left = "0px";
  93. eEditorFrameStyle.top = "0px";
  94. eEditorFrameStyle.width = oViewPaneSize.Width + "px";
  95. eEditorFrameStyle.height = oViewPaneSize.Height + "px";
  96. // Giving the frame some (huge) borders on his right and bottom
  97. // side to hide the background that would otherwise show when the
  98. // editor is in fullsize mode and the window is increased in size
  99. // not for IE, because IE immediately adapts the editor on resize,
  100. // without showing any of the background oddly in firefox, the
  101. // editor seems not to fill the whole frame, so just setting the
  102. // background of it to white to cover the page laying behind it anyway.
  103. if ( !FCKBrowserInfo.IsIE )
  104. {
  105. eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
  106. eEditorFrameStyle.backgroundColor = "white";
  107. }
  108. // Scroll to top left.
  109. eMainWindow.scrollTo(0, 0);
  110. // Is the editor still not on the top left? Let's find out and fix that as well. (Bug #174)
  111. var editorPos = FCKTools.GetWindowPosition( eMainWindow, eEditorFrame ) ;
  112. if ( editorPos.x != 0 )
  113. eEditorFrameStyle.left = ( -1 * editorPos.x ) + "px" ;
  114. if ( editorPos.y != 0 )
  115. eEditorFrameStyle.top = ( -1 * editorPos.y ) + "px" ;
  116. this.IsMaximized = true ;
  117. }
  118. else // Resize to original size.
  119. {
  120. // Remove the event handler of window resizing.
  121. if( FCKBrowserInfo.IsIE )
  122. eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
  123. else
  124. eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
  125. // Restore the CSS position for the entire node tree.
  126. eParent = eEditorFrame ;
  127. // The extra () is to avoid a warning with strict error checking. This is ok.
  128. while( (eParent = eParent.parentNode) )
  129. {
  130. if ( eParent._fckSavedStyles )
  131. {
  132. FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
  133. eParent._fckSavedStyles = null ;
  134. }
  135. }
  136. // Restore IE scrollbars
  137. if ( FCKBrowserInfo.IsIE )
  138. eDocEl.style.overflow = this.documentElementOverflow ;
  139. // Restore original size
  140. FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
  141. // Restore the window scroll position.
  142. eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
  143. this.IsMaximized = false ;
  144. }
  145. FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
  146. // It seams that Firefox restarts the editing area when making this changes.
  147. // On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
  148. //configuration, like DisableFFTableHandles and DisableObjectResizing get
  149. //lost, so we must reset it. Also, the cursor position and selection are
  150. //also lost, even if you comment the following line (MakeEditable).
  151. // if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem.
  152. if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  153. FCK.EditingArea.MakeEditable() ;
  154. FCK.Focus() ;
  155. // Restore the selection and scroll position of inside the document.
  156. if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  157. {
  158. oRange.Select() ;
  159. FCK.EditorWindow.scrollTo( oEditorScrollPos.X, oEditorScrollPos.Y ) ;
  160. }
  161. else
  162. {
  163. if ( !FCKBrowserInfo.IsIE )
  164. {
  165. eTextarea.selectionStart = oRange[0] ;
  166. eTextarea.selectionEnd = oRange[1] ;
  167. }
  168. eTextarea.scrollLeft = oEditorScrollPos[0] ;
  169. eTextarea.scrollTop = oEditorScrollPos[1] ;
  170. }
  171. }
  172. FCKFitWindow.prototype.GetState = function()
  173. {
  174. if ( FCKConfig.ToolbarLocation != 'In' )
  175. return FCK_TRISTATE_DISABLED ;
  176. else
  177. return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
  178. }
  179. function FCKFitWindow_Resize()
  180. {
  181. var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
  182. var eEditorFrameStyle = window.frameElement.style ;
  183. eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ;
  184. eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ;
  185. }