1 /*
  2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
  3 For licensing, see LICENSE.html or http://ckeditor.com/license
  4 */
  5
  6 /**
  7  * @fileOverview Contains the first and essential part of the {@link CKEDITOR}
  8  *		object definition.
  9  */
 10
 11 // #### Compressed Code
 12 // Must be updated on changes in the script, as well as updated in the
 13 // ckeditor_source.js and ckeditor_basic_source.js files.
 14
 15 // if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.0 RC',rev:'3753',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
 16
 17 // #### Raw code
 18 // ATTENTION: read the above "Compressed Code" notes when changing this code.
 19
 20 if ( !window.CKEDITOR )
 21 {
 22 	/**
 23 	 * This is the API entry point. The entire CKEditor code runs under this object.
 24 	 * @name CKEDITOR
 25 	 * @namespace
 26 	 * @example
 27 	 */
 28 	window.CKEDITOR = (function()
 29 	{
 30 		var CKEDITOR =
 31 		/** @lends CKEDITOR */
 32 		{
 33
 34 			/**
 35 			 * A constant string unique for each release of CKEditor. Its value
 36 			 * is used, by default, to build the URL for all resources loaded
 37 			 * by the editor code, guaranteing clean cache results when
 38 			 * upgrading.
 39 			 * @type String
 40 			 * @example
 41 			 * alert( CKEDITOR.timestamp );  // e.g. '87dm'
 42 			 */
 45 			// The production implementation contains a fixed timestamp, unique
 46 			// for each release, generated by the releaser.
 47 			// (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)
 48 			timestamp : '95MI',
 50
 51 			/**
 52 			 * Contains the CKEditor version number.
 53 			 * @type String
 54 			 * @example
 55 			 * alert( CKEDITOR.version );  // e.g. 'CKEditor 3.0 Beta'
 56 			 */
 57 			version : '3.0 RC',
 58
 59 			/**
 60 			 * Contains the CKEditor revision number.
 61 			 * Revision number is incremented automatically after each modification of CKEditor source code.
 62 			 * @type String
 63 			 * @example
 64 			 * alert( CKEDITOR.revision );  // e.g. '3975'
 65 			 */
 66 			revision : '3753',
 67
 68 			/**
 69 			 * Private object used to hold core stuff. It should not be used out of
 70 			 * the API code as properties defined here may change at any time
 71 			 * without notice.
 72 			 * @private
 73 			 */
 74 			_ : {},
 75
 76 			/**
 77 			 * Indicates the API loading status. The following status are available:
 78 			 *		<ul>
 79 			 *			<li><b>unloaded</b>: the API is not yet loaded.</li>
 80 			 *			<li><b>basic_loaded</b>: the basic API features are available.</li>
 81 			 *			<li><b>basic_ready</b>: the basic API is ready to load the full core code.</li>
 82 			 *			<li><b>loading</b>: the full API is being loaded.</li>
 83 			 *			<li><b>ready</b>: the API can be fully used.</li>
 84 			 *		</ul>
 85 			 * @type String
 86 			 * @example
 87 			 * if ( <b>CKEDITOR.status</b> == 'ready' )
 88 			 * {
 89 			 *     // The API can now be fully used.
 90 			 * }
 91 			 */
 92 			status : 'unloaded',
 93
 94 			/**
 95 			 * Contains the full URL for the CKEditor installation directory.
 96 			 * It's possible to manually provide the base path by setting a
 97 			 * global variable named CKEDITOR_BASEPATH. This global variable
 98 			 * must be set "before" the editor script loading.
 99 			 * @type String
100 			 * @example
101 			 * alert( <b>CKEDITOR.basePath</b> );  // "http://www.example.com/ckeditor/" (e.g.)
102 			 */
103 			basePath : (function()
104 			{
105 				// ATTENTION: fixes on this code must be ported to
106 				// var basePath in "core/loader.js".
107
108 				// Find out the editor directory path, based on its <script> tag.
109 				var path = window.CKEDITOR_BASEPATH || '';
110
111 				if ( !path )
112 				{
113 					var scripts = document.getElementsByTagName( 'script' );
114
115 					for ( var i = 0 ; i < scripts.length ; i++ )
116 					{
117 						var match = scripts[i].src.match( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i );
118
119 						if ( match )
120 						{
121 							path = match[1];
122 							break;
123 						}
124 					}
125 				}
126
127 				// In IE (only) the script.src string is the raw valued entered in the
128 				// HTML. Other browsers return the full resolved URL instead.
129 				if ( path.indexOf('://') == -1 )
130 				{
131 					// Absolute path.
132 					if ( path.indexOf( '/' ) === 0 )
133 						path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path;
134 					// Relative path.
135 					else
136 						path = location.href.match( /^[^\?]*\/(?:)/ )[0] + path;
137 				}
138
139 				return path;
140 			})(),
141
142 			/**
143 			 * Gets the full URL for CKEditor resources. By default, URLs
144 			 * returned by this function contains a querystring parameter ("t")
145 			 * set to the {@link CKEDITOR.timestamp} value.
146 			 * It's possible to provide a custom implementation to this
147 			 * function by setting a global variable named CKEDITOR_GETURL.
148 			 * This global variable must be set "before" the editor script
149 			 * loading. If the custom implementation returns nothing, the
150 			 * default implementation is used.
151 			 * @returns {String} The full URL.
152 			 * @example
153 			 * // e.g. http://www.example.com/ckeditor/skins/default/editor.css?t=87dm
154 			 * alert( CKEDITOR.getUrl( 'skins/default/editor.css' ) );
155 			 * @example
156 			 * // e.g. http://www.example.com/skins/default/editor.css?t=87dm
157 			 * alert( CKEDITOR.getUrl( '/skins/default/editor.css' ) );
158 			 * @example
159 			 * // e.g. http://www.somesite.com/skins/default/editor.css?t=87dm
160 			 * alert( CKEDITOR.getUrl( 'http://www.somesite.com/skins/default/editor.css' ) );
161 			 */
162 			getUrl : function( resource )
163 			{
164 				// If this is not a full or absolute path.
165 				if ( resource.indexOf('://') == -1 && resource.indexOf( '/' ) !== 0 )
166 					resource = this.basePath + resource;
167
168 				// Add the timestamp, except for directories.
169 				if ( this.timestamp && resource.charAt( resource.length - 1 ) != '/' )
170 					resource += ( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + this.timestamp;
171
172 				return resource;
173 			}
174 		};
175
176 		// Make it possible to override the getUrl function with a custom
177 		// implementation pointing to a global named CKEDITOR_GETURL.
178 		var newGetUrl = window.CKEDITOR_GETURL;
179 		if ( newGetUrl )
180 		{
181 			var originalGetUrl = CKEDITOR.getUrl;
182 			CKEDITOR.getUrl = function ( resource )
183 			{
184 				return newGetUrl.call( CKEDITOR, resource ) ||
185 					originalGetUrl.call( CKEDITOR, resource );
186 			};
187 		}
188
189 		return CKEDITOR;
190 	})();
191 }
192
193 // PACKAGER_RENAME( CKEDITOR )
194