~jadedctrl/jam-xwx-moe
Showing details for patch e37c74fb1dd8a829e0c21b98ebb91376fc4fb588.
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 +