to post messages and comments.

Greasemonkey was rewritten almost completely from scratch, based on WebExtensions ("a new browser extension API; a cross-browser system for developing extensions"). Due to the hard deadline that Firefox 57 (which supports only the WebExtensions API) Greasemonkey 4.0 was released with several features missing. Further releases in the (near) future should add most or all of Greasemonkey's older features back.
wiki.greasespot.net

И что более важно:

A variety of compromises have been made. We've elected to make a rare backwards incompatible change.
The decision was made to only support userscripts designed to run asynchronously for performance reasons. This breaks compatibility with older scripts.
greasespot.net
ghacks.net

Теперь нужно писать
await GM.getValue("foo")
вместо
GM_getValue("foo")

Нужно будет смотреть, кто из альтернативных плагинов будет обновлять своё api.
Пока что это выглядит очень хреново. Они пожертвовали обратной совместимостью, совместимостью с остальными расширениями и совместимостью со старыми скриптами, без переходного периода ("как Mozilla с нами, так и мы с вами..."). Придётся расставлять костыли чтобы по прежнему поддерживать все основные браузеры.

Violentmonkey и Tampermonkey вроде как доступны в качестве WebExtensions и при этом совместимы со старыми скриптами. Пока что Violentmonkey должен быть лучшим выбором.

2.18.0

* вроде всё починил, что отвалилось. Возможно некоторые вещи чуть медленнее на странице будут появляться.
* вернул возможность копировать номер и ссылку комментария. Не знаю, насколько удобно/навязчиво получилось. Возможно потом сделаю открытие по клику и доработаю стили.

greasyfork.org

2.17.6

* Затащил обновлённую форму из последнего эксперимента в юзерскрипт. Т.е. теперь есть превьюшки картинок.
* Добавил client-side валидацию и счётчик длины сообщения. Т.е. теперь не получится отправить слишком длинный текст и потерять его таким образом.
* Ещё добавил фикс для шапки (включается в настройках), но надеюсь это очень временно.

Пока сообщение не превосходит 4096 символов, отображается прогресс-бар (см. скриншот — однопиксельная полоска под тестом). После 4096 символов отображается число. Мне не нравится идея постоянно наблюдать счётчик, поэтому сделал такой комбинированный вариант.

(На всякий случай напоминаю, что эта форма ввода сообщения включается в настройках юзерскрипта — самый первый чекбокс.)

greasyfork.org

2.17.1 — Promises edition

* порефакторил эмбеды немного (692 additions, 950 deletions). Now 8% more DRY and with 300% more Promises†
* Яндекс.Музыка

(†) согласно экспертной оценке‡
(‡) получено путём тщательного анализа верхнего внутреннего покрытия рабочего помещения.

В процессе рефакторинга мог что-то упустить. Сообщите, если что-то сломалось.

Виджеты Яндекс.Музыки такие же тяжёлые как и сам сайт. Сделал Click to show по умолчанию.

greasyfork.org

а на чём соплежуйкоскрипт напийсан?

энгулар?

хочется фичу — чтобы при копировании textarea

<textarea name="body" placeholder="New message..." style="min-height: 70px; height: 119px;"></textarea>

туда (в буфер обмана)
автоматом добавлялись теги и сцылка на изо-брожение

а то @vt никак ниасиляет прикручивание проверки валидности пстоа на клиенте

В некотором роде автор xkcd поддерживает ситуацию (см. картинку) тем, что предлагает эмбеддить комикс путём хотлинка на картинку, без текста и даже без номера. (Хинт: ссылка на картинку содержит заголовок, который ищется в архиве на сайте.)
В принципе, оно и понятно — надо же чем-то на сайт людей привлекать.
Зато html очень простой, no bs. И в RSS тоже всё есть...

greasyfork.org
2.16.7
* xkcd

2.16.2

День рождения юзерскрипта. Первую версию я выложил в ночь на второе сентября год назад. #2845132

В новой версии:

