Changes for page Message Sender Macro
Last modified by Ludovic Dubost on 2024/07/22 15:51
From version 5.1
edited by Ludovic Dubost
on 2018/11/30 15:23
on 2018/11/30 15:23
Change comment:
Migrated property [type] from class [XWiki.WikiMacroParameterClass]
To version 7.1
edited by Ludovic Dubost
on 2018/12/09 12:24
on 2018/12/09 12:24
Change comment:
Install extension [org.xwiki.platform:xwiki-platform-messagestream-ui/10.10]
Summary
-
Objects (3 modified, 0 added, 0 removed)
Details
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -1,41 +5,6 @@ 1 -#set ($userSuggestScope = 'local') 2 -#if ($services.wiki.user && $services.wiki.user.userScope != "LOCAL_ONLY") 3 - #set ($userSuggestScope = 'global') 4 -#end 5 5 var XWiki = (function (XWiki) { 6 6 // Start XWiki augmentation. 7 -/** 8 - * Extends the UserPicker in order to display the selected user/group inline after the target text input. 9 - */ 10 -var CustomUserPicker = Class.create(XWiki.widgets.UserPicker, { 11 - // @Override 12 - _createSelectionManager: function($super, options) { 13 - var selectionManager = $super(Object.extend(options, { 14 - listInsertionPosition : 'after', 15 - acceptFreeText : false 16 - })); 17 - // Overwrite the way the selected item is displayed. 18 - selectionManager.displayItem = function(suggestion) { 19 - var targetInfo = new Element('span').update(suggestion.info).insert(this.createDeleteTool()); 20 - var targetClass = this.suggest.sources[0].script.indexOf('uorg=group') > 0 ? 'target-group' : 'target-user'; 21 - return new Element('li', {'class': targetClass}).insert(targetInfo).insert(this.createItemInput(suggestion)); 22 - }.bind(selectionManager); 23 - return selectionManager; 24 - } 25 -}); 26 - 27 27 XWiki.MessageStream = Class.create({ 28 - targetsWithName : ['user', 'group'], 29 - suggestParameters : { 30 - user : { 31 - script: '$doc.getURL("get", "xpage=uorgsuggest&uorg=user&wiki=${userSuggestScope}")&', 32 - noresults: "$escapetool.javascript($services.localization.render('core.widgets.userPicker.noResults'))" 33 - }, 34 - group : { 35 - script: "$doc.getURL('get', 'xpage=uorgsuggest&uorg=group')&", 36 - noresults: "$escapetool.javascript($services.localization.render('core.widgets.groupPicker.noResults'))" 37 - } 38 - }, 39 39 initialize : function() { 40 40 this.prepareForms(); 41 41 this.enhanceSelect(); ... ... @@ -43,30 +43,30 @@ 43 43 prepareTargetInput : function(event, element) { 44 44 var targetType = element.options[element.selectedIndex].value; 45 45 element.className = targetType; 46 - if (!element.__targetNameInput) {return;} 47 - if (this.targetsWithName.indexOf(targetType) < 0) { 48 - element.__targetNameInput.addClassName('hidden'); 49 - if (element.__targetNameInput.__x_suggest) { 50 - element.__targetNameInput.__x_suggest.detach(); 51 - } 52 - } else { 53 - // Focus the text input so that the place-holder value is cleared if present. Otherwise the user picker will treat 54 - // the place-holder value as if it was typed by the user and will automatically select the corresponding suggestion. 55 - element.__targetNameInput.removeClassName('hidden').activate(); 56 - // Defer the creation of the user picker to allow the focus listeners to be called first (in order to clear the 57 - // place-holder value). 58 - this.suggestParameters[targetType] && function() { 59 - new CustomUserPicker(element.__targetNameInput, this.suggestParameters[targetType]); 60 - }.bind(this).defer(); 11 + var messageStream = element.up('.messagestream'); 12 + var targetInputContainer = messageStream.down('.message-target-' + targetType); 13 + if (!targetInputContainer) { 14 + targetInputContainer = messageStream.down('.message-target-default'); 61 61 } 16 + messageStream.select('.message-target').forEach(function(messageTargetContainer) { 17 + var fields = messageTargetContainer.select('input, select, textarea'); 18 + if (messageTargetContainer === targetInputContainer) { 19 + messageTargetContainer.removeClassName('hidden'); 20 + fields.forEach(function(field) { 21 + field.enable(); 22 + field.hasClassName('selectized') && field.selectize.enable(); 23 + }); 24 + } else { 25 + messageTargetContainer.addClassName('hidden'); 26 + fields.forEach(function(field) { 27 + field.disable(); 28 + field.hasClassName('selectized') && field.selectize.disable(); 29 + }); 30 + } 31 + }); 62 62 }, 63 63 enhanceSelect: function () { 64 64 $$('.messagestream select[name="visibilityLevel"]').each(function(element) { 65 - element.addClassName(element.options[element.selectedIndex].value); 66 - element.__targetNameInput = element.up('.messagestream').down('input[name="targetName"]'); 67 - if (element.__targetNameInput && this.targetsWithName.indexOf(element.options[element.selectedIndex].value) < 0) { 68 - element.__targetNameInput.addClassName('hidden'); 69 - } 70 70 element.observe('change', this.prepareTargetInput.bindAsEventListener(this, element)); 71 71 this.prepareTargetInput(null, element); 72 72 }.bind(this));
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -1,29 +3,12 @@ 1 -#template('colorThemeInit.vm') 2 - 3 3 .messagestream-tools { 2 + display: flex; 4 4 position: relative; 5 5 margin: .5em 0 1em; 6 6 } 7 -.messagestream-tools .accepted-suggestions { 8 - display: inline; 9 -} 10 -.messagestream-tools .accepted-suggestions .target-user, 11 -.messagestream-tools .accepted-suggestions .target-group { 12 - background: none no-repeat scroll left center transparent; 13 - display: inline-block; 14 - margin-right: 1em; 15 - padding: 0 1px 0 18px; 16 -} 17 -.messagestream-tools .accepted-suggestions .target-user { 18 - background-image: url("$xwiki.getSkinFile('icons/silk/user.png')"); 19 -} 20 -.messagestream-tools .accepted-suggestions .target-group { 21 - background-image: url("$xwiki.getSkinFile('icons/silk/group.png')"); 22 -} 23 23 .messagestream select { 24 24 width: auto; 25 25 } 26 -.messagestream input.targetName {27 - margin-right:.3em;28 - width:auto;9 +.messagestream .message-target { 10 + flex-grow: 1; 11 + margin-left: .3em; 29 29 } - Parse content
-
... ... @@ -1,1 +1,1 @@ 1 - Yes1 +No
- XWiki.WikiMacroClass[0]
-
- Macro code
-
... ... @@ -7,8 +7,6 @@ 7 7 #set ($configClass = $xwiki.getDocument($config).getxWikiClass()) 8 8 #set ($isMessageStreamActive = $services.messageStream.isActive()) 9 9 10 -#set ($currentUser = $services.model.serialize($xcontext.userReference, 'default')) 11 - 12 12 #set ($activityActionsMap = { 13 13 'publicMessage': 'icons/silk/user_comment.png', 14 14 'personalMessage': 'icons/silk/user_comment.png', ... ... @@ -34,8 +34,6 @@ 34 34 ## 35 35 ## Skin Extensions 36 36 ##-------------------------------------------------------------- 37 -#set ($discard = $xwiki.jsfx.use('uicomponents/suggest/suggestPicker.js')) 38 -#set ($discard = $xwiki.jsfx.use('uicomponents/widgets/userpicker/userPicker.js')) 39 39 #set ($discard = $xwiki.ssx.use('Main.Activity')) 40 40 #set ($discard = $xwiki.ssx.use('Main.MessageSenderMacro')) 41 41 #set ($discard = $xwiki.jsx.use('Main.MessageSenderMacro')) ... ... @@ -141,13 +141,13 @@ 141 141 #if (!$defaultTarget) 142 142 #if ($doc.getObject('XWiki.XWikiGroups')) 143 143 #set ($defaultTarget = 'group') 144 - #set ($targetName = $doc. prefixedFullName)140 + #set ($targetName = $doc.fullName) 145 145 #elseif ($doc.getObject('XWiki.XWikiUsers')) 146 - #if ($doc. prefixedFullName == $currentUser)142 + #if ($doc.documentReference == $xcontext.userReference) 147 147 #set ($defaultTarget = 'followers') 148 148 #else 149 149 #set ($defaultTarget = 'user') 150 - #set ($targetName = $doc. prefixedFullName)146 + #set ($targetName = $doc.fullName) 151 151 #end 152 152 #else 153 153 #set ($defaultTarget = 'everyone') ... ... @@ -160,16 +160,31 @@ 160 160 #end 161 161 </select> 162 162 </label> 163 - <label for="targetName$!{targetNameCounter}"> 164 - <span class='hidden'>Name:</span> 165 - <input type="text" name="targetName" id="targetName$!targetNameCounter" class="targetName withTip useTitleAsTip" value="$!targetName" size="15" 166 - title="$services.localization.render('xe.activity.messages.visibility.targetName.tip')" #if ($inEditMode) disabled="disabled"#end/> 167 - </label> 168 - #if (!$targetNameCounter) 169 - #set ($targetNameCounter = 1) 170 - #else 171 - #set ($targetNameCounter = $targetNameCounter + 1) 159 + #set ($suggestPickerParams = { 160 + 'name': 'targetName', 161 + 'title': $services.localization.render('xe.activity.messages.visibility.targetName.tip') 162 + }) 163 + #foreach ($target in ['user', 'group']) 164 + #if ($possibleTargets.contains($target)) 165 + #set ($notDefaultTarget = $target != $defaultTarget) 166 + <div class="message-target message-target-$target#if ($notDefaultTarget) hidden#end"> 167 + #set ($discard = $suggestPickerParams.put('class', 'targetName')) 168 + #set ($suggestPickerParams.disabled = $inEditMode || $notDefaultTarget) 169 + #set ($suggestPickerParams.value = $targetName) 170 + #if ($notDefaultTarget) 171 + #set ($suggestPickerParams.value = '') 172 + #end 173 + #if ($target == 'user') 174 + #userPicker(false, $suggestPickerParams) 175 + #else 176 + #groupPicker(false, $suggestPickerParams) 177 + #end 178 + </div> 179 + #end 172 172 #end 181 + <div class="message-target message-target-default"> 182 + <input type="hidden" name="targetName" value="$!escapetool.xml($targetName)" class="targetName" /> 183 + </div> 173 173 </div> 174 174 <div class='messagestream-buttons'> 175 175 <span class='butonwrapper'><input type='submit' value="$services.localization.render('xe.activity.messages.submit')" class='button'#if($inEditMode) disabled='disabled'#end/></span>