Чтобы добавлять сообщения и комментарии, .

@killy:
killy

2.7.13

Несколько исправлений в эмбедах Жуйки:
* учитывается тег nsfw;
* поддерживается синтаксис ссылок []();
* отображаются лайки.

greasyfork.org

Кажется я понимаю, почему Угнич изначально сделал [][] вместо каноничного []()...

@killy:
killy

2.7.9

* SlideShare

greasyfork.org

@killy:
killy

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. Но больше ничего полезного, и до кучи стоит лимит на пять запросов.

@killy:
killy

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 строк ещё в прошлой версии.

@killy:
killy

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.— Это они эмбеддингом называют ссылку на блог, не на конкретный пост. Ну, туда им и дорога, видимо. В метаданных ничего интересного, чтобы их использовать.

@killy:
killy

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.

@killy:
killy

2.5.0

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

greasyfork.org


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

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

@killy:
killy

2.4.5

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

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


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

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

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

@killy:
killy

Вот я затупил...

Пост #2851877 написал, а собственно новую версию скрипта залить забыл. fixed.

greasyfork.org

@killy:
killy

2.4.2 — Front 242 edition (just because)

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

greasyfork.org

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

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

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

@killy:
killy

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 постов и комментов.

@killy:
killy

2.3.0 — Yo dawg! edition

* Juick

greasyfork.org

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

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

P.S. I ❤ flexbox.

@killy:
killy

Work in progress

Мне кажется, или где-то был более внушительный флешмоб?

@killy:
killy

Сервис для голосований, позволяющий встраивание, бесплатно, без смс.

@killy:
killy

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

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

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

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

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

@killy:
killy

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, потом нашёл, что если к ссылке добавить "/player/", то получается то, что мне нужно. Однако на практике половина iframe'ов на juick'е отказывается загружаться с ошибкой "Refused to display ... in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'". SAMEORIGIN установлен всегда, в результате чего теперь не понятно, почему половина сетов всё-таки отображается.
В общем, убрал сеты до выяснения.

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

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

@killy:
killy

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

2.2.2

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

greasyfork.org

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

@killy:
killy

2.2.0

* Twitter !
* Dailymotion

greasyfork.org

@killy:
killy

2.1.0

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

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

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

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

greasyfork.org

@killy:
killy

2.0.0

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

greasyfork.org

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

@killy:
killy

1.6.5

* вставка Сoub, webm и mp4 в дополнение к YouTube (плюс картинки с :large и т.п.);
* большая аватарка в левой колонке (а то у некоторых и не разглядишь иначе, что изображено).

greasyfork.org

@killy:
killy

1.6.3

* вставку YouTube как добавил, так тут же и сломал. Теперь исправлено;
* тема Juick dark-grey внезапно обновилась. По такому случаю расставил !important, чтобы раскраска тегов работала;
* ссылка на настройки (шестерёнка в левой колонке на своей странице). Спасибо за удобные svg-"спрайты" в коде :)

@killy:
killy

Changelog:

1. картинки и видео (YouTube) из ссылок вставляются под постом (стрелочки для наглядности);
2. теги слева рисуются так же, как и на /tags (в основном чтобы шрифт не прыгал);
3. что-то по мелочи.

greasyfork.org

Возможно, в новых фичах что-то не понравится. Фидбэк приветствуется.

@killy:
killy

caniuse.com
Печалька :'(

@killy:
killy

Новое:
* ссылки для удаления комментариев;
* теперь должно работать и в Firefox с Greasemonkey.

greasyfork.org

@killy:
killy

Ещё одна вещь, которая не давала мне покоя :)
Не секрет, что на Жуйке большая часть профилей — неактивные. Глядя на страницы подписок/подписчиков, хочется знать, есть ли там кто живой ещё...
Сделал сортировку пользователей по дате последнего поста.

Гифка: i.imgur.com

Фичу сделал, и как-то неприятно стало, будто Juick заДОСил — для каждого пользователя приходится отдельный запрос делать. Поэтому функция активируется кнопкой.
И работает не быстро, т.к. нельзя просто так взять и отправить кучу запросов сразу. Даже если это http api.

Ещё у меня сложилось впечатление, что по api ответ медленнее приходит (не закеширован/не оптимизирован?), поэтому оставил запрос к обычной странице вместо api. (Возможно, проблема на моей стороне. Ввиду общей костыльности решения, не стал дальше разбираться.)

Странно, что в HTTP API нет параметра — максимальное количество постов, которое я хочу получить в ответ на запрос. Но если бы был, это бы не сильно помогло. Я плохо себе представляю http api, который бы помог реализовать эту фичу за один запрос.

@killy:
killy

