| ... |
... |
@@ -1,15 +1,15 @@ |
| 1 |
1 |
require.config({ |
| 2 |
2 |
paths: { |
| 3 |
|
- 'xwiki-suggestUsers': $jsontool.serialize($xwiki.getSkinFile('uicomponents/suggest/suggestUsersAndGroups.js')) |
|
3 |
+ 'xwiki-suggestUsers': $jsontool.serialize($xwiki.getSkinFile('uicomponents/suggest/suggestUsersAndGroups.js', true)) |
| 4 |
4 |
} |
| 5 |
5 |
}); |
| 6 |
6 |
require(['deferred!ckeditor', 'xwiki-suggestUsers', 'jquery', 'xwiki-meta'], function (ckeditorPromise, suggestUsers, $, xm) { |
| 7 |
|
- |
|
7 |
+ |
| 8 |
8 |
/** |
| 9 |
9 |
* Get the current wiki scope for displaying global, local or global and local users |
| 10 |
10 |
*/ |
| 11 |
11 |
const userScope = "$!services.wiki.user.userScope"; |
| 12 |
|
- |
|
12 |
+ |
| 13 |
13 |
// see https://stackoverflow.com/a/6248722/657524 |
| 14 |
14 |
function random6chars() { |
| 15 |
15 |
// I generate the UID from two parts here |
| ... |
... |
@@ -20,7 +20,7 @@ |
| 20 |
20 |
secondPart = ("000" + secondPart.toString(36)).slice(-3); |
| 21 |
21 |
return firstPart + secondPart; |
| 22 |
22 |
} |
| 23 |
|
- |
|
23 |
+ |
| 24 |
24 |
/** |
| 25 |
25 |
* Compute a new unique anchor for the given reference. |
| 26 |
26 |
* The unique anchor is based on the mentionned user id, concatenaed with a random string of 6 alphanumeric |
| ... |
... |
@@ -39,8 +39,8 @@ |
| 39 |
39 |
'input': text, |
| 40 |
40 |
'limit': 6, |
| 41 |
41 |
}; |
| 42 |
|
- suggestUsers.loadUsers(userScope, params).then(users => { |
| 43 |
|
- const cct = users.map(function (x) { |
|
42 |
+ $.when(suggestUsers.loadUsers(userScope, params)).then(function (user) { |
|
43 |
+ const cct = user.map(function (x) { |
| 44 |
44 |
// insert an id because that's required by the mentions plugins. |
| 45 |
45 |
x.id = x.value; |
| 46 |
46 |
// Make sure to display the icon avatar or the image one. |
| ... |
... |
@@ -56,11 +56,11 @@ |
| 56 |
56 |
return x; |
| 57 |
57 |
}); |
| 58 |
58 |
callback(cct); |
| 59 |
|
- }); |
|
59 |
+ }) |
| 60 |
60 |
} |
| 61 |
61 |
|
| 62 |
|
- ckeditorPromise.then(ckeditor => { |
| 63 |
|
- function getUserMentionsConfig(editor) { |
|
62 |
+ ckeditorPromise.done(function (ckeditor) { |
|
63 |
+ function confMentions(name) { |
| 64 |
64 |
return { |
| 65 |
65 |
feed: function (opts, callback) { |
| 66 |
66 |
search(opts.query, callback); |
| ... |
... |
@@ -68,18 +68,18 @@ |
| 68 |
68 |
marker: '@', |
| 69 |
69 |
minChars: 0, |
| 70 |
70 |
itemsLimit: 6, |
| 71 |
|
- itemTemplate: |
| 72 |
|
- `<li data-id="{id}" class="ckeditor-autocomplete-item"> |
| 73 |
|
- <div> |
| 74 |
|
- <span class="ckeditor-autocomplete-item-icon-wrapper"> |
| 75 |
|
- <span class="{cssClass}"></span> |
| 76 |
|
- <img src="{imgUrl}" class="{imgClass}"/> |
| 77 |
|
- </span> |
| 78 |
|
- <span class="ckeditor-autocomplete-item-label">{label}</span> |
| 79 |
|
- </div> |
| 80 |
|
- </li>`, |
|
71 |
+ itemTemplate: '<li data-id="{id}" class="ckeditor-autocomplete-item">'+ |
|
72 |
+ '<div>'+ |
|
73 |
+ '<span class="ckeditor-autocomplete-item-icon-wrapper">'+ |
|
74 |
+ '<span class="{cssClass}"></span>'+ |
|
75 |
+ '<img src="{imgUrl}" class="{imgClass}"/>'+ |
|
76 |
+ '</span>'+ |
|
77 |
+ '<span class="ckeditor-autocomplete-item-label">{label}</span>'+ |
|
78 |
+ '</div>'+ |
|
79 |
+ '</li>', |
| 81 |
81 |
outputTemplate: function (param) { |
| 82 |
|
- editor.once('afterInsertHtml', function() { |
|
81 |
+ var editor = ckeditor.instances[name]; |
|
82 |
+ editor.once('afterInsertHtml', function () { |
| 83 |
83 |
editor.execCommand('xwiki-macro-insert', { |
| 84 |
84 |
name: 'mention', |
| 85 |
85 |
inline: 'enforce', |
| ... |
... |
@@ -97,19 +97,21 @@ |
| 97 |
97 |
}; |
| 98 |
98 |
} |
| 99 |
99 |
|
| 100 |
|
- function updateConfig(editor) { |
| 101 |
|
- editor.config.mentions = editor.config.mentions || []; |
| 102 |
|
- editor.config.mentions.push(getUserMentionsConfig(editor)); |
|
100 |
+ function updateConf(config, name) { |
|
101 |
+ const newConf = config || {}; |
|
102 |
+ newConf.mentions = newConf.mentions || []; |
|
103 |
+ newConf.mentions.push(confMentions(name)); |
|
104 |
+ return newConf; |
| 103 |
103 |
} |
| 104 |
104 |
|
| 105 |
|
- ckeditor.on('instanceCreated', function(event) { |
| 106 |
|
- // The editor instance was created but it not yet initialized. Unfortunately the configuration object passed when |
| 107 |
|
- // the instance was created has not been merged with the global configuration yet. |
| 108 |
|
- event.editor.once('configLoaded', function(event) { |
| 109 |
|
- // The editor configuration has been loaded (the instance configuration has been merged with the global |
| 110 |
|
- // configuration) but the editor has not been fully initialized yet so we can modify the configuration. |
| 111 |
|
- updateConfig(event.editor); |
| 112 |
|
- }); |
| 113 |
|
- }); |
|
107 |
+ var oldReplace = ckeditor.replace; |
|
108 |
+ ckeditor.replace = function (element, config) { |
|
109 |
+ return oldReplace.call(this, element, updateConf(config, element.id)); |
|
110 |
+ }; |
|
111 |
+ |
|
112 |
+ var oldInline = ckeditor.inline; |
|
113 |
+ ckeditor.inline = function (element, config) { |
|
114 |
+ return oldInline.call(this, element, updateConf(config, element.id)); |
|
115 |
+ }; |
| 114 |
114 |
}); |
| 115 |
115 |
}); |