Discourse إغلاق وأرشفة موضوع سكريبت المستخدم

(ربما يمكن وضعه في #dev، لكنني وضعته هنا لأنني لم أكن متأكدًا)

أثناء تنظيف صندوق الوارد الخاص بي على المنتدى الذي أديره قليلاً عن طريق إغلاق وأرشفة طلبات عضوية المجموعات القديمة، شعرت بالانزعاج من القيام بذلك يدويًا.

أقدم لكم الآن البرنامج النصي للمستخدم للقيام بذلك نيابة عنك! ما عليك سوى النقر بزر الماوس الأيمن، والانتقال إلى خيار “Tampermonkey”، ثم تشغيل البرنامج النصي “Close and Archive”!

الكود:

// ==UserScript==
// @name         إغلاق وأرشفة
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  يغلق ويؤرشف الموضوع/الرسالة الخاصة المفتوحة حاليًا عند تشغيله
// @author       Firepup Sixfifty
// @match        https://=hostname=/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=amcforum.wiki
// @grant        none
// @run-at       context-menu
// ==/UserScript==

(function() {
    'use strict';

    fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/status`, {
        "headers": {
            "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
            "accept": "application/json",
            "x-csrf-token": document.querySelector("[name='csrf-token']").content
        },
        "body": "status=closed&enabled=true",
        "method": "PUT"
    }).then((r)=>{
        fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/status`, {
            "headers": {
                "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                "accept": "application/json",
                "x-csrf-token": document.querySelector("[name='csrf-token']").content
            },
            "body": "status=archived&enabled=true",
            "method": "PUT"
        }).then((r)=>{
            fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/archive-message`, {
                "headers": {
                    "accept": "application/json",
                    "x-csrf-token": document.querySelector("[name='csrf-token']").content
                },
                "method": "PUT"
            });
        })
    })
})();
إعجاب واحد (1)

انتظر… كيف أ تشغيله إذن؟ أين يجب أن أضعه؟

إنه نص مكتوب لإضافة Tampermonkey للمتصفح

إعجاب واحد (1)

هل يقوم بأكثر من اختصار a عندما نكون في صفحة PM؟

نعم - كما يُغلق أيضًا في فترة ما بعد الظهر.

لا يمكن الرد على المنشورات المؤرشفة:

لا أعرف، أنا فقط أغلقها في حال عثر عليها أحد الموظفين عن طريق الخطأ، فمن الواضح أنها ليست مخصصة للرد عليها.

هل أنت مسؤول أم مجرد مشرف؟ إذا كنت مسؤولاً، فربما يمكنك إنشاء مكون سمة بدلاً من الاعتماد على نص برمجي للمستخدم.

ومع ذلك، بالنسبة للمواقع التي لا يمكنك فيها تعديل التعليمات البرمجية، لا تزال النصوص البرمجية للمستخدم حلاً مثيراً للاهتمام لتحسينات مختلفة.

أستخدمها للعديد من المواقع.

على meta.discourse.org، لدي نص برمجي يضيف اختصار Ctrl + Shift + k لتغليف النص المحدد الخاص بي بعلامات <kbd> داخل مربع الإنشاء :slight_smile:

// ==UserScript==
// @name         اختصار <kbd> لـ meta.discourse.org
// @namespace    Violentmonkey Scripts
// @version      1.0
// @description  إدراج علامات <kbd> في مربعات النص على meta.discourse.org باستخدام Ctrl + Shift + k
// @author       chatGPT
// @match        https://meta.discourse.org/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.shiftKey && event.key === 'K') {
            const activeElement = document.activeElement;
            if (activeElement.tagName === 'TEXTAREA' && activeElement.classList.contains('ember-text-area')) {
                const start = activeElement.selectionStart;
                const end = activeElement.selectionEnd;
                const text = activeElement.value;
                const insertText = '<kbd>';
                const closeText = '</kbd>';

                const selectedText = text.slice(start, end);
                activeElement.value = text.slice(0, start) + insertText + selectedText + closeText + text.slice(end);

                const cursorPosition = end === start
                    ? start + insertText.length
                    : start + insertText.length + selectedText.length + closeText.length;

                activeElement.selectionStart = activeElement.selectionEnd = cursorPosition;

                event.preventDefault();
            }
        }
    });
})();

أيضًا، لا أستخدم Tampermonkey لأنه مفتوح المصدر، وأفضل استخدام البرامج مفتوحة المصدر، وهناك العديد من المنافسين (جميعهم يبدون متشابهين والنصوص البرمجية متوافقة عبر الأنظمة الأساسية). أعتقد أن الأكثر استخدامًا هو Violentmonkey.

إعجاب واحد (1)

لقد وضعته فقط في نص برمجي للمستخدم لأنني كنت كسولًا جدًا لإنشاء مكون سمة له، وكان هذا أسرع في التحرير والاختبار (في الأصل قمت بتشغيله في وحدة التحكم بضع مرات لاختباره)

أوه، هذا لطيف حقًا، شكرًا لمشاركته!

قمت بتعديل النص البرمجي قليلاً بحيث يعمل أيضًا مع المواضيع، على الأقل من حيث القيمة (هذا يتسبب في تأثير غريب وهو وجود رسالة خاصة مؤرشفة على الرغم من ذلك).

إعجاب واحد (1)