* теги на странице /post — кликабельные, добавляются к╱убираются из первой строки поста;
* старая форма ввода нового сообщения — в общих лентах (как раньше) и на своей странице (по умолчанию выключено);
* ссылка Post ведёт на /post — поп-ап отключается (по умолчанию выключено).

greasyfork.org

2.15.0

* сворачивание постов-простыней.

Если всё нравится, то можно в Жуйк перенести.

Единственный момент для пользователей тёмных тем: в юзерскрипте, по традиции, они приняты во внимание, но когда перенесу в Жуйк — там этого не будет и темы придётся обновить.

Ещё из недавних изменений:

* галочка для сброса стилей для *code. Выключено по умолчанию. Тут есть ещё над чем работать, чтобы было хорошо.

greasyfork.org

После #2871615/4 я обратил внимание на то, что Tampermonkey существует в том числе для Dolphin Browser и UC Browser на Android.
Решил проверить, заработает ли там хоть как-то мой скрипт.

Разумеется, сразу ничего не заработало. Пришлось разбираться, как тут скрпты отлаживать можно.
Получилось так:
* Релевантные сообщения сыпятся в андроидный лог с определёнными тегами.
* Первое приложение для просмотра лога, которое мне позволило более или менее адекватно работать — CatLog.
* Хотя хотелось бы более удобную работу с фильтрами.
* По идее браузер кидает сообщения с тегом "Web Console".
* Но Tampermonkey удобнее отлаживать, включив дебаг в его настройках и фильтруя по тегам на "TD_S" (скриншот в комменте).

Основной проблемой стало то, что на моём смартфоне не поддерживается ES6. Что-то сконвертировал, где-то подставил полифилы... В результате получился почти рабочий юзерскрипт. Не работает встраивание жуйки и ютуба. Возможно что-то ещё. Плюс некоторые вещи долго обрабатываются на телефоне.
Результат может зависеть от версии андроида.

Положил эту версию сюда:
greasyfork.org

Оригинал, по-прежнему, тут:
greasyfork.org

Мне не нравятся эти браузеры. Но если пользователи для этой версии скрипта найдутся, то надо будет как-то автоматизировать сборку под ES5 и посмотреть, какие ещё костыли подставить.

2.12.0

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

Сделал его более устойчивым у шатанию Жуйки.

greasyfork.org

2.11.1

Давно не было постов — сейчас не до значительных обновлений. Только мелкие фиксы были.

Известная проблема с сертификатами достанет тебя, даже когда пытаешься использовать Juick по http. Запросы к API должны использовать тот же протокол (явно заданный), плюс к тому ссылки на картинки в ответе API прилетают с https.
Навёл порядок с протоколами у себя.

greasyfork.org

Заодно появилась возможность проверить как юзерскрипт будет работать в Edge с Tampermonkey.

В принципе, почти всё работает, кроме стилей, заданных через css variables — тексты дефолтного цвета и всевозможные рамки не отображаются.

2.10.1

* ссылки внутри одного треда не встраиваются, а отображаются при наведении;
* более умный парсер жуйкопостов;
* что-то по мелочи.

greasyfork.org


С момента добавления встраивания ссылок самого Жуйка мне не очень нравилось, что тред может захламляться дубликатами сообщений при использовании ссылок ∕0, ∕1 и т.п.
Теперь такие ссылки работают как в #2858063 .
При желании, отключается в настройках (будет работать как раньше).


Парсер больше не может применить несколько реплейсов к одному и тому же фрагменту текста (ссылки на medium.com больше не ломаются), плюс научился обрабатывать ссылки на комментарии вида ∕1.

2.9.0

* подсвечиваются и выезжают на экран комментарии при наведении мышью на
ссылку "в ответ на /x";
* эмбеды YouTube теперь поддерживают параметр start time.

greasyfork.org


Новая юзабилити фича. Попытка сделать чтение длинных развесистых тредов удобнее.
Гифка вместо тысячи слов: i.imgur.com

Known issues:
1) в некоторых случаях возможны прыжки прокрутки страницы. Я пока не понял, в чём именно причина. Поэтому решил потестировать на пользователях O:-)
2) в Firefox может на пол-пиксела съезжать контент.

