JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / core / env.js
index 2e6a0ff..9b73aea 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -11,9 +11,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 if ( !CKEDITOR.env )\r
 {\r
        /**\r
-        * Environment and browser information.\r
-        * @namespace\r
-        * @example\r
+        * @namespace Environment and browser information.\r
         */\r
        CKEDITOR.env = (function()\r
        {\r
@@ -69,12 +67,52 @@ if ( !CKEDITOR.env )
                         */\r
                        mac     : ( agent.indexOf( 'macintosh' ) > -1 ),\r
 \r
+                       /**\r
+                        * Indicates that CKEditor is running on a quirks mode environemnt.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.quirks )\r
+                        *     alert( "Nooooo!" );\r
+                        */\r
                        quirks : ( document.compatMode == 'BackCompat' ),\r
 \r
+                       /**\r
+                        * Indicates that CKEditor is running on a mobile like environemnt.\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.mobile )\r
+                        *     alert( "I'm running with CKEditor today!" );\r
+                        */\r
+                       mobile : ( agent.indexOf( 'mobile' ) > -1 ),\r
+\r
+                       /**\r
+                        * Indicates that the browser has a custom domain enabled. This has\r
+                        * been set with "document.domain".\r
+                        * @returns {Boolean} "true" if a custom domain is enabled.\r
+                        * @example\r
+                        * if ( CKEDITOR.env.isCustomDomain() )\r
+                        *     alert( "I'm in a custom domain!" );\r
+                        */\r
                        isCustomDomain : function()\r
                        {\r
-                               return this.ie && document.domain != window.location.hostname;\r
-                       }\r
+                               if ( !this.ie )\r
+                                       return false;\r
+\r
+                               var domain = document.domain,\r
+                                       hostname = window.location.hostname;\r
+\r
+                               return domain != hostname &&\r
+                                       domain != ( '[' + hostname + ']' );     // IPv6 IP support (#5434)\r
+                       },\r
+\r
+                       /**\r
+                        * Indicates that page is running under an encrypted connection.\r
+                        * @returns {Boolean} "true" if the page has an encrypted connection.\r
+                        * @example\r
+                        * if ( CKEDITOR.env.secure )\r
+                        *     alert( "I'm in SSL!" );\r
+                        */\r
+                       secure : location.protocol == 'https:'\r
                };\r
 \r
                /**\r
@@ -96,19 +134,44 @@ if ( !CKEDITOR.env )
                        version = parseFloat( agent.match( /msie (\d+)/ )[1] );\r
 \r
                        /**\r
-                        *  Indicate IE8 browser.\r
+                        * Indicates that CKEditor is running on Internet Explorer 8.\r
+                        * @name CKEDITOR.env.ie8\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie8 )\r
+                        *     alert( "I'm on IE8!" );\r
                         */\r
                        env.ie8 = !!document.documentMode;\r
 \r
                        /**\r
-                        * Indicte IE8 document mode.\r
+                        * Indicates that CKEditor is running on Internet Explorer 8 on\r
+                        * standards mode.\r
+                        * @name CKEDITOR.env.ie8Compat\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie8Compat )\r
+                        *     alert( "Now I'm on IE8, for real!" );\r
                         */\r
                        env.ie8Compat = document.documentMode == 8;\r
 \r
                        /**\r
+                        * Indicates that CKEditor is running on Internet Explorer 9's standards mode.\r
+                        * @name CKEDITOR.env.ie9Compat\r
+                        * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie9Compat )\r
+                        *     alert( "IE9, the beauty of the web!" );\r
+                        */\r
+                       env.ie9Compat = document.documentMode == 9;\r
+\r
+                       /**\r
                         * Indicates that CKEditor is running on an IE7-like environment, which\r
                         * includes IE7 itself and IE8's IE7 document mode.\r
+                        * @name CKEDITOR.env.ie7Compat\r
                         * @type Boolean\r
+                        * @example\r
+                        * if ( CKEDITOR.env.ie8Compat )\r
+                        *     alert( "I'm on IE7 or on an IE7 like IE8!" );\r
                         */\r
                        env.ie7Compat = ( ( version == 7 && !document.documentMode )\r
                                        || document.documentMode == 7 );\r
@@ -116,13 +179,13 @@ if ( !CKEDITOR.env )
                        /**\r
                         * Indicates that CKEditor is running on an IE6-like environment, which\r
                         * includes IE6 itself and IE7 and IE8 quirks mode.\r
+                        * @name CKEDITOR.env.ie6Compat\r
                         * @type Boolean\r
                         * @example\r
                         * if ( CKEDITOR.env.ie6Compat )\r
                         *     alert( "I'm on IE6 or quirks mode!" );\r
                         */\r
                        env.ie6Compat = ( version < 7 || env.quirks );\r
-\r
                }\r
 \r
                // Gecko.\r
@@ -151,12 +214,12 @@ if ( !CKEDITOR.env )
                        version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );\r
 \r
                /**\r
-                * Contains the browser version.\r
-                *\r
+                * Contains the browser version.<br />\r
+                * <br />\r
                 * For gecko based browsers (like Firefox) it contains the revision\r
                 * number with first three parts concatenated with a padding zero\r
-                * (e.g. for revision 1.9.0.2 we have 10900).\r
-                *\r
+                * (e.g. for revision 1.9.0.2 we have 10900).<br />\r
+                * <br />\r
                 * For webkit based browser (like Safari and Chrome) it contains the\r
                 * WebKit build version (e.g. 522).\r
                 * @name CKEDITOR.env.version\r
@@ -176,21 +239,27 @@ if ( !CKEDITOR.env )
                 *     alert( "Your browser is pretty cool!" );\r
                 */\r
                env.isCompatible =\r
+                       !env.mobile && (\r
                        ( env.ie && version >= 6 ) ||\r
                        ( env.gecko && version >= 10801 ) ||\r
                        ( env.opera && version >= 9.5 ) ||\r
                        ( env.air && version >= 1 ) ||\r
                        ( env.webkit && version >= 522 ) ||\r
-                       false;\r
+                       false );\r
 \r
-               // The CSS class to be appended on the main UI containers, making it\r
-               // easy to apply browser specific styles to it.\r
+               /**\r
+                * The CSS class to be appended on the main UI containers, making it\r
+                * easy to apply browser specific styles to it.\r
+                * @name CKEDITOR.env.cssClass\r
+                * @type String\r
+                * @example\r
+                * myDiv.className = CKEDITOR.env.cssClass;\r
+                */\r
                env.cssClass =\r
                        'cke_browser_' + (\r
                                env.ie ? 'ie' :\r
                                env.gecko ? 'gecko' :\r
                                env.opera ? 'opera' :\r
-                               env.air ? 'air' :\r
                                env.webkit ? 'webkit' :\r
                                'unknown' );\r
 \r
@@ -201,7 +270,7 @@ if ( !CKEDITOR.env )
                {\r
                        env.cssClass += ' cke_browser_ie' + (\r
                                env.version < 7 ? '6' :\r
-                               env.version >= 8 ? '8' :\r
+                               env.version >= 8 ? document.documentMode:\r
                                '7' );\r
 \r
                        if ( env.quirks )\r
@@ -211,6 +280,9 @@ if ( !CKEDITOR.env )
                if ( env.gecko && version < 10900 )\r
                        env.cssClass += ' cke_browser_gecko18';\r
 \r
+               if ( env.air )\r
+                       env.cssClass += ' cke_browser_air';\r
+\r
                return env;\r
        })();\r
 }\r