From 0604b1d5b7b19db41096876d0d911ea95c3c778f Mon Sep 17 00:00:00 2001
From: Mark Felder <feld@FreeBSD.org>
Date: Mon, 3 Aug 2020 18:44:35 -0500
Subject: Rename legacy PleromaFE Chat functionality to "Shout"

---
 src/components/shout_panel/shout_panel.vue | 148 +++++++++++++++++++++++++++++
 1 file changed, 148 insertions(+)
 create mode 100644 src/components/shout_panel/shout_panel.vue

(limited to 'src/components/shout_panel/shout_panel.vue')

diff --git a/src/components/shout_panel/shout_panel.vue b/src/components/shout_panel/shout_panel.vue
new file mode 100644
index 00000000..f90baf80
--- /dev/null
+++ b/src/components/shout_panel/shout_panel.vue
@@ -0,0 +1,148 @@
+<template>
+  <div
+    v-if="!collapsed || !floating"
+    class="shout-panel"
+  >
+    <div class="panel panel-default">
+      <div
+        class="panel-heading timeline-heading"
+        :class="{ 'shout-heading': floating }"
+        @click.stop.prevent="togglePanel"
+      >
+        <div class="title">
+          {{ $t('shoutbox.title') }}
+          <FAIcon
+            v-if="floating"
+            icon="times"
+            class="close-icon"
+          />
+        </div>
+      </div>
+      <div class="shout-window">
+        <div
+          v-for="message in messages"
+          :key="message.id"
+          class="shout-message"
+        >
+          <span class="shout-avatar">
+            <img :src="message.author.avatar">
+          </span>
+          <div class="shout-content">
+            <router-link
+              class="shout-name"
+              :to="userProfileLink(message.author)"
+            >
+              {{ message.author.username }}
+            </router-link>
+            <br>
+            <span class="shout-text">
+              {{ message.text }}
+            </span>
+          </div>
+        </div>
+      </div>
+      <div class="shout-input">
+        <textarea
+          v-model="currentMessage"
+          class="shout-input-textarea"
+          rows="1"
+          @keyup.enter="submit(currentMessage)"
+        />
+      </div>
+    </div>
+  </div>
+  <div
+    v-else
+    class="shout-panel"
+  >
+    <div class="panel panel-default">
+      <div
+        class="panel-heading stub timeline-heading shout-heading"
+        @click.stop.prevent="togglePanel"
+      >
+        <div class="title">
+          <FAIcon
+            class="icon"
+            icon="bullhorn"
+          />
+          {{ $t('shoutbox.title') }}
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script src="./shout_panel.js"></script>
+
+<style lang="scss">
+@import '../../_variables.scss';
+
+.floating-shout {
+  position: fixed;
+  right: 0px;
+  bottom: 0px;
+  z-index: 1000;
+  max-width: 25em;
+}
+
+.shout-panel {
+  .shout-heading {
+    cursor: pointer;
+
+    .icon {
+      color: $fallback--text;
+      color: var(--text, $fallback--text);
+      margin-right: 0.5em;
+    }
+
+    .title {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+    }
+  }
+
+  .shout-window {
+    overflow-y: auto;
+    overflow-x: hidden;
+    max-height: 20em;
+  }
+
+  .shout-window-container {
+    height: 100%;
+  }
+
+  .shout-message {
+    display: flex;
+    padding: 0.2em 0.5em
+  }
+
+  .shout-avatar {
+    img {
+      height: 24px;
+      width: 24px;
+      border-radius: $fallback--avatarRadius;
+      border-radius: var(--avatarRadius, $fallback--avatarRadius);
+      margin-right: 0.5em;
+      margin-top: 0.25em;
+    }
+  }
+
+  .shout-input {
+    display: flex;
+    textarea {
+      flex: 1;
+      margin: 0.6em;
+      min-height: 3.5em;
+      resize: none;
+    }
+  }
+
+  .shout-panel {
+    .title {
+      display: flex;
+      justify-content: space-between;
+    }
+  }
+}
+</style>
-- 
cgit v1.2.3-70-g09d2


From adfe56a3a31b3c4a8c2c206c06bebf9c4af675d1 Mon Sep 17 00:00:00 2001
From: Eris <femmediscord@gmail.com>
Date: Mon, 14 Jun 2021 17:54:40 +0000
Subject: New option: Always show floating New Post button

---
 .gitignore                                                       | 2 ++
 CHANGELOG.md                                                     | 2 +-
 CONTRIBUTORS.md                                                  | 1 +
 src/App.js                                                       | 3 +++
 src/App.vue                                                      | 1 +
 .../mobile_post_status_button/mobile_post_status_button.js       | 3 +++
 .../mobile_post_status_button/mobile_post_status_button.vue      | 4 ++--
 src/components/settings_modal/tabs/general_tab.vue               | 5 +++++
 src/components/shout_panel/shout_panel.vue                       | 9 ++++++++-
 src/i18n/en.json                                                 | 1 +
 src/modules/config.js                                            | 1 +
 11 files changed, 28 insertions(+), 4 deletions(-)

(limited to 'src/components/shout_panel/shout_panel.vue')

diff --git a/.gitignore b/.gitignore
index 479d57c4..8b23774f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,5 @@ test/e2e/reports
 selenium-debug.log
 .idea/
 config/local.json
+.gitignore
+config/local.example.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 905d9f65..4651c01d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Added option to mark posts as sensitive by default
 - Added quick filters for notifications
 - Implemented user option to change sidebar position to the right side
