111 lines
3.7 KiB
JavaScript
111 lines
3.7 KiB
JavaScript
ModuleLoader.require([
|
|
"tinymce/InsertContent"
|
|
], function(InsertContent) {
|
|
module("tinymce.InsertContent", {
|
|
setupModule: function() {
|
|
QUnit.stop();
|
|
|
|
tinymce.init({
|
|
selector: "textarea",
|
|
add_unload_trigger: false,
|
|
disable_nodechange: true,
|
|
skin: false,
|
|
entities: 'raw',
|
|
indent: false,
|
|
init_instance_callback: function(ed) {
|
|
window.editor = ed;
|
|
QUnit.start();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
function assertSelection(selector, offset) {
|
|
var node = editor.$(selector)[0];
|
|
var rng = editor.selection.getRng();
|
|
|
|
equal(rng.startContainer, node.firstChild);
|
|
equal(rng.startOffset, offset);
|
|
equal(rng.collapsed, true);
|
|
}
|
|
|
|
test('insertAtCaret - i inside text, converts to em', function() {
|
|
editor.setContent('<p>1234</p>');
|
|
editor.focus();
|
|
Utils.setSelection('p', 2);
|
|
InsertContent.insertAtCaret(editor, '<i>a</i>');
|
|
equal(editor.getContent(), '<p>12<em>a</em>34</p>');
|
|
});
|
|
|
|
test('insertAtCaret - ul at beginning of li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 0);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li></ul>');
|
|
equal(editor.getContent(), '<ul><li>a</li><li>12</li></ul>');
|
|
assertSelection('li:nth-child(2)', 0);
|
|
});
|
|
|
|
test('insertAtCaret - ul with multiple items at beginning of li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 0);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li><li>b</li></ul>');
|
|
equal(editor.getContent(), '<ul><li>a</li><li>b</li><li>12</li></ul>');
|
|
assertSelection('li:nth-child(3)', 0);
|
|
});
|
|
|
|
test('insertAtCaret - ul at end of li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 2);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li></ul>');
|
|
equal(editor.getContent(), '<ul><li>12</li><li>a</li></ul>');
|
|
assertSelection('li:nth-child(2)', 1);
|
|
});
|
|
|
|
test('insertAtCaret - ul with multiple items at end of li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 2);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li><li>b</li><li>c</li></ul>');
|
|
equal(editor.getContent(), '<ul><li>12</li><li>a</li><li>b</li><li>c</li></ul>');
|
|
assertSelection('li:nth-child(4)', 1);
|
|
});
|
|
|
|
test('insertAtCaret - ul with multiple items in middle of li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 1);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li><li>b</li></ul>');
|
|
equal(editor.getContent(), '<ul><li>1</li><li>a</li><li>b</li><li>2</li></ul>');
|
|
assertSelection('li:nth-child(4)', 1);
|
|
});
|
|
|
|
test('insertAtCaret - ul in middle of li with formatting', function() {
|
|
editor.setContent('<ul><li><em><strong>12</strong></em></li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('strong', 1);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li></ul>');
|
|
equal(editor.getContent(), '<ul><li><em><strong>1</strong></em></li><li>a</li><li><em><strong>2</strong></em></li></ul>');
|
|
assertSelection('li:nth-child(3) strong', 1);
|
|
});
|
|
|
|
test('insertAtCaret - ul at beginning of li with empty end li', function() {
|
|
editor.setContent('<ul><li>12</li></ul>');
|
|
editor.focus();
|
|
Utils.setSelection('li', 0);
|
|
InsertContent.insertAtCaret(editor, '<ul><li>a</li><li></li></ul>');
|
|
equal(editor.getContent(), '<ul><li>a</li><li>12</li></ul>');
|
|
assertSelection('li:nth-child(2)', 0);
|
|
});
|
|
|
|
test('insertAtCaret - merge inline elements', function() {
|
|
editor.setContent('<strong><em>abc</em></strong>');
|
|
editor.focus();
|
|
Utils.setSelection('em', 1);
|
|
InsertContent.insertAtCaret(editor, {content: '<em><strong>123</strong></em>', merge: true});
|
|
equal(editor.getContent(), '<p><strong><em>a123bc</em></strong></p>');
|
|
});
|
|
});
|