Änderungen von Dokument MentionsMacro
Zuletzt geändert von xwikiadmin am 2024/06/24 14:17
Von Version 2.1
bearbeitet von xwikiadmin
am 2022/01/20 11:28
am 2022/01/20 11:28
Änderungskommentar:
Install extension [org.xwiki.platform:xwiki-platform-mentions-ui/13.10.2]
Auf Version 7.1
bearbeitet von xwikiadmin
am 2023/10/26 09:31
am 2023/10/26 09:31
Änderungskommentar:
Install extension [org.xwiki.platform:xwiki-platform-mentions-ui/15.8]
Zusammenfassung
-
Objekte (2 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -1,15 +1,15 @@ 1 1 require.config({ 2 2 paths: { 3 - 'xwiki-suggestUsers': $jsontool.serialize($xwiki.getSkinFile('uicomponents/suggest/suggestUsersAndGroups.js' , true))3 + 'xwiki-suggestUsers': $jsontool.serialize($xwiki.getSkinFile('uicomponents/suggest/suggestUsersAndGroups.js')) 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 - $.when(suggestUsers.loadUsers(userScope, params)).then(function (user){43 - const cct = user.map(function (x) { 42 + suggestUsers.loadUsers(userScope, params).then(users => { 43 + const cct = users.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. done(function(ckeditor){63 - function confMentions(name) {62 + ckeditorPromise.then(ckeditor => { 63 + function getUserMentionsConfig(editor) { 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: '<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>', 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>`, 80 80 outputTemplate: function (param) { 81 - var editor = ckeditor.instances[name]; 82 - editor.once('afterInsertHtml', function () { 82 + editor.once('afterInsertHtml', function() { 83 83 editor.execCommand('xwiki-macro-insert', { 84 84 name: 'mention', 85 85 inline: 'enforce', ... ... @@ -97,21 +97,35 @@ 97 97 }; 98 98 } 99 99 100 - function updateConf(config, name) { 101 - const newConf = config || {}; 102 - newConf.mentions = newConf.mentions || []; 103 - newConf.mentions.push(confMentions(name)); 104 - return newConf; 100 + // Enable the user mentions for the CKEditor instances that have been already created. 101 + Object.values(ckeditor.instances).forEach(maybeEnableUserMentions); 102 + // Enable the user mentions for the CKEditor instances that are going to be created from now on. 103 + ckeditor.on('instanceCreated', (event) => { 104 + maybeEnableUserMentions(event.editor); 105 + }); 106 + 107 + function maybeEnableUserMentions(editor) { 108 + return waitForEditorReady(editor).then((editor) => { 109 + // Check if the Mentions plugin is enabled for the given editor instance. 110 + // TODO: Add support for disabling the user mentions for a particular editor instance (without disabling all 111 + // types of mentions). 112 + if (editor.plugins.mentions) { 113 + editor.plugins.mentions.instances.push(new ckeditor.plugins.mentions(editor, getUserMentionsConfig(editor))); 114 + } 115 + return editor; 116 + }); 105 105 } 106 106 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 - }; 119 + function waitForEditorReady(editor) { 120 + return new Promise((resolve, reject) => { 121 + if (editor.status === 'ready') { 122 + resolve(editor); 123 + } else { 124 + editor.once('instanceReady', (event) => { 125 + resolve(event.editor); 126 + }); 127 + } 128 + }); 129 + } 116 116 }); 117 117 });
- XWiki.WikiMacroClass[0]
-
- Makro-Code
-
... ... @@ -11,6 +11,8 @@ 11 11 #end 12 12 #set ($link = $xwiki.getURL($reference.reference, 'view')) 13 13 {{html}} 14 -<a id="$anchor" class="$stringtool.join($cssClasses, ' ')" data-reference="$services.model.serialize($reference.reference, 'default')" href="$link">$content</a> 14 +<a id="$escapetool.xml($anchor)" class="$stringtool.join($cssClasses, ' ')" data-reference="$escapetool.xml($services.model.serialize($reference.reference, 'default'))" href="$escapetool.xml($link)">## 15 + $escapetool.xml($content)## Do not remove this comment as it ensures that the spacing after mention is not broken. 16 +</a> 15 15 {{/html}} 16 16 {{/velocity}} - Default categories
-
... ... @@ -1,0 +1,1 @@ 1 +Notifications - Standardkategorie
-
... ... @@ -1,1 +1,0 @@ 1 -Notifications