Skip to content

Commit

Permalink
Merge branch 't/16833' into major
Browse files Browse the repository at this point in the history
  • Loading branch information
mlewand committed Feb 2, 2017
2 parents cde07f1 + e3da7df commit 2d07c87
Show file tree
Hide file tree
Showing 17 changed files with 1,839 additions and 67 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ New Features:

Fixed Issues:

* [#16833](http://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](http://ckeditor.com/addon/pastefromword).
* [#16826](http://dev.ckeditor.com/ticket/16826): Fixed: Superfluous paragraphs within lists [pasted from Word](http://ckeditor.com/addon/pastefromword) in IE.
* [#16811](http://dev.ckeditor.com/ticket/16811): Fixed: Pasted from Word table alignment not preserved.
* [#16810](http://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables not supported by [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin.
Expand Down
99 changes: 97 additions & 2 deletions plugins/pastefromword/filter/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,31 @@

Style.createStyleStack( element, filter, editor );
},
'h2': function( element ) {
if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element );

Style.createStyleStack( element, filter, editor );
},
'h3': function( element ) {
if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element );

Style.createStyleStack( element, filter, editor );
},
'h4': function( element ) {
if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element );

Style.createStyleStack( element, filter, editor );
},
'h5': function( element ) {
if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element );

Style.createStyleStack( element, filter, editor );
},
'h6': function( element ) {
if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element );

Style.createStyleStack( element, filter, editor );
},
'font': function( element ) {
if ( element.getHtml().match( /^\s*$/ ) ) {
new CKEDITOR.htmlParser.text( ' ' ).insertAfter( element );
Expand Down Expand Up @@ -187,6 +212,8 @@
return false;
},
'li': function( element ) {
Heuristics.correctLevelShift( element );

if ( !msoListsDetected ) {
return;
}
Expand Down Expand Up @@ -1673,7 +1700,14 @@
return false;
}

return item.attributes.style && !item.attributes.style.match( /mso\-list/ ) && !!item.find( function( child ) {
return !!item.attributes[ 'cke-list-level' ] || ( item.attributes.style && !item.attributes.style.match( /mso\-list/ ) && !!item.find( function( child ) {
// In rare cases there's no indication that a heading is a list item other than
// the fact that it has a child element containing only a list symbol.
if ( child.type == CKEDITOR.NODE_ELEMENT && item.name.match( /h\d/i ) &&
child.getHtml().match( /^[a-zA-Z0-9]+?[\.\)]$/ ) ) {
return true;
}

var css = tools.parseCssText( child.attributes && child.attributes.style );

if ( !css ) {
Expand All @@ -1684,7 +1718,7 @@

return ( fontSize.match( /7pt/i ) && !!child.previous ) ||
fontFamily.match( /symbol/i );
}, true ).length;
}, true ).length );
},

/**
Expand Down Expand Up @@ -1774,6 +1808,67 @@
*/
guessIndentationStep: function( indentations ) {
return indentations.length ? Math.min.apply( null, indentations ) : null;
},

/**
* Shifts lists that were deformed during pasting one level down
* so that the list structure matches the content copied from Word.
*
* @param {CKEDITOR.htmlParser.element} element
* @private
* */
correctLevelShift: function( element ) {
var isShiftedList = function( list ) {
return list.children && list.children.length == 1 && Heuristics.isShifted( list.children[ 0 ] );
};

if ( this.isShifted( element ) ) {
var lists = CKEDITOR.tools.array.filter( element.children, function( child ) {
return ( child.name == 'ul' || child.name == 'ol' );
} );

var listChildren = CKEDITOR.tools.array.reduce( lists, function( acc, list ) {
var preceding = isShiftedList( list ) ? [ list ] : list.children;
return preceding.concat( acc );
}, [] );

CKEDITOR.tools.array.forEach( lists, function( list ) {
list.remove();
} );

CKEDITOR.tools.array.forEach( listChildren, function( child ) {
element.add( child, 0 );
} );

delete element.name;
}
},

