<
From version < 2.1 >
edited by Richard Johnson
on 2019/03/30 12:59
To version < 6.1 >
edited by Richard Johnson
on 2020/08/21 14:32
>
Change comment: Install extension [org.xwiki.platform:xwiki-platform-messagestream-ui/12.6.1]

Summary

Details

Icon XWiki.JavaScriptExtension[0]
Code
... ... @@ -1,9 +1,10 @@
1 1  var XWiki = (function (XWiki) {
2 2  // Start XWiki augmentation.
3 3  XWiki.MessageStream = Class.create({
4 - initialize : function() {
5 - this.prepareForms();
6 - this.enhanceSelect();
4 + initialize : function(container) {
5 + container = container || $(document.body);
6 + this.prepareForms(container);
7 + this.enhanceSelect(container);
7 7   },
8 8   prepareTargetInput : function(event, element) {
9 9   var targetType = element.options[element.selectedIndex].value;
... ... @@ -30,14 +30,14 @@
30 30   }
31 31   });
32 32   },
33 - enhanceSelect: function () {
34 - $$('.messagestream select[name="visibilityLevel"]').each(function(element) {
34 + enhanceSelect: function (container) {
35 + container.select('.messagestream select[name="visibilityLevel"]').each(function(element) {
35 35   element.observe('change', this.prepareTargetInput.bindAsEventListener(this, element));
36 36   this.prepareTargetInput(null, element);
37 37   }.bind(this));
38 38   },
39 - prepareForms: function() {
40 - $$('.messagestream form').each(function(msForm) {
40 + prepareForms: function(container) {
41 + container.select('.messagestream form').each(function(msForm) {
41 41   msForm.action = msForm.action.replace(/xredirect=.*$/, 'xpage=plain')
42 42   msForm.observe('submit', function(event) {
43 43   event.stop();
... ... @@ -93,11 +93,21 @@
93 93   }
94 94  });
95 95  
96 -var init = function() {
97 - return new XWiki.MessageStream();
97 +var init = function (event) {
98 + var elements = (event && event.memo.elements) || [$(document.body)];
99 + elements.forEach(function(container) {
100 + new XWiki.MessageStream(container);
101 + });
102 + return true;
98 98  };
99 -(XWiki.domIsLoaded && init()) || document.observe('xwiki:dom:loaded', init);
100 100  
105 +// Initialize the message sender macro when the page is loaded.
106 +(XWiki.domIsLoaded && init())
107 +|| document.observe('xwiki:dom:loaded', init);
108 +
109 +// Initialize the message sender macro when it is added after the page is loaded.
110 +document.observe('xwiki:dom:updated', init);
111 +
101 101  // End XWiki augmentation.
102 102  return XWiki;
103 103  }(XWiki || {}));
Icon XWiki.StyleSheetExtension[0]
Code
... ... @@ -1,3 +1,5 @@
1 +#template('colorThemeInit.vm')
2 +
1 1  .messagestream-tools {
2 2   display: flex;
3 3   position: relative;
... ... @@ -10,3 +10,37 @@
10 10   flex-grow: 1;
11 11   margin-left: .3em;
12 12  }
15 +
16 +.messagestream .message-content {
17 + padding: .5em 0 .5em 75px;
18 +}
19 +
20 +.messagestream .activitySnapshot {
21 + height: 30px;
22 + margin: 5px 0 0 -50px;
23 + position: absolute;
24 +}
25 +
26 +.messagestream .activitySnapshot img {
27 + border-radius: 10px 10px 0 10px;
28 + box-shadow: -1px 1px 1px rgba(128,128,128,0.6);
29 +}
30 +
31 +/* User's avatar */
32 +.messagestream .activitySnapshot .avatar {
33 + border-radius: 4px;
34 + box-shadow: 0 0 2px 1px rgba(128,128,128,0.6);
35 +}
36 +
37 +.messagestream .activitySnapshot .activityActionAvatar {
38 + background: $theme.pageContentBackgroundColor;
39 + border-color: $theme.pageContentBackgroundColor;
40 + border-style: solid;
41 + border-width: 4px 1px 1px 3px;
42 + box-sizing: content-box;
43 + bottom: -5px;
44 + height: 16px;
45 + position: absolute;
46 + right: -10px;
47 + width: 16px;
48 +}
Parse content
... ... @@ -1,1 +1,1 @@
1 -No
1 +Yes
Icon 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,7 +34,6 @@
34 34  ##
35 35  ## Skin Extensions
36 36  ##--------------------------------------------------------------
37 -#set ($discard = $xwiki.ssx.use('Main.Activity'))
38 38  #set ($discard = $xwiki.ssx.use('Main.MessageSenderMacro'))
39 39  #set ($discard = $xwiki.jsx.use('Main.MessageSenderMacro'))
40 40  {{/velocity}}
... ... @@ -113,11 +113,11 @@
113 113   #set ($actionQueryString = "xredirect=$escapetool.url($xredirect)")
114 114   {{html}}
115 115   ## Wrap the form in a div so that the layout is preserved in inline mode (where the form is stripped by the rendering).
116 - <div class='messagestream activityUser xform'>
113 + <div class='messagestream xform'>
117 117   #if (!$inEditMode)
118 118   <form action="${xwiki.getURL('Main.MessageSenderMacro', 'view', $!{actionQueryString})}" method='post'>
119 119   #end
120 - <div class='activityContent'>
117 + <div class='message-content'>
121 121   #if(!$inEditMode)
122 122   ## CSRF prevention
123 123   <input type="hidden" name="form_token" value="$!{services.csrf.getToken()}" />
... ... @@ -139,13 +139,13 @@
139 139   #if (!$defaultTarget)
140 140   #if ($doc.getObject('XWiki.XWikiGroups'))
141 141   #set ($defaultTarget = 'group')
142 - #set ($targetName = $doc.prefixedFullName)
139 + #set ($targetName = $doc.fullName)
143 143   #elseif ($doc.getObject('XWiki.XWikiUsers'))
144 - #if ($doc.prefixedFullName == $currentUser)
141 + #if ($doc.documentReference == $xcontext.userReference)
145 145   #set ($defaultTarget = 'followers')
146 146   #else
147 147   #set ($defaultTarget = 'user')
148 - #set ($targetName = $doc.prefixedFullName)
145 + #set ($targetName = $doc.fullName)
149 149   #end
150 150   #else
151 151   #set ($defaultTarget = 'everyone')
... ... @@ -158,25 +158,28 @@
158 158   #end
159 159   </select>
160 160   </label>
161 - #set ($userPickerParams = {
158 + #set ($suggestPickerParams = {
162 162   'name': 'targetName',
163 - 'value': $targetName,
164 164   'title': $services.localization.render('xe.activity.messages.visibility.targetName.tip')
165 165   })
166 - #if ($possibleTargets.contains('user'))
167 - <div class="message-target message-target-user#if ($defaultTarget != 'user') hidden#end">
168 - #set ($discard = $userPickerParams.put('class', 'targetName'))
169 - #set ($userPickerParams.disabled = $inEditMode || $defaultTarget != 'user')
170 - #userPicker(true, $userPickerParams)
171 - </div>
162 + #foreach ($target in ['user', 'group'])
163 + #if ($possibleTargets.contains($target))
164 + #set ($notDefaultTarget = $target != $defaultTarget)
165 + <div class="message-target message-target-$target#if ($notDefaultTarget) hidden#end">
166 + #set ($discard = $suggestPickerParams.put('class', 'targetName'))
167 + #set ($suggestPickerParams.disabled = $inEditMode || $notDefaultTarget)
168 + #set ($suggestPickerParams.value = $targetName)
169 + #if ($notDefaultTarget)
170 + #set ($suggestPickerParams.value = '')
171 + #end
172 + #if ($target == 'user')
173 + #userPicker(false, $suggestPickerParams)
174 + #else
175 + #groupPicker(false, $suggestPickerParams)
176 + #end
177 + </div>
178 + #end
172 172   #end
173 - #if ($possibleTargets.contains('group'))
174 - <div class="message-target message-target-group#if ($defaultTarget != 'group') hidden#end">
175 - #set ($discard = $userPickerParams.put('class', 'targetName'))
176 - #set ($userPickerParams.disabled = $inEditMode || $defaultTarget != 'group')
177 - #groupPicker(true, $userPickerParams)
178 - </div>
179 - #end
180 180   <div class="message-target message-target-default">
181 181   <input type="hidden" name="targetName" value="$!escapetool.xml($targetName)" class="targetName" />
182 182   </div>

Need help?

If you need help with XWiki you can contact: