jodit
Version:
Jodit is awesome and usefully wysiwyg editor with filebrowser
1,017 lines (807 loc) • 30.8 kB
JavaScript
describe('Commands Jodit Editor Tests', function() {
describe('Command "formatBlock"', function() {
it('Try exec the command "formatBlock" for several elements', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p><p>test2</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStartBefore(editor.editor.firstChild);
range.setEndAfter(editor.editor.lastChild);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.getEditorValue()).to.equal(
'<h1>test</h1><h1>test2</h1>'
);
});
describe('Exec formatBlock for one inline element', function() {
it('Should wrap this element and all nearest inine element in block', function() {
var jodit = new Jodit(appendTestArea());
jodit.value = 'stop <span>post</span> ice';
var range = jodit.editorDocument.createRange();
range.setStart(jodit.editor.firstChild, 0);
range.setEnd(jodit.editor.firstChild, 2);
jodit.selection.selectRange(range);
jodit.execCommand('formatBlock', false, 'h1');
expect(jodit.value).to.equal(
'<h1>stop <span>post</span> ice</h1>'
);
});
});
it('Try exec the command "formatBlock" in text node then selection is collapsed it should wrap it node in H1', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 2);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
editor.selection.insertNode(
editor.editorDocument.createTextNode(' a ')
);
expect(editor.getEditorValue()).to.equal('<h1>te a st</h1>');
});
it('Try exec the command "formatBlock" in the end of text node then selection is collapsed it should wrap it node in H1', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
editor.selection.insertNode(
editor.editorDocument.createTextNode(' a ')
);
expect(editor.getEditorValue()).to.equal('<h1>test a </h1>');
});
it('Try exec the command "formatBlock" for several text nodes', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('');
editor.selection.insertNode(
editor.create.inside.text('test')
);
editor.selection.insertNode(
editor.create.inside.text(' test2')
);
editor.selection.insertNode(
editor.create.inside.text(' test3')
);
editor.selection.insertNode(
editor.create.inside.element(
'span',
' test4'
)
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 0);
range.setEnd(editor.editor.lastChild, 0);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.getEditorValue()).to.equal(
'<h1>test test2 test3<span> test4</span></h1>'
);
});
it('Should create empty element and set cursor into it when editor is empty', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('');
editor.selection.focus();
editor.execCommand('formatBlock', false, 'h1');
editor.selection.insertHTML('test');
expect(editor.getEditorValue()).to.equal('<h1>test</h1>');
});
describe('For UL>li elements', function() {
describe('Select only LI', function() {
it('Should replace all LI elements to P and unwrap it from UL', function() {
var editor = new Jodit(appendTestArea());
editor.value =
'<ul>' +
'<li>1</li>' +
'<li>2</li>' +
'<li>3</li>' +
'</ul>';
var range = editor.editorDocument.createRange();
range.setStart(
editor.editor.firstChild.firstChild.firstChild,
0
);
range.setEnd(
editor.editor.firstChild.lastChild.firstChild,
1
);
editor.selection.selectRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.value).to.be.equal(
'<ul>' +
'<li><h1>1</h1></li>' +
'<li><h1>2</h1></li>' +
'<li><h1>3</h1></li>' +
'</ul>'
);
editor.execCommand('formatBlock', false, 'p');
expect(editor.value).to.be.equal(
'<ul>' +
'<li>1</li>' +
'<li>2</li>' +
'<li>3</li>' +
'</ul>'
);
});
});
describe('Select UL', function() {
it('Should replace all LI elements to P and unwrap it from UL', function() {
var editor = new Jodit(appendTestArea());
editor.value =
'<ul>' +
'<li>1</li>' +
'<li>2</li>' +
'<li>3</li>' +
'</ul>';
var range = editor.editorDocument.createRange();
range.selectNode(editor.editor.firstChild);
editor.selection.selectRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.value).to.be.equal(
'<ul>' +
'<li><h1>1</h1></li>' +
'<li><h1>2</h1></li>' +
'<li><h1>3</h1></li>' +
'</ul>'
);
editor.execCommand('formatBlock', false, 'p');
expect(editor.value).to.be.equal(
'<ul>' +
'<li>1</li>' +
'<li>2</li>' +
'<li>3</li>' +
'</ul>'
);
});
});
});
});
describe('Sub/Supscript native', function() {
describe('sub', function() {
it('Should insert selection im SUB element', function() {
var editor = new Jodit(appendTestArea());
editor.value = '<p>test</p>';
var range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 4);
editor.selection.selectRange(range);
editor.execCommand('subscript');
expect(editor.value).to.be.equal('<p>te<sub>st</sub></p>');
});
});
describe('sup', function() {
it('Should insert selection im SUP element', function() {
var editor = new Jodit(appendTestArea());
editor.value = '<p>test</p>';
var range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 4);
editor.selection.selectRange(range);
editor.execCommand('superscript');
expect(editor.value).to.be.equal('<p>te<sup>st</sup></p>');
});
});
});
describe('Bold command', function() {
describe('For box with style="font-weight:bold"', function() {
it('should wrap selected text in STRONG element without questions', function() {
var editor = new Jodit(appendTestArea()),
style = document.createElement('style');
editor.setEditorValue('<p>test</p>');
style.innerHTML = 'p {font-weight: bold !important};';
document.body.appendChild(style);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 0);
range.setEnd(editor.editor.firstChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
style.parentNode.removeChild(style);
expect(editor.getEditorValue()).to.equal(
'<p><strong>test</strong></p>'
);
});
});
it('Should insert a few chars and again exec bold. Bold mode should be switch off', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
range.collapse(false);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
editor.selection.insertNode(
editor.create.inside.text('abc')
);
editor.execCommand('bold');
editor.selection.insertNode(
editor.create.inside.text('def')
);
expect(editor.getEditorValue()).to.equal(
'test<strong>abc</strong>def'
);
});
describe('for some text', function() {
it('should wrap this text in STRONG element', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'<strong>test</strong>'
);
});
describe('inside STRONG element ', function() {
it('from start of this element, should unwrap this text', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<strong>test</strong>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 0);
range.setEnd(editor.editor.firstChild.firstChild, 2);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'te<strong>st</strong>'
);
});
it('near end of this element, should unwrap this text', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<strong>test</strong>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'<strong>te</strong>st'
);
});
it('in the middle of this element, should unwrap this text', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<strong>test</strong>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 1);
range.setEnd(editor.editor.firstChild.firstChild, 3);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'<strong>t</strong>es<strong>t</strong>'
);
});
it('should unwrap this part and after exec "bold" again it should create 3 STRONG elements', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<strong>1 2 3</strong>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 1);
range.setEnd(editor.editor.firstChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'<strong>1</strong><strong> 2 </strong><strong>3</strong>'
);
});
});
it('that contains a few STRONG elements, should unwrap all of these', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue(
'<strong>test</strong> test <strong>test</strong>'
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 0);
range.setEnd(editor.editor.lastChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal('test test test');
});
});
describe('Try exec the command "bold"', function() {
it('Should wrap selected text in STRONG element', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal(
'<p><strong>test</strong></p>'
);
});
describe('Try exec the command "bold" twice', function() {
it('Should unwrap strong elements', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal('<p>test</p>');
});
});
});
describe('Try exec the command "bold" for font-weight: 700 Element', function() {
it('should ubnwrap selected srtong element', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue(
'<span style="font-weight: 700">test</span>'
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
// editor.execCommand('bold');
expect(editor.getEditorValue()).to.equal('test');
});
});
describe('Exec bold for collapsed range and move cursor in another place', function() {
it('Should remove STRONG element', function() {
var editor = new Jodit(appendTestArea(), {
cleanHTML: {
timeout: 0
}
});
editor.value = 'testtest';
var range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 4);
range.collapse(true);
editor.selection.selectRange(range);
editor.execCommand('bold');
expect(editor.value).to.be.equal('test<strong></strong>test');
range.setStart(editor.editor.lastChild, 2);
range.collapse(true);
editor.selection.selectRange(range);
simulateEvent('mousedown', 0, editor.editor);
expect(editor.value).to.be.equal('testtest');
});
});
describe('Exec bold command for SPAN with font-size', function() {
it('Should leave both font-size and font-weight rules', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue(
'<span style="font-size: 36px;">asdasd</span>'
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 0);
range.setEnd(editor.editor.firstChild.firstChild, 6);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('bold');
expect(sortAttributes(editor.value)).to.equal(
sortAttributes(
'<span style="font-size: 36px;"><strong>asdasd</strong></span>'
)
);
});
});
});
describe('After exec some command', function() {
it('should restore selection to previous', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 3);
//range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('italic');
editor.selection.insertNode(
editor.editorDocument.createTextNode('top')
);
expect(editor.getEditorValue()).to.equal('<p>tetopt</p>');
});
describe('in collapsed selection', function() {
it('should place cursor inward', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('underline');
editor.selection.insertNode(
editor.editorDocument.createTextNode('data')
);
expect(editor.getEditorValue()).to.equal(
'<p>te<u>data</u>st</p>'
);
});
});
});
describe('insertUnorderedList', function() {
it('Run command insertUnorderedList should wrap or replace all paragraphs to ul>li', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p><p>test</p><p>test</p>');
editor.execCommand('selectAll');
editor.execCommand('insertUnorderedList');
expect(editor.getEditorValue()).to.equal(
'<ul><li>test</li><li>test</li><li>test</li></ul>'
);
});
it('If press Enter inside <li> in the end it should create new <li> and cursor must be in it', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<ul><li>test</li></ul>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild.firstChild, 4);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
simulateEvent('keydown', Jodit.KEY_ENTER, editor.editor);
editor.selection.insertNode(
editor.editorDocument.createTextNode(' a ')
);
expect(editor.getEditorValue()).to.equal(
'<ul><li>test</li><li> a <br></li></ul>'
);
});
it('If press Enter inside <li> inside some text should split that text and created new <li> and cursor must be in it', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<ul><li>test</li></ul>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild.firstChild, 2);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
simulateEvent('keydown', Jodit.KEY_ENTER, editor.editor);
editor.selection.insertNode(
editor.editorDocument.createTextNode(' a ')
);
expect(editor.getEditorValue()).to.equal(
'<ul><li>te</li><li> a st</li></ul>'
);
});
});
describe('formatBlock', function() {
it('Should wrap or replace container to specialize tag', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>testy oprst <span>lets go</span></p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 5);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h5');
expect(editor.getEditorValue()).to.equal(
'<h5>testy oprst <span>lets go</span></h5>'
);
});
it('Should wrap text into H1 tag near Table, but table must be after this tag', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test<table><tr><td>post</td></tr></table>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setEnd(editor.editor.firstChild, 4);
range.collapse(false);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.getEditorValue()).to.equal(
'<h1>test</h1><table><tbody><tr><td>post</td></tr></tbody></table>'
);
});
describe('justifyLeft', function() {
it('Should set align for element which was created using formatBlock', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('testy oprst <span>lets go</span>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 5);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h5');
editor.execCommand('justifyLeft');
editor.execCommand('fontSize', false, 14);
expect(editor.getEditorValue()).to.equal(
'<h5 style="text-align: left;">testy<span style="font-size: 14px;"></span> oprst <span>lets go</span></h5>'
);
});
});
it('Insert H1 inside TD should crearte new H1 withow replacement', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<table><tr><td>1</td></tr></table>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.querySelector('td'));
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('formatBlock', false, 'h1');
expect(editor.getEditorValue()).to.equal(
'<table><tbody><tr><td><h1>1</h1></td></tr></tbody></table>'
);
});
});
describe('Colors', function() {
it('Set colour for all selection should create <span></span> tags inside all paragraps', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>1</p><p>2</p><p>3</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 0);
range.setEnd(editor.editor.lastChild, 1);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('foreColor', false, '#f00');
expect(
'<p><span style="color: rgb(255, 0, 0);">1</span></p><p><span style="color: rgb(255, 0, 0);">2</span></p><p><span style="color: rgb(255, 0, 0);">3</span></p>'
).to.equal(editor.getEditorValue());
});
it('Set colour to collapsed position should create empty span and insert inward cursor', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('testy oprst <span>lets go</span>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 5);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('foreColor', false, '#f00');
expect(editor.getEditorValue()).to.equal(
'testy<span style="color: rgb(255, 0, 0);"></span> oprst <span>lets go</span>'
);
});
});
describe('Fonts', function() {
describe('Set font size', function() {
it('should create attribute style="font-size:value"', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue(
'<p> testy oprst <span>lets go</span></p>'
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNode(editor.editor.querySelector('span'));
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('fontSize', false, 12);
expect(editor.getEditorValue()).to.equal(
'<p> testy oprst <span style="font-size: 12px;">lets go</span></p>'
);
editor.execCommand('fontSize', false, '12%');
expect(editor.getEditorValue()).to.equal(
'<p> testy oprst <span style="font-size: 12%;">lets go</span></p>'
);
});
describe('For box with style="font-size:12px"', function() {
it('should wrap selected text in SPAN with style="font-size:12px" element without questions', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.selectNodeContents(editor.editor.firstChild);
sel.removeAllRanges();
sel.addRange(range);
editor.editor.style.fontSize = '12px';
editor.execCommand('fontSize', false, 12);
expect(editor.getEditorValue()).to.equal(
'<span style="font-size: 12px;">test</span>'
);
});
});
});
describe('Set font family', function() {
describe('For box with style="font-name:Arial"', function() {
it('should wrap selected text in SPAN with style="font-family:Arial" element without questions', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.editor.style.fontFamily = 'Arial';
editor.execCommand('fontName', false, 'Arial');
expect(editor.getEditorValue()).to.equal(
'<p>te<span style="font-family: Arial;">st</span></p>'
);
});
});
it('should create attribute style="font-family:value"', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.setEnd(editor.editor.firstChild.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('fontName', false, 'Arial');
expect(editor.getEditorValue()).to.equal(
'<p>te<span style="font-family: Arial;">st</span></p>'
);
});
});
});
describe('Align', function() {
it('Justify to right', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<p>test</p>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 2);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifyright');
expect(editor.getEditorValue()).to.equal(
'<p style="text-align: right;">test</p>'
);
});
it('Justify to center', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 2);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifycenter');
expect(editor.getEditorValue()).to.equal(
'<p style="text-align: center;">test</p>'
);
});
it('Justify to left', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue(
'test some text <span>test</span><br><p>data</p>'
);
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 8);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifyleft');
expect(editor.getEditorValue()).to.equal(
'<p style="text-align: left;">test some text <span>test</span><br></p><p>data</p>'
);
});
it('Justify to left in element of unordered list', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<ul><li>test</li><li>data</li></ul>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild.firstChild, 2);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifyleft');
expect(editor.getEditorValue()).to.equal(
'<ul><li style="text-align: left;">test</li><li>data</li></ul>'
);
});
it('Justify to full', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('<h1>test some text <span>test</span></h1>');
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild.firstChild, 8);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifyfull');
expect(editor.getEditorValue()).to.equal(
'<h1 style="text-align: justify;">test some text <span>test</span></h1>'
);
});
describe('Justify plain text with enter = br mode', function() {
it('Should wrap this text in enterBlock element', function() {
var editor = new Jodit(appendTestArea(), {
enter: 'br'
});
editor.value = 'test';
var sel = editor.editorWindow.getSelection(),
range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 0);
range.setEnd(editor.editor.firstChild, 4);
sel.removeAllRanges();
sel.addRange(range);
editor.execCommand('justifyleft');
expect(editor.getEditorValue()).to.equal(
'<p style="text-align: left;">test</p>'
);
});
});
});
describe('Register sustom command', function() {
it('Should register command and hotkeys for it', function() {
var editor = new Jodit(appendTestArea());
editor.setEditorValue('test test test');
var range = editor.editorDocument.createRange();
range.setStart(editor.editor.firstChild, 4);
range.setEnd(editor.editor.firstChild, 8);
editor.selection.selectRange(range);
editor.registerCommand('someCommand', function() {
this.setEditorValue('stop');
});
expect('stop').to.be.not.equal(editor.getEditorValue());
editor.execCommand('someCommand');
expect('stop').to.be.equal(editor.getEditorValue());
editor.registerCommand('someCommands', {
hotkeys: 'ctrl+d',
exec: function() {
this.setEditorValue('even');
}
});
expect('even').to.be.not.equal(editor.getEditorValue());
// ctrl+d
simulateEvent('keydown', 68, editor.editor, function(data) {
// data.shiftKey = true;
data.ctrlKey = true;
});
expect('even').to.be.equal(editor.getEditorValue());
});
});
describe('Indent', function() {
describe('Exec Indent command several times', function() {
it('Should increase margin-left', function() {
var editor = new Jodit(appendTestArea());
editor.value = '<ul><li>test</li></ul>';
var range = editor.editorDocument.createRange();
range.setStart(
editor.editor.firstChild.firstChild.firstChild,
0
);
range.collapse(true);
editor.selection.selectRange(range);
editor.execCommand('indent');
expect(editor.value).to.be.equal(
'<ul><li style="margin-left: 10px;">test</li></ul>'
);
editor.execCommand('indent');
expect(editor.value).to.be.equal(
'<ul><li style="margin-left: 20px;">test</li></ul>'
);
editor.execCommand('indent');
expect(editor.value).to.be.equal(
'<ul><li style="margin-left: 30px;">test</li></ul>'
);
editor.execCommand('outdent');
expect(editor.value).to.be.equal(
'<ul><li style="margin-left: 20px;">test</li></ul>'
);
});
});
});
afterEach(removeStuff);
});