Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
335 lines (267 sloc) 22.3 KB
<!DOCTYPE html>
<html>
<head>
<title>Applying and Unapplying List Tests</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-git.css" type="text/css" />
<script src="http://code.jquery.com/qunit/qunit-git.js"></script>
<script src="qunit/connector.js"></script>
<script type="text/javascript" src="qunit/runner.js"></script>
<script type="text/javascript" src="js/utils.js"></script>
<script type="text/javascript" src="js/tiny_mce_loader.js"></script>
<script type="text/javascript" src="js/dsl/dsl.js"></script>
<script type="text/javascript" src="js/dsl/states.js"></script>
<script type="text/javascript" src="js/lists/actions.js"></script>
<script>
// Expected Results
var EmptyOLConvertedToP = '<ol><li>Before</li></ol>\n<p>&nbsp;</p>\n<ol><li>After</li></ol>';
var EmptyULConvertedToP = '<ul>\n<li>Before</li>\n</ul>\n<p>&nbsp;</p>\n<ul>\n<li>After</li>\n</ul>';
var NonEmptyOLConvertedToP = '<ol>\n<li>Before</li>\n</ol>\n<p>Test</p>\n<ol>\n<li>After</li>\n</ol>';
var NonEmptyULConvertedToP = '<ul>\n<li>Before</li>\n</ul>\n<p>Test</p>\n<ul>\n<li>After</li>\n</ul>';
QUnit.config.reorder = false;
QUnit.config.autostart = false;
module('Lists - Applying', {
autostart: false,
setup: function() {
window.queue = new dsl.Queue();
}
});
// Tests
asyncTest('Collapsed Selection - Apply OL Actions', function() {
ApplyingOL.to(EmptyParagraph).gives('<ol>\n<li></li>\n</ol>');
ApplyingOL.to(EmptyHeading).gives('<ol>\n<li>\n<h1></h1>\n</li>\n</ol>');
ApplyingOL.to(NonEmptyParagraph).enablesState('Outdent').andGives('<ol>\n<li>Test</li>\n</ol>');
ApplyingOL.to(NonEmptyHeading).enablesState('Outdent').andGives('<ol>\n<li>\n<h1>Test</h1>\n</li>\n</ol>');
ApplyingOL.to(TableCellWithoutBrs).enablesState('Outdent').andGives('<table><tbody><tr>\n<td><ol>\n<li>Test</li>\n</ol></td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingOL.to(TableCellWithBrsFirstLine).enablesState('Outdent').andGives('<table><tbody><tr>\n<td><ol>\n<li>Test</li>\n</ol>Line 2</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingOL.to(TableCellWithBrsMiddleLine).enablesState('Outdent').andGives('<table><tbody><tr>\n<td>Test<ol>\n<li>Line 2</li>\n</ol>Line 3</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingOL.to(TableCellWithBrsLastLine).enablesState('Outdent').andGives('<table><tbody><tr>\n<td>Test<ol>\n<li>Line 2</li>\n</ol></td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingOL.to(TableCellWithAdjacentBrsFirstLine).enablesState('Outdent').andGives('<table><tbody><tr>\n<td><ol>\n<li>Test</li>\n</ol><br />Line 2</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingOL.to(HeadingInOrderedList).gives('<h2>Test</h2>');
ApplyingOL.to(HeadingInUnorderedList).gives('<ol>\n<li>\n<h2>Test</h2>\n</li>\n</ol>');
ApplyingOL.to(EndOfParagraphBeforeOL).enablesState('Outdent').andGives('<ol>\n<li>Test</li>\n<li>Item</li>\n</ol>');
ApplyingOL.to(EndOfParagraphBeforeUL).enablesState('Outdent').andGives('<ol>\n<li>Test</li>\n</ol>\n<ul>\n<li>Item</li>\n</ul>');
ApplyingOL.to(EndOfParagraphBeforeOLWithListType).enablesState('Outdent').andGives('<ol style="list-style-type: lower-alpha;">\n<li>Test</li>\n<li>Item</li>\n</ol>');
ApplyingOL.to(StartOfParagraphAfterOL).enablesState('Outdent').andGives('<ol>\n<li>Item</li>\n<li>Test</li>\n</ol>');
ApplyingOL.to(StartOfParagraphAfterUL).enablesState('Outdent').andGives('<ul>\n<li>Item</li>\n</ul>\n<ol>\n<li>Test</li>\n</ol>');
ApplyingOL.to(StartOfParagraphAfterOLWithListType).enablesState('Outdent').andGives('<ol style="list-style-type: lower-alpha;">\n<li>Item</li>\n<li>Test</li>\n</ol>');
ApplyingOL.to(ParagraphBetweenOrderedLists).enablesState('Outdent').andGives('<ol>\n<li>Item1</li>\n<li>Test</li>\n<li>Item2</li>\n</ol>');
ApplyingOL.to(ParagraphBetweenUnorderedLists).enablesState('Outdent').andGives('<ul>\n<li>Item1</li>\n</ul>\n<ol>\n<li>Test</li>\n</ol>\n<ul>\n<li>Item2</li>\n</ul>');
ApplyingOL.to(ParagraphBetweenMixedLists).enablesState('Outdent').andGives('<ol>\n<li>Item1</li>\n<li>Test</li>\n</ol>\n<ul>\n<li>Item2</li>\n</ul>');
ApplyingOL.to(EmptyOrderedListItem).disablesState('Outdent').andGives(EmptyOLConvertedToP);
ApplyingOL.to(EmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n</ul>\n<ol>\n<li>&nbsp;</li>\n</ol>\n<ul>\n<li>After</li>\n</ul>');
ApplyingOL.to(NonEmptyOrderedListItem).disablesState('Outdent').andGives(NonEmptyOLConvertedToP);
ApplyingOL.to(NonEmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n</ul>\n<ol>\n<li>Test</li>\n</ol>\n<ul>\n<li>After</li>\n</ul>');
ApplyingOL.to(OrderedListItemInsideDiv).disablesState('Outdent').andGives('<div id="div">\n<p>Item1</p>\n<ol>\n<li>Item2</li>\n</ol></div>');
ApplyingOL.to(UnorderedListItemInsideDiv).enablesState('Outdent').andGives('<div id="div"><ol>\n<li>Item1</li>\n</ol>\n<ul>\n<li>Item2</li>\n</ul>\n</div>');
ApplyingOL.to(NestedEmptyOrderedListItem).disablesState('Outdent').andGives('<ol>\n<li>Before</li>\n</ol>\n<p>&nbsp;</p>\n<ol>\n<li>After</li>\n</ol>');
ApplyingOL.to(NestedEmptyUnorderedListItem).enablesState('Outdent').andGives('<ul>\n<li>Before<ol>\n<li>&nbsp;</li>\n</ol></li>\n<li>After</li>\n</ul>');
ApplyingOL.to(NestedNonEmptyOrderedListItem).disablesState('Outdent').andGives('<ol>\n<li>Before</li>\n</ol>\n<p>Test</p>\n<ol>\n<li>After</li>\n</ol>');
ApplyingOL.to(NestedNonEmptyUnorderedListItem).enablesState('Outdent').andGives('<ul>\n<li>Before<ol>\n<li>Test</li>\n</ol></li>\n<li>After</li>\n</ul>');
ApplyingOL.to(OrderedListItemWithNestedChild).disablesState('Outdent').andGives('<p>Item1</p>\n<ol>\n<li style="list-style-type: none;"><ol>\n<li>Nested</li>\n</ol></li>\n</ol>');
ApplyingOL.to(UnorderedListItemWithNestedChild).enablesState('Outdent').andGives('<ol>\n<li>Item1\n<ul>\n<li>Nested</li>\n</ul>\n</li>\n</ol>');
// Actually not allowed by HTML. ApplyingOL.to(DefinitionListTerm).enablesState('Outdent').andGives('<dl><dt><ol>\n<li>Term</li>\n</ol></dt><dd>Description</dd></dl>');
ApplyingOL.to(DefinitionListDescription).enablesState('Outdent').andGives('<dl><dt>Term</dt><dd><ol>\n<li>Description</li>\n</ol></dd></dl>');
ApplyingOL.to(ParagraphWithMarginLeft).enablesState('Outdent').andGives('<ol>\n<li style="margin-left: 30px;">Test</li>\n</ol>');
ApplyingOL.to(ParagraphWithPaddingLeft).enablesState('Outdent').andGives('<ol>\n<li style="margin-left: 30px;">Test</li>\n</ol>'); // TODO: Padding-left renders weird, should it be removed?
ApplyingOL.to(ParagraphWithMarginAndPaddingLeft).enablesState('Outdent').andGives('<ol>\n<li style="margin-left: 90px;">Test</li>\n</ol>');
queue.done();
});
asyncTest('Collapsed Selection - Apply UL Actions', function() {
ApplyingUL.to(EmptyParagraph).gives('<ul>\n<li></li>\n</ul>');
ApplyingUL.to(EmptyHeading).gives('<ul>\n<li>\n<h1></h1>\n</li>\n</ul>');
ApplyingUL.to(NonEmptyParagraph).gives('<ul>\n<li>Test</li>\n</ul>');
ApplyingUL.to(NonEmptyHeading).gives('<ul>\n<li>\n<h1>Test</h1>\n</li>\n</ul>');
ApplyingUL.to(TableCellWithoutBrs).gives('<table><tbody><tr>\n<td>\n<ul>\n<li>Test</li>\n</ul>\n</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingUL.to(TableCellWithBrsFirstLine).gives('<table><tbody><tr>\n<td>\n<ul>\n<li>Test</li>\n</ul>\nLine 2</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingUL.to(TableCellWithBrsMiddleLine).gives('<table><tbody><tr>\n<td>Test\n<ul>\n<li>Line 2</li>\n</ul>\nLine 3</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingUL.to(TableCellWithBrsLastLine).gives('<table><tbody><tr>\n<td>Test\n<ul>\n<li>Line 2</li>\n</ul>\n</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingUL.to(TableCellWithAdjacentBrsFirstLine).gives('<table><tbody><tr>\n<td>\n<ul>\n<li>Test</li>\n</ul>\n<br />Line 2</td>\n<td>&nbsp;</td>\n</tr></tbody></table>');
ApplyingUL.to(HeadingInOrderedList).gives('<ul>\n<li>\n<h2>Test</h2>\n</li>\n</ul>');
ApplyingUL.to(HeadingInUnorderedList).gives('<h2>Test</h2>');
ApplyingUL.to(EndOfParagraphBeforeOL).gives('<ul>\n<li>Test</li>\n</ul>\n<ol>\n<li>Item</li>\n</ol>');
ApplyingUL.to(EndOfParagraphBeforeUL).gives('<ul>\n<li>Test</li>\n<li>Item</li>\n</ul>');
ApplyingUL.to(StartOfParagraphAfterOL).gives('<ol>\n<li>Item</li>\n</ol>\n<ul>\n<li>Test</li>\n</ul>');
ApplyingUL.to(StartOfParagraphAfterUL).gives('<ul>\n<li>Item</li>\n<li>Test</li>\n</ul>');
ApplyingUL.to(ParagraphBetweenOrderedLists).gives('<ol>\n<li>Item1</li>\n</ol>\n<ul>\n<li>Test</li>\n</ul>\n<ol>\n<li>Item2</li>\n</ol>');
ApplyingUL.to(ParagraphBetweenUnorderedLists).gives('<ul>\n<li>Item1</li>\n<li>Test</li>\n<li>Item2</li>\n</ul>');
ApplyingUL.to(ParagraphBetweenMixedLists).gives('<ol>\n<li>Item1</li>\n</ol>\n<ul>\n<li>Test</li>\n<li>Item2</li>\n</ul>');
ApplyingUL.to(EmptyOrderedListItem).gives('<ol>\n<li>Before</li>\n</ol>\n<ul>\n<li>&nbsp;</li>\n</ul>\n<ol>\n<li>After</li>\n</ol>');
ApplyingUL.to(EmptyUnorderedListItem).gives(EmptyULConvertedToP);
ApplyingUL.to(NonEmptyOrderedListItem).gives('<ol>\n<li>Before</li>\n</ol>\n<ul>\n<li>Test</li>\n</ul>\n<ol>\n<li>After</li>\n</ol>');
ApplyingUL.to(NonEmptyUnorderedListItem).gives(NonEmptyULConvertedToP);
ApplyingUL.to(OrderedListItemInsideDiv).gives('<div id="div">\n<ul>\n<li>Item1</li>\n</ul>\n<ol>\n<li>Item2</li>\n</ol></div>');
ApplyingUL.to(UnorderedListItemInsideDiv).gives('<div id="div">\n<p>Item1</p>\n<ul>\n<li>Item2</li>\n</ul>\n</div>');
ApplyingUL.to(NestedEmptyOrderedListItem).gives('<ol>\n<li>Before\n<ul>\n<li>&nbsp;</li>\n</ul>\n</li>\n<li>After</li>\n</ol>');
ApplyingUL.to(NestedEmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n</ul>\n<p>&nbsp;</p>\n<ul>\n<li>After</li>\n</ul>');
ApplyingUL.to(NestedNonEmptyOrderedListItem).gives('<ol>\n<li>Before<ul>\n<li>Test</li>\n</ul></li>\n<li>After</li>\n</ol>');
ApplyingUL.to(NestedNonEmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n</ul>\n<p>Test</p>\n<ul>\n<li>After</li>\n</ul>');
ApplyingUL.to(OrderedListItemWithNestedChild).gives('<ul>\n<li>Item1<ol>\n<li>Nested</li>\n</ol></li>\n</ul>');
ApplyingUL.to(UnorderedListItemWithNestedChild).gives('<p>Item1</p>\n<ul><li style="list-style-type: none;"><ul>\n<li>Nested</li>\n</ul></li>\n</ul>');
// Actually not allowed by HTML ApplyingUL.to(DefinitionListTerm).gives('<dl><dt><ul>\n<li>Term</li>\n</ul></dt><dd>Description</dd></dl>');
ApplyingUL.to(DefinitionListDescription).gives('<dl><dt>Term</dt><dd><ul>\n<li>Description</li>\n</ul></dd></dl>');
ApplyingUL.to(ParagraphWithMarginLeft).gives('<ul><li style="margin-left: 30px;">Test</li>\n</ul>');
ApplyingUL.to(ParagraphWithPaddingLeft).gives('<ul><li style="margin-left: 30px;">Test</li>\n</ul>'); // TODO: Padding-left renders weird, should it be removed?
ApplyingUL.to(ParagraphWithMarginAndPaddingLeft).gives('<ul><li style="margin-left: 90px;">Test</li>\n</ul>');
queue.done();
});
asyncTest('Collapsed Selection - Apply OL in Divs', function() {
ApplyingOL.to(ParagraphInDiv).gives('\n<div><ol>\n<li>Item</li>\n</ol></div>');
ApplyingOL.to(TextInDiv).gives('\n<div><ol>\n<li>Item</li>\n</ol></div>');
ApplyingOL.to(TextWithBrsInDivFirstLine).gives('\n<div><ol>\n<li>Item1</li>\n</ol>Item2</div>');
ApplyingOL.to(TextWithBrsInDivMiddleLine).gives('\n<div>Item1<ol>\n<li>Item2</li>\n</ol>Item3</div>');
ApplyingOL.to(TextWithBrsInDivLastLine).gives('\n<div>Item1<ol>\n<li>Item2</li>\n</ol></div>');
queue.done();
});
asyncTest('Collapsed Selection - Apply UL in Divs', function() {
ApplyingUL.to(ParagraphInDiv).gives('\n<div><ul>\n<li>Item</li>\n</ul></div>');
ApplyingUL.to(TextInDiv).gives('\n<div><ul>\n<li>Item</li>\n</ul></div>');
ApplyingUL.to(TextWithBrsInDivFirstLine).gives('\n<div><ul>\n<li>Item1</li>\n</ul>Item2</div>');
ApplyingUL.to(TextWithBrsInDivMiddleLine).gives('\n<div>Item1<ul>\n<li>Item2</li>\n</ul>Item3</div>');
ApplyingUL.to(TextWithBrsInDivLastLine).gives('\n<div>Item1<ul>\n<li>Item2</li>\n</ul></div>');
queue.done();
});
asyncTest('Collapsed Selection - Type Enter', function() {
TypingEnter.inA(EmptyOrderedListItem).gives('<ol>\n<li>Before</li>\n<li></li>\n<li>&nbsp;</li>\n<li>After</li>\n</ol>');
TypingEnter.inA(EmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n<li></li>\n<li>&nbsp;</li>\n<li>After</li>\n</ul>');
TypingEnter.inA(NonEmptyOrderedListItem).gives('<ol>\n<li>Before</li>\n<li></li>\n<li>Test</li>\n<li>After</li>\n</ol>');
TypingEnter.inA(NonEmptyUnorderedListItem).gives('<ul>\n<li>Before</li>\n<li></li>\n<li>Test</li>\n<li>After</li>\n</ul>');
TypingEnter.inA(NestedNonEmptyOrderedListItem).gives('<ol>\n<li>Before<ol>\n<li></li>\n<li>Test</li>\n</ol></li>\n<li>After</li>\n</ol>');
TypingEnter.inA(NestedNonEmptyUnorderedListItem).gives('<ul>\n<li>Before<ul>\n<li></li>\n<li>Test</li>\n</ul></li>\n<li>After</li>\n</ul>');
// TODO: Typing enter in correctly nested lists
queue.done();
});
// TODO: Typing backspace in a paragraph between two lists should merge the lists.
asyncTest('Expanded Selection, List Types - Ordered List Action', function() {
ApplyingOL.to(SingleLiOlSelection).gives('<p>Item 1</p>');
ApplyingOL.to(MultiLiOlSelection).gives('<p>Item 1</p><p>Item 2</p>');
ApplyingOL.to(SingleLiUlSelection).gives('<ol>\n<li>Item 1</li>\n</ol>');
ApplyingOL.to(MultiLiUlSelection).gives('<ol>\n<li>Item 1</li>\n<li>Item 2</li>\n</ol>');
ApplyingOL.to(IndentedOlInOlCorrectSelection).gives('<p>Item 1</p><p>Indented</p>');
ApplyingOL.to(IndentedOlInOlIncorrectSelection).gives('<p>Item 1</p><p>Indented</p>');
// TODO: Selection only in indented list.
ApplyingOL.to(IndentedUlInUlCorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
ApplyingOL.to(IndentedUlInUlIncorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
ApplyingOL.to(IndentedOlInUlCorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
ApplyingOL.to(IndentedUlInOlCorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
ApplyingOL.to(IndentedOlInUlIncorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
ApplyingOL.to(IndentedUlInOlIncorrectSelection).gives('<ol>\n<li>Item 1<ol>\n<li>Indented</li>\n</ol></li>\n</ol>');
queue.done();
});
asyncTest('Expanded Selection, List Types - Unordered List Action', function() {
ApplyingUL.to(SingleLiOlSelection).gives('<ul>\n<li>Item 1</li>\n</ul>');
ApplyingUL.to(MultiLiOlSelection).gives('<ul>\n<li>Item 1</li>\n<li>Item 2</li>\n</ul>');
ApplyingUL.to(SingleLiUlSelection).gives('<p>Item 1</p>');
ApplyingUL.to(MultiLiUlSelection).gives('<p>Item 1</p><p>Item 2</p>');
ApplyingUL.to(IndentedOlInOlCorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
ApplyingUL.to(IndentedOlInOlIncorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
// TODO: Selection only in indented list.
ApplyingUL.to(IndentedUlInUlCorrectSelection).gives('<p>Item 1</p><p>Indented</p>');
ApplyingUL.to(IndentedUlInUlIncorrectSelection).gives('<p>Item 1</p><p>Indented</p>');
ApplyingUL.to(IndentedOlInUlCorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
ApplyingUL.to(IndentedUlInOlCorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
ApplyingUL.to(IndentedOlInUlIncorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
ApplyingUL.to(IndentedUlInOlIncorrectSelection).gives('<ul>\n<li>Item 1<ul>\n<li>Indented</li>\n</ul></li>\n</ul>');
if (!tinymce.isIE9) { // there is a IE9 selection in tables bug that this test exposes. Don't run the test in IE9
ApplyingUL.to(TableCellWithTextAfterUL).gives('<table><tbody><tr>\n<td><ul>\n<li>Existing</li>\n<li><span id="start">Line1</span></li>\n<li>Line2</li>\n<li>Line3</li>\n</ul>Line4</td>\n</tr></tbody></table>');
}
queue.done();
});
asyncTest('Expanded Selection, Paragraph Types - Ordered List Action', function() {
ApplyingOL.to(SingleParagraphSelection).gives('<ol>\n<li>This is a test</li>\n</ol>');
ApplyingOL.to(MultipleParagraphSelection).gives('<ol>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ol>');
ApplyingOL.to(SingleHeadingSelection).gives('<ol>\n<li>\n<h1>This is a test</h1>\n</li>\n</ol>');
ApplyingOL.to(MultipleHeadingSelection).gives('<ol>\n<li>\n<h1>This is a test</h1>\n</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n</ol>');
ApplyingOL.to(SingleBlockSelection).gives('\n<div><ol>\n<li>This is a test</li>\n</ol></div>');
ApplyingOL.to(SingleBlockWithBrSelection).gives('\n<div><ol>\n<li>Item1</li>\n<li>Item2</li>\n</ol></div>');
ApplyingOL.to(MultipleBlockSelection).gives('<ol>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ol>');
ApplyingOL.to(MultipleBlockWithBrSelection).gives('<ol>\n<li>Item1</li>\n<li>Item2</li>\n<li>Item3</li>\n</ol>');
ApplyingOL.to(MultipleBlockWithBrPartialSelection).gives('<ol>\n<li>Item1</li>\n<li>Item2</li>\n<li>Item3</li>\n</ol>\n<div>Item4</div>');
ApplyingOL.to(MultipleBlockWithEmptyDivsAllSelected).gives('<div id=\"start\">&nbsp;</div><ol><li>a</li></ol><div>&nbsp;</div><ol><li>b</li></ol><div>&nbsp;</div><div id=\"end\">&nbsp;</div>');
ApplyingOL.to(ThreeBoldDivsWithBrSelection).gives('<ol><li><strong>One</strong></li><li><strong>Two</strong></li><li><strong>Three</strong></li></ol>');
ApplyingOL.to(ParagraphToHeadingSelection).gives('<ol>\n<li>This is a test</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n</ol>');
ApplyingOL.to(ParagraphToBlockSelection).gives('<ol>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ol>');
ApplyingOL.to(HeadingToParagraphSelection).gives('<ol>\n<li>\n<h1>This is a test</h1>\n</li>\n<li>Second paragraph</li>\n</ol>');
ApplyingOL.to(BlockToParagraphSelection).gives('<ol>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ol>');
ApplyingOL.to(MultipleParagraphAndHeadingSelection).gives('<ol>\n<li>This is a test</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n<li>Third paragraph</li>\n</ol>');
ApplyingOL.to(TextWithBrsInFormattingInDiv).gives('<div><strong>Before</strong><ol><li>Item1</li><li>Item2</li><li>Item3</li></ol></div>');
ApplyingOL.to(TextWithBrInsideFormatting).gives('<div><em><strong>Before</strong></em><ol><li><em><strong><span class="foo">Item1</span></strong></em>Item2</li><li>Item3</li></ol></div>');
queue.done();
});
asyncTest('Expanded Selection, Paragraph Types - Unordered List Action', function() {
ApplyingUL.to(SingleParagraphSelection).gives('<ul>\n<li>This is a test</li>\n</ul>');
ApplyingUL.to(MultipleParagraphSelection).gives('<ul>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ul>');
ApplyingUL.to(SingleHeadingSelection).gives('<ul>\n<li>\n<h1>This is a test</h1>\n</li>\n</ul>');
ApplyingUL.to(MultipleHeadingSelection).gives('<ul>\n<li>\n<h1>This is a test</h1>\n</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n</ul>');
ApplyingUL.to(SingleBlockSelection).gives('\n<div><ul>\n<li>This is a test</li>\n</ul></div>');
ApplyingUL.to(SingleBlockWithBrSelection).gives('\n<div><ul>\n<li>Item1</li>\n<li>Item2</li>\n</ul></div>');
ApplyingUL.to(MultipleBlockSelection).gives('<ul>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ul>');
ApplyingUL.to(MultipleBlockWithBrSelection).gives('<ul>\n<li>Item1</li>\n<li>Item2</li>\n<li>Item3</li>\n</ul>');
ApplyingUL.to(MultipleBlockWithBrPartialSelection).gives('<ul>\n<li>Item1</li>\n<li>Item2</li>\n<li>Item3</li>\n</ul>\n<div>Item4</div>');
ApplyingUL.to(MultipleBlockWithBrPartialSelectionAtEnd).gives('\n<div>Item1</div>\n<ul>\n<li>Item2</li>\n<li>Item3</li>\n<li>Item4</li>\n</ul>');
ApplyingUL.to(MultipleBlockWithEmptyDivsAllSelected).gives('<div id=\"start\">&nbsp;</div><ul><li>a</li></ul><div>&nbsp;</div><ul><li>b</li></ul><div>&nbsp;</div><div id=\"end\">&nbsp;</div>');
ApplyingUL.to(ThreeBoldDivsWithBrSelection).gives('<ul><li><strong>One</strong></li>\n<li><strong>Two</strong></li>\n<li><strong>Three</strong></li></ul>');
// TODO: Divs with BRs and Paragraphs.
// TODO: Divs with BRs in paragraphs? Divs with a mix of BRs and paragraph child.
ApplyingUL.to(ParagraphToHeadingSelection).gives('<ul>\n<li>This is a test</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n</ul>');
ApplyingUL.to(ParagraphToBlockSelection).gives('<ul>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ul>');
ApplyingUL.to(HeadingToParagraphSelection).gives('<ul>\n<li>\n<h1>This is a test</h1>\n</li>\n<li>Second paragraph</li>\n</ul>');
ApplyingUL.to(BlockToParagraphSelection).gives('<ul>\n<li>This is a test</li>\n<li>Second paragraph</li>\n</ul>');
ApplyingUL.to(MultipleParagraphAndHeadingSelection).gives('<ul>\n<li>This is a test</li>\n<li>\n<h1>Second paragraph</h1>\n</li>\n<li>Third paragraph</li>\n</ul>');
ApplyingUL.to(TextWithBrsInFormattingInDiv).gives('<div><strong>Before</strong><ul><li>Item1</li>\n<li>Item2</li>\n<li>Item3</li></ul></div>');
queue.done();
});
asyncTest('Expanded Selection, Table Types - Ordered List Action', function() {
ApplyingOL.to(CellWithoutBrSelection).gives('<table><tbody><tr>\n<td><ol>\n<li>Cell 1</li>\n</ol></td>\n</tr></tbody></table>');
// TODO: Cells with BR selection
queue.done();
// TODO: Tables with BRs.
});
asyncTest('Expanded Selection, Table Types - Unordered List Action', function() {
ApplyingUL.to(CellWithoutBrSelection).gives('<table><tbody><tr>\n<td><ul>\n<li>Cell 1</li>\n</ul></td>\n</tr></tbody></table>');
queue.done();
// TODO: Tables with BRs.
});
var initTinyFunction = function(){
tinyMCE.init({
mode : "exact",
elements : "elm1",
theme : "advanced",
cleanup: true,
// TODO: Determine why TinyMCE defaults to stripping out empty h1,ul,ol and li element since it results in invalid HTML (but only on FF3.0 and IE).
extended_valid_elements: 'li[style],ul[type|compact|style],ol[type|compact|style],h1',
// Turn this off because we want the list actions to create the right DOM structure from the start.
fix_list_elements: false,
plugins : 'lists',
add_unload_trigger : false,
apply_source_formatting : 0,
init_instance_callback : function(ed) {
editor = ed;
ed.onNodeChange.addToTop(function() {
return false;
});
}
});
};
</script>
</head>
<body>
<h1 id="qunit-header">Applying and Unapplying List Tests</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="content">
<textarea id="elm1" name="elm1"></textarea>
</div>
<p><input type="text" id="state"><input type="button" value="Load state" onclick="loadState();"></p>
<script type="text/javascript" language="JavaScript" src="jsrobot/robot.js"></script>
<script>
initWhenTinyAndRobotAreReady(initTinyFunction);
function loadState() {
window[document.getElementById('state').value]();
editor.focus();
}
</script>
</body>
</html>
Jump to Line
Something went wrong with that request. Please try again.