mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
Abstract the jquery-textcomplete integration with EscapeActions
We now can re-use this integration in multiple places, this will be useful for #342 for instance.
This commit is contained in:
parent
e504ac2894
commit
8bbc69616f
3 changed files with 32 additions and 26 deletions
|
|
@ -89,7 +89,7 @@ mquandalle:autofocus@1.0.0
|
||||||
mquandalle:collection-mutations@0.1.0
|
mquandalle:collection-mutations@0.1.0
|
||||||
mquandalle:jade@0.4.3_1
|
mquandalle:jade@0.4.3_1
|
||||||
mquandalle:jade-compiler@0.4.3
|
mquandalle:jade-compiler@0.4.3
|
||||||
mquandalle:jquery-textcomplete@0.3.9_1
|
mquandalle:jquery-textcomplete@0.8.0_1
|
||||||
mquandalle:jquery-ui-drag-drop-sort@0.1.0
|
mquandalle:jquery-ui-drag-drop-sort@0.1.0
|
||||||
mquandalle:moment@1.0.0
|
mquandalle:moment@1.0.0
|
||||||
mquandalle:mousetrap-bindglobal@0.0.1
|
mquandalle:mousetrap-bindglobal@0.0.1
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
let dropdownMenuIsOpened = false;
|
|
||||||
|
|
||||||
Template.editor.onRendered(() => {
|
Template.editor.onRendered(() => {
|
||||||
const $textarea = this.$('textarea');
|
const $textarea = this.$('textarea');
|
||||||
|
|
||||||
autosize($textarea);
|
autosize($textarea);
|
||||||
|
|
||||||
$textarea.textcomplete([
|
$textarea.escapeableTextComplete([
|
||||||
// Emojies
|
// Emojies
|
||||||
{
|
{
|
||||||
match: /\B:([\-+\w]*)$/,
|
match: /\B:([\-+\w]*)$/,
|
||||||
|
|
@ -44,30 +42,8 @@ Template.editor.onRendered(() => {
|
||||||
index: 1,
|
index: 1,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Since commit d474017 jquery-textComplete automatically closes a potential
|
|
||||||
// opened dropdown menu when the user press Escape. This behavior conflicts
|
|
||||||
// with our EscapeActions system, but it's too complicated and hacky to
|
|
||||||
// monkey-pach textComplete to disable it -- I tried. Instead we listen to
|
|
||||||
// 'open' and 'hide' events, and create a ghost escapeAction when the dropdown
|
|
||||||
// is opened (and rely on textComplete to execute the actual action).
|
|
||||||
$textarea.on({
|
|
||||||
'textComplete:show'() {
|
|
||||||
dropdownMenuIsOpened = true;
|
|
||||||
},
|
|
||||||
'textComplete:hide'() {
|
|
||||||
Tracker.afterFlush(() => {
|
|
||||||
dropdownMenuIsOpened = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
EscapeActions.register('textcomplete',
|
|
||||||
() => {},
|
|
||||||
() => dropdownMenuIsOpened
|
|
||||||
);
|
|
||||||
|
|
||||||
// XXX I believe we should compute a HTML rendered field on the server that
|
// XXX I believe we should compute a HTML rendered field on the server that
|
||||||
// would handle markdown, emojies and user mentions. We can simply have two
|
// would handle markdown, emojies and user mentions. We can simply have two
|
||||||
// fields, one source, and one compiled version (in HTML) and send only the
|
// fields, one source, and one compiled version (in HTML) and send only the
|
||||||
|
|
|
||||||
30
client/lib/textComplete.js
Normal file
30
client/lib/textComplete.js
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
// We “inherit” the jquery-textcomplete plugin to integrate with our
|
||||||
|
// EscapeActions system. You should always use `escapeableTextComplete` instead
|
||||||
|
// of the vanilla `textcomplete`.
|
||||||
|
let dropdownMenuIsOpened = false;
|
||||||
|
|
||||||
|
$.fn.escapeableTextComplete = function(...args) {
|
||||||
|
this.textcomplete(...args);
|
||||||
|
|
||||||
|
// Since commit d474017 jquery-textComplete automatically closes a potential
|
||||||
|
// opened dropdown menu when the user press Escape. This behavior conflicts
|
||||||
|
// with our EscapeActions system, but it's too complicated and hacky to
|
||||||
|
// monkey-pach textComplete to disable it -- I tried. Instead we listen to
|
||||||
|
// 'open' and 'hide' events, and create a ghost escapeAction when the dropdown
|
||||||
|
// is opened (and rely on textComplete to execute the actual action).
|
||||||
|
this.on({
|
||||||
|
'textComplete:show'() {
|
||||||
|
dropdownMenuIsOpened = true;
|
||||||
|
},
|
||||||
|
'textComplete:hide'() {
|
||||||
|
Tracker.afterFlush(() => {
|
||||||
|
dropdownMenuIsOpened = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
EscapeActions.register('textcomplete',
|
||||||
|
() => {},
|
||||||
|
() => dropdownMenuIsOpened
|
||||||
|
);
|
||||||
Loading…
Add table
Add a link
Reference in a new issue