Новое в моём скрипте:
1. теперь пользовательские теги на /#post — вставляется top-50 используемых вами тегов
2. по коротким тегам легче попадать
3. ещё одна вещь (будет отдельным постом)

Как обычно, на greasyfork.org

Я использую Violentmonkey для Оперы. Проверил также, что работает в Vivaldi с Violentmonkey и Tampermonkey от Хрома (не удивительно). В FF не проверял.

@killy:
killy

Окей, чтобы не конфликтовать с другими стилями и чтобы не портить шрифт на платформах отличных от Windows, убрал изменение шрифта из скрипта.

Сделал отдельный стиль в Stylish:

article > p, .msg-txt, input, textarea {
font-family: Verdana,sans-serif;
font-size: 11pt !important;
}

В greasyfork.org будут только вещи, влияющие на функциональность.

@killy:
killy

Продолжаю прокрастинировать с Juick'ом. (Да сколько можно уже!)

Если теги сделать с фоном article: контраста добавляется, но как-то неприятно в целом стало. Не буду в таком виде заливать.

@killy:
killy

Добавил ссылки для перехода к постам пользователя за определённый год.

Границы лет — хардкод, и я утомился искать предыдущие, так что только последние несколько лет.

Попутно обнаружил, что там что-то не так с форматом дат (возможно, только в старых постах): в посте и в ленте показывается по разному — UTC или местное время.

greasyfork.org

@killy:
killy

Сделал цвета тегов style-aware, чтобы с тёмными темами работало.
Плюс, более правильно диапазон значений выбирается и глубина диапазона яркости задаётся одной переменной.

Работает с userstyles.org , но не работает с userstyles.org почему-то. Поскольку второй уже не совсем совместим с Juick'ом и вряд ли будет обновляться, то не стал разбираться, почему так.

greasyfork.org

@killy:
killy

Добавил сортировку и цветовую дифф^W^W цветовое кодирование тегов на /user/tags.

greasyfork.org

@killy:
killy

Накостылял UserJS, посмотреть, насколько оно будет юзабельно:
greasyfork.org

@den-po:
den-po

Читаю всё и всех подряд. Замечаю, что пытаюсь ответить забанившему меня, лишь потратив какое-то время на поиски, куда ткнуть, чтоб ответить. Надоело, сделал, чтоб шрифт в таких постах/комментариях поменьше был. gist.github.com

@den-po:
den-po

скролл картинки перетаскиванием gist.github.com

@den-po:
den-po

надоело, что расширения, убирающие редирект в поисковой выдаче гугла, не работают, сделал скриптик gist.github.com

@kitt:
kitt

короче чтобы ебашить нормальные юзерскрипты нужно поднимать веб-сервер на локалхосте, иначе локальное AMD не грузится

@Renha:
Renha

// ==UserScript==
// @name        Убрать лишнее с жуйка и подписка и отписка в один клик
// @namespace   Renha
// @include     *://juick.com/*
// @version     1
// @grant       none
// ==/UserScript==

$('nav[id=global]').remove();
$('div[id=logo]').remove();
$('div[id=search]').remove();

$('aside[id="column"]').remove();
$('ins[class="adsbygoogle"]').remove();
$('a[href="/?show=recommended"]').text("Все");
$('a[href="/?show=recommended"]').attr("href", "/?show=all");
$('input[name="search"]').remove();

$('a:contains("Рекомендовать")').attr("href","#");
$('a:contains("Рекомендовать")').attr("onclick",'$.post("/post2",{place_id: 0,body: "! #"+pageMID});location.reload();');
$('a:contains("Подписан")').attr("href","#");
$('a:contains("Подписан")').attr("onclick",'$.post("/post2",{place_id: 0,body: "U #"+pageMID});location.reload();');
$('a:contains("Подписаться")').attr("href","#");
$('a:contains("Подписаться")').attr("onclick",'$.post("/post2",{place_id: 0,body: "S #"+pageMID});location.reload();');

$('a:contains("Мне нравится")').text("Рекомендовать");

var say="Подписаться";
var tog="S";
if (window.location.search.search('show=discuss')>0)
{
	say="Отписаться";
	tog="U";
}
$('.l').append('<a href="#" class="ololoshka">'+say+'</a>');
$(".ololoshka").attr("onclick",'$.post("/post2",{place_id: 0,body: "'+tog+' #"+$(this).closest("article").attr("data-mid")});');

@Renha:
Renha

в своём userscript для жуйки заменил все "Мне нравится" на "Рекомендовать", а потом поймал себя на том что ищу "Мне нравится" чтобы отрекомендовать %)

@greenjoker:
greenjoker

userscripts.org
userscripts.org