2 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
7 * @fileOverview Defines the {@link CKEDITOR.env} object, which constains
\r
8 * environment and browser information.
\r
11 if ( !CKEDITOR.env )
\r
14 * @namespace Environment and browser information.
\r
16 CKEDITOR.env = (function()
\r
18 var agent = navigator.userAgent.toLowerCase();
\r
19 var opera = window.opera;
\r
22 /** @lends CKEDITOR.env */
\r
25 * Indicates that CKEditor is running on Internet Explorer.
\r
28 * if ( CKEDITOR.env.ie )
\r
29 * alert( "I'm on IE!" );
\r
31 ie : /*@cc_on!@*/false,
\r
34 * Indicates that CKEditor is running on Opera.
\r
37 * if ( CKEDITOR.env.opera )
\r
38 * alert( "I'm on Opera!" );
\r
40 opera : ( !!opera && opera.version ),
\r
43 * Indicates that CKEditor is running on a WebKit based browser, like
\r
47 * if ( CKEDITOR.env.webkit )
\r
48 * alert( "I'm on WebKit!" );
\r
50 webkit : ( agent.indexOf( ' applewebkit/' ) > -1 ),
\r
53 * Indicates that CKEditor is running on Adobe AIR.
\r
56 * if ( CKEDITOR.env.air )
\r
57 * alert( "I'm on AIR!" );
\r
59 air : ( agent.indexOf( ' adobeair/' ) > -1 ),
\r
62 * Indicates that CKEditor is running on Macintosh.
\r
65 * if ( CKEDITOR.env.mac )
\r
66 * alert( "I love apples!" );
\r
68 mac : ( agent.indexOf( 'macintosh' ) > -1 ),
\r
71 * Indicates that CKEditor is running on a quirks mode environemnt.
\r
74 * if ( CKEDITOR.env.quirks )
\r
75 * alert( "Nooooo!" );
\r
77 quirks : ( document.compatMode == 'BackCompat' ),
\r
80 * Indicates that CKEditor is running on a mobile like environemnt.
\r
83 * if ( CKEDITOR.env.mobile )
\r
84 * alert( "I'm running with CKEditor today!" );
\r
86 mobile : ( agent.indexOf( 'mobile' ) > -1 ),
\r
89 * Indicates that CKEditor is running on Apple iPhone/iPad/iPod devices.
\r
92 * if ( CKEDITOR.env.iOS )
\r
93 * alert( "I like little apples!" );
\r
95 iOS : /(ipad|iphone|ipod)/.test(agent),
\r
98 * Indicates that the browser has a custom domain enabled. This has
\r
99 * been set with "document.domain".
\r
100 * @returns {Boolean} "true" if a custom domain is enabled.
\r
102 * if ( CKEDITOR.env.isCustomDomain() )
\r
103 * alert( "I'm in a custom domain!" );
\r
105 isCustomDomain : function()
\r
110 var domain = document.domain,
\r
111 hostname = window.location.hostname;
\r
113 return domain != hostname &&
\r
114 domain != ( '[' + hostname + ']' ); // IPv6 IP support (#5434)
\r
118 * Indicates that page is running under an encrypted connection.
\r
119 * @returns {Boolean} "true" if the page has an encrypted connection.
\r
121 * if ( CKEDITOR.env.secure )
\r
122 * alert( "I'm in SSL!" );
\r
124 secure : location.protocol == 'https:'
\r
128 * Indicates that CKEditor is running on a Gecko based browser, like
\r
130 * @name CKEDITOR.env.gecko
\r
133 * if ( CKEDITOR.env.gecko )
\r
134 * alert( "I'm riding a gecko!" );
\r
136 env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera );
\r
140 // Internet Explorer 6.0+
\r
143 version = parseFloat( agent.match( /msie (\d+)/ )[1] );
\r
146 * Indicates that CKEditor is running on Internet Explorer 8.
\r
147 * @name CKEDITOR.env.ie8
\r
150 * if ( CKEDITOR.env.ie8 )
\r
151 * alert( "I'm on IE8!" );
\r
153 env.ie8 = !!document.documentMode;
\r
156 * Indicates that CKEditor is running on Internet Explorer 8 on
\r
158 * @name CKEDITOR.env.ie8Compat
\r
161 * if ( CKEDITOR.env.ie8Compat )
\r
162 * alert( "Now I'm on IE8, for real!" );
\r
164 env.ie8Compat = document.documentMode == 8;
\r
167 * Indicates that CKEditor is running on Internet Explorer 9's standards mode.
\r
168 * @name CKEDITOR.env.ie9Compat
\r
171 * if ( CKEDITOR.env.ie9Compat )
\r
172 * alert( "IE9, the beauty of the web!" );
\r
174 env.ie9Compat = document.documentMode == 9;
\r
177 * Indicates that CKEditor is running on an IE7-like environment, which
\r
178 * includes IE7 itself and IE8's IE7 document mode.
\r
179 * @name CKEDITOR.env.ie7Compat
\r
182 * if ( CKEDITOR.env.ie8Compat )
\r
183 * alert( "I'm on IE7 or on an IE7 like IE8!" );
\r
185 env.ie7Compat = ( ( version == 7 && !document.documentMode )
\r
186 || document.documentMode == 7 );
\r
189 * Indicates that CKEditor is running on an IE6-like environment, which
\r
190 * includes IE6 itself and IE7 and IE8 quirks mode.
\r
191 * @name CKEDITOR.env.ie6Compat
\r
194 * if ( CKEDITOR.env.ie6Compat )
\r
195 * alert( "I'm on IE6 or quirks mode!" );
\r
197 env.ie6Compat = ( version < 7 || env.quirks );
\r
203 var geckoRelease = agent.match( /rv:([\d\.]+)/ );
\r
204 if ( geckoRelease )
\r
206 geckoRelease = geckoRelease[1].split( '.' );
\r
207 version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1;
\r
213 version = parseFloat( opera.version() );
\r
216 // Checked before Safari because AIR have the WebKit rich text editor
\r
217 // features from Safari 3.0.4, but the version reported is 420.
\r
219 version = parseFloat( agent.match( / adobeair\/(\d+)/ )[1] );
\r
221 // WebKit 522+ (Safari 3+)
\r
223 version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );
\r
226 * Contains the browser version.<br />
\r
228 * For gecko based browsers (like Firefox) it contains the revision
\r
229 * number with first three parts concatenated with a padding zero
\r
230 * (e.g. for revision 1.9.0.2 we have 10900).<br />
\r
232 * For webkit based browser (like Safari and Chrome) it contains the
\r
233 * WebKit build version (e.g. 522).
\r
234 * @name CKEDITOR.env.version
\r
237 * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 )
\r
238 * alert( "Ouch!" );
\r
240 env.version = version;
\r
243 * Indicates that CKEditor is running on a compatible browser.
\r
244 * @name CKEDITOR.env.isCompatible
\r
247 * if ( CKEDITOR.env.isCompatible )
\r
248 * alert( "Your browser is pretty cool!" );
\r
252 // White list of mobile devices that supports.
\r
253 env.iOS && version >= 534 ||
\r
257 ( env.ie && version >= 6 ) ||
\r
258 ( env.gecko && version >= 10801 ) ||
\r
259 ( env.opera && version >= 9.5 ) ||
\r
260 ( env.air && version >= 1 ) ||
\r
261 ( env.webkit && version >= 522 ) ||
\r
265 * The CSS class to be appended on the main UI containers, making it
\r
266 * easy to apply browser specific styles to it.
\r
267 * @name CKEDITOR.env.cssClass
\r
270 * myDiv.className = CKEDITOR.env.cssClass;
\r
275 env.gecko ? 'gecko' :
\r
276 env.opera ? 'opera' :
\r
277 env.webkit ? 'webkit' :
\r
281 env.cssClass += ' cke_browser_quirks';
\r
285 env.cssClass += ' cke_browser_ie' + (
\r
286 env.version < 7 ? '6' :
\r
287 env.version >= 8 ? document.documentMode:
\r
291 env.cssClass += ' cke_browser_iequirks';
\r
294 if ( env.gecko && version < 10900 )
\r
295 env.cssClass += ' cke_browser_gecko18';
\r
298 env.cssClass += ' cke_browser_air';
\r
304 // PACKAGER_RENAME( CKEDITOR.env )
\r
305 // PACKAGER_RENAME( CKEDITOR.env.ie )
\r