/**
* Determines if the list is malformed in a manner that its items
* are one level deeper than they should be.
*
* @param {CKEDITOR.htmlParser.element} element
* @returns {Boolean}
* @private
*/
isShifted: function( element ) {
if ( element.name !== 'li' ) {
return false;
}

return CKEDITOR.tools.array.filter( element.children, function( child ) {
if ( child.name ) {
if ( child.name == 'ul' || child.name == 'ol' ) {
return false;
}

if ( child.name == 'p' && child.children.length === 0 ) {
return false;
}
}
return true;
} ).length === 0;
}
};

Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<p>numbered list with headings</p>
<ol>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:24.0pt">
<span style="font-family:&quot;times new roman&quot;,serif">heading 1 text with times new roman font and size 24</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:18.0pt">
<span style="font-family:&quot;georgia&quot;,serif">heading 2&nbsp; text with georgia font and size 18</span>
</span>
</span>
<ol style="list-style-type:lower-alpha">
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:14.0pt">
<span style="font-family:&quot;trebuchet ms&quot;,sans-serif">
<span style="color:red">first line with trebuchet ms font and size 14</span>
</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:14.0pt">
<span style="font-family:&quot;comic sans ms&quot;">
<span style="color:green">second line with comic sans ms font and size 14</span>
</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:16.0pt">
<span style="font-family:&quot;lucida sans unicode&quot;,sans-serif">
<span style="color:aqua">third line with lucida sans unicode and size 16</span>
</span>
</span>
</span>
</li>
</ol>
</li>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:18.0pt">heading 3 text with arial font and size 18</span>
</span>
</li>
</ol>
<p></p>
<p></p>
<p>bulleted list with headings</p>
<ul>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:24.0pt">
<span style="font-family:&quot;times new roman&quot;,serif">heading 1 text with times new roman font and size 24</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:18.0pt">
<span style="font-family:&quot;georgia&quot;,serif">heading 2&nbsp; text with georgia font and size 18</span>
</span>
</span>
<ul style="list-style-type:circle">
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:14.0pt">
<span style="font-family:&quot;trebuchet ms&quot;,sans-serif">
<span style="color:red">first sub line with trebuchet ms font and size 14</span>
</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:14.0pt">
<span style="font-family:&quot;comic sans ms&quot;">
<span style="color:green">second sub line with comic sans ms font and size 14</span>
</span>
</span>
</span>
</li>
<li>
<span style="tab-stops:list 1.0in">
<span lang="en-gb" style="font-size:16.0pt">
<span style="font-family:&quot;lucida sans unicode&quot;,sans-serif">
<span style="color:aqua">third sub line with lucida sans unicode and size 16</span>
</span>
</span>
</span>
</li>
</ul>
</li>
<li>
<span style="tab-stops:list .5in">
<span lang="en-gb" style="font-size:18.0pt">heading 3 text with arial font and size 18</span>
</span>
</li>
</ul>
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@



<p class=MsoNormal>Numbered List with Headings<span lang=EN-GB
style='font-size:24.0pt;mso-ansi-language:EN-GB'><o:p></o:p></span></p>

<h1 style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
24.0pt;font-family:"Times New Roman",serif;mso-ansi-language:EN-GB'><span
style='mso-list:Ignore'>1.</span></span><![endif]><span lang=EN-GB
style='font-size:24.0pt;font-family:"Times New Roman",serif;mso-ansi-language:
EN-GB'>Heading 1 Text with Times New Roman Font and Size 24<o:p></o:p></span></h1>