Отзывы категорически приветствуются. В случае нестерпимо анноящих багов фичу можно отключить в настройках, как обычно.


Rtfm ютуба: developers.google.com

2.8.5

* Google+;
* Яндекс.Фотки (ссылки без расширения теперь тоже встраиваются);
* исправил статистику рекомендаций.

greasyfork.org

Нашёл, как у G+ эмбеды делаются, добавил. Вёрстка у них, конечно, под стать сайту >_<

А вот у vk.com, если я правильно понял, нужно ещё знать некий "hash for the widget connection". Поправьте меня, но похоже, что единственный способ встроить пост из vk — это получить код вручную со страницы, причём нужно быть залогиненным для этого.

2.8.0 — politota edition

* вставка ссылок с других сайтов (преимущественно новостных, плюс bash.im), используя описание из meta-тегов;
* вставка mp3/ogg;
* mixcloud.com (довольно давно уже добавил);
* что-то по мелочи.

По следам обсуждения в #2855489 сделал получение описания страниц из meta-тегов. Практика показала, что бездумно включать эту фичу для всех ссылок не хорошо. Игнорировать неполные данные не очень получается, т.к. некоторые сайты злоупотребляют тегами и пихают туда бесполезные вещи. Плюс, это просто накладно.
В итоге сделал редактируемый список сайтов и по умолчанию добавил те, которые появлялись последнюю пару недель на Жуйке и содержат качественные данные в meta-тегах.
Помимо Ленты и Медузы там оказался ещё ряд новостных ресурсов (отсюда и название %) плюс bash.im.

Список поддерживает wildcard'ы. Так что, если хочется вообще все ссылки встроить, а-ля facebook, то можно там указать просто "*" (одну звёздочку). Но повторюсь, имхо так себе получается. Плюс, Tampermonkey будет ругаться на неизвестные домены (ему можно указать "Always allow all domains" в этом случае).
Чтобы откатиться к дефолтному списку сайтов, придётся делать сброс настроек расширения. Потом, может быть, сделаю что-то более удобное.


З.Ы. Хотел на greasyfork.org с гитхаба синкать изменения, но при этом история изменений будет без описаний. Надо будет посмотреть, как на openuserjs.org с этим дела идут. С одной стороны — who cares; с другой — текст "Imported from URL" в чейнджлоге не по фэншую как-то.

2.7.7 — moore booru edition

* konachan
* yande.re
* anime-pictures.net

greasyfork.org

У konachan два домена, один из них (.com) заблокирован, а второй — .net :) (он для safe контента). Благо превьюшки и метаданные через второй отдаются все подряд. Я заменяю все ссылки в карточках на .net. При попытке открыть questionable или explicit контент, там будет всё кроме картинки. Для тех, у кого прокся наготове, приводится и ссылка на .com. (На скриншоте внизу: "I'm a teapot" — это сообщение, которое показывает konachan.net вместо картинки. На карточке есть ссылка на konachan.com.)

И konachan и yande.re отдают превьюшки более разумного размера, чем gelbooru — 300px. (На скриншоте сверху одна и та же картинка с gelbooru и konachan.)

Долго соображал, как получить метаданные поста по id через API здешней версии Moebooru. В итоге всё просто оказалось, но "tags=id:" как-то нелогично выглядит.

На anime-pictures.net выпал в осадок от качества вёрстки. Это просто что-то с чем-то. (Но при этом они умудряются держать довольно нескучную подборку картинок, по сравнению с бурятниками. Возможно это вопрос количества и качества.)
Отдают достаточно большую превьюшку в meta og:image. Но больше ничего полезного, и до кучи стоит лимит на пять запросов.

2.7.5

* facebook
* переделал reddit

greasyfork.org

Несмотря а то, что facebook обычно был основным примером сервиса, замыкающегося на себя, его можно встраивать, в отличие от G+ и vk (ну или я не нашёл, как это для них делается).

