JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.2
[ckeditor.git] / _source / plugins / htmlwriter / plugin.js
index 5c4a7be..b4f766a 100644 (file)
@@ -57,12 +57,14 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                 */\r
                this.lineBreakChars = '\n';\r
 \r
-               this.forceSimpleAmpersand = false;\r
+               this.forceSimpleAmpersand = 0;\r
 \r
-               this.sortAttributes = true;\r
+               this.sortAttributes = 1;\r
 \r
-               this._.indent = false;\r
+               this._.indent = 0;\r
                this._.indentation = '';\r
+               // Indicate preformatted block context status. (#5789)\r
+               this._.inPre = 0;\r
                this._.rules = {};\r
 \r
                var dtd = CKEDITOR.dtd;\r
@@ -71,35 +73,35 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                {\r
                        this.setRules( e,\r
                                {\r
-                                       indent : true,\r
-                                       breakBeforeOpen : true,\r
-                                       breakAfterOpen : true,\r
+                                       indent : 1,\r
+                                       breakBeforeOpen : 1,\r
+                                       breakAfterOpen : 1,\r
                                        breakBeforeClose : !dtd[ e ][ '#' ],\r
-                                       breakAfterClose : true\r
+                                       breakAfterClose : 1\r
                                });\r
                }\r
 \r
                this.setRules( 'br',\r
                        {\r
-                               breakAfterOpen : true\r
+                               breakAfterOpen : 1\r
                        });\r
 \r
                this.setRules( 'title',\r
                        {\r
-                               indent : false,\r
-                               breakAfterOpen : false\r
+                               indent : 0,\r
+                               breakAfterOpen : 0\r
                        });\r
 \r
                this.setRules( 'style',\r
                        {\r
-                               indent : false,\r
-                               breakBeforeClose : true\r
+                               indent : 0,\r
+                               breakBeforeClose : 1\r
                        });\r
 \r
                // Disable indentation on <pre>.\r
                this.setRules( 'pre',\r
                        {\r
-                         indent: false\r
+                         indent : 0\r
                        });\r
        },\r
 \r
@@ -158,6 +160,7 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
 \r
                        if ( rules && rules.breakAfterOpen )\r
                                this.lineBreak();\r
+                       tagName == 'pre' && ( this._.inPre = 1 );\r
                },\r
 \r
                /**\r
@@ -171,8 +174,13 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                 */\r
                attribute : function( attName, attValue )\r
                {\r
-                       if ( this.forceSimpleAmpersand )\r
-                               attValue = attValue.replace( /&amp;/, '&' );\r
+\r
+                       if ( typeof attValue == 'string' )\r
+                       {\r
+                               this.forceSimpleAmpersand && ( attValue = attValue.replace( /&amp;/g, '&' ) );\r
+                               // Browsers don't always escape special character in attribute values. (#4683, #4719).\r
+                               attValue = CKEDITOR.tools.htmlEncodeAttr( attValue );\r
+                       }\r
 \r
                        this._.output.push( ' ', attName, '="', attValue, '"' );\r
                },\r
@@ -201,6 +209,7 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                        }\r
 \r
                        this._.output.push( '</', tagName, '>' );\r
+                       tagName == 'pre' && ( this._.inPre = 0 );\r
 \r
                        if ( rules && rules.breakAfterClose )\r
                                this.lineBreak();\r
@@ -218,7 +227,7 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                        if ( this._.indent )\r
                        {\r
                                this.indentation();\r
-                               text = CKEDITOR.tools.ltrim( text );\r
+                               !this._.inPre  && ( text = CKEDITOR.tools.ltrim( text ) );\r
                        }\r
 \r
                        this._.output.push( text );\r
@@ -247,9 +256,9 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                 */\r
                lineBreak : function()\r
                {\r
-                       if ( this._.output.length > 0 )\r
+                       if ( !this._.inPre && this._.output.length > 0 )\r
                                this._.output.push( this.lineBreakChars );\r
-                       this._.indent = true;\r
+                       this._.indent = 1;\r
                },\r
 \r
                /**\r
@@ -262,8 +271,9 @@ CKEDITOR.htmlWriter = CKEDITOR.tools.createClass(
                 */\r
                indentation : function()\r
                {\r
-                       this._.output.push( this._.indentation );\r
-                       this._.indent = false;\r
+                       if( !this._.inPre )\r
+                               this._.output.push( this._.indentation );\r
+                       this._.indent = 0;\r
                },\r
 \r
                /**\r