koblog/bl-plugins/quill/quill-1.3.6/test/unit/modules/toolbar.js
2018-10-18 19:21:57 +02:00

163 lines
6 KiB
JavaScript
Executable file

import Quill from '../../../core/quill';
import { addControls } from '../../../modules/toolbar';
describe('Toolbar', function() {
describe('add controls', function() {
it('single level', function() {
addControls(this.container, ['bold', 'italic']);
expect(this.container).toEqualHTML(`
<span class="ql-formats">
<button type="button" class="ql-bold"></button>
<button type="button" class="ql-italic"></button>
</span>
`);
});
it('nested group', function() {
addControls(this.container, [['bold', 'italic'], ['underline', 'strike']]);
expect(this.container).toEqualHTML(`
<span class="ql-formats">
<button type="button" class="ql-bold"></button>
<button type="button" class="ql-italic"></button>
</span>
<span class="ql-formats">
<button type="button" class="ql-underline"></button>
<button type="button" class="ql-strike"></button>
</span>
`);
});
it('button value', function() {
addControls(this.container, ['bold', { header: '2' }]);
expect(this.container).toEqualHTML(`
<span class="ql-formats">
<button type="button" class="ql-bold"></button>
<button type="button" class="ql-header" value="2"></button>
</span>
`);
});
it('select', function() {
addControls(this.container, [{ size: ['10px', false, '18px', '32px'] }]);
expect(this.container).toEqualHTML(`
<span class="ql-formats">
<select class="ql-size">
<option value="10px"></option>
<option selected="selected"></option>
<option value="18px"></option>
<option value="32px"></option>
</select>
</span>
`);
});
it('everything', function() {
addControls(this.container, [
[{ font: [false, 'sans-serif', 'monospace']}, { size: ['10px', false, '18px', '32px'] }],
['bold', 'italic', 'underline', 'strike'],
[{ list: 'ordered' }, { list: 'bullet' }, { align: [false, 'center', 'right', 'justify'] }],
['link', 'image']
]);
expect(this.container).toEqualHTML(`
<span class="ql-formats">
<select class="ql-font">
<option selected="selected"></option>
<option value="sans-serif"></option>
<option value="monospace"></option>
</select>
<select class="ql-size">
<option value="10px"></option>
<option selected="selected"></option>
<option value="18px"></option>
<option value="32px"></option>
</select>
</span>
<span class="ql-formats">
<button type="button" class="ql-bold"></button>
<button type="button" class="ql-italic"></button>
<button type="button" class="ql-underline"></button>
<button type="button" class="ql-strike"></button>
</span>
<span class="ql-formats">
<button type="button" class="ql-list" value="ordered"></button>
<button type="button" class="ql-list" value="bullet"></button>
<select class="ql-align">
<option selected="selected"></option>
<option value="center"></option>
<option value="right"></option>
<option value="justify"></option>
</select>
</span>
<span class="ql-formats">
<button type="button" class="ql-link"></button>
<button type="button" class="ql-image"></button>
</span>
`);
});
});
describe('active', function() {
beforeEach(function() {
let container = this.initialize(HTMLElement, `
<p>0123</p>
<p><strong>5678</strong></p>
<p><a href="http://quilljs.com/">0123</a></p>
<p class="ql-align-center">5678</p>
<p><span class="ql-size-small">01</span><span class="ql-size-large">23</span></p>
`);
this.quill = new Quill(container, {
modules: {
toolbar: [
['bold', 'link'],
[{ 'size': ['small', false, 'large'] }],
[{ 'align': '' }, { 'align': 'center' }]
]
},
theme: 'snow'
});
});
it('toggle button', function() {
let boldButton = this.container.parentNode.querySelector('button.ql-bold');
this.quill.setSelection(7);
expect(boldButton.classList.contains('ql-active')).toBe(true);
this.quill.setSelection(2);
expect(boldButton.classList.contains('ql-active')).toBe(false);
});
it('link', function() {
let linkButton = this.container.parentNode.querySelector('button.ql-link');
this.quill.setSelection(12);
expect(linkButton.classList.contains('ql-active')).toBe(true);
this.quill.setSelection(2);
expect(linkButton.classList.contains('ql-active')).toBe(false);
});
it('dropdown', function() {
let sizeSelect = this.container.parentNode.querySelector('select.ql-size');
this.quill.setSelection(21);
expect(sizeSelect.selectedIndex).toEqual(0);
this.quill.setSelection(23);
expect(sizeSelect.selectedIndex).toEqual(2);
this.quill.setSelection(21, 2);
expect(sizeSelect.selectedIndex).toBeLessThan(0);
this.quill.setSelection(2);
expect(sizeSelect.selectedIndex).toEqual(1);
});
it('custom button', function() {
let centerButton = this.container.parentNode.querySelector('button.ql-align[value="center"]');
let leftButton = this.container.parentNode.querySelector('button.ql-align[value]');
this.quill.setSelection(17);
expect(centerButton.classList.contains('ql-active')).toBe(true);
expect(leftButton.classList.contains('ql-active')).toBe(false);
this.quill.setSelection(2);
expect(centerButton.classList.contains('ql-active')).toBe(false);
expect(leftButton.classList.contains('ql-active')).toBe(true);
this.quill.blur();
expect(centerButton.classList.contains('ql-active')).toBe(false);
expect(leftButton.classList.contains('ql-active')).toBe(false);
});
});
});