Обратная сторона медали: facefook js SDK, кажется, over-engineered. В итоге их код для встраивания не всегда работает так, как ожидаешь.
Перепробовал все используемые ранее варианты — всё время что-нибудь не работало. Пока думал, смогу ли я решить проблему через unsafeWindow, вчитался в документацию Greasemonkey и нашёл более прямой способ запуска скриптов в контексте страницы. Помогло. RTFM рулит, как обычно.
Но потом оказалось, что у скрипта facebook проблемы при сочетании с Click to show. Если на странице уже были успешно встроены другие ссылки на fb, то очередная загружаемая по клику — отваливается. В консоли пусто, как обычно. Пока подставил костыль — по таймауту вставляется нужный контент в iframe, но его точный размер я не знаю.

Вооружившись новыми знаниями, переделал код встраивания для Reddit.

P.S. Некоторые фильтры в uBlock очень топорные. Нужно избегать названий css-классов вроде "twitter" и "facebook".

P.P.S. Скрипт перевалил за 2000 строк ещё в прошлой версии.

2.7.0

* Tumblr
* Reddit
* WordPress.com
* переделал Imgur

Посты на Tumblr могут содержать всё что угодно, и если на Жуйке ссылались не на картинки напрямую, то часто это простыни текста. У Tumblr есть oembed, но возвращает он js, по традиции, так что я решил заюзать трюк из #2851610 ...
Но почему-то в этот раз не сработало. Эвент DOMContentLoaded не кидался. Погуглив, я обнаружил, что это known issue с iframe'ами, и следует использовать DOMFrameContentLoaded. Что, опять же, не сработало. И теперь я не понимаю даже, почему с Gist прокатывало.
Подумал и сделал таймер, который ждёт, когда tumblr'овский js закончит свою работу и установит высоту для своего iframe (довольно удобно оказалось).
Заработало. Хотя эмбеды Tumblr такие же медленные и тяжёлые, как и сам сайт. Поэтому Click to show по умолчанию.

Чтобы адаптировать метод ещё и для Reddit, пришлось потратить какое-то время. И всё равно он будет иногда ошибаться с размерами на постах с картинками. Жаль, что нет полноценного onPropertyChange, а таймер туда не хочется вставлять.

После этого переделал Imgur по аналогии. Предыдущая попытка сконструировать iframe, зная только ссылку, упиралась в кривость Imgur иногда — контент не соответствует ссылке. Ожидаешь галерею, а внутри видео... Теперь должно лучше работать.
Ещё разработчики Imgur абсолютно не парятся с высотой встраиваемого контента — 500px для всех, пофигу что внутри... На этот случай у меня iframe'ы можно растягивать вручную. Не прибегая к unsafeWindow лучше сделать не получится.

Когда всё заработало в Опере/ViolentMonkey и Vivaldi/Tampermonkey, очередь дошла до Firefox/Greasemonkey...
И выясняется, что дела плохи, т.к. в собственноручно созданный iframe там нельзя ничего записать. Вся проделанная работа практически насмарку. Связанному тикету два года. Пришлось расставлять костыли для костылей, чтобы получить iframe с нужным контентом в нужном месте.

И после этого WordPress — как бальзам на душу. Полный текст статьи в oembed (но опять без даты). В итоге, можно вот такие математические простыни читать прямо на Жуйке. 👍

И пара слов о LiveJournal:
Note that embedding is a paid account feature, and so these instructions will not work for users with free accounts.— Это они эмбеддингом называют ссылку на блог, не на конкретный пост. Ну, туда им и дорога, видимо. В метаданных ничего интересного, чтобы их использовать.

2.6.0 — booru edition

* Pixiv
* Gelbooru
* Danbooru/Safebooru
* ещё переделал сортировку подписчиков — теперь учитывает ещё и рекомендации

greasyfork.org

У Pixiv есть карточки для Twitter'а — использую их. Multipage контент помечается соответствующим образом. Ещё хотел встраивать ссылки на профили художников, но там, хотя аватарка в meta-тегах, использовать её нельзя — 403. А просто простыню кандзей из description не интересно.

