@zipify/wysiwyg 1.0.0-dev.4 → 1.0.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.release-it.json +0 -1
- package/README.md +3 -1
- package/config/jest/setupTests.js +3 -1
- package/example/ExampleApp.vue +39 -31
- package/example/example.js +26 -0
- package/example/presets.js +2 -0
- package/lib/Wysiwyg.vue +6 -0
- package/lib/composables/__tests__/useEditor.test.js +12 -3
- package/lib/composables/useEditor.js +12 -5
- package/lib/extensions/Alignment.js +6 -0
- package/lib/extensions/BackgroundColor.js +8 -1
- package/lib/extensions/FontColor.js +8 -1
- package/lib/extensions/FontFamily.js +7 -0
- package/lib/extensions/FontSize.js +12 -0
- package/lib/extensions/FontStyle.js +11 -0
- package/lib/extensions/FontWeight.js +25 -1
- package/lib/extensions/LineHeight.js +17 -0
- package/lib/extensions/StylePreset.js +30 -3
- package/lib/extensions/TextDecoration.js +11 -0
- package/lib/extensions/__tests__/Alignment.test.js +22 -1
- package/lib/extensions/__tests__/BackgroundColor.test.js +30 -1
- package/lib/extensions/__tests__/CaseStyle.test.js +4 -1
- package/lib/extensions/__tests__/FontColor.test.js +30 -1
- package/lib/extensions/__tests__/FontFamily.test.js +30 -1
- package/lib/extensions/__tests__/FontSize.test.js +30 -1
- package/lib/extensions/__tests__/FontStyle.test.js +38 -1
- package/lib/extensions/__tests__/FontWeight.test.js +58 -1
- package/lib/extensions/__tests__/LineHeight.test.js +41 -1
- package/lib/extensions/__tests__/StylePreset.test.js +76 -1
- package/lib/extensions/__tests__/TextDecoration.test.js +63 -1
- package/lib/extensions/__tests__/__snapshots__/Alignment.test.js.snap +44 -0
- package/lib/extensions/__tests__/__snapshots__/BackgroundColor.test.js.snap +91 -0
- package/lib/extensions/__tests__/__snapshots__/FontColor.test.js.snap +91 -0
- package/lib/extensions/__tests__/__snapshots__/FontFamily.test.js.snap +91 -0
- package/lib/extensions/__tests__/__snapshots__/FontSize.test.js.snap +99 -0
- package/lib/extensions/__tests__/__snapshots__/FontStyle.test.js.snap +120 -0
- package/lib/extensions/__tests__/__snapshots__/FontWeight.test.js.snap +149 -0
- package/lib/extensions/__tests__/__snapshots__/LineHeight.test.js.snap +92 -0
- package/lib/extensions/__tests__/__snapshots__/StylePreset.test.js.snap +167 -2
- package/lib/extensions/__tests__/__snapshots__/TextDecoration.test.js.snap +207 -0
- package/lib/extensions/core/__tests__/NodeProcessor.test.js +4 -1
- package/lib/extensions/core/__tests__/SelectionProcessor.test.js +9 -4
- package/lib/extensions/core/__tests__/TextProcessor.test.js +4 -1
- package/lib/extensions/index.js +1 -0
- package/lib/extensions/list/List.js +34 -0
- package/lib/extensions/list/__tests__/List.test.js +115 -3
- package/lib/extensions/list/__tests__/__snapshots__/List.test.js.snap +457 -6
- package/lib/services/ContentNormalizer.js +113 -0
- package/lib/services/Storage.js +1 -13
- package/lib/services/__tests__/ContentNormalizer.test.js +41 -0
- package/lib/services/__tests__/FavoriteColors.test.js +20 -0
- package/lib/services/__tests__/JsonSerializer.test.js +23 -0
- package/lib/services/__tests__/Storage.test.js +79 -0
- package/lib/services/index.js +1 -0
- package/lib/utils/__tests__/convertColor.test.js +19 -0
- package/lib/utils/__tests__/createKeyboardShortcut.test.js +25 -0
- package/lib/utils/__tests__/renderInlineSetting.test.js +26 -0
- package/lib/utils/convertColor.js +7 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/renderInlineSetting.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Storage } from '../Storage';
|
|
2
|
+
|
|
3
|
+
const createNativeStorage = (data) => ({
|
|
4
|
+
data: data ?? {},
|
|
5
|
+
setItem: jest.fn(function (key, data) {
|
|
6
|
+
this.data[key] = data;
|
|
7
|
+
}),
|
|
8
|
+
getItem: jest.fn(function (key) {
|
|
9
|
+
return this.data[key] || null;
|
|
10
|
+
})
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
function createStorage({ storage }) {
|
|
14
|
+
return new Storage(storage ?? createNativeStorage());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe('get item', () => {
|
|
18
|
+
test('should return null if no data', () => {
|
|
19
|
+
const storage = createStorage({
|
|
20
|
+
storage: createNativeStorage({})
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
expect(storage.getItem('test')).toBe(null);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('should parse json', () => {
|
|
27
|
+
const storage = createStorage({
|
|
28
|
+
storage: createNativeStorage({
|
|
29
|
+
'zp.test': '{ "test": 1 }'
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
expect(storage.getItem('test')).toEqual({ test: 1 });
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('should handle error in private mode', () => {
|
|
37
|
+
const nativeStorage = createNativeStorage({});
|
|
38
|
+
const storage = createStorage({ storage: nativeStorage });
|
|
39
|
+
const error = new Error('private mode');
|
|
40
|
+
|
|
41
|
+
nativeStorage.getItem.mockImplementation(() => { throw error; });
|
|
42
|
+
storage.getItem('test');
|
|
43
|
+
|
|
44
|
+
// eslint-disable-next-line no-console
|
|
45
|
+
expect(console.error).toHaveBeenCalledWith(error);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('set item', () => {
|
|
50
|
+
test('should set item to storage', () => {
|
|
51
|
+
const nativeStorage = createNativeStorage({});
|
|
52
|
+
const storage = createStorage({ storage: nativeStorage });
|
|
53
|
+
|
|
54
|
+
storage.setItem('test', 'hello');
|
|
55
|
+
|
|
56
|
+
expect(nativeStorage.data).toEqual({ 'zp.test': '"hello"' });
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('should stringify json', () => {
|
|
60
|
+
const nativeStorage = createNativeStorage({});
|
|
61
|
+
const storage = createStorage({ storage: nativeStorage });
|
|
62
|
+
|
|
63
|
+
storage.setItem('test', { test: 1 });
|
|
64
|
+
|
|
65
|
+
expect(nativeStorage.data).toEqual({ 'zp.test': '{"test":1}' });
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('should handle error in private mode', () => {
|
|
69
|
+
const nativeStorage = createNativeStorage({});
|
|
70
|
+
const storage = createStorage({ storage: nativeStorage });
|
|
71
|
+
const error = new Error('private mode');
|
|
72
|
+
|
|
73
|
+
nativeStorage.getItem.mockImplementation(() => { throw error; });
|
|
74
|
+
storage.setItem('test', 'test');
|
|
75
|
+
|
|
76
|
+
// eslint-disable-next-line no-console
|
|
77
|
+
expect(console.error).toHaveBeenCalledWith(error);
|
|
78
|
+
});
|
|
79
|
+
});
|
package/lib/services/index.js
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { convertColor } from '../convertColor';
|
|
2
|
+
|
|
3
|
+
describe('convert color', () => {
|
|
4
|
+
test('should convert alias to color', () => {
|
|
5
|
+
expect(convertColor('red')).toBe('#FF0000');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test('should convert short hex to full', () => {
|
|
9
|
+
expect(convertColor('#F00')).toBe('#FF0000');
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('should convert short hex with alpha to rgba', () => {
|
|
13
|
+
expect(convertColor('#F003')).toBe('rgba(255, 0, 0, 20%)');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('should convert rgba from float to percent', () => {
|
|
17
|
+
expect(convertColor('rgba(255, 0, 0, 0.2)')).toBe('rgba(255, 0, 0, 20%)');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createKeyboardShortcut } from '../createKeyboardShortcut';
|
|
2
|
+
|
|
3
|
+
describe('create shortcut', () => {
|
|
4
|
+
test('should bind command', () => {
|
|
5
|
+
const editor = {
|
|
6
|
+
commands: { toggleBold: jest.fn() }
|
|
7
|
+
};
|
|
8
|
+
const shortcut = createKeyboardShortcut('toggleBold');
|
|
9
|
+
|
|
10
|
+
shortcut({ editor });
|
|
11
|
+
|
|
12
|
+
expect(editor.commands.toggleBold).toHaveBeenCalled();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('should bind command with arguments', () => {
|
|
16
|
+
const editor = {
|
|
17
|
+
commands: { applyAlignment: jest.fn() }
|
|
18
|
+
};
|
|
19
|
+
const shortcut = createKeyboardShortcut('applyAlignment', 'left');
|
|
20
|
+
|
|
21
|
+
shortcut({ editor });
|
|
22
|
+
|
|
23
|
+
expect(editor.commands.applyAlignment).toHaveBeenCalledWith('left');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -27,6 +27,16 @@ describe('render settings', () => {
|
|
|
27
27
|
expect(result).toMatchSnapshot();
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
+
test('should render no attributes if all styles empty', () => {
|
|
31
|
+
const result = renderMark({
|
|
32
|
+
mobile_font_size: null,
|
|
33
|
+
tablet_font_size: null,
|
|
34
|
+
desktop_font_size: null
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
expect(result[1]).toEqual({});
|
|
38
|
+
});
|
|
39
|
+
|
|
30
40
|
test('should render unwrapped styles', () => {
|
|
31
41
|
const result = renderInlineSetting({
|
|
32
42
|
mobile_font_size: '',
|
|
@@ -36,4 +46,20 @@ describe('render settings', () => {
|
|
|
36
46
|
|
|
37
47
|
expect(result).toMatchSnapshot();
|
|
38
48
|
});
|
|
49
|
+
|
|
50
|
+
test('should return null if no styles', () => {
|
|
51
|
+
const result = renderInlineSetting({});
|
|
52
|
+
|
|
53
|
+
expect(result).toBe(null);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test('should return null if all styles empty', () => {
|
|
57
|
+
const result = renderInlineSetting({
|
|
58
|
+
mobile_font_size: null,
|
|
59
|
+
tablet_font_size: null,
|
|
60
|
+
desktop_font_size: null
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
expect(result).toBe(null);
|
|
64
|
+
});
|
|
39
65
|
});
|
package/lib/utils/index.js
CHANGED
|
@@ -2,3 +2,4 @@ export { createCommand } from './createCommand';
|
|
|
2
2
|
export { renderInlineSetting, renderMark } from './renderInlineSetting';
|
|
3
3
|
export { capitalize } from './capitalize';
|
|
4
4
|
export { createKeyboardShortcut } from './createKeyboardShortcut';
|
|
5
|
+
export { convertColor } from './convertColor';
|
|
@@ -13,5 +13,5 @@ export function renderInlineSetting(setting) {
|
|
|
13
13
|
export function renderMark(setting) {
|
|
14
14
|
const attrs = renderInlineSetting(setting);
|
|
15
15
|
|
|
16
|
-
return ['span', attrs ? { ...attrs, class: 'zw-style' } :
|
|
16
|
+
return ['span', attrs ? { ...attrs, class: 'zw-style' } : {}, 0];
|
|
17
17
|
}
|