~jadedctrl/jam-xwx-moe

Showing details for patch e37c74fb1dd8a829e0c21b98ebb91376fc4fb588.
2023-09-19 (Tue), 1:07 AM - - e37c74fb1dd8a829e0c21b98ebb91376fc4fb588

Movas flikajojn al subdosiero /pleroma/flikaĵoj/

Summary of changes
diff -rN -u old-jam-xwx-moe/pleroma-fe/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch new-jam-xwx-moe/pleroma-fe/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch
--- old-jam-xwx-moe/pleroma-fe/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch	2024-11-22 16:46:39.194430761 +0000
+++ new-jam-xwx-moe/pleroma-fe/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-From 2d82733423e41e66c09ed3c34ec5b3c527aacffd Mon Sep 17 00:00:00 2001
-From: jadedctrl <jadedctrl@Posteo.net>
-Date: Wed, 9 Aug 2023 20:58:02 -0500
-Subject: [PATCH] =?UTF-8?q?Aldoni=20notojn/konsilojn=20=C4=89e=20CAPTCHA?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
----
- src/components/registration/registration.vue | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
-index 7438a5f4..6916dfb9 100644
---- a/src/components/registration/registration.vue
-+++ b/src/components/registration/registration.vue
-@@ -241,6 +241,10 @@
-                 for="captcha-label"
-               >{{ $t('registration.captcha') }}</label>
- 
-+              <sub>• Via respondo estu unu vorto, skribita minuskle, sen interpunkcio.</sub>
-+              <sub>• Tajpinte vian respondon, premu la enigan klavon, kaj nur poste klaku la butonon »Registriĝi«.</sub>
-+              <sub>• Vi ankaŭ povas peti konton per retpoŝtmesaĝo al xwx@posteo.org.</sub>
-+
-               <template v-if="['kocaptcha', 'native'].includes(captcha.type)">
-                 <img
-                   :src="captcha.url"
--- 
-2.41.0
-
diff -rN -u old-jam-xwx-moe/pleroma-fe/0001-Implicita-lingvo-estu-Esperanto.patch new-jam-xwx-moe/pleroma-fe/0001-Implicita-lingvo-estu-Esperanto.patch
--- old-jam-xwx-moe/pleroma-fe/0001-Implicita-lingvo-estu-Esperanto.patch	2024-11-22 16:46:39.194430761 +0000
+++ new-jam-xwx-moe/pleroma-fe/0001-Implicita-lingvo-estu-Esperanto.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-From 714841ef1f7f79ffa14f19cd66d31e5652666e3c Mon Sep 17 00:00:00 2001
-From: jadedctrl <jadedctrl@Posteo.net>
-Date: Sun, 30 Jul 2023 12:01:32 -0500
-Subject: [PATCH] Implicita lingvo estu Esperanto
-
----
- src/boot/after_store.js | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/boot/after_store.js b/src/boot/after_store.js
-index 9c1f007b..cb45b911 100644
---- a/src/boot/after_store.js
-+++ b/src/boot/after_store.js
-@@ -1,3 +1,4 @@
-+import Cookies from 'js-cookie'
- import { createApp } from 'vue'
- import { createRouter, createWebHistory } from 'vue-router'
- import vClickOutside from 'click-outside-vue3'
-@@ -62,6 +63,10 @@ const getInstanceConfig = async ({ store }) => {
-       store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })
-       store.dispatch('setInstanceOption', { name: 'birthdayRequired', value: !!data.pleroma.metadata.birthday_required })
-       store.dispatch('setInstanceOption', { name: 'birthdayMinAge', value: data.pleroma.metadata.birthday_min_age || 0 })
-+      // don't override cookie if set
-+      if (!Cookies.get('userLanguage')) {
-+        store.dispatch('setOption', { name: 'interfaceLanguage', value: 'eo' })
-+      }
- 
-       if (vapidPublicKey) {
-         store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })
--- 
-2.40.1
-
diff -rN -u old-jam-xwx-moe/pleroma-fe/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch new-jam-xwx-moe/pleroma-fe/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch
--- old-jam-xwx-moe/pleroma-fe/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch	2024-11-22 16:46:39.194430761 +0000
+++ new-jam-xwx-moe/pleroma-fe/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,121 +0,0 @@
-From 3bb46525ac6c38a6fa079173b682f349163e6a0d Mon Sep 17 00:00:00 2001
-From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com>
-Date: Sun, 27 Aug 2023 17:03:29 -0500
-Subject: [PATCH] =?UTF-8?q?Montri=C4=9Das=20bildosignoj=20pligrandigitaj,?=
- =?UTF-8?q?=20dum=20surmuso?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Prenita de BloatFE…
-https://git.freesoftwareextremist.com/bloat/tree/static/fluoride.js
----
- src/App.js | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 78 insertions(+), 1 deletion(-)
-
-diff --git a/src/App.js b/src/App.js
-index b7eb2f72..a59d8672 100644
---- a/src/App.js
-+++ b/src/App.js
-@@ -42,13 +42,19 @@ export default {
-     GlobalNoticeList
-   },
-   data: () => ({
--    mobileActivePanel: 'timeline'
-+    mobileActivePanel: 'timeline',
-+    emojiHover: null,
-+    emojiHoverLastUpdate: 0,
-+    imgX: 0,
-+    imgY: 0
-   }),
-   created () {
-     // Load the locale from the storage
-     const val = this.$store.getters.mergedConfig.interfaceLanguage
-     this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
-     window.addEventListener('resize', this.updateMobileState)
-+
-+    document.addEventListener('scroll', this.updateEmojiHover)
-   },
-   unmounted () {
-     window.removeEventListener('resize', this.updateMobileState)
-@@ -130,6 +136,77 @@ export default {
-     updateMobileState () {
-       this.$store.dispatch('setLayoutWidth', windowWidth())
-       this.$store.dispatch('setLayoutHeight', windowHeight())
-+    },
-+
-+    setPos (el, cx, cy, mw, mh) {
-+      const h = el.clientHeight
-+      const w = el.clientWidth
-+      let left, top
-+      if (cx < mw / 2) {
-+        if (w + cx + 20 < mw) {
-+          left = cx + 20
-+        } else {
-+          left = (mw - w)
-+        }
-+      } else {
-+        if (cx - w - 20 > 0) {
-+          left = cx - w - 20
-+        } else {
-+          left = 0
-+        }
-+      }
-+      top = (cy - (h / 2))
-+      if (top < 0) {
-+        top = 0
-+      } else if (top + h > mh) {
-+        top = (mh - h)
-+      }
-+      el.style.left = left + 'px'
-+      el.style.top = top + 'px'
-+    },
-+
-+    handleEmojiHover (a) {
-+      const setPos = this.setPos
-+      a.onmouseenter = function (e) {
-+        const mw = document.documentElement.clientWidth
-+        const mh = document.documentElement.clientHeight - 24
-+        const img = document.createElement('img')
-+        img.id = 'img-preview'
-+        img.style['z-index'] = 3
-+        img.style.position = 'fixed'
-+        img.style.width = '5em'
-+        img.src = e.target.getAttribute('src')
-+        this.emojiHover = img
-+        setPos(this.emojiHover, this.imgX, this.imgY, mw, mh)
-+        document.body.appendChild(img)
-+      }
-+      a.onmouseleave = function (e) {
-+        const img = document.getElementById('img-preview')
-+        if (img) {
-+          document.body.removeChild(img)
-+        }
-+        this.emojiHover = null
-+      }
-+      a.onmousemove = function (e) {
-+        if (!this.emojiHover) {
-+          return
-+        }
-+        const mw = document.documentElement.clientWidth
-+        const mh = document.documentElement.clientHeight - 24
-+        this.imgX = e.clientX
-+        this.imgY = e.clientY
-+        setPos(this.emojiHover, this.imgX, this.imgY, mw, mh)
-+      }
-+    },
-+
-+    updateEmojiHover () {
-+      if (Date() - this.emojiHoverLastUpdate > 5000) {
-+        const links = document.querySelectorAll('.emoji img')
-+        for (let j = 0; j < links.length; j++) {
-+          this.handleEmojiHover(links[j])
-+        }
-+        this.emojiHoverLastUpdate = Date()
-+      }
-     }
-   }
- }
--- 
-2.41.0
-
diff -rN -u old-jam-xwx-moe/pleroma-fe/0001-Subtenon-de-subpa-oj.patch new-jam-xwx-moe/pleroma-fe/0001-Subtenon-de-subpa-oj.patch
--- old-jam-xwx-moe/pleroma-fe/0001-Subtenon-de-subpa-oj.patch	2024-11-22 16:46:39.194430761 +0000
+++ new-jam-xwx-moe/pleroma-fe/0001-Subtenon-de-subpa-oj.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,248 +0,0 @@
-From 6b4412d816329acf1be741db005732e3cdcbb9f3 Mon Sep 17 00:00:00 2001
-From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com>
-Date: Sat, 12 Aug 2023 12:36:26 -0500
-Subject: [PATCH] =?UTF-8?q?Subtenon=20de=20subpa=C4=9Doj?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-»Subpaĝo« estas neŝanĝanta HTML-dosiero, kiu
-povas montriĝi kiel kartopaĝo en Pleroma
-ĉe /paĝoj/$io.
-Simple kreu HTML-ajn dosierojn ĉe /static/static/*!
----
- src/boot/routes.js                            |  3 +
- .../links_dynamically/links_dynamically.js    | 41 +++++++++++
- .../links_dynamically/links_dynamically.vue   | 11 +++
- src/components/subpage/subpage.js             | 54 +++++++++++++++
- src/components/subpage/subpage.vue            | 69 +++++++++++++++++++
- 5 files changed, 178 insertions(+)
- create mode 100644 src/components/links_dynamically/links_dynamically.js
- create mode 100644 src/components/links_dynamically/links_dynamically.vue
- create mode 100644 src/components/subpage/subpage.js
- create mode 100644 src/components/subpage/subpage.vue
-
-diff --git a/src/boot/routes.js b/src/boot/routes.js
-index 2dc900e7..b67ad9e7 100644
---- a/src/boot/routes.js
-+++ b/src/boot/routes.js
-@@ -9,6 +9,7 @@ import DMs from 'components/dm_timeline/dm_timeline.vue'
- import ChatList from 'components/chat_list/chat_list.vue'
- import Chat from 'components/chat/chat.vue'
- import UserProfile from 'components/user_profile/user_profile.vue'
-+import SubPage from 'components/subpage/subpage.vue'
- import Search from 'components/search/search.vue'
- import Registration from 'components/registration/registration.vue'
- import PasswordReset from 'components/password_reset/password_reset.vue'
-@@ -79,6 +80,8 @@ export default (store) => {
-     { name: 'about', path: '/about', component: About },
-     { name: 'announcements', path: '/announcements', component: AnnouncementsPage },
-     { name: 'user-profile', path: '/users/:name', component: UserProfile },
-+    { name: 'subpage-index', path: '/pa%C4%9Doj', component: SubPage },
-+    { name: 'subpage', path: '/pa%C4%9Doj/:page', component: SubPage },
-     { name: 'legacy-user-profile', path: '/:name', component: UserProfile },
-     { name: 'lists', path: '/lists', component: Lists },
-     { name: 'lists-timeline', path: '/lists/:id', component: ListsTimeline },
-diff --git a/src/components/links_dynamically/links_dynamically.js b/src/components/links_dynamically/links_dynamically.js
-new file mode 100644
-index 00000000..9a36f6f6
---- /dev/null
-+++ b/src/components/links_dynamically/links_dynamically.js
-@@ -0,0 +1,41 @@
-+const LinksDynamically = {
-+  props: [
-+    'content'
-+  ],
-+  // Make sure that any internal links are handled by the router (most notably for intra-subpage links).
-+  // Borrowed from a very lovely man by the name of Dennis Reimann:
-+  // https://web.archive.org/web/20230607095633/https://dennisreimann.de/articles/delegating-html-links-to-vue-router.html
-+  mounted () {
-+    window.addEventListener('click', event => {
-+      // ensure we use the link, in case the click has been received by a subelement
-+      let { target } = event
-+      while (target && target.tagName !== 'A') target = target.parentNode
-+      // handle only links that do not reference external resources
-+      if (target && target.matches("a:not([href*='://'])") && target.href) {
-+        // some sanity checks taken from vue-router:
-+        // https://github.com/vuejs/vue-router/blob/dev/src/components/link.js#L106
-+        const { altKey, ctrlKey, metaKey, shiftKey, button, defaultPrevented } = event
-+        // don't handle with control keys
-+        if (metaKey || altKey || ctrlKey || shiftKey) return
-+        // don't handle when preventDefault called
-+        if (defaultPrevented) return
-+        // don't handle right clicks
-+        if (button !== undefined && button !== 0) return
-+        // don't handle if `target="_blank"`
-+        if (target && target.getAttribute) {
-+          const linkTarget = target.getAttribute('target')
-+          if (/\b_blank\b/i.test(linkTarget)) return
-+        }
-+        // don't handle same page links/anchors
-+        const url = new URL(target.href)
-+        const to = url.pathname
-+        if (window.location.pathname !== to && event.preventDefault) {
-+          event.preventDefault()
-+          this.$router.push(to)
-+        }
-+      }
-+    })
-+  }
-+}
-+
-+export default LinksDynamically
-diff --git a/src/components/links_dynamically/links_dynamically.vue b/src/components/links_dynamically/links_dynamically.vue
-new file mode 100644
-index 00000000..efcf7f94
---- /dev/null
-+++ b/src/components/links_dynamically/links_dynamically.vue
-@@ -0,0 +1,11 @@
-+<template>
-+  <!-- eslint-disable vue/no-v-html -->
-+  <div
-+    class="dynamic-content"
-+    @click="handleClicks"
-+    v-html="content"
-+  />
-+  <!-- eslint-enable vue/no-v-html -->
-+</template>
-+
-+<script src="./links_dynamically.js"></script>
-diff --git a/src/components/subpage/subpage.js b/src/components/subpage/subpage.js
-new file mode 100644
-index 00000000..73b6c68a
---- /dev/null
-+++ b/src/components/subpage/subpage.js
-@@ -0,0 +1,54 @@
-+import LinksDynamically from '../links_dynamically/links_dynamically.vue'
-+
-+// Wow, I really don’t know how to write JS! Nor use Vue!
-+// Hopefully this goes OK! ^^
-+const SubPage = {
-+  components: {
-+    LinksDynamically
-+  },
-+  data () {
-+    return {
-+      content: 'Serĉante paĝon…',
-+      title: 'Paĝo',
-+      page: '',
-+      error: false
-+    }
-+  },
-+  methods: {
-+    async switchPage (page) {
-+      // Reset status…
-+      this.title = 'Paĝo'
-+      this.content = 'Serĉante paĝon…'
-+      this.page = page || 'index'
-+
-+      // Fetch & parse the page’s content.
-+      const response = await fetch('/static/paĝoj/' + this.page + '.html')
-+      const htmlStr = await response.text()
-+      const htmlDom = new DOMParser().parseFromString(htmlStr, 'text/html')
-+
-+      // Set the panel name & remove its corresponding header from HTML.
-+      const firstChild = htmlDom.body.firstElementChild
-+      if (/^[Hh][0-9]/.test(firstChild.tagName)) {
-+        this.title = firstChild.innerHTML
-+        firstChild.remove()
-+      }
-+
-+      // Actually set the panel’s content.
-+      this.content = htmlDom.body.innerHTML
-+
-+      if (!response.ok || firstChild.tagName.toLowerCase() === 'noscript') {
-+        this.error = true
-+      }
-+    }
-+  },
-+  created () {
-+    this.switchPage(this.$route.params.page)
-+  },
-+  watch: {
-+    '$route.params.page': function (newPage) {
-+      this.switchPage(newPage)
-+    }
-+  }
-+}
-+
-+export default SubPage
-diff --git a/src/components/subpage/subpage.vue b/src/components/subpage/subpage.vue
-new file mode 100644
-index 00000000..b2b1fa6d
---- /dev/null
-+++ b/src/components/subpage/subpage.vue
-@@ -0,0 +1,70 @@
-+<template>
-+  <div>
-+    <div class="panel panel-default">
-+      <div class="panel-heading timeline-heading base02-background">
-+        <div
-+          v-if="error"
-+          class="title"
-+        >
-+          Eraro 404 — Paĝo ne ekzistas!
-+        </div>
-+        <div
-+          v-else
-+          class="title"
-+        >
-+          {{ title }}
-+        </div>
-+        <router-link
-+          class="pagelist-icon"
-+          to="./"
-+        >
-+          Paĝoj ↸
-+        </router-link>
-+      </div>
-+      <div
-+        v-if="error"
-+        class="panel-body"
-+      >
-+        <div class="page-content">
-+          <h4>La paĝo »{{ page }}« ne ekzistas!</h4>
-+          <p>Ĉu vi certas, ke ne mistajpis la retadreson?</p>
-+          <p>Krome, eblas ke foriĝis (aŭ neniam fariĝis) tiu paĝo. Tiuokaze, bedaŭron!</p>
-+          <p>
-+            Vi eble volas reviziti la
-+            <router-link to="./">
-+              paĝoliston
-+            </router-link>.
-+          </p>
-+        </div>
-+        <img
-+          class="error-image"
-+          src="/x_x/404.png"
-+        >
-+      </div>
-+      <div
-+        v-else
-+        class="panel-body"
-+      >
-+        <div class="page-content">
-+          <LinksDynamically :content="content" />
-+        </div>
-+      </div>
-+    </div>
-+  </div>
-+</template>
-+
-+<script src="./subpage.js"></script>
-+
-+<style lang="scss">
-+.page-content {
-+  margin: 1em;
-+}
-+.error-image {
-+  display: table-cell;
-+  vertical-align: bottom;
-+}
-+.pagelist-icon {
-+  text-align: right;
-+  margin-left: auto;
-+}
-+</style>
--- 
-2.42.0
-
diff -rN -u old-jam-xwx-moe/pleroma-fe/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch new-jam-xwx-moe/pleroma-fe/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch
--- old-jam-xwx-moe/pleroma-fe/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch	2024-11-22 16:46:39.198430771 +0000
+++ new-jam-xwx-moe/pleroma-fe/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,83 +0,0 @@
-From 4521a041efc54235c4bcf15494c26629c299bec5 Mon Sep 17 00:00:00 2001
-From: Jaidyn Ann <jadedctrl@teknik.io>
-Date: Sat, 12 Aug 2023 16:24:05 -0500
-Subject: [PATCH 2/2] =?UTF-8?q?Ebligi=20ligilojn=20de=20reguloj/pripanelo?=
- =?UTF-8?q?=20al=20subpa=C4=9Doj?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Ĉi tio helpas la trovadon kaj reklamadon de paĝoj!
----
- .../instance_specific_panel/instance_specific_panel.js   | 5 +++++
- .../instance_specific_panel/instance_specific_panel.vue  | 4 +---
- .../terms_of_service_panel/terms_of_service_panel.js     | 5 +++++
- .../terms_of_service_panel/terms_of_service_panel.vue    | 9 +++------
- 4 files changed, 14 insertions(+), 9 deletions(-)
-
-diff --git a/src/components/instance_specific_panel/instance_specific_panel.js b/src/components/instance_specific_panel/instance_specific_panel.js
-index 09e3d055..3c0b9670 100644
---- a/src/components/instance_specific_panel/instance_specific_panel.js
-+++ b/src/components/instance_specific_panel/instance_specific_panel.js
-@@ -1,4 +1,9 @@
-+import LinksDynamically from '../links_dynamically/links_dynamically.vue'
-+
- const InstanceSpecificPanel = {
-+  components: {
-+    LinksDynamically
-+  },
-   computed: {
-     instanceSpecificPanelContent () {
-       return this.$store.state.instance.instanceSpecificPanelContent
-diff --git a/src/components/instance_specific_panel/instance_specific_panel.vue b/src/components/instance_specific_panel/instance_specific_panel.vue
-index c8ed0a2d..a49c20cf 100644
---- a/src/components/instance_specific_panel/instance_specific_panel.vue
-+++ b/src/components/instance_specific_panel/instance_specific_panel.vue
-@@ -2,9 +2,7 @@
-   <div class="instance-specific-panel">
-     <div class="panel panel-default">
-       <div class="panel-body">
--        <!-- eslint-disable vue/no-v-html -->
--        <div v-html="instanceSpecificPanelContent" />
--        <!-- eslint-enable vue/no-v-html -->
-+        <LinksDynamically :content="instanceSpecificPanelContent" />
-       </div>
-     </div>
-   </div>
-diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.js b/src/components/terms_of_service_panel/terms_of_service_panel.js
-index 4276f8f7..41382c60 100644
---- a/src/components/terms_of_service_panel/terms_of_service_panel.js
-+++ b/src/components/terms_of_service_panel/terms_of_service_panel.js
-@@ -1,4 +1,9 @@
-+import LinksDynamically from '../links_dynamically/links_dynamically.vue'
-+
- const TermsOfServicePanel = {
-+  components: {
-+    LinksDynamically
-+  },
-   computed: {
-     content () {
-       return this.$store.state.instance.tos
-diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.vue b/src/components/terms_of_service_panel/terms_of_service_panel.vue
-index bff0ae74..0d90c00d 100644
---- a/src/components/terms_of_service_panel/terms_of_service_panel.vue
-+++ b/src/components/terms_of_service_panel/terms_of_service_panel.vue
-@@ -2,12 +2,9 @@
-   <div>
-     <div class="panel panel-default">
-       <div class="panel-body">
--        <!-- eslint-disable vue/no-v-html -->
--        <div
--          class="tos-content"
--          v-html="content"
--        />
--      <!-- eslint-enable vue/no-v-html -->
-+        <div class="tos-content">
-+          <LinksDynamically :content="content" />
-+        </div>
-       </div>
-     </div>
-   </div>
--- 
-2.40.1
-
diff -rN -u "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch" "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch"
--- "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Aldoni-notojn-konsilojn-e-CAPTCHA.patch"	2024-11-22 16:46:39.198430771 +0000
@@ -0,0 +1,30 @@
+From 2d82733423e41e66c09ed3c34ec5b3c527aacffd Mon Sep 17 00:00:00 2001
+From: jadedctrl <jadedctrl@Posteo.net>
+Date: Wed, 9 Aug 2023 20:58:02 -0500
+Subject: [PATCH] =?UTF-8?q?Aldoni=20notojn/konsilojn=20=C4=89e=20CAPTCHA?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+---
+ src/components/registration/registration.vue | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
+index 7438a5f4..6916dfb9 100644
+--- a/src/components/registration/registration.vue
++++ b/src/components/registration/registration.vue
+@@ -241,6 +241,10 @@
+                 for="captcha-label"
+               >{{ $t('registration.captcha') }}</label>
+ 
++              <sub>• Via respondo estu unu vorto, skribita minuskle, sen interpunkcio.</sub>
++              <sub>• Tajpinte vian respondon, premu la enigan klavon, kaj nur poste klaku la butonon »Registriĝi«.</sub>
++              <sub>• Vi ankaŭ povas peti konton per retpoŝtmesaĝo al xwx@posteo.org.</sub>
++
+               <template v-if="['kocaptcha', 'native'].includes(captcha.type)">
+                 <img
+                   :src="captcha.url"
+-- 
+2.41.0
+
diff -rN -u "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Implicita-lingvo-estu-Esperanto.patch" "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Implicita-lingvo-estu-Esperanto.patch"
--- "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Implicita-lingvo-estu-Esperanto.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Implicita-lingvo-estu-Esperanto.patch"	2024-11-22 16:46:39.198430771 +0000
@@ -0,0 +1,32 @@
+From 714841ef1f7f79ffa14f19cd66d31e5652666e3c Mon Sep 17 00:00:00 2001
+From: jadedctrl <jadedctrl@Posteo.net>
+Date: Sun, 30 Jul 2023 12:01:32 -0500
+Subject: [PATCH] Implicita lingvo estu Esperanto
+
+---
+ src/boot/after_store.js | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/boot/after_store.js b/src/boot/after_store.js
+index 9c1f007b..cb45b911 100644
+--- a/src/boot/after_store.js
++++ b/src/boot/after_store.js
+@@ -1,3 +1,4 @@
++import Cookies from 'js-cookie'
+ import { createApp } from 'vue'
+ import { createRouter, createWebHistory } from 'vue-router'
+ import vClickOutside from 'click-outside-vue3'
+@@ -62,6 +63,10 @@ const getInstanceConfig = async ({ store }) => {
+       store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })
+       store.dispatch('setInstanceOption', { name: 'birthdayRequired', value: !!data.pleroma.metadata.birthday_required })
+       store.dispatch('setInstanceOption', { name: 'birthdayMinAge', value: data.pleroma.metadata.birthday_min_age || 0 })
++      // don't override cookie if set
++      if (!Cookies.get('userLanguage')) {
++        store.dispatch('setOption', { name: 'interfaceLanguage', value: 'eo' })
++      }
+ 
+       if (vapidPublicKey) {
+         store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })
+-- 
+2.40.1
+
diff -rN -u "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch" "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch"
--- "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Montri-as-bildosignoj-pligrandigitaj-dum-surmuso.patch"	2024-11-22 16:46:39.198430771 +0000
@@ -0,0 +1,121 @@
+From 3bb46525ac6c38a6fa079173b682f349163e6a0d Mon Sep 17 00:00:00 2001
+From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com>
+Date: Sun, 27 Aug 2023 17:03:29 -0500
+Subject: [PATCH] =?UTF-8?q?Montri=C4=9Das=20bildosignoj=20pligrandigitaj,?=
+ =?UTF-8?q?=20dum=20surmuso?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Prenita de BloatFE…
+https://git.freesoftwareextremist.com/bloat/tree/static/fluoride.js
+---
+ src/App.js | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 78 insertions(+), 1 deletion(-)
+
+diff --git a/src/App.js b/src/App.js
+index b7eb2f72..a59d8672 100644
+--- a/src/App.js
++++ b/src/App.js
+@@ -42,13 +42,19 @@ export default {
+     GlobalNoticeList
+   },
+   data: () => ({
+-    mobileActivePanel: 'timeline'
++    mobileActivePanel: 'timeline',
++    emojiHover: null,
++    emojiHoverLastUpdate: 0,
++    imgX: 0,
++    imgY: 0
+   }),
+   created () {
+     // Load the locale from the storage
+     const val = this.$store.getters.mergedConfig.interfaceLanguage
+     this.$store.dispatch('setOption', { name: 'interfaceLanguage', value: val })
+     window.addEventListener('resize', this.updateMobileState)
++
++    document.addEventListener('scroll', this.updateEmojiHover)
+   },
+   unmounted () {
+     window.removeEventListener('resize', this.updateMobileState)
+@@ -130,6 +136,77 @@ export default {
+     updateMobileState () {
+       this.$store.dispatch('setLayoutWidth', windowWidth())
+       this.$store.dispatch('setLayoutHeight', windowHeight())
++    },
++
++    setPos (el, cx, cy, mw, mh) {
++      const h = el.clientHeight
++      const w = el.clientWidth
++      let left, top
++      if (cx < mw / 2) {
++        if (w + cx + 20 < mw) {
++          left = cx + 20
++        } else {
++          left = (mw - w)
++        }
++      } else {
++        if (cx - w - 20 > 0) {
++          left = cx - w - 20
++        } else {
++          left = 0
++        }
++      }
++      top = (cy - (h / 2))
++      if (top < 0) {
++        top = 0
++      } else if (top + h > mh) {
++        top = (mh - h)
++      }
++      el.style.left = left + 'px'
++      el.style.top = top + 'px'
++    },
++
++    handleEmojiHover (a) {
++      const setPos = this.setPos
++      a.onmouseenter = function (e) {
++        const mw = document.documentElement.clientWidth
++        const mh = document.documentElement.clientHeight - 24
++        const img = document.createElement('img')
++        img.id = 'img-preview'
++        img.style['z-index'] = 3
++        img.style.position = 'fixed'
++        img.style.width = '5em'
++        img.src = e.target.getAttribute('src')
++        this.emojiHover = img
++        setPos(this.emojiHover, this.imgX, this.imgY, mw, mh)
++        document.body.appendChild(img)
++      }
++      a.onmouseleave = function (e) {
++        const img = document.getElementById('img-preview')
++        if (img) {
++          document.body.removeChild(img)
++        }
++        this.emojiHover = null
++      }
++      a.onmousemove = function (e) {
++        if (!this.emojiHover) {
++          return
++        }
++        const mw = document.documentElement.clientWidth
++        const mh = document.documentElement.clientHeight - 24
++        this.imgX = e.clientX
++        this.imgY = e.clientY
++        setPos(this.emojiHover, this.imgX, this.imgY, mw, mh)
++      }
++    },
++
++    updateEmojiHover () {
++      if (Date() - this.emojiHoverLastUpdate > 5000) {
++        const links = document.querySelectorAll('.emoji img')
++        for (let j = 0; j < links.length; j++) {
++          this.handleEmojiHover(links[j])
++        }
++        this.emojiHoverLastUpdate = Date()
++      }
+     }
+   }
+ }
+-- 
+2.41.0
+
diff -rN -u "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Subtenon-de-subpa-oj.patch" "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Subtenon-de-subpa-oj.patch"
--- "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Subtenon-de-subpa-oj.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0001-Subtenon-de-subpa-oj.patch"	2024-11-22 16:46:39.198430771 +0000
@@ -0,0 +1,248 @@
+From 6b4412d816329acf1be741db005732e3cdcbb9f3 Mon Sep 17 00:00:00 2001
+From: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com>
+Date: Sat, 12 Aug 2023 12:36:26 -0500
+Subject: [PATCH] =?UTF-8?q?Subtenon=20de=20subpa=C4=9Doj?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+»Subpaĝo« estas neŝanĝanta HTML-dosiero, kiu
+povas montriĝi kiel kartopaĝo en Pleroma
+ĉe /paĝoj/$io.
+Simple kreu HTML-ajn dosierojn ĉe /static/static/*!
+---
+ src/boot/routes.js                            |  3 +
+ .../links_dynamically/links_dynamically.js    | 41 +++++++++++
+ .../links_dynamically/links_dynamically.vue   | 11 +++
+ src/components/subpage/subpage.js             | 54 +++++++++++++++
+ src/components/subpage/subpage.vue            | 69 +++++++++++++++++++
+ 5 files changed, 178 insertions(+)
+ create mode 100644 src/components/links_dynamically/links_dynamically.js
+ create mode 100644 src/components/links_dynamically/links_dynamically.vue
+ create mode 100644 src/components/subpage/subpage.js
+ create mode 100644 src/components/subpage/subpage.vue
+
+diff --git a/src/boot/routes.js b/src/boot/routes.js
+index 2dc900e7..b67ad9e7 100644
+--- a/src/boot/routes.js
++++ b/src/boot/routes.js
+@@ -9,6 +9,7 @@ import DMs from 'components/dm_timeline/dm_timeline.vue'
+ import ChatList from 'components/chat_list/chat_list.vue'
+ import Chat from 'components/chat/chat.vue'
+ import UserProfile from 'components/user_profile/user_profile.vue'
++import SubPage from 'components/subpage/subpage.vue'
+ import Search from 'components/search/search.vue'
+ import Registration from 'components/registration/registration.vue'
+ import PasswordReset from 'components/password_reset/password_reset.vue'
+@@ -79,6 +80,8 @@ export default (store) => {
+     { name: 'about', path: '/about', component: About },
+     { name: 'announcements', path: '/announcements', component: AnnouncementsPage },
+     { name: 'user-profile', path: '/users/:name', component: UserProfile },
++    { name: 'subpage-index', path: '/pa%C4%9Doj', component: SubPage },
++    { name: 'subpage', path: '/pa%C4%9Doj/:page', component: SubPage },
+     { name: 'legacy-user-profile', path: '/:name', component: UserProfile },
+     { name: 'lists', path: '/lists', component: Lists },
+     { name: 'lists-timeline', path: '/lists/:id', component: ListsTimeline },
+diff --git a/src/components/links_dynamically/links_dynamically.js b/src/components/links_dynamically/links_dynamically.js
+new file mode 100644
+index 00000000..9a36f6f6
+--- /dev/null
++++ b/src/components/links_dynamically/links_dynamically.js
+@@ -0,0 +1,41 @@
++const LinksDynamically = {
++  props: [
++    'content'
++  ],
++  // Make sure that any internal links are handled by the router (most notably for intra-subpage links).
++  // Borrowed from a very lovely man by the name of Dennis Reimann:
++  // https://web.archive.org/web/20230607095633/https://dennisreimann.de/articles/delegating-html-links-to-vue-router.html
++  mounted () {
++    window.addEventListener('click', event => {
++      // ensure we use the link, in case the click has been received by a subelement
++      let { target } = event
++      while (target && target.tagName !== 'A') target = target.parentNode
++      // handle only links that do not reference external resources
++      if (target && target.matches("a:not([href*='://'])") && target.href) {
++        // some sanity checks taken from vue-router:
++        // https://github.com/vuejs/vue-router/blob/dev/src/components/link.js#L106
++        const { altKey, ctrlKey, metaKey, shiftKey, button, defaultPrevented } = event
++        // don't handle with control keys
++        if (metaKey || altKey || ctrlKey || shiftKey) return
++        // don't handle when preventDefault called
++        if (defaultPrevented) return
++        // don't handle right clicks
++        if (button !== undefined && button !== 0) return
++        // don't handle if `target="_blank"`
++        if (target && target.getAttribute) {
++          const linkTarget = target.getAttribute('target')
++          if (/\b_blank\b/i.test(linkTarget)) return
++        }
++        // don't handle same page links/anchors
++        const url = new URL(target.href)
++        const to = url.pathname
++        if (window.location.pathname !== to && event.preventDefault) {
++          event.preventDefault()
++          this.$router.push(to)
++        }
++      }
++    })
++  }
++}
++
++export default LinksDynamically
+diff --git a/src/components/links_dynamically/links_dynamically.vue b/src/components/links_dynamically/links_dynamically.vue
+new file mode 100644
+index 00000000..efcf7f94
+--- /dev/null
++++ b/src/components/links_dynamically/links_dynamically.vue
+@@ -0,0 +1,11 @@
++<template>
++  <!-- eslint-disable vue/no-v-html -->
++  <div
++    class="dynamic-content"
++    @click="handleClicks"
++    v-html="content"
++  />
++  <!-- eslint-enable vue/no-v-html -->
++</template>
++
++<script src="./links_dynamically.js"></script>
+diff --git a/src/components/subpage/subpage.js b/src/components/subpage/subpage.js
+new file mode 100644
+index 00000000..73b6c68a
+--- /dev/null
++++ b/src/components/subpage/subpage.js
+@@ -0,0 +1,54 @@
++import LinksDynamically from '../links_dynamically/links_dynamically.vue'
++
++// Wow, I really don’t know how to write JS! Nor use Vue!
++// Hopefully this goes OK! ^^
++const SubPage = {
++  components: {
++    LinksDynamically
++  },
++  data () {
++    return {
++      content: 'Serĉante paĝon…',
++      title: 'Paĝo',
++      page: '',
++      error: false
++    }
++  },
++  methods: {
++    async switchPage (page) {
++      // Reset status…
++      this.title = 'Paĝo'
++      this.content = 'Serĉante paĝon…'
++      this.page = page || 'index'
++
++      // Fetch & parse the page’s content.
++      const response = await fetch('/static/paĝoj/' + this.page + '.html')
++      const htmlStr = await response.text()
++      const htmlDom = new DOMParser().parseFromString(htmlStr, 'text/html')
++
++      // Set the panel name & remove its corresponding header from HTML.
++      const firstChild = htmlDom.body.firstElementChild
++      if (/^[Hh][0-9]/.test(firstChild.tagName)) {
++        this.title = firstChild.innerHTML
++        firstChild.remove()
++      }
++
++      // Actually set the panel’s content.
++      this.content = htmlDom.body.innerHTML
++
++      if (!response.ok || firstChild.tagName.toLowerCase() === 'noscript') {
++        this.error = true
++      }
++    }
++  },
++  created () {
++    this.switchPage(this.$route.params.page)
++  },
++  watch: {
++    '$route.params.page': function (newPage) {
++      this.switchPage(newPage)
++    }
++  }
++}
++
++export default SubPage
+diff --git a/src/components/subpage/subpage.vue b/src/components/subpage/subpage.vue
+new file mode 100644
+index 00000000..b2b1fa6d
+--- /dev/null
++++ b/src/components/subpage/subpage.vue
+@@ -0,0 +1,70 @@
++<template>
++  <div>
++    <div class="panel panel-default">
++      <div class="panel-heading timeline-heading base02-background">
++        <div
++          v-if="error"
++          class="title"
++        >
++          Eraro 404 — Paĝo ne ekzistas!
++        </div>
++        <div
++          v-else
++          class="title"
++        >
++          {{ title }}
++        </div>
++        <router-link
++          class="pagelist-icon"
++          to="./"
++        >
++          Paĝoj ↸
++        </router-link>
++      </div>
++      <div
++        v-if="error"
++        class="panel-body"
++      >
++        <div class="page-content">
++          <h4>La paĝo »{{ page }}« ne ekzistas!</h4>
++          <p>Ĉu vi certas, ke ne mistajpis la retadreson?</p>
++          <p>Krome, eblas ke foriĝis (aŭ neniam fariĝis) tiu paĝo. Tiuokaze, bedaŭron!</p>
++          <p>
++            Vi eble volas reviziti la
++            <router-link to="./">
++              paĝoliston
++            </router-link>.
++          </p>
++        </div>
++        <img
++          class="error-image"
++          src="/x_x/404.png"
++        >
++      </div>
++      <div
++        v-else
++        class="panel-body"
++      >
++        <div class="page-content">
++          <LinksDynamically :content="content" />
++        </div>
++      </div>
++    </div>
++  </div>
++</template>
++
++<script src="./subpage.js"></script>
++
++<style lang="scss">
++.page-content {
++  margin: 1em;
++}
++.error-image {
++  display: table-cell;
++  vertical-align: bottom;
++}
++.pagelist-icon {
++  text-align: right;
++  margin-left: auto;
++}
++</style>
+-- 
+2.42.0
+
diff -rN -u "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch" "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch"
--- "old-jam-xwx-moe/pleroma-fe/flika\304\265oj/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch"	1970-01-01 00:00:00.000000000 +0000
+++ "new-jam-xwx-moe/pleroma-fe/flika\304\265oj/0002-Ebligi-ligilojn-de-reguloj-pripanelo-al-subpa-oj.patch"	2024-11-22 16:46:39.198430771 +0000
@@ -0,0 +1,83 @@
+From 4521a041efc54235c4bcf15494c26629c299bec5 Mon Sep 17 00:00:00 2001
+From: Jaidyn Ann <jadedctrl@teknik.io>
+Date: Sat, 12 Aug 2023 16:24:05 -0500
+Subject: [PATCH 2/2] =?UTF-8?q?Ebligi=20ligilojn=20de=20reguloj/pripanelo?=
+ =?UTF-8?q?=20al=20subpa=C4=9Doj?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Ĉi tio helpas la trovadon kaj reklamadon de paĝoj!
+---
+ .../instance_specific_panel/instance_specific_panel.js   | 5 +++++
+ .../instance_specific_panel/instance_specific_panel.vue  | 4 +---
+ .../terms_of_service_panel/terms_of_service_panel.js     | 5 +++++
+ .../terms_of_service_panel/terms_of_service_panel.vue    | 9 +++------
+ 4 files changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/src/components/instance_specific_panel/instance_specific_panel.js b/src/components/instance_specific_panel/instance_specific_panel.js
+index 09e3d055..3c0b9670 100644
+--- a/src/components/instance_specific_panel/instance_specific_panel.js
++++ b/src/components/instance_specific_panel/instance_specific_panel.js
+@@ -1,4 +1,9 @@
++import LinksDynamically from '../links_dynamically/links_dynamically.vue'
++
+ const InstanceSpecificPanel = {
++  components: {
++    LinksDynamically
++  },
+   computed: {
+     instanceSpecificPanelContent () {
+       return this.$store.state.instance.instanceSpecificPanelContent
+diff --git a/src/components/instance_specific_panel/instance_specific_panel.vue b/src/components/instance_specific_panel/instance_specific_panel.vue
+index c8ed0a2d..a49c20cf 100644
+--- a/src/components/instance_specific_panel/instance_specific_panel.vue
++++ b/src/components/instance_specific_panel/instance_specific_panel.vue
+@@ -2,9 +2,7 @@
+   <div class="instance-specific-panel">
+     <div class="panel panel-default">
+       <div class="panel-body">
+-        <!-- eslint-disable vue/no-v-html -->
+-        <div v-html="instanceSpecificPanelContent" />
+-        <!-- eslint-enable vue/no-v-html -->
++        <LinksDynamically :content="instanceSpecificPanelContent" />
+       </div>
+     </div>
+   </div>
+diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.js b/src/components/terms_of_service_panel/terms_of_service_panel.js
+index 4276f8f7..41382c60 100644
+--- a/src/components/terms_of_service_panel/terms_of_service_panel.js
++++ b/src/components/terms_of_service_panel/terms_of_service_panel.js
+@@ -1,4 +1,9 @@
++import LinksDynamically from '../links_dynamically/links_dynamically.vue'
++
+ const TermsOfServicePanel = {
++  components: {
++    LinksDynamically
++  },
+   computed: {
+     content () {
+       return this.$store.state.instance.tos
+diff --git a/src/components/terms_of_service_panel/terms_of_service_panel.vue b/src/components/terms_of_service_panel/terms_of_service_panel.vue
+index bff0ae74..0d90c00d 100644
+--- a/src/components/terms_of_service_panel/terms_of_service_panel.vue
++++ b/src/components/terms_of_service_panel/terms_of_service_panel.vue
+@@ -2,12 +2,9 @@
+   <div>
+     <div class="panel panel-default">
+       <div class="panel-body">
+-        <!-- eslint-disable vue/no-v-html -->
+-        <div
+-          class="tos-content"
+-          v-html="content"
+-        />
+-      <!-- eslint-enable vue/no-v-html -->
++        <div class="tos-content">
++          <LinksDynamically :content="content" />
++        </div>
+       </div>
+     </div>
+   </div>
+-- 
+2.40.1
+