]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #13605 from annando/button-counter
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 4 Nov 2023 22:36:22 +0000 (15:36 -0700)
committerGitHub <noreply@github.com>
Sat, 4 Nov 2023 22:36:22 +0000 (15:36 -0700)
Frio: The activity buttons now have got counters

src/Content/Conversation.php
src/Model/Event.php
src/Object/Post.php
view/global.css
view/lang/C/messages.po
view/theme/frio/css/style.css
view/theme/frio/templates/wall_thread.tpl

index c52517cf8a350c87da7e6ffb92d038310d92aa55..5a32bf32f264eaa950c5f8b209abaecd5e6b6191 100644 (file)
@@ -890,7 +890,8 @@ class Conversation
                }
 
                if ($this->config->get('system', 'emoji_activities')) {
-                       $emojis = $this->getEmojis($uriids);
+                       $emojis      = $this->getEmojis($uriids);
+                       $quoteshares = $this->getQuoteShares($uriids);
                        $condition = DBA::mergeConditions($condition, ["(`gravity` != ? OR `origin`)", ItemModel::GRAVITY_ACTIVITY]);
                }
 
@@ -1012,7 +1013,8 @@ class Conversation
                }
 
                foreach ($items as $key => $row) {
-                       $items[$key]['emojis'] = $emojis[$key] ?? [];
+                       $items[$key]['emojis']      = $emojis[$key] ?? [];
+                       $items[$key]['quoteshares'] = $quoteshares[$key] ?? [];
 
                        $always_display = in_array($mode, [self::MODE_CONTACTS, self::MODE_CONTACT_POSTS]);
 
@@ -1056,19 +1058,24 @@ class Conversation
                ];
 
                $index_list = array_values($activity_emoji);
-               $verbs      = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT]);
+               $verbs      = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT, Activity::POST]);
 
-               $condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => ItemModel::GRAVITY_ACTIVITY, 'verb' => $verbs], ["NOT `deleted`"]);
+               $condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => [ItemModel::GRAVITY_ACTIVITY, ItemModel::GRAVITY_COMMENT], 'verb' => $verbs], ["NOT `deleted`"]);
                $separator = chr(255) . chr(255) . chr(255);
 
-               $sql = "SELECT `thr-parent-id`, `body`, `verb`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `thr-parent-id`, `verb`, `body`";
+               $sql = "SELECT `thr-parent-id`, `body`, `verb`, `gravity`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `thr-parent-id`, `verb`, `body`, `gravity`";
 
                $emojis = [];
 
                $rows = DBA::p($sql, $condition);
                while ($row = DBA::fetch($rows)) {
-                       $row['verb'] = $row['body'] ? Activity::EMOJIREACT : $row['verb'];
-                       $emoji       = $row['body'] ?: $activity_emoji[$row['verb']];
+                       if ($row['gravity'] == ItemModel::GRAVITY_ACTIVITY) {
+                               $row['verb'] = $row['body'] ? Activity::EMOJIREACT : $row['verb'];
+                               $emoji       = $row['body'] ?: $activity_emoji[$row['verb']];
+                       } else {
+                               $emoji = '';
+                       }
+
                        if (!isset($index_list[$emoji])) {
                                $index_list[] = $emoji;
                        }
@@ -1084,6 +1091,31 @@ class Conversation
                return $emojis;
        }
 
+       /**
+        * Fetch quote shares from the conversation
+        *
+        * @param array $uriids
+        * @return array
+        */
+       private function getQuoteShares(array $uriids): array
+       {
+               $condition = DBA::mergeConditions(['quote-uri-id' => $uriids], ["NOT `quote-uri-id` IS NULL"]);
+               $separator = chr(255) . chr(255) . chr(255);
+
+               $sql = "SELECT `quote-uri-id`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-content` INNER JOIN `post` ON `post`.`uri-id` = `post-content`.`uri-id` INNER JOIN `contact` ON `post`.`author-id` = `contact`.`id` WHERE " . array_shift($condition) . " GROUP BY `quote-uri-id`";
+
+               $quotes = [];
+
+               $rows = DBA::p($sql, $condition);
+               while ($row = DBA::fetch($rows)) {
+                       $quotes[$row['quote-uri-id']]['total'] = $row['total'];
+                       $quotes[$row['quote-uri-id']]['title'] = array_unique(explode($separator, $row['title']));
+               }
+               DBA::close($rows);
+
+               return $quotes;
+       }
+
        /**
         * Plucks the children of the given parent from a given item list.
         *
index 6f77832209274a12360fa5ff33c3e63d7800d8d6..ab52fb279e634c78fe1627661820ea9840b4d667 100644 (file)
@@ -636,7 +636,7 @@ class Event
        {
                $fmt = DI::l10n()->t('l, F j');
 
-               $item = Post::selectFirst(['plink', 'author-name', 'author-network', 'author-id', 'author-avatar', 'author-link', 'private', 'uri-id'], ['id' => $event['itemid']]);
+               $item = Post::selectFirst(['plink', 'author-name', 'author-network', 'author-id', 'author-avatar', 'author-link', 'author-alias', 'private', 'uri-id'], ['id' => $event['itemid']]);
                if (empty($item)) {
                        // Using default values when no item had been found
                        $item = ['plink' => '', 'author-name' => '', 'author-avatar' => '', 'author-link' => '', 'private' => Item::PUBLIC, 'uri-id' => ($event['uri-id'] ?? 0)];
index 8d7ff128dc3911c172b7e3f7e80b0661f784795e..7f4b715dadd0c86aa93f011b2034e449b073352a 100644 (file)
@@ -320,7 +320,7 @@ class Post
                $location_html = $locate['html'] ?: Strings::escapeHtml($locate['location'] ?: $locate['coord'] ?: '');
 
                // process action responses - e.g. like/dislike/attend/agree/whatever
-               $response_verbs = ['like', 'dislike', 'announce'];
+               $response_verbs = ['like', 'dislike', 'announce', 'comment'];
 
                $isevent = false;
                $attend = [];
@@ -335,14 +335,31 @@ class Post
                        }
                }
 
+               $emojis = $this->getEmojis($item);
+
+               $verbs = [
+                       'like'        => Activity::LIKE,
+                       'dislike'     => Activity::DISLIKE,
+                       'announce'    => Activity::ANNOUNCE,
+                       'comment'     => Activity::POST,
+                       'attendyes'   => Activity::ATTEND,
+                       'attendno'    => Activity::ATTENDNO,
+                       'attendmaybe' => Activity::ATTENDMAYBE,
+               ];
+               $reactions = $emojis;
                $responses = [];
                foreach ($response_verbs as $value => $verb) {
                        $responses[$verb] = [
                                'self'   => $conv_responses[$verb][$item['uri-id']]['self'] ?? 0,
                                'output' => !empty($conv_responses[$verb][$item['uri-id']]) ? DI::conversation()->formatActivity($conv_responses[$verb][$item['uri-id']]['links'], $verb, $item['uri-id']) : '',
+                               'total'  => $emojis[$verbs[$verb]]['total'] ?? '',
+                               'title'  => $emojis[$verbs[$verb]]['title'] ?? '',
                        ];
+                       unset($reactions[$verbs[$verb]]);
                }
 
+               unset($emojis[Activity::POST]);
+
                /*
                 * We should avoid doing this all the time, but it depends on the conversation mode
                 * And the conv mode may change when we change the conv, or it changes its mode
@@ -572,11 +589,13 @@ class Post
                        'ignore_author'   => $ignore,
                        'collapse'        => $collapse,
                        'report'          => $report,
-                       'ignore_server'     => $ignoreServer,
+                       'ignore_server'   => $ignoreServer,
                        'vote'            => $buttons,
                        'like_html'       => $responses['like']['output'],
                        'dislike_html'    => $responses['dislike']['output'],
-                       'emojis'          => $this->getEmojis($item),
+                       'emojis'          => $emojis,
+                       'quoteshares'     => $this->getQuoteShares($item['quoteshares']),
+                       'reactions'       => $reactions,
                        'responses'       => $responses,
                        'switchcomment'   => DI::l10n()->t('Comment'),
                        'reply_label'     => DI::l10n()->t('Reply to %s', $profile_name),
@@ -662,6 +681,7 @@ class Post
 
                $emojis = [];
                foreach ($item['emojis'] as $index => $element) {
+                       $key    = $element['verb'];
                        $actors = implode(', ', $element['title']);
                        switch ($element['verb']) {
                                case Activity::ANNOUNCE:
@@ -699,18 +719,38 @@ class Post
                                        $icon  = ['fa' => 'fa-times', 'icon' => 'icon-remove'];
                                        break;
 
+                               case Activity::POST:
+                                       $title = DI::l10n()->t('Commented by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-commenting', 'icon' => 'icon-commenting'];
+                                       break;
+       
                                default:
                                        $title = DI::l10n()->t('Reacted with %s by: %s', $element['emoji'], $actors);
                                        $icon  = [];
+                                       $key   = $element['emoji'];
                                        break;
                        }
-                       $emojis[$index] = ['emoji' => $element['emoji'], 'total' => $element['total'], 'title' => $title, 'icon' => $icon];
+                       $emojis[$key] = ['emoji' => $element['emoji'], 'total' => $element['total'], 'title' => $title, 'icon' => $icon];
                }
-               ksort($emojis);
 
                return $emojis;
        }
 
+       /**
+        * Fetch quote shares
+        *
+        * @param array $quoteshares
+        * @return array
+        */
+       private function getQuoteShares($quoteshares)
+       {
+               if (empty($quoteshares)) {
+                       return [];
+               }
+
+               return ['total' => $quoteshares['total'], 'title' => DI::l10n()->t('Quote shared by: %s', implode(', ', $quoteshares['title']))];
+       }
+
        /**
         * @return integer
         */