Gelbooru умеет отдавать xml со всеми ссылками, но использовать разрешает только превьюшки высотой в 150px. Под это дело заморочился с flexbox и сделал карточки как на скриншоте. Картинки с rating: explicit ведут себя так же, как nsfw на Жуйке (хотя при таких габаритах это не особо актуально). К ссылкам дорисовываются id.

У Danbooru более приличное API, больше полезной инфы в json/xml, чем я не приминул воспользоваться. Но главное ограничение в силе — можно использовать только превьюшки 150px, даже несмотря на то, что в meta для твиттора большая картинка стоит -_-
Ах да, ещё, чтобы Danbooru нормально работал, ссылки заменяются на https!

В результате множества изменений могли быть задеты другие функции. Если где-то что-то сломалось и я пропустил — пишите.

@Radjah, можно постить простыни с бурятников. А то тут только @Linda-chan в *anime_art.

2.5.0

* можно гра^W фильтровать комментарии, в дополнение к постам;
* можно отметить посты, на которые нельзя ответить — сделать их бледнее

greasyfork.org


Первая фича включается в настройках фильтрации дополнительной галкой; использует тот же список фильтруемых пользователей.
В отличие от постов, комментарии нельзя просто так взять и выкинуть из треда. Поэтому работает так: с установленной галкой "Оставлять заголовки постов" остаётся шапка коммента, номер коммента и номер, на который он отвечает; а со снятой галкой остаются только номера (как на скришоте).

Идею второй фичи позаимствовал у @den-po (отсюда: #2840647 ). Разве что я решил добавить "неотвечабельным" постам прозрачность вместо изменения шрифта. (При желании можно изменить из стилей — добавляется класс .readonly к соответствующим постам.)
По умолчанию выключено.
"Неотвечабельными" посты могут быть по двум причинам — BL и *readonly — скрипт не делает различий между ними.

2.4.5

* добавлена фильтрация постов по авторам и тегам

Установить: greasyfork.org


Фича работает в популярном, "всех сообщениях", фото, общих тегах. Не работает в лентах, "принадлежащих" кому-то (своя или чья-то лента, рекомендации, обсуждения).

Сделал ночью спонтанно, без привязки к новостям. Утром открыл JA и подумал, что до вечера не подождёт :)

С галкой "Оставлять заголовки постов" можно видеть, что что-то публикуется. Без неё посты полностью убираются.

2.4.2 — Front 242 edition (just because)

* статистика рекомендаций пользователя

greasyfork.org

После череды обновлений исключительно для встраиваемого контента, здесь ещё один странный эксперимент.

Когда подписки теряют смысл, как ещё можно сформировать образ окружения человека? Можно посмотреть, в чьих тредах он отмечается и кого рекомендует. С первым на Жуйке всё плохо. А рекомендации хотя бы в вебе есть, чем я и воспользовался.

В левой колонке, по аналогии с пунктом "Я читаю", появился пункт "Я рекомендую".
По хорошему, статистику надо выгребать за фиксированные временнЫе диапазоны, но это если фича докажет свою полезность. А сейчас просто выбирается по 3 страницы (до 60 рекомендаций) за раз. Кнопкой добавляются следующие 3 страницы к статистике.

2.4.0 — Developers! Developers! Developers! edition

* JSFiddle
* Codepen
* Gist

greasyfork.org

Присел, значит, JSFiddle добавить... Очнулся уже когда JSFiddle, Codepen и Gist работали.

У Codepen зачем-то захардожена высота эмбеда в 300px.

Gist я сначала сделал через жо^W iframe, в котором выполнялся их код эмбеддинга. И я даже нашёл способ отресайзить его правильно после загрузки, и оно сносно работало. А потом сообразил, что с помощью json будет правильнее, и переделал. Но трюк с выполнением внешних js в iframe мне понравился — может где ещё пригодится.

Ещё с предыдущим обновлением дефолтный текст ссылок juick.com заменяется на id постов и комментов.

2.3.0 — Yo dawg! edition

* Juick

greasyfork.org

Я немого УПРЛС, и в итоге ссылки эмбеддятся рекурсивно, чтобы можно было восстановить контекст, не сходя с места. Вложенные эмбеды всегда Click to show. Повторные ссылки не эмбеддятся...

