diff options
Diffstat (limited to 'httemplate/elements/fckeditor/fckeditor.js')
-rw-r--r-- | httemplate/elements/fckeditor/fckeditor.js | 162 |
1 files changed, 139 insertions, 23 deletions
diff --git a/httemplate/elements/fckeditor/fckeditor.js b/httemplate/elements/fckeditor/fckeditor.js index 63ec41f80..8e0126bae 100644 --- a/httemplate/elements/fckeditor/fckeditor.js +++ b/httemplate/elements/fckeditor/fckeditor.js @@ -1,6 +1,6 @@ /*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
@@ -34,11 +34,9 @@ var FCKeditor = function( instanceName, width, height, toolbarSet, value ) this.Height = height || '200' ;
this.ToolbarSet = toolbarSet || 'Default' ;
this.Value = value || '' ;
- this.BasePath = '/fckeditor/' ;
+ this.BasePath = FCKeditor.BasePath ;
this.CheckBrowser = true ;
this.DisplayErrors = true ;
- this.EnableSafari = false ; // This is a temporary property, while Safari support is under development.
- this.EnableOpera = false ; // This is a temporary property, while Opera support is under development.
this.Config = new Object() ;
@@ -46,8 +44,23 @@ var FCKeditor = function( instanceName, width, height, toolbarSet, value ) this.OnError = null ; // function( source, errorNumber, errorDescription )
}
-FCKeditor.prototype.Version = '2.4.3' ;
-FCKeditor.prototype.VersionBuild = '15657' ;
+/**
+ * This is the default BasePath used by all editor instances.
+ */
+FCKeditor.BasePath = '/fckeditor/' ;
+
+/**
+ * The minimum height used when replacing textareas.
+ */
+FCKeditor.MinHeight = 200 ;
+
+/**
+ * The minimum width used when replacing textareas.
+ */
+FCKeditor.MinWidth = 750 ;
+
+FCKeditor.prototype.Version = '2.6.6' ;
+FCKeditor.prototype.VersionBuild = '25427' ;
FCKeditor.prototype.Create = function()
{
@@ -63,7 +76,7 @@ FCKeditor.prototype.CreateHtml = function() return '' ;
}
- var sHtml = '<div>' ;
+ var sHtml = '' ;
if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
{
@@ -75,16 +88,26 @@ FCKeditor.prototype.CreateHtml = function() {
var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ;
var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
- sHtml += '<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="width:' + sWidth + ';height:' + sHeight + '">' + this._HTMLEncode( this.Value ) + '<\/textarea>' ;
- }
- sHtml += '</div>' ;
+ sHtml += '<textarea name="' + this.InstanceName +
+ '" rows="4" cols="40" style="width:' + sWidth +
+ ';height:' + sHeight ;
+
+ if ( this.TabIndex )
+ sHtml += '" tabindex="' + this.TabIndex ;
+
+ sHtml += '">' +
+ this._HTMLEncode( this.Value ) +
+ '<\/textarea>' ;
+ }
return sHtml ;
}
FCKeditor.prototype.ReplaceTextarea = function()
{
+ if ( document.getElementById( this.InstanceName + '___Frame' ) )
+ return ;
if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
{
// We must check the elements firstly using the Id and then the name.
@@ -105,6 +128,10 @@ FCKeditor.prototype.ReplaceTextarea = function() }
oTextarea.style.display = 'none' ;
+
+ if ( oTextarea.tabIndex )
+ this.TabIndex = oTextarea.tabIndex ;
+
this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
}
@@ -147,14 +174,25 @@ FCKeditor.prototype._GetIFrameHtml = function() catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ;
- if (this.ToolbarSet) sLink += '&Toolbar=' + this.ToolbarSet ;
+ if (this.ToolbarSet)
+ sLink += '&Toolbar=' + this.ToolbarSet ;
+
+ var html = '<iframe id="' + this.InstanceName +
+ '___Frame" src="' + sLink +
+ '" width="' + this.Width +
+ '" height="' + this.Height ;
+
+ if ( this.TabIndex )
+ html += '" tabindex="' + this.TabIndex ;
+
+ html += '" frameborder="0" scrolling="no"></iframe>' ;
- return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="0" scrolling="no"></iframe>' ;
+ return html ;
}
FCKeditor.prototype._IsCompatibleBrowser = function()
{
- return FCKeditor_IsCompatibleBrowser( this.EnableSafari, this.EnableOpera ) ;
+ return FCKeditor_IsCompatibleBrowser() ;
}
FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
@@ -187,12 +225,84 @@ FCKeditor.prototype._HTMLEncode = function( text ) return text ;
}
-function FCKeditor_IsCompatibleBrowser( enableSafari, enableOpera )
+;(function()
+{
+ var textareaToEditor = function( textarea )
+ {
+ var editor = new FCKeditor( textarea.name ) ;
+
+ editor.Width = Math.max( textarea.offsetWidth, FCKeditor.MinWidth ) ;
+ editor.Height = Math.max( textarea.offsetHeight, FCKeditor.MinHeight ) ;
+
+ return editor ;
+ }
+
+ /**
+ * Replace all <textarea> elements available in the document with FCKeditor
+ * instances.
+ *
+ * // Replace all <textarea> elements in the page.
+ * FCKeditor.ReplaceAllTextareas() ;
+ *
+ * // Replace all <textarea class="myClassName"> elements in the page.
+ * FCKeditor.ReplaceAllTextareas( 'myClassName' ) ;
+ *
+ * // Selectively replace <textarea> elements, based on custom assertions.
+ * FCKeditor.ReplaceAllTextareas( function( textarea, editor )
+ * {
+ * // Custom code to evaluate the replace, returning false if it
+ * // must not be done.
+ * // It also passes the "editor" parameter, so the developer can
+ * // customize the instance.
+ * } ) ;
+ */
+ FCKeditor.ReplaceAllTextareas = function()
+ {
+ var textareas = document.getElementsByTagName( 'textarea' ) ;
+
+ for ( var i = 0 ; i < textareas.length ; i++ )
+ {
+ var editor = null ;
+ var textarea = textareas[i] ;
+ var name = textarea.name ;
+
+ // The "name" attribute must exist.
+ if ( !name || name.length == 0 )
+ continue ;
+
+ if ( typeof arguments[0] == 'string' )
+ {
+ // The textarea class name could be passed as the function
+ // parameter.
+
+ var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' ) ;
+
+ if ( !classRegex.test( textarea.className ) )
+ continue ;
+ }
+ else if ( typeof arguments[0] == 'function' )
+ {
+ // An assertion function could be passed as the function parameter.
+ // It must explicitly return "false" to ignore a specific <textarea>.
+ editor = textareaToEditor( textarea ) ;
+ if ( arguments[0]( textarea, editor ) === false )
+ continue ;
+ }
+
+ if ( !editor )
+ editor = textareaToEditor( textarea ) ;
+
+ editor.ReplaceTextarea() ;
+ }
+ }
+})() ;
+
+function FCKeditor_IsCompatibleBrowser()
{
var sAgent = navigator.userAgent.toLowerCase() ;
- // Internet Explorer
- if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 )
+ // Internet Explorer 5.5+
+ if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 )
{
var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
return ( sBrowserVersion >= 5.5 ) ;
@@ -202,13 +312,19 @@ function FCKeditor_IsCompatibleBrowser( enableSafari, enableOpera ) if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) )
return true ;
- // Opera
- if ( enableOpera && sAgent.indexOf( 'opera' ) == 0 && parseInt( navigator.appVersion, 10 ) >= 9 )
- return true ;
+ // Opera 9.50+
+ if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 )
+ return true ;
+
+ // Adobe AIR
+ // Checked before Safari because AIR have the WebKit rich text editor
+ // features from Safari 3.0.4, but the version reported is 420.
+ if ( sAgent.indexOf( ' adobeair/' ) != -1 )
+ return ( sAgent.match( / adobeair\/(\d+)/ )[1] >= 1 ) ; // Build must be at least v1
- // Safari
- if ( enableSafari && sAgent.indexOf( 'safari' ) != -1 )
- return ( sAgent.match( /safari\/(\d+)/ )[1] >= 312 ) ; // Build must be at least 312 (1.3)
+ // Safari 3+
+ if ( sAgent.indexOf( ' applewebkit/' ) != -1 )
+ return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ; // Build must be at least 522 (v3)
return false ;
-}
\ No newline at end of file +}
|