<h2 style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
18.0pt;font-family:"Georgia",serif;mso-fareast-font-family:Georgia;mso-bidi-font-family:
Georgia;mso-ansi-language:EN-GB'><span style='mso-list:Ignore'>2.<span
style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span
lang=EN-GB style='font-size:18.0pt;font-family:"Georgia",serif;mso-ansi-language:
EN-GB'>Heading 2<span style='mso-spacerun:yes'>  </span>Text with Georgia Font
and Size 18<o:p></o:p></span></h2>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l0 level2 lfo1;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
14.0pt;font-family:"Trebuchet MS",sans-serif;mso-fareast-font-family:"Trebuchet MS";
mso-bidi-font-family:"Trebuchet MS";color:red;mso-ansi-language:EN-GB'><span
style='mso-list:Ignore'>a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB style='font-size:14.0pt;
font-family:"Trebuchet MS",sans-serif;color:red;mso-ansi-language:EN-GB'>First
Line with Trebuchet MS Font and Size 14<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l0 level2 lfo1;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
14.0pt;font-family:"Comic Sans MS";mso-fareast-font-family:"Comic Sans MS";
mso-bidi-font-family:"Comic Sans MS";color:green;mso-ansi-language:EN-GB'><span
style='mso-list:Ignore'>b.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB style='font-size:14.0pt;
font-family:"Comic Sans MS";color:green;mso-ansi-language:EN-GB'>Second Line
with Comic Sans MS Font and Size 14<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l0 level2 lfo1;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
16.0pt;font-family:"Lucida Sans Unicode",sans-serif;mso-fareast-font-family:
"Lucida Sans Unicode";color:aqua;mso-ansi-language:EN-GB'><span
style='mso-list:Ignore'>c.<span style='font:7.0pt "Times New Roman"'>&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:16.0pt;font-family:"Lucida Sans Unicode",sans-serif;
color:aqua;mso-ansi-language:EN-GB'>Third Line with Lucida Sans Unicode and
Size 16<o:p></o:p></span></p>

<h3 style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
18.0pt;mso-fareast-font-family:Arial;mso-ansi-language:EN-GB'><span
style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:18.0pt;mso-ansi-language:EN-GB'>Heading 3 Text with
Arial Font and Size 18<o:p></o:p></span></h3>

<p class=MsoNormal><span lang=EN-GB style='mso-ansi-language:EN-GB'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='mso-ansi-language:EN-GB'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-GB style='mso-ansi-language:EN-GB'>Bulleted
List with Headings<o:p></o:p></span></p>

<h1 style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
24.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol;mso-ansi-language:EN-GB;font-weight:normal;mso-bidi-font-weight:bold'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB style='font-size:24.0pt;
font-family:"Times New Roman",serif;mso-ansi-language:EN-GB'>Heading 1 Text
with Times New Roman Font and Size 24<o:p></o:p></span></h1>

<h2 style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
18.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol;mso-ansi-language:EN-GB;font-weight:normal;mso-bidi-font-weight:bold;
font-style:normal;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>·<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:18.0pt;font-family:"Georgia",serif;mso-ansi-language:
EN-GB'>Heading 2<span style='mso-spacerun:yes'>  </span>Text with Georgia Font
and Size 18<o:p></o:p></span></h2>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l1 level2 lfo2;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
14.0pt;font-family:"Courier New";mso-fareast-font-family:"Courier New";
color:red;mso-ansi-language:EN-GB'><span style='mso-list:Ignore'>o<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:14.0pt;font-family:"Trebuchet MS",sans-serif;
color:red;mso-ansi-language:EN-GB'>First Sub line with Trebuchet MS Font and
Size 14<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l1 level2 lfo2;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
14.0pt;font-family:"Courier New";mso-fareast-font-family:"Courier New";
color:green;mso-ansi-language:EN-GB'><span style='mso-list:Ignore'>o<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:14.0pt;font-family:"Comic Sans MS";color:green;
mso-ansi-language:EN-GB'>Second Sub line with Comic Sans MS Font and Size 14<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l1 level2 lfo2;
tab-stops:list 1.0in'><![if !supportLists]><span lang=EN-GB style='font-size:
16.0pt;font-family:"Courier New";mso-fareast-font-family:"Courier New";
color:aqua;mso-ansi-language:EN-GB'><span style='mso-list:Ignore'>o<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB style='font-size:16.0pt;font-family:"Lucida Sans Unicode",sans-serif;
color:aqua;mso-ansi-language:EN-GB'>Third Sub line with Lucida Sans Unicode and
Size 16<o:p></o:p></span></p>

<h3 style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .5in'><![if !supportLists]><span lang=EN-GB style='font-size:
18.0pt;font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol;mso-ansi-language:EN-GB;font-weight:normal;mso-bidi-font-weight:bold'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB style='font-size:18.0pt;
mso-ansi-language:EN-GB'>Heading 3 Text with Arial Font and Size 18<o:p></o:p></span></h3>


Loading

0 comments on commit 2d07c87

Please sign in to comment.