2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3 For licensing, see LICENSE.html or http://ckeditor.com/license
7 * @fileOverview Defines the {@link CKEDITOR.env} object, which constains
8 * environment and browser information.
14 * @namespace Environment and browser information.
16 CKEDITOR
.env
= (function()
18 var agent
= navigator
.userAgent
.toLowerCase();
19 var opera
= window
.opera
;
22 /** @lends CKEDITOR.env */
25 * Indicates that CKEditor is running on Internet Explorer.
28 * if ( CKEDITOR.env.ie )
29 * alert( "I'm on IE!" );
31 ie
: /*@cc_on!@*/false,
34 * Indicates that CKEditor is running on Opera.
37 * if ( CKEDITOR.env.opera )
38 * alert( "I'm on Opera!" );
40 opera
: ( !!opera
&& opera
.version
),
43 * Indicates that CKEditor is running on a WebKit based browser, like
47 * if ( CKEDITOR.env.webkit )
48 * alert( "I'm on WebKit!" );
50 webkit
: ( agent
.indexOf( ' applewebkit/' ) > -1 ),
53 * Indicates that CKEditor is running on Adobe AIR.
56 * if ( CKEDITOR.env.air )
57 * alert( "I'm on AIR!" );
59 air
: ( agent
.indexOf( ' adobeair/' ) > -1 ),
62 * Indicates that CKEditor is running on Macintosh.
65 * if ( CKEDITOR.env.mac )
66 * alert( "I love apples!" );
68 mac
: ( agent
.indexOf( 'macintosh' ) > -1 ),
71 * Indicates that CKEditor is running on a quirks mode environemnt.
74 * if ( CKEDITOR.env.quirks )
77 quirks
: ( document
.compatMode
== 'BackCompat' ),
80 * Indicates that CKEditor is running on a mobile like environemnt.
83 * if ( CKEDITOR.env.mobile )
84 * alert( "I'm running with CKEditor today!" );
86 mobile
: ( agent
.indexOf( 'mobile' ) > -1 ),
89 * Indicates that the browser has a custom domain enabled. This has
90 * been set with "document.domain".
91 * @returns {Boolean} "true" if a custom domain is enabled.
93 * if ( CKEDITOR.env.isCustomDomain() )
94 * alert( "I'm in a custom domain!" );
96 isCustomDomain : function()
101 var domain
= document
.domain
,
102 hostname
= window
.location
.hostname
;
104 return domain
!= hostname
&&
105 domain
!= ( '[' + hostname
+ ']' ); // IPv6 IP support (#5434)
109 * Indicates that page is running under an encrypted connection.
110 * @returns {Boolean} "true" if the page has an encrypted connection.
112 * if ( CKEDITOR.env.secure )
113 * alert( "I'm in SSL!" );
115 secure
: location
.protocol
== 'https:'
119 * Indicates that CKEditor is running on a Gecko based browser, like
121 * @name CKEDITOR.env.gecko
124 * if ( CKEDITOR.env.gecko )
125 * alert( "I'm riding a gecko!" );
127 env
.gecko
= ( navigator
.product
== 'Gecko' && !env
.webkit
&& !env
.opera
);
131 // Internet Explorer 6.0+
134 version
= parseFloat( agent
.match( /msie (\d+)/ )[1] );
137 * Indicates that CKEditor is running on Internet Explorer 8.
138 * @name CKEDITOR.env.ie8
141 * if ( CKEDITOR.env.ie8 )
142 * alert( "I'm on IE8!" );
144 env
.ie8
= !!document
.documentMode
;
147 * Indicates that CKEditor is running on Internet Explorer 8 on
149 * @name CKEDITOR.env.ie8Compat
152 * if ( CKEDITOR.env.ie8Compat )
153 * alert( "Now I'm on IE8, for real!" );
155 env
.ie8Compat
= document
.documentMode
== 8;
158 * Indicates that CKEditor is running on Internet Explorer 9's standards mode.
159 * @name CKEDITOR.env.ie9Compat
162 * if ( CKEDITOR.env.ie9Compat )
163 * alert( "IE9, the beauty of the web!" );
165 env
.ie9Compat
= document
.documentMode
== 9;
168 * Indicates that CKEditor is running on an IE7-like environment, which
169 * includes IE7 itself and IE8's IE7 document mode.
170 * @name CKEDITOR.env.ie7Compat
173 * if ( CKEDITOR.env.ie8Compat )
174 * alert( "I'm on IE7 or on an IE7 like IE8!" );
176 env
.ie7Compat
= ( ( version
== 7 && !document
.documentMode
)
177 || document
.documentMode
== 7 );
180 * Indicates that CKEditor is running on an IE6-like environment, which
181 * includes IE6 itself and IE7 and IE8 quirks mode.
182 * @name CKEDITOR.env.ie6Compat
185 * if ( CKEDITOR.env.ie6Compat )
186 * alert( "I'm on IE6 or quirks mode!" );
188 env
.ie6Compat
= ( version
< 7 || env
.quirks
);
194 var geckoRelease
= agent
.match( /rv:([\d\.]+)/ );
197 geckoRelease
= geckoRelease
[1].split( '.' );
198 version
= geckoRelease
[0] * 10000 + ( geckoRelease
[1] || 0 ) * 100 + ( geckoRelease
[2] || 0 ) * 1;
204 version
= parseFloat( opera
.version() );
207 // Checked before Safari because AIR have the WebKit rich text editor
208 // features from Safari 3.0.4, but the version reported is 420.
210 version
= parseFloat( agent
.match( / adobeair
\/(\d+)/ )[1] );
212 // WebKit 522+ (Safari 3+)
214 version
= parseFloat( agent
.match( / applewebkit
\/(\d+)/ )[1] );
217 * Contains the browser version.<br />
219 * For gecko based browsers (like Firefox) it contains the revision
220 * number with first three parts concatenated with a padding zero
221 * (e.g. for revision 1.9.0.2 we have 10900).<br />
223 * For webkit based browser (like Safari and Chrome) it contains the
224 * WebKit build version (e.g. 522).
225 * @name CKEDITOR.env.version
228 * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 )
231 env
.version
= version
;
234 * Indicates that CKEditor is running on a compatible browser.
235 * @name CKEDITOR.env.isCompatible
238 * if ( CKEDITOR.env.isCompatible )
239 * alert( "Your browser is pretty cool!" );
243 ( env
.ie
&& version
>= 6 ) ||
244 ( env
.gecko
&& version
>= 10801 ) ||
245 ( env
.opera
&& version
>= 9.5 ) ||
246 ( env
.air
&& version
>= 1 ) ||
247 ( env
.webkit
&& version
>= 522 ) ||
251 * The CSS class to be appended on the main UI containers, making it
252 * easy to apply browser specific styles to it.
253 * @name CKEDITOR.env.cssClass
256 * myDiv.className = CKEDITOR.env.cssClass;
261 env
.gecko
? 'gecko' :
262 env
.opera
? 'opera' :
263 env
.webkit
? 'webkit' :
267 env
.cssClass
+= ' cke_browser_quirks';
271 env
.cssClass
+= ' cke_browser_ie' + (
272 env
.version
< 7 ? '6' :
273 env
.version
>= 8 ? document
.documentMode
:
277 env
.cssClass
+= ' cke_browser_iequirks';
280 if ( env
.gecko
&& version
< 10900 )
281 env
.cssClass
+= ' cke_browser_gecko18';
284 env
.cssClass
+= ' cke_browser_air';
290 // PACKAGER_RENAME( CKEDITOR.env )
291 // PACKAGER_RENAME( CKEDITOR.env.ie )