home.social

#user-script — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #user-script, aggregated by home.social.

fetched live
  1. I open YouTube. I don't click Shorts.
    I end up in Shorts anyway.
    No Idea how, but probably some sort of black magic.

    Got annoyed, so I wrote a small userscript (for Tampermonkey or similar), which entirely kicks shorts out.

    If you also want less brain rot:

    github.com/Mugentoki/userscrip

    #NoShorts #Userscript #IndieDev

  2. Кнопка «К началу ответа» для ChatGPT, Qwen, DeepSeek, Claude, Gemini, Grok и Perplexity: как я победил скролл и AI‑мысли

    Спойлер: коды готовы — вставьте и пользуйтесь. Знаете, что меня расстраивало больше всего в чатах с нейросетями? Сидишь, читаешь длинный ответ в момент генерации. Дошёл до середины, понял, что упустил какую-то деталь в начале, крутишь скролл вверх. А бот в этот момент дописывает новый абзац, и весь текст уезжает обратно вниз. Штатная стрелочка «наверх» тут не спасает. Она кидает к шапке сайта, а не к началу конкретного сообщения ассистента. Приходится ловить текст вручную. Сейчас стали выкатывать что-то вроде истории запросов справа от чата, похожее на закладки, но мне они не нравятся по той же причине: надо приглядываться и целиться в анимированный интерфейс. Чтобы не дергать страницу туда-сюда, я набросал около 10 юзерскриптов для всех популярных чатов. Они вешают в углу экрана кнопку, которая телепортирует прямо к первой строчке именно последнего ответа. Заодно вычищают визуальный мусор, который разработчики добавляют в интерфейс без возможности отключения штатными методами.

    habr.com/ru/articles/1053326/

    #tampermonkey #userscript #javascript #chatgpt #deepseek #qwen #claude #gemini #perplexity #dom

  3. Кнопка «К началу ответа» для ChatGPT, Qwen, DeepSeek, Claude, Gemini, Grok и Perplexity: как я победил скролл и AI‑мысли Спойлер: коды ...

    #tampermonkey #userscript #javascript #chatgpt #deepseek #qwen #claude #gemini #perplexity #dom

    Origin | Interest | Match
  4. CW: Javascript question

    I need help with my yt-dlp/mpv redirection userscript. (I am a JS beginner)

    The userscript should take the current URL (location.href), replace https:// with ytdl://, and close the tab. I made it load only on URLs matching specific regex, such as youtube.com/watch?v=fBXY_AyA0bo.

    My problem is that ytdl:// URIs are instantly handed off to mpv, and do not show up in the URL bar. I need a way to detect that handoff, and this prevents me from simply running :
    ```
    if (/^ytdl/.test(window.location.href))
    window.close;
    ```

    Closing regardless of handoff success creates a bug : It closes the tab when the browser pops a dialog asking "allow this site open this link in mpv?", not giving the user time to click or read anything.

    Currently, I am forced to comment out the window.close line for every new site I want to "always allow", then re-enable it.

    Is there an event signal, or visibility change, anything my userscript can detect? Either detect the successful handoff, or detect the browser 'allow this site" dialog. The former would be "yes you can close.window" and the latter "no you can't close.window". Either would work for me.

    #Javascript #Userscript #DuckDuckFedi #WebDev #TechSupport #AskFedi

  5. #userscript #Tampermonkey #виброкодинг #addons #типографика #ТакЛучше

    Вот, кстати, по поводу вот этого скриншота: у меня стоял какой-то аддон для включения переносов, который делал «This extension consists of CSS hyphens code converted into javascript so pages are injected with hyphens». — И это не очень правильно, потому что попячивал и заголовки тоже. #ChatGPT предложил замену:

    // ==UserScript==
    // @name Smart Hyphenation by ChatGPT
    // @namespace local
    // @version 1.0
    // @description Adds sane hyphenation to text content
    // @match *://*/*
    // @grant none
    // @run-at document-start
    // ==/UserScript==

    (function () {
    'use strict';

    const style = document.createElement('style');

    style.textContent = `
    /* Основной текст */
    p,
    li,
    blockquote,
    article,
    section,
    div {
    hyphens: auto !important;
    -webkit-hyphens: auto !important;
    overflow-wrap: break-word;
    }

    /* Не ломаем заголовки */
    h1, h2, h3, h4, h5, h6 {
    hyphens: manual !important;
    -webkit-hyphens: manual !important;
    }

    /* Не трогаем интерфейс */
    button,
    input,
    textarea,
    select,
    nav,
    menu,
    .menu,
    .button,
    .btn {
    hyphens: manual !important;
    -webkit-hyphens: manual !important;
    }

    /* Код и pre никогда не переносим */
    code,
    pre,
    kbd,
    samp {
    hyphens: none !important;
    -webkit-hyphens: none !important;
    overflow-wrap: normal !important;
    word-break: normal !important;
    }

    /* Таблицы часто ломаются */
    table,
    th,
    td {
    hyphens: manual !important;
    -webkit-hyphens: manual !important;
    }
    `;

    document.documentElement.appendChild(style);
    })();

    Пользовайтесь 😉

  6. 🚀 Level up your experience with Fellow Enhanced!

    Complete UI overhaul for a faster, sleeker, and modern look:
    💎 Liquid Dark Mode
    📊 Interactive User Dashboard
    💬 Revamped Chat Architecture
    ⚙️ Multiskin (Romeo, Tinder, Scruff styles)
    🔐 Local-first Privacy

    patreon.com/posts/157119585

    #OpenSource #Tampermonkey #UserScript #WebDesign #UXUI #DarkMode #Frontend #Javascript #Coding #IndieDev #WebDev #Tech

  7. #Mastodon #MastodonTools #виброкодинг #userscript

    Потому что «надоело это терпеть» — дополнил скрипт скрытия прочитанных постов функцией, которая скрывает и бусты тех постов, которые я уже видел.

    Хорошо теперь. Чистенько в ленте.

    🙂

  8. #Mastodon #MastodonTools #виброкодинг #userscript

    Потому что «надоело это терпеть» — дополнил скрипт скрытия прочитанных постов функцией, которая скрывает и бусты тех постов, которые я уже видел.

    Хорошо теперь. Чистенько в ленте.

    🙂

  9. X to Nitter Redirect

    In the last few months, I’ve intermittently seen colleagues at work mention in Slack that they can’t view tweets because they don’t have a X (née Twitter) account. I also learned that XCancel and Nitter exists, which gave me the idea to make a Tampermonkey script to make viewing tweets within XCancel automatic (instead of copying the tweet URL, then manually changing the domain…like an animal). 😆 Here’s the description from the GitHub repo: [X to Nitter Redirect is a] […]

    allnarfedup.blog/2026/04/24/x-

  10. X to Nitter Redirect

    In the last few months, I’ve intermittently seen colleagues at work mention in Slack that they can’t view tweets because they don’t have a X (née Twitter) account. I also learned that XCancel and Nitter exists, which gave me the idea to make a Tampermonkey script to make viewing tweets within XCancel automatic (instead of copying the tweet URL, then manually changing the domain…like an animal). 😆 Here’s the description from the GitHub repo: [X to Nitter Redirect is a] […]

    allnarfedup.blog/2026/04/24/x-

  11. EvaTeam Workflow Enhancer — userscript для нормального отображения процессов

    Сталкивались уже с EvaTeam (российский аналог Jira)? Чувствуете боль при работе с бизнес-процессами (workflow)? Думаю я могу вам немного помочь

    habr.com/ru/articles/1015656/

    #userscript #userscripts #tampermonkey #greasemonkey #eva #evateam #workflow #svelte #sveltejs #sveltekit

  12. #виброкодинг #YouTube #Yandex #userscript #Tampermonkey

    Автоматизируем 300.ya.ru

    Ну что ж, пришлось попинать #ChatGPT изрядно, зато теперь имеем рабочую версию юзерскрипта. Положу сюда:

    github.com/Johan-foreva/300.ya

    Скрипт делает простую вещь: если ссылка содержит фрагмент («якорь», «хеш»), т.е. 300.ya.ru/#SOME_URL — скрипт возьмет его, вставит в окошко ввода, как только оно подгрузится, и сам нажмет кнопку. Почему так? Потому что безопасность браузера не позволяет читать буфер обмена без лишних телодвижений, а так — работает вполне прозрачно.

    Как пользоваться:

    1. Если у вас уже открыт ролик, можете прямо в ардесной строке написать перед ним 300.ya.ru/#
    2. Или сделать #букмарклет:javascript:(()=>{window.open('https://300.ya.ru/#'+encodeURIComponent(location.href),'_blank')})();В новом окне откроется.
    3. Или другой, который возьмет текст, выделенный на странице:javascript:(()=>const t=window.getSelection().toString().trim();const d=t)();
    4. Ну и самый длинный вариант — тыкнуть ПКМ по ссылке, «Копировать ссылку», потом два раза на букмарклет (потому что появится кнопка-подтверждение, для вашей, блин, безопасности).javascript:(async()=>{try{const text=await navigator.clipboard.readText();if(!text||!text.trim()){alert('%D0%91%D1%83%D1%84%D0%B5%D1%80 %D0%BF%D1%83%D1%81%D1%82');return;}const w=window.open('about:blank','_blank');if(!w){alert('Popup %D0%B7%D0%B0%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD');return;}w.location.href='https://300.ya.ru/#'+encodeURIComponent(text);}catch(e){alert('%D0%9D%D0%B5%D1%82%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0%20%D0%BA%20%D0%B1%D1%83%D1%84%D0%B5%D1%80%D1%83');}})();
  13. #виброкодинг #YouTube #Yandex #userscript #Tampermonkey

    Автоматизируем 300.ya.ru

    Ну что ж, пришлось попинать #ChatGPT изрядно, зато теперь имеем рабочую версию юзерскрипта. Положу сюда:

    github.com/Johan-foreva/300.ya

    Скрипт делает простую вещь: если ссылка содержит фрагмент («якорь», «хеш»), т.е. 300.ya.ru/#SOME_URL — скрипт возьмет его, вставит в окошко ввода, как только оно подгрузится, и сам нажмет кнопку. Почему через жопу? Потому что безопасность браузера не позволяет читать буфер обмена без лишних телодвижений, а так — работает вполне прозрачно.

    Как пользоваться:

    1. Если у вас уже открыт ролик, можете прямо в адресной строке написать перед ним 300.ya.ru/#

    2. Или сделать #букмарклет:

    javascript:(()=>{window.open('https://300.ya.ru/#'+encodeURIComponent(location.href),'_blank')})();

    Тогда в новом окне откроется.

    1. Или другой, который возьмет текст, выделенный на странице:
    javascript:(()=>const t=window.getSelection().toString().trim();const d=t)();

    1. Ну и самый длинный вариант — тыкнуть ПКМ по ссылке, «Копировать ссылку», потом два раза на букмарклет (потому что появится кнопка-подтверждение, для вашей, блин, безопасности).
    javascript:(async()=>{try{const text=await navigator.clipboard.readText();if(!text||!text.trim()){alert('%D0%91%D1%83%D1%84%D0%B5%D1%80 %D0%BF%D1%83%D1%81%D1%82');return;}const w=window.open('about:blank','_blank');if(!w){alert('Popup %D0%B7%D0%B0%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD');return;}w.location.href='https://300.ya.ru/#'+encodeURIComponent(text);}catch(e){alert('%D0%9D%D0%B5%D1%82%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0%20%D0%BA%20%D0%B1%D1%83%D1%84%D0%B5%D1%80%D1%83');}})();
  14. #Firefox #Yandex #виброкодинг #ChatGPT #Tampermonkey

    Навиброкодил связочку из #bookmarklet'а и #userscript'а, при помощи которых можно отправлять #YouTube-ролики прямо в 300.ya.ru

    Конечно, не совсем прямо, в сумме получается 4 клика (2, чтобы скопировать, 2 чтобы вставить). Но зато только мышкой.

    1) Букмарклет

    javascript:(async()=>{try{const text=await navigator.clipboard.readText();if(!text||!text.trim()){alert('Буфер пуст');return;}const w=window.open('about:blank','_blank');if(!w){alert('Popup заблокирован');return;}w.location.href='https://300.ya.ru/#'+encodeURIComponent(text);}catch(e){alert('Нет доступа к буферу');}})();

    2) Юзерскрипт

    // ==UserScript==
    // @name 300.ya.ru Auto Paste via Hash (Stable)
    // @namespace http://tampermonkey.net/
    // @version 3.1
    // @match https://300.ya.ru/*
    // @run-at document-start
    // ==/UserScript==

    (function() {
    'use strict';

    const data = decodeURIComponent(location.hash.slice(1) || '');
    if (!data) return;

    let inserted = false;
    let submitted = false;

    function fireEvents(el) {
    el.dispatchEvent(new Event('input', { bubbles: true }));
    el.dispatchEvent(new Event('change', { bubbles: true }));
    }

    function insertOnce(el) {
    if (inserted) return;
    inserted = true;

    el.focus();

    const ok = document.execCommand('insertText', false, data);

    if (!ok) {
    const setter = Object.getOwnPropertyDescriptor(
    HTMLTextAreaElement.prototype,
    'value'
    )?.set;

    if (setter) setter.call(el, data);
    else el.value = data;
    }

    fireEvents(el);
    }

    function tryRun() {
    const textarea = document.querySelector('textarea');
    if (!textarea || textarea.offsetParent === null) return;

    insertOnce(textarea);

    const btn = document.querySelector('button[type="submit"], .submit');

    if (!submitted && btn && !btn.disabled) {
    submitted = true;
    observer.disconnect();
    clearInterval(interval);
    btn.click();
    }
    }

    const observer = new MutationObserver(tryRun);

    observer.observe(document.documentElement, {
    childList: true,
    subtree: true
    });

    const interval = setInterval(tryRun, 300);

    })();

    Копируем ссылку на YouTube-ролик, жмякаем букмарклет (2 клика, т.к. появится кнопка «Вставить» в целях безопасности). Откроется страничка Яши, и дальше уже всё само.

  15. #Mastodon #MastodonTools #userscript #Tampermonkey #виброкодинг

    Итак! В связи с тем, что #Gemini заработал в этой стране без СМС и регистрации, первым делом скормил ему скрипт скрытия прочитанных постов для допиливания. Работает. Вот прямо так, как мне нужно было 😀 👍

    Что конкретно делает: когда вы скроллите ленту (неважно, вверх или вниз), фиксирует тот факт, что пост был полностью, от начала до конца, виден на экране, и после того, как он проскроллится за его пределы — скрывает его. Запоминает идентификаторы 1000 последних постов в local storage.

    Включается / выключается вот этой кнопочкой. Но эта кнопочка появляется только в многоколоночном режиме, одноколоночным я не пользуюсь, а усложнять не хочу.

    Типичный случай использования — вот вы листаете ленту, остановились где-то, сверху новые посты накопились, вы страничку перезагрузили и получается, что у вас будут непрочитанные, потом прочитанные, потом опять недочитанные. А так — нет 😀 Или, допустим, у вас лента поделена на списки, и нужно решить проблему дублирования.

    Known Issues:

    1. Наравне с постами съедает и уведомления (и вдобавок список списков 🙃 ). Я пока не решил, плохо это или хорошо, усложнять не хочу, а включить/выключить не проблема.
    2. Если хотите добраться до очень старых постов, то кнопку Загрузить еще внизу придется нажимать много раз. Это не глюк, это, в принципе, логично.
    3. Почему-то с первого раза (т.е. при открытии сайта из адресной строки) скрипт не цепляется, только после перезагрузки страницы по F5 🤔 Причину ищу, а пока так.

    Забирайте, пробуйте, ставьте лайки, спрашивайте вопросы, предлагайте предложения!

    github.com/Johan-foreva/Mastod

  16. #Mastodon #MastodonTools #userscript #Tampermonkey #виброкодинг

    Решил попробовать скормить скрипт скрытия прочитанных постов #Gemini для окончательного допиливания. Теперь работает. Вот прямо так, как мне нужно было 😀 👍 Теперь не стыдно и показать.

    Что конкретно делает: когда вы скроллите ленту (неважно, вверх или вниз), фиксирует тот факт, что пост был полностью, от начала до конца, виден на экране, и после того, как он проскроллится за его пределы — скрывает его. Запоминает идентификаторы 1000 последних постов в local storage.

    Включается / выключается вот этой кнопочкой. Но эта кнопочка появляется только в многоколоночном режиме, одноколоночным я не пользуюсь, а усложнять не хочу.

    Типичный случай использования — вот вы листаете ленту, остановились где-то, сверху новые посты накопились, вы страничку перезагрузили и получается, что у вас будут непрочитанные, потом прочитанные, потом опять недочитанные. А так — нет 😀 Или, допустим, у вас лента поделена на списки, и нужно решить проблему дублирования.

    Known Issues:

    1. Наравне с постами съедает и уведомления (и вдобавок список списков 🙃 ). Я пока не решил, плохо это или хорошо, усложнять не хочу, а включить/выключить не проблема.
    2. Если хотите добраться до очень старых постов, то кнопку Загрузить еще внизу придется нажимать много раз. Это не глюк, это, в принципе, логично.
    3. Почему-то с первого раза (т.е. при открытии сайта из адресной строки) скрипт не цепляется, только после перезагрузки страницы по F5 🤔 Причину ищу, а пока так.

    Забирайте, пробуйте, ставьте лайки, спрашивайте вопросы, предлагайте предложения!

    github.com/Johan-foreva/Mastod

  17. #MastodonTools #виброкодинг #userscript #вопрос

    Ну не то чтобы вопрос, размышления для себя:

    • вот есть ситуация, когда ты просматриваешь ленту снизу вверх, жмешь «Показать новые» — и они нормально подгружаются «за пределами экрана» и лента не смещается, можно мотать дальше. Но иногда, то ли из-за подгрузки картинок, то ли еще из-за чего — съезжает.

    #РешилДляСебя скриптом, который запоминает верхний пост на экране и принудительно скроллит обратно к нему.

    Но. Если активировать скрытие прочитанных постов, будет бяка: текущий пост на экране ведь считается «прочитанным», когда лента уедет — он исчезнет, и прокручивать обратно будет просто некуда.

    Можно, конечно, руками — сначала «Показать всё», потом «Показать новые», потом обратно «Скрыть прочитанные». Неаккуратненько © 🙁

    #ChatGPT предлагает пару вариантов взаимодействия между скриптами; либо что-то в изначальной логике работы надо поменять, но ее (логики итак мало 🙁).

    Например, скрывать не радикальным display:none, а как-то так, чтобы прокрутка к объекту всё же сработала...

  18. #Mastodon #MastodonTools #userscript #виброкодинг

    Так-так... А вот не мешало бы прикрутить автосохранение набранного, но не отправленного поста при перезагрузке страницы? Есть, конечно, копипаст, но так теряется цепочка комментариев. Правда, кажется, придется долго ковыряться в том, как восстановить родительский пост и адресовать ему камент...

    Боромир Евген бы смог...

  19. #виброкодинг #Mastodon #MastodonTools #Вопрос #виброкодинг

    Знатоки #HTML и #JavaScript, натолкните на правильный ход мысли. Пытаюсь навиброкодить #userscript, который будет скрывать из ленты просмотренные посты, черновой вариант есть, но не могу понять/решить, как по-элегантнее присваивать посту атрибут потраченопросмотрено: как формалинизировать тот факт, что пост «был на экране», допустим, более 2 секунд, если лента думскроллится в произвольном направлении, чтобы не было ложных срабатываний для частично попавших на экран (сверху или снизу)?

    @rf
    @rur
    @Russia
    @russian_mastodon

  20. #виброкодинг #Mastodon #MastodonTools #Вопрос #виброкодинг

    Знатоки #HTML и #JavaScript, натолкните на правильный ход мысли. Пытаюсь навиброкодить #userscript, который будет скрывать из ленты просмотренные посты, черновой вариант есть, но не могу понять/решить, как по-элегантнее присваивать посту атрибут потраченопросмотрено: как формалинизировать тот факт, что пост «был на экране», допустим, более 2 секунд, если лента думскроллится в произвольном направлении, чтобы не было ложных срабатываний для частично попавших на экран (сверху или снизу)?

    @rf
    @rur
    @Russia
    @russian_mastodon

  21. Полезная тулза для ревью чата с ИИ

    Всем привет. Почти 15 лет я не писал на хабр. Я не сошел с ума (см. предыдущий пост в профиле), всё в порядке, просто дело в том, что не было достойной темы. И вот впервые за 15 лет мне сильно захотелось поделиться с обществом своим небольшим открытием. В двух словах — вчера придумал инструмент для ревью чата с ИИ по аналогии с ревью гитлаба. Дипсик написал ТЗ, код, сопроводительные документы и статью для хабра.

    habr.com/ru/articles/993418/

    #ИИ #review #userscript

  22. #fediverse_ppl #смищно #Firefox #addons #ТрудностиПеревода #NeuralNetwork #userscript #Mastodon #MastodonTools

    Лол, кек. Удивительно непонятное, но от этого иещеболее занятное взаимодействие переводчика, который (каюсь, грешен) иногда включаю в ленте, и юзерскрипта, чтобы комментировать кого-то вот прямо в ленте.

    В комментарии — только 🚫 🤖— как напоминание о том, что @iron_bug не приемлет генерацию. Уважаю, позывы сдерживаю. Откуда берется такая интерпретация — совершенно непонятно. Пробовал добавлять тот же комментарий другим пользователям — не работает.

    P.S. Сейчас у кого-то, кажется, подгорит на тему «мои посты отправляются на сервера гугла без моего ведома, а я всего-то хотела посрать на площади, прикрываяь ладошкой».

    Блок через 5-4-3-2...

  23. #fediverse_ppl #смищно #Firefox #addons #ТрудностиПеревода #NeuralNetwork #userscript #Mastodon #MastodonTools

    Лол, кек. Удивительно непонятное, но от этого иещеболее занятное взаимодействие переводчика, который (каюсь, грешен) иногда включаю в ленте, и юзерскрипта, чтобы комментировать кого-то вот прямо в ленте.

    В комментарии — только 🚫 🤖— как напоминание о том, что @iron_bug не приемлет генерацию. Уважаю, позывы сдерживаю. Откуда берется такая интерпретация — совершенно непонятно. Пробовал добавлять тот же комментарий другим пользователям — не работает.

    P.S. Сейчас у кого-то, кажется, подгорит на тему «мои посты отправляются на сервера гугла без моего ведома, а я всего-то хотела посрать на площади, прикрываяь ладошкой».

    Блок через 5-4-3-2...

  24. #Touhou Attribution #Userscript update: (1) Album soundtrack data is preloaded and cached, it's no longer calling one API per track. (2) Switched from Notification() to GreaseMonkey's GM.notification(), so I don't have to approve Notification on a million Bandcamp subdomains. The funny monkey icon is also a plus during development. ​:cirno_laughing:​

  25. #Touhou Attribution #Userscript update: (1) Album soundtrack data is preloaded and cached, it's no longer calling one API per track. (2) Switched from Notification() to GreaseMonkey's GM.notification(), so I don't have to approve Notification on a million Bandcamp subdomains. The funny monkey icon is also a plus during development. ​:cirno_laughing:​

  26. I finally understand why I keep getting mysterious undefined variable errors in my Userscript - the top-level Userscript and the injected in-page monkey-patch script run in different environments. The correct solution is to pass messages from the page to the top-level Userscript. I now have a fully-functional and super-overkilled #Userscript powered by OOP, npm, and webpack. ​:reimudance:​

  27. I finally understand why I keep getting mysterious undefined variable errors in my Userscript - the top-level Userscript and the injected in-page monkey-patch script run in different environments. The correct solution is to pass messages from the page to the top-level Userscript. I now have a fully-functional and super-overkilled #Userscript powered by OOP, npm, and webpack. ​:reimudance:​

  28. #Mastodon #MastodonTools #виброкодинг #userscript #NeuralNetwork #Grok #ЯСделяль

    Вотх, навиброкодил с помощью Grok (гопота не осилила, заковырявшись в простейшем алгоритме) юзерскрипет для #tampermonkey.

    Алгоритм примерно такой: если вы смотрите на пост больше секунды (настраивается) — при прокрутке за границы экрана он скрывается.

    Добавляется кнопочка показа / скрытия просмотренных постов.

    ID 1000 последних постов запоминаются в локальном хранилище (после перезагрузки страницы всё равно не видны).

    Потратил на пинание искусственных идиотов более шести часов (!). Подозреваю, что если бы знал жаваскрипт, управился бы за полтора, но поскольку кроме меня эта идея никому не пришла... Имеем то, что имеем. Пользуйтесь.

    [Userscript для скрытия просмотренных постов.(]github.com/Johan-foreva/Mastod)

  29. #Mastodon #MastodonTools #виброкодинг #userscript #NeuralNetwork #Grok #ЯСделяль

    Вотх, навиброкодил с помощью Grok (гопота не осилила, заковырявшись в простейшем алгоритме) юзерскрипет для #tampermonkey.

    Алгоритм примерно такой: если вы смотрите на пост больше секунды (настраивается) — при прокрутке за границы экрана он скрывается.

    Добавляется кнопочка показа / скрытия просмотренных постов.

    ID 1000 последних постов запоминаются в локальном хранилище (после перезагрузки страницы всё равно не видны).

    Потратил на пинание искусственных идиотов более шести часов (!). Подозреваю, что если бы знал жаваскрипт, управился бы за полтора, но поскольку кроме меня эта идея никому не пришла... Имеем то, что имеем. Пользуйтесь.

    Userscript для скрытия просмотренных постов.

  30. Это, блядь, нормально, что я ни в одном поисковике не могу найти #userscript для отображения древовидных каментов в #Mastodon, ни в репозиториях предположительной автор(ки), ни по строкам кода ваще? Он у меня что ли только остался в единственном экземпляре во всём ебучем интернете? 😲

  31. Это, блядь, нормально, что я ни в одном поисковике не могу найти #userscript для отображения древовидных каментов в #Mastodon, ни в репозиториях предположительной автор(ки), ни по строкам кода ваще? Он у меня что ли только остался в единственном экземпляре во всём ебучем интернете? 😲

  32. There's a lot of hate for the new #BOM page, but having used the beta version for ages I'm not feeling it personally. One gripe I do have is that the price tag didn't include a dark mode setting. Really?
    Since I use the #DarkReader extension for #Librewolf it's not a huge issue, except that the page has background mages that make it unreadable in dark mode. So it looks like the before picture. So I got out the screwdriver, took the back off and jiggled some wires. So if anyone wants a #userScript that fixes bom.gov.au for Darkreader it's at codeberg.org/stib/userscripts/
    #IMadeAThing #HackTheWeb

  33. There's a lot of hate for the new #BOM page, but having used the beta version for ages I'm not feeling it personally. One gripe I do have is that the price tag didn't include a dark mode setting. Really?
    Since I use the #DarkReader extension for #Librewolf it's not a huge issue, except that the page has background mages that make it unreadable in dark mode. So it looks like the before picture. So I got out the screwdriver, took the back off and jiggled some wires. So if anyone wants a #userScript that fixes bom.gov.au for Darkreader it's at codeberg.org/stib/userscripts/
    #IMadeAThing #HackTheWeb

  34. Hey #webdev thing-knowers, I'm writing a userscript for the bom.gov.au site that removes the background image on part of the page, because it doesn't play well with Darkreader. The image is set with an inline style tag: `<div style="background-image: url(&quot;/themes/custom/bom_theme/bom-react/dist/weather-moods/showers-day.webp&quot;), ...`
    I'm just brute-forcing the style to nothing, using this script:
    ```(function() {
    'use strict';
    let mood = document.getElementsByClassName("weather-mood")[0];
    mood.style = "";
    })();```

    It works at first, but then the page seems to do some post loading thing, and the style gets reverted. The userscript is set to run once the page is idle using `//@run-at = document-idle`.
    Is there a way to override the style once the page refreshes itself?
    #userScript #bom #DarkMode

  35. Hey #webdev thing-knowers, I'm writing a userscript for the bom.gov.au site that removes the background image on part of the page, because it doesn't play well with Darkreader. The image is set with an inline style tag: `<div style="background-image: url(&quot;/themes/custom/bom_theme/bom-react/dist/weather-moods/showers-day.webp&quot;), ...`
    I'm just brute-forcing the style to nothing, using this script:
    ```(function() {
    'use strict';
    let mood = document.getElementsByClassName("weather-mood")[0];
    mood.style = "";
    })();```

    It works at first, but then the page seems to do some post loading thing, and the style gets reverted. The userscript is set to run once the page is idle using `//@run-at = document-idle`.
    Is there a way to override the style once the page refreshes itself?
    #userScript #bom #DarkMode

  36. If you listen to NTS back episodes, an annoyance is that there is no volume control for the player. So I made one. This is a userscript that adds keyboard shortcuts for controlling the volume and un/muting the audio at nts.live
    Get the script here: codeberg.org/stib/userscripts/ Episode volume keys.user.js
    Install with TamperMonkey or GreaseMonkey etc.
    #UserScript #TamperMonkey #NTS #IMadeAThing

  37. If you listen to NTS back episodes, an annoyance is that there is no volume control for the player. So I made one. This is a userscript that adds keyboard shortcuts for controlling the volume and un/muting the audio at nts.live
    Get the script here: codeberg.org/stib/userscripts/ Episode volume keys.user.js
    Install with TamperMonkey or GreaseMonkey etc.
    #UserScript #TamperMonkey #NTS #IMadeAThing

  38. Userscript is now available!

    It works both on desktop and mobile!

    Desktop, via user-script extensions such as:
    - TamperMonkey (closed-source)
    - OrangeMonkey (closed-source)
    - Greasemonkey (open-source)
    - ViolentMonkey (open-source)
    Mobile, using Cromite's built-in user-script support.

    github.com/alextecplayz/usersc

    Fuck AI slop on YouTube Music, so remove it from the website altogether with this user-script.

    #userscript #YouTubeMusic #YTMusic #slop #AISlop #brainrot #AI #enshittification

  39. Userscript is now available!

    It works both on desktop and mobile!

    Desktop, via user-script extensions such as:
    - TamperMonkey (closed-source)
    - OrangeMonkey (closed-source)
    - Greasemonkey (open-source)
    - ViolentMonkey (open-source)
    Mobile, using Cromite's built-in user-script support.

    github.com/alextecplayz/usersc

    Fuck AI slop on YouTube Music, so remove it from the website altogether with this user-script.

  40. MUAHAHAHA!

    REMOVE AI SLOP FROM YOUTUBE MUSIC!

    No but for real, I'm working on a handy userscript that integrates in the YT Music UI that lets you hide slop based on the channel it's published by.

    I had more than enough of AI slop music, brainrot garbage and shit music, it's time to zap them away from the interface for good 😈

    It 'zaps' them, as in, removes them from the web page entirely.

    Currently, only albums and songs are being zapped for matching the channel URL, but I'm trying to handle albums and songs as well, and hoping to release this in a couple of days.

    Here's an in-dev video:

    #userscript #YouTubeMusic #YTMusic #slop #AIslop #brainrot #AI #enshittification

  41. MUAHAHAHA!

    REMOVE AI SLOP FROM YOUTUBE MUSIC!

    No but for real, I'm working on a handy userscript that integrates in the YT Music UI that lets you hide slop based on the channel it's published by.

    I had more than enough of AI slop music, brainrot garbage and shit music, it's time to zap them away from the interface for good 😈

    It 'zaps' them, as in, removes them from the web page entirely.

    Currently, only albums and songs are being zapped for matching the channel URL, but I'm trying to handle albums and songs as well, and hoping to release this in a couple of days.

    Here's an in-dev video:

  42. Habe endlich einen Weg gefunden, den #Linkedin Feed auf iPhone und iPad komplett von Werbung und vorgeschlagenen Beiträgen zu befreien. Das geht mit der Safari-Erweiterung-Tampermonkey und diesem #UserScript: greasyfork.org/en/scripts/3868 (man verwendet dafür die Webapp, nicht die Linkedin App).

  43. Habe endlich einen Weg gefunden, den #Linkedin Feed auf iPhone und iPad komplett von Werbung und vorgeschlagenen Beiträgen zu befreien. Das geht mit der Safari-Erweiterung-Tampermonkey und diesem #UserScript: greasyfork.org/en/scripts/3868 (man verwendet dafür die Webapp, nicht die Linkedin App).

  44. 🦊 #Firefox ist und bleibt mein Browser der Wahl – aber unter #macOS hat #Safari für mich ein kleines ❤️-Feature: die Möglichkeit, mir „Apps“ aus Webseiten zu bauen.

    Im Dock wartet deshalb neben dem Programme-Ordner auch ein Apps-Ordner, prall gefüllt mit u. a. schnellen Proxmox, Pangolin, Uptime Kuma Zugriffen – aber auch zu Invidious & SafeTwitch und Konsorten. 🚀

    Heute habe ich mir (endlich!) noch ein kleines Schmankerl gegönnt: mit Unterstützung von Claude ein #Userscript für #Invidious gebastelt, das die unsäglichen #YouTube #Shorts einfach aus den Suchergebnissen verbannt.
    Lebensqualität++ ✅

    #SelfHosting #Automation #BrowserHacks

  45. #виброкодинг #Telegram #userscript #Tampermonkey

    Интересно, одного ли меня раздражает дико бесит, когда при переходе по ссылке https:​//t.me/... открывается вроде как предпросмотр ресурса в вебе, и при этом сразу выскакивает оно же в десктопном клиенте?

    Этот юзерскрипт блокирует такое блядское поведение, в приложении ссылка откроется только после клика по кнопке View in Telegram.

    pastebin.com/6fxipdsD

    #generated by #Grok

  46. #userscript #пичалька

    #Фейл парсера тотальный. Но большее я не осилю, потому что не погромист 😥