Known issues:
Обнаружил, что видео из Твиттера не работает, если в Хроме & co. установлена галка Block Third-Party Cookies. Оно типа громкость в localStorage хранит, и если не может получить доступ, то падает с необработанным исключением...

P.S. I ❤ flexbox.

Превью для следующего источника для эмбедов...

Очень неудобно, что HTTP API в body возвращает текст, а не html. Неплохо бы отдельное поле html добавить.

Как обычно, если слать много запросов сразу, то этот высоконагруженный сервис отвечает 503. На такой случай сообщения об ошибках кликабельны — можно повторить попытку вставки по клику.

Оформление ещё предстоит подогнать под оригинальное, с аватаркой и т.п.

Есть соблазн брать содержимое не через API, а со страницы, ради html и оформления. Но это будет дикое сооружение из костылей.

2.2.5

* Bandcamp
* Flickr
* DeviantArt

Реализовал одну свою хотелку — теперь с Bandcamp встраиваются треки и альбомы. Обложка — часть экспириенса, поэтому не компактный плеер. Но если сделать ещё шире, то уже в экран не влезает.

Добавляя Flickr, открыл для себя oembed.com , но толку от него не много — просто ещё один вариант метаданных.
DeviantArt получился практически автоматом, по образу и подобию.

Интересно, как сайты решают, какие метаданные публиковать. Что у Twitter, что у Flickr нету даты публикации. Для Twitter пришлось дату дополнительно из страницы парсить. Для фоточек Flickr (1) не вижу даты в нормальном виде, (2) не критично, потому и так сойдёт. У DeviantArt есть дата в oembed.

С Flickr'а, по идее, можно эмбеддить не только фотки, но и сеты в виде слайдера. Но родной js как-то делает iframe без src. Я сделал o_O, потом нашёл, что если к ссылке добавить "&sol;player&sol;", то получается то, что мне нужно. Однако на практике половина iframe'ов на juick'е отказывается загружаться с ошибкой "Refused to display ... in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'". SAMEORIGIN установлен всегда, в результате чего теперь не понятно, почему половина сетов всё-таки отображается.
В общем, убрал сеты до выяснения.

Узнал про seamless, который, как тот воздушный шарик, входит и выходит в/из спецификаций. Блин. Они бы хоть сделали возможность ресайзить iframe под контент — уж́е бы неплохо жилось.

З.Ы. Achievment unlocked: скрипт перевалил за 1000 строк.

Лол. Я наткнулся на тред #2837634, пока тестировал встраивание Vimeo (который ускользал от моего внимания до сего момента).

2.2.2

* Vimeo;
* svg;
* дополнил некоторые регулярки.

greasyfork.org

P.S. В ближайшее время обновлений не будет. Есть пара клёвых идей, к которым я вернусь как только смогу.

2.1.0

Нужно больше галочек!

* Более полная поддержка imgur и gfycat.

* Можно показывать эмбеды не сразу, а по клику. Gfycat это ппц тяжёлые видео с неотключаемым автоплеем. Прямо как некоторые gif'ы. И то и другое по умолчанию Cts (Click to show).

* Можно прятать nsfw контент в ленте таким же образом под Cts, перечислив неугодные теги и юзеров. (Но на станице поста будет показывать. Вообще ссзб в такой пост заходить, но если нужно и там прятать — потом допилю.)

greasyfork.org

2.0.0

* Настройки — теперь можно использовать только те твики, которые нужны;
* Чем теги хуже пользователей? На страницах тегов появился заголовок и ссылки для управления подпиской;
* (Чуть ранее) добавилась поддержка Instagram, SoundCloud и плейлистов ютуба для встраивания.

greasyfork.org

Чтобы добавить настройки, нужно было либо превращать скрипт в расширения для браузеров (что автоматически повлечёт значительное увеличение возни с деплоем либо сократит число поддерживаемых браузеров, в то время когда каждый пользователь на счету), либо встраиваться куда-то на сам сайт.
Я решил встроиться в страницу настроек, и на juick.com появился новый пункт меню.