index ecab5a1c159ea02508124dad8f47abb4316fdc19..aab6e8d67d0e3011399a1cef4ad9fea9ac44a6ff 100644 (file)
@@ -110,6 +110,12 @@ span.connector {
   margin: 0;
 }
 
+.wall-item-response {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
 .type-link blockquote, .type-video blockquote {
   margin-left: 0px;
   max-height: 160px;
index 2fe3f0bdc61b4773e9257d46c90eff307adbfeab..3ecc4485f88c1d92b832c208b468ac6e8a3a2ec8 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 2023.09-rc\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-03 05:35+0000\n"
+"POT-Creation-Date: 2023-11-04 14:11+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -293,9 +293,9 @@ msgid "Insert web link"
 msgstr ""
 
 #: mod/message.php:201 mod/message.php:357 mod/photos.php:1301
-#: src/Content/Conversation.php:399 src/Content/Conversation.php:1549
+#: src/Content/Conversation.php:399 src/Content/Conversation.php:1581
 #: src/Module/Item/Compose.php:206 src/Module/Post/Edit.php:145
-#: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:587
+#: src/Module/Profile/UnkMail.php:154 src/Object/Post.php:606
 msgid "Please wait"
 msgstr ""
 
@@ -318,7 +318,7 @@ msgstr ""
 #: src/Module/Profile/Profile.php:274 src/Module/Profile/UnkMail.php:155
 #: src/Module/Settings/Profile/Index.php:257
 #: src/Module/Settings/Server/Action.php:79 src/Module/User/Delegation.php:189
-#: src/Object/Post.php:1106 view/theme/duepuntozero/config.php:85
+#: src/Object/Post.php:1153 view/theme/duepuntozero/config.php:85
 #: view/theme/frio/config.php:171 view/theme/quattro/config.php:87
 #: view/theme/vier/config.php:135
 msgid "Submit"
@@ -603,34 +603,34 @@ msgstr ""
 
 #: mod/photos.php:1139 mod/photos.php:1195 mod/photos.php:1275
 #: src/Module/Contact.php:618 src/Module/Item/Compose.php:188
-#: src/Object/Post.php:1103
+#: src/Object/Post.php:1150
 msgid "This is you"
 msgstr ""
 
 #: mod/photos.php:1141 mod/photos.php:1197 mod/photos.php:1277
-#: src/Module/Moderation/Reports.php:95 src/Object/Post.php:581
-#: src/Object/Post.php:1105
+#: src/Module/Moderation/Reports.php:95 src/Object/Post.php:600
+#: src/Object/Post.php:1152
 msgid "Comment"
 msgstr ""
 
 #: mod/photos.php:1143 mod/photos.php:1199 mod/photos.php:1279
 #: src/Content/Conversation.php:414 src/Module/Calendar/Event/Form.php:248
 #: src/Module/Item/Compose.php:201 src/Module/Post/Edit.php:165
-#: src/Object/Post.php:1119
+#: src/Object/Post.php:1166
 msgid "Preview"
 msgstr ""
 
 #: mod/photos.php:1144 src/Content/Conversation.php:367
-#: src/Module/Post/Edit.php:130 src/Object/Post.php:1107
+#: src/Module/Post/Edit.php:130 src/Object/Post.php:1154
 msgid "Loading..."
 msgstr ""
 
-#: mod/photos.php:1236 src/Content/Conversation.php:1464
+#: mod/photos.php:1236 src/Content/Conversation.php:1496
 #: src/Object/Post.php:261
 msgid "Select"
 msgstr ""
 
-#: mod/photos.php:1237 src/Content/Conversation.php:1465
+#: mod/photos.php:1237 src/Content/Conversation.php:1497
 #: src/Module/Moderation/Users/Active.php:136
 #: src/Module/Moderation/Users/Blocked.php:136
 #: src/Module/Moderation/Users/Index.php:151
@@ -639,19 +639,19 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
-#: mod/photos.php:1298 src/Object/Post.php:409
+#: mod/photos.php:1298 src/Object/Post.php:426
 msgid "Like"
 msgstr ""
 
-#: mod/photos.php:1299 src/Object/Post.php:409
+#: mod/photos.php:1299 src/Object/Post.php:426
 msgid "I like this (toggle)"
 msgstr ""
 
-#: mod/photos.php:1300 src/Object/Post.php:410
+#: mod/photos.php:1300 src/Object/Post.php:427
 msgid "Dislike"
 msgstr ""
 
-#: mod/photos.php:1302 src/Object/Post.php:410
+#: mod/photos.php:1302 src/Object/Post.php:427
 msgid "I don't like this (toggle)"
 msgstr ""
 
@@ -961,7 +961,7 @@ msgstr ""
 msgid "Enter user nickname: "
 msgstr ""
 
-#: src/Console/User.php:182 src/Model/User.php:736
+#: src/Console/User.php:182 src/Model/User.php:776
 #: src/Module/Api/Twitter/ContactEndpoint.php:74
 #: src/Module/Moderation/Users/Active.php:71
 #: src/Module/Moderation/Users/Blocked.php:71
@@ -1244,7 +1244,7 @@ msgid "Visible to <strong>everybody</strong>"
 msgstr ""
 
 #: src/Content/Conversation.php:337 src/Module/Item/Compose.php:200
-#: src/Object/Post.php:1118
+#: src/Object/Post.php:1165
 msgid "Please enter a image/video/audio/webpage URL:"
 msgstr ""
 
@@ -1289,52 +1289,52 @@ msgid "attach file"
 msgstr ""
 
 #: src/Content/Conversation.php:372 src/Module/Item/Compose.php:190
-#: src/Module/Post/Edit.php:171 src/Object/Post.php:1108
+#: src/Module/Post/Edit.php:171 src/Object/Post.php:1155
 msgid "Bold"
 msgstr ""
 
 #: src/Content/Conversation.php:373 src/Module/Item/Compose.php:191
-#: src/Module/Post/Edit.php:172 src/Object/Post.php:1109
+#: src/Module/Post/Edit.php:172 src/Object/Post.php:1156
 msgid "Italic"
 msgstr ""
 
 #: src/Content/Conversation.php:374 src/Module/Item/Compose.php:192
-#: src/Module/Post/Edit.php:173 src/Object/Post.php:1110
+#: src/Module/Post/Edit.php:173 src/Object/Post.php:1157
 msgid "Underline"
 msgstr ""
 
 #: src/Content/Conversation.php:375 src/Module/Item/Compose.php:193
-#: src/Module/Post/Edit.php:174 src/Object/Post.php:1112
+#: src/Module/Post/Edit.php:174 src/Object/Post.php:1159
 msgid "Quote"
 msgstr ""
 
 #: src/Content/Conversation.php:376 src/Module/Item/Compose.php:194
-#: src/Module/Post/Edit.php:175 src/Object/Post.php:1113
+#: src/Module/Post/Edit.php:175 src/Object/Post.php:1160
 msgid "Add emojis"
 msgstr ""
 
 #: src/Content/Conversation.php:377 src/Module/Item/Compose.php:195
-#: src/Object/Post.php:1111
+#: src/Object/Post.php:1158
 msgid "Content Warning"
 msgstr ""
 
 #: src/Content/Conversation.php:378 src/Module/Item/Compose.php:196
-#: src/Module/Post/Edit.php:176 src/Object/Post.php:1114
+#: src/Module/Post/Edit.php:176 src/Object/Post.php:1161
 msgid "Code"
 msgstr ""
 
 #: src/Content/Conversation.php:379 src/Module/Item/Compose.php:197
-#: src/Object/Post.php:1115
+#: src/Object/Post.php:1162
 msgid "Image"
 msgstr ""
 
 #: src/Content/Conversation.php:380 src/Module/Item/Compose.php:198
-#: src/Module/Post/Edit.php:177 src/Object/Post.php:1116
+#: src/Module/Post/Edit.php:177 src/Object/Post.php:1163
 msgid "Link"
 msgstr ""
 
 #: src/Content/Conversation.php:381 src/Module/Item/Compose.php:199
-#: src/Module/Post/Edit.php:178 src/Object/Post.php:1117
+#: src/Module/Post/Edit.php:178 src/Object/Post.php:1164
 msgid "Link or Media"
 msgstr ""
 
@@ -1490,30 +1490,30 @@ msgstr ""
 msgid "Pushed to us"
 msgstr ""
 
-#: src/Content/Conversation.php:1492 src/Object/Post.php:248
+#: src/Content/Conversation.php:1524 src/Object/Post.php:248
 msgid "Pinned item"
 msgstr ""
 
-#: src/Content/Conversation.php:1509 src/Object/Post.php:530
-#: src/Object/Post.php:531
+#: src/Content/Conversation.php:1541 src/Object/Post.php:547
+#: src/Object/Post.php:548
 #, php-format
 msgid "View %s's profile @ %s"
 msgstr ""
 
-#: src/Content/Conversation.php:1522 src/Object/Post.php:518
+#: src/Content/Conversation.php:1554 src/Object/Post.php:535
 msgid "Categories:"
 msgstr ""
 
-#: src/Content/Conversation.php:1523 src/Object/Post.php:519
+#: src/Content/Conversation.php:1555 src/Object/Post.php:536
 msgid "Filed under:"
 msgstr ""
 
-#: src/Content/Conversation.php:1531 src/Object/Post.php:544
+#: src/Content/Conversation.php:1563 src/Object/Post.php:561
 #, php-format
 msgid "%s from %s"
 msgstr ""
 
-#: src/Content/Conversation.php:1547
+#: src/Content/Conversation.php:1579
 msgid "View in context"
 msgstr ""
 
@@ -1627,7 +1627,7 @@ msgstr ""
 msgid "Posts that mention or involve you"
 msgstr ""
 
-#: src/Content/Conversation/Factory/Network.php:42 src/Object/Post.php:381
+#: src/Content/Conversation/Factory/Network.php:42 src/Object/Post.php:398
 msgid "Starred"
 msgstr ""
 
@@ -1749,7 +1749,7 @@ msgstr ""
 
 #: src/Content/GroupManager.php:152 src/Content/Nav.php:278
 #: src/Content/Text/HTML.php:880 src/Content/Widget.php:537
-#: src/Model/User.php:1298
+#: src/Model/User.php:1338
 msgid "Groups"
 msgstr ""
 
@@ -1846,7 +1846,7 @@ msgstr ""
 msgid "Ignore %s server"
 msgstr ""
 
-#: src/Content/Item.php:443 src/Object/Post.php:491
+#: src/Content/Item.php:443 src/Object/Post.php:508
 msgid "Languages"
 msgstr ""
 
@@ -3648,145 +3648,145 @@ msgstr ""
 msgid "Contact information and Social Networks"
 msgstr ""
 
-#: src/Model/User.php:225 src/Model/User.php:1211
+#: src/Model/User.php:225 src/Model/User.php:1251
 msgid "SERIOUS ERROR: Generation of security keys failed."
 msgstr ""
 
-#: src/Model/User.php:645 src/Model/User.php:678
+#: src/Model/User.php:685 src/Model/User.php:718
 msgid "Login failed"
 msgstr ""
 
-#: src/Model/User.php:710
+#: src/Model/User.php:750
 msgid "Not enough information to authenticate"
 msgstr ""
 
-#: src/Model/User.php:831
+#: src/Model/User.php:871
 msgid "Password can't be empty"
 msgstr ""
 
-#: src/Model/User.php:873
+#: src/Model/User.php:913
 msgid "Empty passwords are not allowed."
 msgstr ""
 
-#: src/Model/User.php:877
+#: src/Model/User.php:917
 msgid ""
 "The new password has been exposed in a public data dump, please choose "
 "another."
 msgstr ""
 
-#: src/Model/User.php:881
+#: src/Model/User.php:921
 msgid "The password length is limited to 72 characters."
 msgstr ""
 
-#: src/Model/User.php:885
+#: src/Model/User.php:925
 msgid "The password can't contain white spaces nor accentuated letters"
 msgstr ""
 
-#: src/Model/User.php:1094
+#: src/Model/User.php:1134
 msgid "Passwords do not match. Password unchanged."
 msgstr ""
 
-#: src/Model/User.php:1101
+#: src/Model/User.php:1141
 msgid "An invitation is required."
 msgstr ""
 
-#: src/Model/User.php:1105
+#: src/Model/User.php:1145
 msgid "Invitation could not be verified."
 msgstr ""
 
-#: src/Model/User.php:1113
+#: src/Model/User.php:1153
 msgid "Invalid OpenID url"
 msgstr ""
 
-#: src/Model/User.php:1126 src/Security/Authentication.php:241
+#: src/Model/User.php:1166 src/Security/Authentication.php:241
 msgid ""
 "We encountered a problem while logging in with the OpenID you provided. "
 "Please check the correct spelling of the ID."
 msgstr ""
 
-#: src/Model/User.php:1126 src/Security/Authentication.php:241
+#: src/Model/User.php:1166 src/Security/Authentication.php:241
 msgid "The error message was:"
 msgstr ""
 
-#: src/Model/User.php:1132
+#: src/Model/User.php:1172
 msgid "Please enter the required information."
 msgstr ""
 
-#: src/Model/User.php:1146
+#: src/Model/User.php:1186
 #, php-format
 msgid ""
 "system.username_min_length (%s) and system.username_max_length (%s) are "
 "excluding each other, swapping values."
 msgstr ""
 
-#: src/Model/User.php:1153
+#: src/Model/User.php:1193
 #, php-format
 msgid "Username should be at least %s character."
 msgid_plural "Username should be at least %s characters."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/User.php:1157
+#: src/Model/User.php:1197
 #, php-format
 msgid "Username should be at most %s character."
 msgid_plural "Username should be at most %s characters."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/User.php:1165
+#: src/Model/User.php:1205
 msgid "That doesn't appear to be your full (First Last) name."
 msgstr ""
 
-#: src/Model/User.php:1170
+#: src/Model/User.php:1210
 msgid "Your email domain is not among those allowed on this site."
 msgstr ""
 
-#: src/Model/User.php:1174
+#: src/Model/User.php:1214
 msgid "Not a valid email address."
 msgstr ""
 
-#: src/Model/User.php:1177
+#: src/Model/User.php:1217
 msgid "The nickname was blocked from registration by the nodes admin."
 msgstr ""
 
-#: src/Model/User.php:1181 src/Model/User.php:1187
+#: src/Model/User.php:1221 src/Model/User.php:1227
 msgid "Cannot use that email."
 msgstr ""
 
-#: src/Model/User.php:1193
+#: src/Model/User.php:1233
 msgid "Your nickname can only contain a-z, 0-9 and _."
 msgstr ""
 
-#: src/Model/User.php:1201 src/Model/User.php:1258
+#: src/Model/User.php:1241 src/Model/User.php:1298
 msgid "Nickname is already registered. Please choose another."
 msgstr ""
 
-#: src/Model/User.php:1245 src/Model/User.php:1249
+#: src/Model/User.php:1285 src/Model/User.php:1289
 msgid "An error occurred during registration. Please try again."
 msgstr ""
 
-#: src/Model/User.php:1272
+#: src/Model/User.php:1312
 msgid "An error occurred creating your default profile. Please try again."
 msgstr ""
 
-#: src/Model/User.php:1279
+#: src/Model/User.php:1319
 msgid "An error occurred creating your self contact. Please try again."
 msgstr ""
 
-#: src/Model/User.php:1284
+#: src/Model/User.php:1324
 msgid "Friends"
 msgstr ""
 
-#: src/Model/User.php:1288
+#: src/Model/User.php:1328
 msgid ""
 "An error occurred creating your default contact circle. Please try again."
 msgstr ""
 
-#: src/Model/User.php:1332
+#: src/Model/User.php:1372
 msgid "Profile Photos"
 msgstr ""
 
-#: src/Model/User.php:1512
+#: src/Model/User.php:1552
 #, php-format
 msgid ""
 "\n"
@@ -3794,7 +3794,7 @@ msgid ""
 "\t\t\tthe administrator of %2$s has set up an account for you."
 msgstr ""
 
-#: src/Model/User.php:1515
+#: src/Model/User.php:1555
 #, php-format
 msgid ""
 "\n"
@@ -3830,12 +3830,12 @@ msgid ""
 "\t\tThank you and welcome to %4$s."
 msgstr ""
 
-#: src/Model/User.php:1547 src/Model/User.php:1653
+#: src/Model/User.php:1587 src/Model/User.php:1693
 #, php-format
 msgid "Registration details for %s"
 msgstr ""
 
-#: src/Model/User.php:1567
+#: src/Model/User.php:1607
 #, php-format
 msgid ""
 "\n"
@@ -3851,12 +3851,12 @@ msgid ""
 "\t\t"
 msgstr ""
 
-#: src/Model/User.php:1586
+#: src/Model/User.php:1626
 #, php-format
 msgid "Registration at %s"
 msgstr ""
 
-#: src/Model/User.php:1610
+#: src/Model/User.php:1650
 #, php-format
 msgid ""
 "\n"
@@ -3865,7 +3865,7 @@ msgid ""
 "\t\t\t"
 msgstr ""
 
-#: src/Model/User.php:1618
+#: src/Model/User.php:1658
 #, php-format
 msgid ""
 "\n"
@@ -3903,7 +3903,7 @@ msgid ""
 "\t\t\tThank you and welcome to %2$s."
 msgstr ""
 
-#: src/Model/User.php:1680
+#: src/Model/User.php:1720
 msgid ""
 "User with delegates can't be removed, please remove delegate users first"
 msgstr ""
@@ -6089,7 +6089,7 @@ msgid "Only show blocked contacts"
 msgstr ""
 
 #: src/Module/Contact.php:368 src/Module/Contact.php:440
-#: src/Module/Settings/Server/Index.php:107 src/Object/Post.php:369
+#: src/Module/Settings/Server/Index.php:107 src/Object/Post.php:386
 msgid "Ignored"
 msgstr ""
 
@@ -11997,208 +11997,218 @@ msgstr ""
 msgid "I might attend"
 msgstr ""
 
-#: src/Object/Post.php:364
+#: src/Object/Post.php:381
 msgid "Ignore thread"
 msgstr ""
 
-#: src/Object/Post.php:365
+#: src/Object/Post.php:382
 msgid "Unignore thread"
 msgstr ""
 
-#: src/Object/Post.php:366
+#: src/Object/Post.php:383
 msgid "Toggle ignore status"
 msgstr ""
 
-#: src/Object/Post.php:376
+#: src/Object/Post.php:393
 msgid "Add star"
 msgstr ""
 
-#: src/Object/Post.php:377
+#: src/Object/Post.php:394
 msgid "Remove star"
 msgstr ""
 
-#: src/Object/Post.php:378
+#: src/Object/Post.php:395
 msgid "Toggle star status"
 msgstr ""
 
-#: src/Object/Post.php:389
+#: src/Object/Post.php:406
 msgid "Pin"
 msgstr ""
 
-#: src/Object/Post.php:390
+#: src/Object/Post.php:407
 msgid "Unpin"
 msgstr ""
 
-#: src/Object/Post.php:391
+#: src/Object/Post.php:408
 msgid "Toggle pin status"
 msgstr ""
 
-#: src/Object/Post.php:394
+#: src/Object/Post.php:411
 msgid "Pinned"
 msgstr ""
 
-#: src/Object/Post.php:399
+#: src/Object/Post.php:416
 msgid "Add tag"
 msgstr ""
 
-#: src/Object/Post.php:412
+#: src/Object/Post.php:429
 msgid "Quote share this"
 msgstr ""
 
-#: src/Object/Post.php:412
+#: src/Object/Post.php:429
 msgid "Quote Share"
 msgstr ""
 
-#: src/Object/Post.php:415
+#: src/Object/Post.php:432
 msgid "Reshare this"
 msgstr ""
 
-#: src/Object/Post.php:415
+#: src/Object/Post.php:432
 msgid "Reshare"
 msgstr ""
 
-#: src/Object/Post.php:416
+#: src/Object/Post.php:433
 msgid "Cancel your Reshare"
 msgstr ""
 
-#: src/Object/Post.php:416
+#: src/Object/Post.php:433
 msgid "Unshare"
 msgstr ""
 
-#: src/Object/Post.php:467
+#: src/Object/Post.php:484
 #, php-format
 msgid "%s (Received %s)"
 msgstr ""
 
-#: src/Object/Post.php:473
+#: src/Object/Post.php:490
 msgid "Comment this item on your system"
 msgstr ""
 
-#: src/Object/Post.php:473
+#: src/Object/Post.php:490
 msgid "Remote comment"
 msgstr ""
 
-#: src/Object/Post.php:495
+#: src/Object/Post.php:512
 msgid "Share via ..."
 msgstr ""
 
-#: src/Object/Post.php:495
+#: src/Object/Post.php:512
 msgid "Share via external services"
 msgstr ""
 
-#: src/Object/Post.php:502
+#: src/Object/Post.php:519
 msgid "Unknown parent"
 msgstr ""
 
-#: src/Object/Post.php:506
+#: src/Object/Post.php:523
 #, php-format
 msgid "in reply to %s"
 msgstr ""
 
-#: src/Object/Post.php:508
+#: src/Object/Post.php:525
 msgid "Parent is probably private or not federated."
 msgstr ""
 
-#: src/Object/Post.php:532
+#: src/Object/Post.php:549
 msgid "to"
 msgstr ""
 
-#: src/Object/Post.php:533
+#: src/Object/Post.php:550
 msgid "via"
 msgstr ""
 
-#: src/Object/Post.php:534
+#: src/Object/Post.php:551
 msgid "Wall-to-Wall"
 msgstr ""
 
-#: src/Object/Post.php:535
+#: src/Object/Post.php:552
 msgid "via Wall-To-Wall:"
 msgstr ""
 
-#: src/Object/Post.php:582
+#: src/Object/Post.php:601
 #, php-format
 msgid "Reply to %s"
 msgstr ""
 
-#: src/Object/Post.php:585
+#: src/Object/Post.php:604
 msgid "More"
 msgstr ""
 
-#: src/Object/Post.php:604
+#: src/Object/Post.php:623
 msgid "Notifier task is pending"
 msgstr ""
 
-#: src/Object/Post.php:605
+#: src/Object/Post.php:624
 msgid "Delivery to remote servers is pending"
 msgstr ""
 
-#: src/Object/Post.php:606
+#: src/Object/Post.php:625
 msgid "Delivery to remote servers is underway"
 msgstr ""
 
-#: src/Object/Post.php:607
+#: src/Object/Post.php:626
 msgid "Delivery to remote servers is mostly done"
 msgstr ""
 
-#: src/Object/Post.php:608
+#: src/Object/Post.php:627
 msgid "Delivery to remote servers is done"
 msgstr ""
 
-#: src/Object/Post.php:630
+#: src/Object/Post.php:649
 #, php-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Object/Post.php:631
+#: src/Object/Post.php:650
 msgid "Show more"
 msgstr ""
 
-#: src/Object/Post.php:632
+#: src/Object/Post.php:651
 msgid "Show fewer"
 msgstr ""
 
-#: src/Object/Post.php:668
+#: src/Object/Post.php:687
 #, php-format
 msgid "Reshared by: %s"
 msgstr ""
 
-#: src/Object/Post.php:673
+#: src/Object/Post.php:693
 #, php-format
 msgid "Viewed by: %s"
 msgstr ""
 
-#: src/Object/Post.php:678
+#: src/Object/Post.php:699
 #, php-format
 msgid "Liked by: %s"
 msgstr ""
 
-#: src/Object/Post.php:683
+#: src/Object/Post.php:705
 #, php-format
 msgid "Disliked by: %s"
 msgstr ""
 
-#: src/Object/Post.php:688
+#: src/Object/Post.php:711
 #, php-format
 msgid "Attended by: %s"
 msgstr ""
 
-#: src/Object/Post.php:693
+#: src/Object/Post.php:717
 #, php-format
 msgid "Maybe attended by: %s"
 msgstr ""
 
-#: src/Object/Post.php:698
+#: src/Object/Post.php:723
 #, php-format
 msgid "Not attended by: %s"
 msgstr ""
 
-#: src/Object/Post.php:703
+#: src/Object/Post.php:729
+#, php-format
+msgid "Commented by: %s"
+msgstr ""
+
+#: src/Object/Post.php:735
 #, php-format
 msgid "Reacted with %s by: %s"
 msgstr ""
 
+#: src/Object/Post.php:758
+#, php-format
+msgid "Quote shared by: %s"
+msgstr ""
+
 #: src/Protocol/ActivityPub/Receiver.php:523
 msgid "Chat"
 msgstr ""
index 3618fa15207ddbbe148338d179e5bbfff6b7b0f2..6e1668a3e303a7a29074021bd0e0837d9f20ef20 100644 (file)
@@ -1985,6 +1985,8 @@ code > .hl-main {
 .wall-item-actions button {
        color: $font_color_darker;
        background-color: transparent;
+       padding-left: 5px;
+       padding-right: 5px;
 }
 .wall-item-actions .active {
        font-weight: bold;
index 5615d704afb898a4b1832381facaa3a4c30cb550..640c9a212a9dd52a0dfd49a3c7ed266dfe56d84d 100644 (file)
@@ -309,18 +309,22 @@ as the value of $top_child_total (this is done at the end of this file)
 
                        {{if $item.vote}}
                                {{if $item.vote.like}}
-                               <button type="button" class="btn-link button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></button>
-                               {{/if}}
-                               {{if $item.vote.like AND $item.vote.dislike}}
-                               <span role="presentation" class="separator"></span>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></button>
+                                       <span title="{{$item.responses.like.title}}">{{$item.responses.like.total}}</span>
+                               </span>
                                {{/if}}
                                {{if $item.vote.dislike}}
-                               <button type="button" class="btn-link button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i></button>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i></button>
+                                       <span title="{{$item.responses.dislike.title}}">{{$item.responses.dislike.total}}</span>
+                               </span>
                                {{/if}}
+                               
 
-                               {{if ($item.vote.like OR $item.vote.dislike) AND $item.comment_html}}
-                               <span role="presentation" class="separator"></span>
-                               {{/if}}
+                               {{foreach $item.reactions as $emoji}}
+                               <span class="wall-item-emoji" title="{{$emoji.title}}">{{$emoji.emoji}} {{$emoji.total}}</span>
+                               {{/foreach}}
                        {{/if}}
 
                        {{if $item.remote_comment}}
@@ -329,138 +333,147 @@ as the value of $top_child_total (this is done at the end of this file)
 
                        {{* Button to open the comment text field *}}
                        {{if $item.comment_html}}
-                               <button type="button" class="btn-link button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i></button>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i></button>
+                                       <span title="{{$item.responses.comment.title}}">{{$item.responses.comment.total}}</span>
+                               </span>
                        {{/if}}
 
                        {{* Button for sharing the item *}}
                        {{if $item.vote}}
-                               {{if $item.vote.share OR $item.vote.announce}}
-                                       {{if $item.vote.like OR $item.vote.dislike OR $item.comment_html}}
-                               <span role="presentation" class="separator"></span>
-                                       {{/if}}
-                               {{/if}}
                                {{if $item.vote.announce}}
-                               <button type="button" class="btn-link button-announces{{if $item.responses.announce.self}} active" aria-pressed="true{{/if}}" id="announce-{{$item.id}}" title="{{$item.vote.announce.0}}" onclick="doActivityItemAction({{$item.id}}, 'announce'{{if $item.responses.announce.self}}, true{{/if}});" ><i class="fa fa-retweet" aria-hidden="true"></i></button>
-                               <span role="presentation" class="separator"></span>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-announces{{if $item.responses.announce.self}} active" aria-pressed="true{{/if}}" id="announce-{{$item.id}}" title="{{$item.vote.announce.0}}" onclick="doActivityItemAction({{$item.id}}, 'announce'{{if $item.responses.announce.self}}, true{{/if}});" ><i class="fa fa-retweet" aria-hidden="true"></i></button>
+                                       <span title="{{$item.responses.announce.title}}">{{$item.responses.announce.total}}</span>
+                               </span>
                                {{/if}}
                                {{if $item.vote.share}}
-                               <button type="button" class="btn-link button-votes" id="share-{{$item.id}}" title="{{$item.vote.share.0}}" onclick="jotShare({{$item.id}});"><i class="fa fa-share" aria-hidden="true"></i></button>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-votes" id="share-{{$item.id}}" title="{{$item.vote.share.0}}" onclick="jotShare({{$item.id}});"><i class="fa fa-share" aria-hidden="true"></i></button>
+                                       <span title="{{$item.quoteshares.title}}">{{$item.quoteshares.total}}</span>
+                               </span>
                                {{/if}}
                        {{/if}}
-
-                       {{* Put additional actions in a dropdown menu *}}
-                               <span role="presentation" class="separator"></span>
-                               <span class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
-                                       <button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></button>
-                                    <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dropdownMenuOptions-{{$item.id}}">
-                                        {{if $item.edpost}} {{* edit the posting *}}
-                                        <li role="menuitem">
-                                                <a href="javascript:editpost('{{$item.edpost.0}}?mode=none');" title="{{$item.edpost.1}}" class="btn-link navicon pencil"><i class="fa fa-pencil" aria-hidden="true"></i> {{$item.edpost.1}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.tagger}} {{* tag the post *}}
-                                        <li role="menuitem">
-                                                <a id="tagger-{{$item.id}}" href="javascript:itemTag({{$item.id}});" class="btn-link {{$item.tagger.class}}" title="{{$item.tagger.add}}"><i class="fa fa-tag" aria-hidden="true"></i> {{$item.tagger.add}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.filer}}
-                                        <li role="menuitem">
-                                                <a id="filer-{{$item.id}}" href="javascript:itemFiler({{$item.id}});" class="btn-link filer-item filer-icon" title="{{$item.filer}}"><i class="fa fa-folder" aria-hidden="true"></i>&nbsp;{{$item.filer}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.pin}}
-                                        <li role="menuitem">
-                                                <a id="pin-{{$item.id}}" href="javascript:doPin({{$item.id}});" class="btn-link {{$item.pin.classdo}}" title="{{$item.pin.do}}"><i class="fa fa-circle-o" aria-hidden="true"></i>&nbsp;{{$item.pin.do}}</a>
-                                                <a id="unpin-{{$item.id}}" href="javascript:doPin({{$item.id}});" class="btn-link {{$item.pin.classundo}}" title="{{$item.pin.undo}}"><i class="fa fa-dot-circle-o" aria-hidden="true"></i>&nbsp;{{$item.pin.undo}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.star}}
-                                        <li role="menuitem">
-                                                <a id="star-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
-                                                <a id="unstar-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.follow_thread}}
-                                        <li role="menuitem">
-                                                <a id="follow_thread-{{$item.id}}" href="javascript:{{$item.follow_thread.action}}" class="btn-link" title="{{$item.follow_thread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.follow_thread.title}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.language}}
-                                        <li role="menuitem">
-                                                <a id="language-{{$item.id}}" href="javascript:alert('{{$item.language.1}}');" class="btn-link filer-item language-icon" title="{{$item.language.0}}"><i class="fa fa-language" aria-hidden="true"></i>&nbsp;{{$item.language.0}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.browsershare}}
-                                        <li role="menuitem" class="button-browser-share">
-                                                <a id="browser-share-{{$item.id}}" href="javascript:navigator.share({url: '{{$item.plink.orig}}'})" class="btn-link button-browser-share" title="{{$item.browsershare.1}}"><i class="fa fa-share-alt" aria-hidden="true"></i>&nbsp;{{$item.browsershare.0}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread) && ($item.ignore || ($item.drop && $item.drop.dropping))}}
-                                        <li role="separator" class="divider"></li>
-                                        {{/if}}
-
-                                        {{if $item.ignore}}
-                                        <li role="menuitem">
-                                                <a id="ignore-{{$item.id}}" href="javascript:doIgnoreThread({{$item.id}});" class="btn-link {{$item.ignore.classdo}}" title="{{$item.ignore.do}}"><i class="fa fa-bell-slash" aria-hidden="true"></i> {{$item.ignore.do}}</a>
-                                        </li>
-                                        <li role="menuitem">
-                                                <a id="unignore-{{$item.id}}" href="javascript:doIgnoreThread({{$item.id}});" class="btn-link {{$item.ignore.classundo}}"  title="{{$item.ignore.undo}}"><i class="fa fa-bell" aria-hidden="true"></i> {{$item.ignore.undo}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.drop && $item.drop.dropping}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon delete" href="javascript:dropItem('item/drop/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.drop.label}}"><i class="fa fa-trash" aria-hidden="true"></i> {{$item.drop.label}}</a>
-                                        </li>
-                                        {{/if}}
-
-                                        {{if $item.block}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon block" href="javascript:blockAuthor('item/block/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.block.label}}"><i class="fa fa-ban" aria-hidden="true"></i> {{$item.block.label}}</a>
-                                        </li>
-                                        {{/if}}
-                                        {{if $item.ignore_author}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon ignore" href="javascript:ignoreAuthor('item/ignore/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.ignore_author.label}}"><i class="fa fa-eye-slash" aria-hidden="true"></i> {{$item.ignore_author.label}}</a>
-                                        </li>
-                                        {{/if}}
-                                        {{if $item.collapse}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon collapse" href="javascript:collapseAuthor('item/collapse/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.collapse.label}}"><i class="fa fa-minus-square" aria-hidden="true"></i> {{$item.collapse.label}}</a>
-                                        </li>
-                                        {{/if}}
-                                           {{if $item.ignore_server}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon ignoreServer" href="javascript:ignoreServer('settings/server/{{$item.author_gsid}}/ignore', 'item-{{$item.guid}}');" title="{{$item.ignore_server.label}}"><i class="fa fa-eye-slash" aria-hidden="true"></i> {{$item.ignore_server.label}}</a>
-                                        </li>
-                                        {{/if}}
-                                        {{if $item.report}}
-                                        <li role="menuitem">
-                                                <a class="btn-link navicon ignore" href="{{$item.report.href}}"><i class="fa fa-flag" aria-hidden="true"></i> {{$item.report.label}}</a>
-                                        </li>
-                                        {{/if}}
-                                    </ul>
-                               </span>
-                               </div>
-                       </div>
-                       <span class="wall-item-actions-right hidden-xs">
-                               {{* Event attendance buttons *}}
+                       {{* Event attendance buttons *}}
                        {{if $item.isevent}}
-                               <span class="vote-event">
-                                       <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
-                                       <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
-                                       <button type="button" class="btn btn-xs btn-default button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
+                                       <span title="{{$item.responses.attendyes.title}}">{{$item.responses.attendyes.total}}</span>
+                               </span>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
+                                       <span title="{{$item.responses.attendno.title}}">{{$item.responses.attendno.total}}</span>
+                               </span>
+                               <span class="wall-item-response">
+                                       <button type="button" class="btn-link button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
+                                       <span title="{{$item.responses.attendmaybe.title}}">{{$item.responses.attendmaybe.total}}</span>
                                </span>
                        {{/if}}
-                               <span class="pull-right checkbox">
+       
+                       </div>
+                       </div>
+                       <span class="wall-item-actions-right hidden-xs">
+                       {{* Put additional actions in a dropdown menu *}}
+               <span class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
+                       <button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></button>
+                       <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dropdownMenuOptions-{{$item.id}}">
+                               {{if $item.edpost}} {{* edit the posting *}}
+                               <li role="menuitem">
+                                               <a href="javascript:editpost('{{$item.edpost.0}}?mode=none');" title="{{$item.edpost.1}}" class="btn-link navicon pencil"><i class="fa fa-pencil" aria-hidden="true"></i> {{$item.edpost.1}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.tagger}} {{* tag the post *}}
+                               <li role="menuitem">
+                                               <a id="tagger-{{$item.id}}" href="javascript:itemTag({{$item.id}});" class="btn-link {{$item.tagger.class}}" title="{{$item.tagger.add}}"><i class="fa fa-tag" aria-hidden="true"></i> {{$item.tagger.add}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.filer}}
+                               <li role="menuitem">
+                                               <a id="filer-{{$item.id}}" href="javascript:itemFiler({{$item.id}});" class="btn-link filer-item filer-icon" title="{{$item.filer}}"><i class="fa fa-folder" aria-hidden="true"></i>&nbsp;{{$item.filer}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.pin}}
+                               <li role="menuitem">
+                                               <a id="pin-{{$item.id}}" href="javascript:doPin({{$item.id}});" class="btn-link {{$item.pin.classdo}}" title="{{$item.pin.do}}"><i class="fa fa-circle-o" aria-hidden="true"></i>&nbsp;{{$item.pin.do}}</a>
+                                               <a id="unpin-{{$item.id}}" href="javascript:doPin({{$item.id}});" class="btn-link {{$item.pin.classundo}}" title="{{$item.pin.undo}}"><i class="fa fa-dot-circle-o" aria-hidden="true"></i>&nbsp;{{$item.pin.undo}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.star}}
+                               <li role="menuitem">
+                                               <a id="star-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
+                                               <a id="unstar-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.follow_thread}}
+                               <li role="menuitem">
+                                               <a id="follow_thread-{{$item.id}}" href="javascript:{{$item.follow_thread.action}}" class="btn-link" title="{{$item.follow_thread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.follow_thread.title}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.language}}
+                               <li role="menuitem">
+                                               <a id="language-{{$item.id}}" href="javascript:alert('{{$item.language.1}}');" class="btn-link filer-item language-icon" title="{{$item.language.0}}"><i class="fa fa-language" aria-hidden="true"></i>&nbsp;{{$item.language.0}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.browsershare}}
+                               <li role="menuitem" class="button-browser-share">
+                                               <a id="browser-share-{{$item.id}}" href="javascript:navigator.share({url: '{{$item.plink.orig}}'})" class="btn-link button-browser-share" title="{{$item.browsershare.1}}"><i class="fa fa-share-alt" aria-hidden="true"></i>&nbsp;{{$item.browsershare.0}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread) && ($item.ignore || ($item.drop && $item.drop.dropping))}}
+                               <li role="separator" class="divider"></li>
+                               {{/if}}
+
+                               {{if $item.ignore}}
+                               <li role="menuitem">
+                                               <a id="ignore-{{$item.id}}" href="javascript:doIgnoreThread({{$item.id}});" class="btn-link {{$item.ignore.classdo}}" title="{{$item.ignore.do}}"><i class="fa fa-bell-slash" aria-hidden="true"></i> {{$item.ignore.do}}</a>
+                               </li>
+                               <li role="menuitem">
+                                               <a id="unignore-{{$item.id}}" href="javascript:doIgnoreThread({{$item.id}});" class="btn-link {{$item.ignore.classundo}}"  title="{{$item.ignore.undo}}"><i class="fa fa-bell" aria-hidden="true"></i> {{$item.ignore.undo}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.drop && $item.drop.dropping}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon delete" href="javascript:dropItem('item/drop/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.drop.label}}"><i class="fa fa-trash" aria-hidden="true"></i> {{$item.drop.label}}</a>
+                               </li>
+                               {{/if}}
+
+                               {{if $item.block}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon block" href="javascript:blockAuthor('item/block/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.block.label}}"><i class="fa fa-ban" aria-hidden="true"></i> {{$item.block.label}}</a>
+                               </li>
+                               {{/if}}
+                               {{if $item.ignore_author}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon ignore" href="javascript:ignoreAuthor('item/ignore/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.ignore_author.label}}"><i class="fa fa-eye-slash" aria-hidden="true"></i> {{$item.ignore_author.label}}</a>
+                               </li>
+                               {{/if}}
+                               {{if $item.collapse}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon collapse" href="javascript:collapseAuthor('item/collapse/{{$item.id}}', 'item-{{$item.guid}}');" title="{{$item.collapse.label}}"><i class="fa fa-minus-square" aria-hidden="true"></i> {{$item.collapse.label}}</a>
+                               </li>
+                               {{/if}}
+                               {{if $item.ignore_server}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon ignoreServer" href="javascript:ignoreServer('settings/server/{{$item.author_gsid}}/ignore', 'item-{{$item.guid}}');" title="{{$item.ignore_server.label}}"><i class="fa fa-eye-slash" aria-hidden="true"></i> {{$item.ignore_server.label}}</a>
+                               </li>
+                               {{/if}}
+                               {{if $item.report}}
+                               <li role="menuitem">
+                                               <a class="btn-link navicon ignore" href="{{$item.report.href}}"><i class="fa fa-flag" aria-hidden="true"></i> {{$item.report.label}}</a>
+                               </li>
+                               {{/if}}
+                       </ul>
+               </span>
+               <span class="pull-right checkbox">
                        {{if $item.drop && $item.drop.pagedrop}}
                                        <input type="checkbox" title="{{$item.drop.select}}" name="itemselected[]" id="checkbox-{{$item.id}}" class="item-select" value="{{$item.id}}" />
                                        <label for="checkbox-{{$item.id}}"></label>
@@ -473,16 +486,22 @@ as the value of $top_child_total (this is done at the end of this file)
                                        {{* Buttons for like and dislike *}}
                                        {{if $item.vote}}
                                                {{if $item.vote.like}}
-                                                       <button type="button" class="btn button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></button>
+                                               <button type="button" class="btn button-likes{{if $item.responses.like.self}} active" aria-pressed="true{{/if}}" id="like-{{$item.id}}" title="{{$item.vote.like.0}}" onclick="doActivityItemAction({{$item.id}}, 'like'{{if $item.responses.like.self}}, true{{/if}});" ><i class="fa fa-thumbs-up" aria-hidden="true"></i>
+                                                       <span title="{{$item.responses.like.title}}">{{$item.responses.like.total}}</span>
+                                               </button>
                                                {{/if}}
                                                {{if $item.vote.dislike}}
-                                                       <button type="button" class="btn button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i></button>
+                                               <button type="button" class="btn button-likes{{if $item.responses.dislike.self}} active" aria-pressed="true{{/if}}" id="dislike-{{$item.id}}" title="{{$item.vote.dislike.0}}" onclick="doActivityItemAction({{$item.id}}, 'dislike'{{if $item.responses.dislike.self}}, true{{/if}});" ><i class="fa fa-thumbs-down" aria-hidden="true"></i>
+                                                       <span title="{{$item.responses.dislike.title}}">{{$item.responses.dislike.total}}</span>
+                                               </button>
                                                {{/if}}
                                        {{/if}}
 
                                        {{* Button to open the comment text field *}}
                                        {{if $item.comment_html}}
-                                               <button type="button" class="btn button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i></button>
+                                               <button type="button" class="btn button-comments" id="comment-{{$item.id}}" title="{{$item.switchcomment}}" {{if $item.thread_level != 1}}onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});" {{else}} onclick="openClose('item-comments-{{$item.id}}'); commentExpand({{$item.id}});"{{/if}}><i class="fa fa-commenting" aria-hidden="true"></i>
+                                                       <span title="{{$item.responses.comment.title}}">{{$item.responses.comment.total}}</span>
+                                               </button>
                                        {{/if}}
 
                                        {{if $item.vote.announce OR $item.vote.share}}
@@ -526,11 +545,15 @@ as the value of $top_child_total (this is done at the end of this file)
 
                                {{* Event attendance buttons *}}
                                {{if $item.isevent}}
-                               <div class="btn-group btn-group-event" role="group">
-                                       <button type="button" class="btn btn-default button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i></button>
-                                       <button type="button" class="btn btn-default button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i></button>
-                                       <button type="button" class="btn btn-default button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i></button>
-                               </div>
+                               <button type="button" class="btn button-event{{if $item.responses.attendyes.self}} active" aria-pressed="true{{/if}}" id="attendyes-{{$item.id}}" title="{{$item.attend.0}}" onclick="doActivityItemAction({{$item.id}}, 'attendyes'{{if $item.responses.attendyes.self}}, true{{/if}});"><i class="fa fa-check" aria-hidden="true"><span class="sr-only">{{$item.attend.0}}</span></i>
+                                       <span title="{{$item.responses.attendyes.title}}">{{$item.responses.attendyes.total}}</span>
+                               </button>
+                               <button type="button" class="btn button-event{{if $item.responses.attendno.self}} active" aria-pressed="true{{/if}}" id="attendno-{{$item.id}}" title="{{$item.attend.1}}" onclick="doActivityItemAction({{$item.id}}, 'attendno'{{if $item.responses.attendno.self}}, true{{/if}});"><i class="fa fa-times" aria-hidden="true"><span class="sr-only">{{$item.attend.1}}</span></i>
+                                       <span title="{{$item.responses.attendno.title}}">{{$item.responses.attendno.total}}</span>
+                               </button>
+                               <button type="button" class="btn button-event{{if $item.responses.attendmaybe.self}} active" aria-pressed="true{{/if}}" id="attendmaybe-{{$item.id}}" title="{{$item.attend.2}}" onclick="doActivityItemAction({{$item.id}}, 'attendmaybe'{{if $item.responses.attendmaybe.self}}, true{{/if}});"><i class="fa fa-question" aria-hidden="true"><span class="sr-only">{{$item.attend.2}}</span></i>
+                                       <span title="{{$item.responses.attendmaybe.title}}">{{$item.responses.attendmaybe.total}}</span>
+                               </button>
                                {{/if}}
 
                                {{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread || $item.ignore || ($item.drop && $item.drop.dropping)}}
@@ -615,15 +638,7 @@ as the value of $top_child_total (this is done at the end of this file)
                <div class="wall-item-links"></div>
 
                {{* Display likes, dislike and attendance stats *}}
-               {{if $item.emojis}}
-                       {{foreach $item.emojis as $emoji}}
-                               {{if $emoji.icon.fa}}
-                                       <span class="wall-item-emoji" title="{{$emoji.title}}"><i class="fa {{$emoji.icon.fa}}" aria-hidden="true"></i> {{$emoji.total}}</span>
-                               {{else}}
-                                       <span class="wall-item-emoji" title="{{$emoji.title}}">{{$emoji.emoji}} {{$emoji.total}}</span>
-                               {{/if}}
-                       {{/foreach}}
-               {{elseif $item.responses}}
+               {{if !$item.emojis && $item.responses}}
                        <div class="wall-item-responses">
                        {{foreach $item.responses as $verb=>$response}}
                                <div class="wall-item-{{$verb}}" id="wall-item-{{$verb}}-{{$item.id}}">{{$response.output nofilter}}</div>