-
+- Implemented user option to always show floating New Post button (normally mobile-only)
 
 ## [2.3.0] - 2021-03-01
 ### Fixed
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index d7c217ce..f666a4ef 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -3,6 +3,7 @@ Contributors of this project.
 - Constance Variable (lambadalambda@social.heldscal.la): Code
 - Coco Snuss (cocosnuss@social.heldscal.la): Code
 - wakarimasen (wakarimasen@shitposter.club): NSFW hiding image
+- eris (eris@disqordia.space): Code
 - dtluna (dtluna@social.heldscal.la): Code
 - sonyam (sonyam@social.heldscal.la): Background images
 - hakui (hakui@freezepeach.xyz): CSS and styling
diff --git a/src/App.js b/src/App.js
index fe4c30cb..e7ea3851 100644
--- a/src/App.js
+++ b/src/App.js
@@ -73,6 +73,9 @@ export default {
         this.$store.state.instance.instanceSpecificPanelContent
     },
     showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },
+    shoutboxPosition () {
+      return this.$store.getters.mergedConfig.showNewPostButton || false
+    },
     isMobileLayout () { return this.$store.state.interface.mobileLayout },
     privateMode () { return this.$store.state.instance.private },
     sidebarAlign () {
diff --git a/src/App.vue b/src/App.vue
index 6c582c03..6b867498 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -53,6 +53,7 @@
       v-if="currentUser && shout"
       :floating="true"
       class="floating-shout mobile-hidden"
+      :class="{ 'left': shoutboxPosition }"
     />
     <MobilePostStatusButton />
     <UserReportingModal />
diff --git a/src/components/mobile_post_status_button/mobile_post_status_button.js b/src/components/mobile_post_status_button/mobile_post_status_button.js
index 366ea89c..d27fb3b8 100644
--- a/src/components/mobile_post_status_button/mobile_post_status_button.js
+++ b/src/components/mobile_post_status_button/mobile_post_status_button.js
@@ -44,6 +44,9 @@ const MobilePostStatusButton = {
 
       return this.autohideFloatingPostButton && (this.hidden || this.inputActive)
     },
+    isPersistent () {
+      return !!this.$store.getters.mergedConfig.showNewPostButton
+    },
     autohideFloatingPostButton () {
       return !!this.$store.getters.mergedConfig.autohideFloatingPostButton
     }
diff --git a/src/components/mobile_post_status_button/mobile_post_status_button.vue b/src/components/mobile_post_status_button/mobile_post_status_button.vue
index 767f8244..37becf4c 100644
--- a/src/components/mobile_post_status_button/mobile_post_status_button.vue
+++ b/src/components/mobile_post_status_button/mobile_post_status_button.vue
@@ -2,7 +2,7 @@
   <div v-if="isLoggedIn">
     <button
       class="button-default new-status-button"
-      :class="{ 'hidden': isHidden }"
+      :class="{ 'hidden': isHidden, 'always-show': isPersistent }"
       @click="openPostForm"
     >
       <FAIcon icon="pen" />
@@ -47,7 +47,7 @@
 }
 
 @media all and (min-width: 801px) {
-  .new-status-button {
+  .new-status-button:not(.always-show) {
     display: none;
   }
 }
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index bdb29edf..4c09d047 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -117,6 +117,11 @@
             {{ $t('settings.sensitive_by_default') }}
           </BooleanSetting>
         </li>
+        <li>
+          <BooleanSetting path="showNewPostButton">
+            {{ $t('settings.showPostButton') }}
+          </BooleanSetting>
+        </li>
         <li>
           <BooleanSetting path="autohideFloatingPostButton">
             {{ $t('settings.autohide_floating_post_button') }}
diff --git a/src/components/shout_panel/shout_panel.vue b/src/components/shout_panel/shout_panel.vue
index f90baf80..c88797d1 100644
--- a/src/components/shout_panel/shout_panel.vue
+++ b/src/components/shout_panel/shout_panel.vue
@@ -79,12 +79,19 @@
 
 .floating-shout {
   position: fixed;
-  right: 0px;
   bottom: 0px;
   z-index: 1000;
   max-width: 25em;
 }
 
+.floating-shout.left {
+  left: 0px;
+}
+
+.floating-shout:not(.left) {
+  right: 0px;
+}
+
 .shout-panel {
   .shout-heading {
     cursor: pointer;
diff --git a/src/i18n/en.json b/src/i18n/en.json
index aa440ac1..26f51cea 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -349,6 +349,7 @@
     "max_thumbnails": "Maximum amount of thumbnails per post",
     "hide_isp": "Hide instance-specific panel",
     "right_sidebar": "Show sidebar on the right side",
+    "showPostButton": "Always show floating New Post button",
     "hide_wallpaper": "Hide instance wallpaper",
     "preload_images": "Preload images",
     "use_one_click_nsfw": "Open NSFW attachments with just one click",
diff --git a/src/modules/config.js b/src/modules/config.js
index 0f596750..30c77a7b 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -34,6 +34,7 @@ export const defaultState = {
   loopVideoSilentOnly: true,
   streaming: false,
   emojiReactionsOnTimeline: true,
+  showNewPostButton: false,
   autohideFloatingPostButton: false,
   pauseOnUnfocused: true,
   stopGifs: false,
-- 
cgit v1.2.3-70-g09d2

