... |
... |
@@ -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 |
}); |