-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
textPalette.js
77 lines (68 loc) · 2.52 KB
/
textPalette.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
tui.editor.Editor.defineExtension('textPalette', function(editor) {
var $layer = $('<div style="z-index:9999;border:1px solid #f00;width:200px"></div>');
var isTextPaleltteActive = false;
var to;
$(editor.options.el).append($layer);
function showUI(list) {
$layer.html(list.join('<br>'));
$layer.show();
}
function hideUI() {
$layer.hide();
}
editor.on('change', function() {
if (isTextPaleltteActive) {
//현제 커서위치까지 텍스트오브젝트의 범위를 확장한다.
to.setEndBeforeRange(editor.getRange());
showUI(['ac1', 'ac2', 'ac3', to.getTextContent()]);
} else {
//텍스트오브젝트를 만든다.
to = editor.getTextObject();
//스타트오프셋을 한칸 확장한다(커서이전의 텍스트로)
to.expandStartOffset();
//@인지 확인
if (to.getTextContent()[0] === '@') {
isTextPaleltteActive = true;
editor.addWidget(editor.getRange(), $layer[0]);
showUI(['ac1', 'ac2', 'ac3']);
}
}
});
editor.on('keyMap', function(ev) {
if (isTextPaleltteActive) {
switch (ev.keyMap) {
case 'ENTER': {
ev.data.preventDefault();
isTextPaleltteActive = false;
//값을 변경하기전 현제 커서위치까지 텍스트오브젝트를 확장한다.
to.setEndBeforeRange(editor.getRange());
//텍스트 오브젝트 범위의 컨텐츠를 바꾼다.
if (editor.isWysiwygMode()) {
to.replaceContent(' <b>--newTEXT--</b> ');
} else {
to.replaceContent('**--newTEXT--** ');
}
hideUI();
break;
}
case 'SPACE': {
isTextPaleltteActive = false;
hideUI();
break;
}
case 'DOWN': {
ev.data.preventDefault();
console.log('셀렉트박스 내리기');
break;
}
case 'UP': {
ev.data.preventDefault();
console.log('셀렉트박스 올리기');
break;
}
default:
}
}
});
});