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

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: fckeditor.js
  12.  *  This is the integration file for JavaScript.
  13.  * 
  14.  *  It defines the FCKeditor class that can be used to create editor
  15.  *  instances in a HTML page in the client side. For server side
  16.  *  operations, use the specific integration system.
  17.  * 
  18.  * File Authors:
  19.  *  Frederico Caldeira Knabben (fredck@fckeditor.net)
  20.  */
  21. // FCKeditor Class
  22. var FCKeditor = function( instanceName, width, height, toolbarSet, value )
  23. {
  24. // Properties
  25. this.InstanceName = instanceName ;
  26. this.Width = width || '100%' ;
  27. this.Height = height || '200' ;
  28. this.ToolbarSet = toolbarSet || 'Default' ;
  29. this.Value = value || '' ;
  30. this.BasePath = '/fckeditor/' ;
  31. this.CheckBrowser = true ;
  32. this.DisplayErrors = true ;
  33. this.EnableSafari = false ; // This is a temporary property, while Safari support is under development.
  34. this.Config = new Object() ;
  35. // Events
  36. this.OnError = null ; // function( source, errorNumber, errorDescription )
  37. }
  38. FCKeditor.prototype.Create = function()
  39. {
  40. // Check for errors
  41. if ( !this.InstanceName || this.InstanceName.length == 0 )
  42. {
  43. this._ThrowError( 701, 'You must specify a instance name.' ) ;
  44. return ;
  45. }
  46. document.write( '<div>' ) ;
  47. if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
  48. {
  49. document.write( '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" />' ) ;
  50. document.write( this._GetConfigHtml() ) ;
  51. document.write( this._GetIFrameHtml() ) ;
  52. }
  53. else
  54. {
  55. var sWidth  = this.Width.toString().indexOf('%')  > 0 ? this.Width  : this.Width  + 'px' ;
  56. var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
  57. document.write('<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" wrap="virtual">' + this._HTMLEncode( this.Value ) + '</textarea>') ;
  58. }
  59. document.write( '</div>' ) ;
  60. }
  61. FCKeditor.prototype.ReplaceTextarea = function()
  62. {
  63. if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
  64. {
  65. var oTextarea = document.getElementById( this.InstanceName ) ;
  66. if ( !oTextarea )
  67. oTextarea = document.getElementsByName( this.InstanceName )[0] ;
  68. if ( !oTextarea || oTextarea.tagName != 'TEXTAREA' )
  69. {
  70. alert( 'Error: The TEXTAREA id "' + this.InstanceName + '" was not found' ) ;
  71. return ;
  72. }
  73. oTextarea.style.display = 'none' ;
  74. this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
  75. this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
  76. }
  77. }
  78. FCKeditor.prototype._InsertHtmlBefore = function( html, element )
  79. {
  80. if ( element.insertAdjacentHTML ) // IE
  81. element.insertAdjacentHTML( 'beforeBegin', html ) ;
  82. else // Gecko
  83. {
  84. var oRange = document.createRange() ;
  85. oRange.setStartBefore( element ) ;
  86. var oFragment = oRange.createContextualFragment( html );
  87. element.parentNode.insertBefore( oFragment, element ) ;
  88. }
  89. }
  90. FCKeditor.prototype._GetConfigHtml = function()
  91. {
  92. var sConfig = '' ;
  93. for ( var o in this.Config )
  94. {
  95. if ( sConfig.length > 0 ) sConfig += '&amp;' ;
  96. sConfig += escape(o) + '=' + escape( this.Config[o] ) ;
  97. }
  98. return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" />' ;
  99. }
  100. FCKeditor.prototype._GetIFrameHtml = function()
  101. {
  102. var sLink = this.BasePath + 'editor/fckeditor.html?InstanceName=' + this.InstanceName ;
  103. if (this.ToolbarSet) sLink += '&Toolbar=' + this.ToolbarSet ;
  104. return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="no" scrolling="no"></iframe>' ;
  105. }
  106. FCKeditor.prototype._IsCompatibleBrowser = function()
  107. {
  108. var sAgent = navigator.userAgent.toLowerCase() ;
  109. // Internet Explorer
  110. if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 )
  111. {
  112. var sBrowserVersion = navigator.appVersion.match(/MSIE (...)/)[1] ;
  113. return ( sBrowserVersion >= 5.5 ) ;
  114. }
  115. // Gecko
  116. else if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 )
  117. return true ;
  118. // Safari
  119. else if ( this.EnableSafari && sAgent.indexOf( 'safari' ) != -1 )
  120. return ( sAgent.match( /safari/(d+)/ )[1] >= 312 ) ; // Build must be at least 312 (1.3)
  121. else
  122. return false ;
  123. }
  124. FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
  125. {
  126. this.ErrorNumber = errorNumber ;
  127. this.ErrorDescription = errorDescription ;
  128. if ( this.DisplayErrors )
  129. {
  130. document.write( '<div style="COLOR: #ff0000">' ) ;
  131. document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
  132. document.write( '</div>' ) ;
  133. }
  134. if ( typeof( this.OnError ) == 'function' )
  135. this.OnError( this, errorNumber, errorDescription ) ;
  136. }
  137. FCKeditor.prototype._HTMLEncode = function( text )
  138. {
  139. if ( typeof( text ) != "string" )
  140. text = text.toString() ;
  141. text = text.replace(/&/g, "&amp;") ;
  142. text = text.replace(/"/g, "&quot;") ;
  143. text = text.replace(/</g, "&lt;") ;
  144. text = text.replace(/>/g, "&gt;") ;
  145. text = text.replace(/'/g, "&#39;") ;
  146. return text ;
  147. }