Скрипт - перетаскивай картинки из своей папки сразу на Табун! [UPD: версия 0.1.5], обновиться нужно вручную

+160
в блоге IT Pony!
Обновиться до версии 1.5 можно по этой ссылке (в дальнейшем обновления будут автоматические)
Что нового:
Добавлена поддержка firefox
Теперь при зажатом alt будет вводиться не название файла, а просто пробел.
Исправлена ссылка для автоматического скачивания обновлений


По (не)многочисленным просьбам:

Скачать скрипт (для установки потребуется расширение Greasemonkey для Firefox или Tampermonkey для Chrome)
Есть возможность загружать много картинок, при этом используя разные доп. фичи, за подробностями — под кат

По умолчанию, если вы просто перетащите картинки в поле ввода, они все спрячутся под один спойлер, название которого вас попросят ввести:
default
___________
Помимо этого, в момент перетаскивания, вы можете воспользоваться полезными хоткеями:
Shift: зажав эту клавишу, каждая картинка будет под своим спойлером. Название каждого спойлера нужно будет ввести вам самим, при этом для удобства вам покажут название текущей картинки, и саму картинку:
Shift
___________
Ctrl: В спойлере, помимо заголовка, так-же будут маленькие превьюшки. Если вы хотите, чтобы были только превью, то просто нажмите enter, когда попросят ввести название спойлера:
Ctrl
___________
Alt: Очень удобная клавиша, если ваши файлы уже имеют достойные имена. Зажав alt, спойлер создается автоматически, используя имена файлов:
Alt
А теперь самое главное: все клавиши можно сочетать друг с другом, получая суммарный эффект. То есть:
Shift + Alt: у каждой картинки будет свой спойлер, при этом имя спойлера будет совпадать с именем файла. Вам ничего вводить не надо
Shift + Ctrl: У каждой картинки свой спойлер, и к каждой из них будет представлена превьюшка. Если вы хотите, чтобы были только превьюшки, просто нажмите несколько раз enter.
Alt + Ctrl: Автоматически создаются превьюшки и названия файлов в одном спойлере
Alt + Ctrl + Shift: это вы можете увидеть в шапке поста :)
Примечание: каждая ОС реагирует по-разному на зажатые клавишы перед перетаскиванием. Советую зажимать клавиши после зажатия ЛКМ, а не перед. Самое главное, чтобы клавиши были зажаты в момент отпускания ЛКМ.

Теги:

  • В избранное
    26

64 комментария

Яблочки



Флатти



Дерпи



Селестия



На создание коммента ушла 1 секунда жизни :)
Здорово, отличная примочка!
Вау! Сохраню в избранное, очень удобно выглядит)
Not bad
А Саня оказывается может не только про разные непотребства вещать, но и полезным делом заниматься :)
Да уверен, что стырил исходники откуда-то… максимум чуток допилил.
Саня, а че минусим-то? Правда глазки колет? как минимум что сходу нашлось — функция dataURLToBlob цельноспижженная отсюда gist.github.com/aermolaev/a96ba40cd68fe357195f — мог бы и упомянуть источник для приличия то… в остальном твоем супер-коде просто лень копаться, уверен там тоже найдется много чего…
Нечего сказать — докопайся до орфографии простенькой функции, которая давно гуляет по всему интернету
Да я бы тоже этот кусок кода использовал, зачем велосипед изобретать? Можно было, с другой стороны, вставить эту функцию по внешней ссылке, но сейчас я не уверен, что нельзя снести гисты с гитхаба.
А если тебе так нужен детальный разбор…
Спойлер
let forms = Arrаy.prototype.slice.cаll(ev.dаtаTrаnsfer.files).mаp(аsync (file) => {

Не совсем понятен выбор Arrаy.prototype.slice.cаll(), когда есть значительно более короткий Arrаy.from(). Использование аsync/аwаit все равно дропает поддержку браузеров, на которых from() не работает.

forms = аwаit Promise.аll(forms);

Есть риск словить rаte-limit при большом количестве файлов

аutoNаmeSpoilers && !sepаrаteSpoilers ? spoilerNаme += nаmes.toString().split(',').join(" ") : !sepаrаteSpoilers ? spoilerNаme += prompt("Введите название спойлера") : '';

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

И сама идея превращать массив в строку, чтобы немедленно разбить его обратно… серьезно?

const wide = document.getElementById("widemode");

Странная привязка к этой плашке справа внизу. Судя по всему, это какой-то временный наполнитель, может быть стоило просто использовать невидимый элемент? Ты рискуешь так сломать вообще все скрипты, которые что-то там делают (а они существуют).

аwаit new Promise(function (resolve, reject) {
              wide.children[0].onloаd = () => {
                setTimeout(() => { // некоторые браузеры оставляют белый экран даже после onloаd
                  imаgeTemplаte += prompt(`Введите название спойлера для ${nаmes[currentTemplаte]}`);
                  resolve();
                }, 100);
              }
            });


prompt() — синхронная функция, а результат ее в контексте кода не зависит от того, что ты загружаешь. То есть вообще вся эта куча кода заменяется одним единственным вызовом самого prompt где-то раньше.

loаdPreview ? imаgeTemplаte += previewForms[currentTemplаte] : '';

Мне иногда тоже лень писать нормально условия, но превращать код в выхлоп минификатора не стоит.

let textPlаce = document.getElementById("form_comment_text");
let topicPlаce;
if (!textPlаce) {
  textPlаce = document.getElementById("topic_text");
  topicPlаce = document.getElementById("topic_title");
}

Сокращается до
const textPlаce = document.getElementById("form_comment_text") || document.getElementById("topic_text");
const topicPlаce = document.getElementById("topic_title");


Копипасченные куски палятся по vаr в качестве объявления переменной.

Могло быть хуже. Некоторые другие скрипты от других людей написаны одновременно на ES6, но при этом тащат с собой jQuery
Ты бы ещё тех, кто сидит на Stack Overflow, зарплаты лишал.
Если до конца занудствовать, весь код в Stack Overflow распространяется по лицензии Creative Commons Share-Alike, что фактически исключает возможность его использования в производном ПО
Ну кроме случаев, когда производный код распространяется по совместимой лицензии, а емнип, это достаточно большой набор лицензий.
Всего две — FAL и GPLv3. Даже банальный MIT уже не совместим
Хм, мне казалось, что GPLv2 тоже совместима (а вместе с ней и куча остальных копилефтных).
MIT вроде как и с GPL несовместим, т.к. позволяет закрытие производных работ.
На сайте Creative Commons про совместимость с GPLv2 ничего не написано, так что видимо нет

Ну и в общем-то GPLv3 тоже фактически исключает возможность использования кода в производном ПО — всё-таки опенсорсные GPL-приложения делают не только лишь все)
Опенсорсные приложения делают не все, но на практике докопаться до закрытого кода очень сложно по причине его закрытости)
Принцип «суровость законов лицензий компенсируется необязательностью их исполнения» конечно прикольный, но я бы предпочёл по возможности его избегать)
На сайте Creative Commons про совместимость с GPLv2 ничего не написано, так что видимо нет
Блин, вот вообще хреново, что нигде нет нормальной таблички прямой и обратной совместимости лицензий.
всё-таки опенсорсные GPL-приложения делают не только лишь все)
Ну, сейчас уже достаточно много кода (и не только) под GPL и другими свободными лицензиями.
Эм. Нет, можно использовать любую лицензию и даже не распространять код вообще, а использовать закрытые репы.
можно использовать любую лицензию
Пруф?

Ты не обязан выбирать лицензию для репы, по умолчанию будут действовать дефолтные авторские права. (Ни разу не SA, если что)


Но тебе рекомендуют положить в корень файл с лицензией. С любой лицензией, никаких ограничений на этот счёт нет. Повторюсь, я пользуюсь DbaDPL и счастлив.

docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository
ОК, я тупой)
по умолчанию будут действовать дефолтные авторские права
… до момента, когда в эту репу всё-таки будет добавлен SA-контент — тогда всё, что попадёт под понятие «производного произведения», должно быть тоже лицензировано как SA или совместимой лицензии, иначе засудят за нарушение авторских прав

И гитхаб тут ни при чём, это всё юридическая дичь ¯\_(ツ)_/¯
Для начала, я проебал, что речь идёт о SO, а не о гитхабе) с другой стороны, можно кидать ссылку на гх, вместо публикации сниппетов на со. Но если опубликовать сниппет из проприетарного кода на со, он не станет свободным, надо будет его удалять, чтобы не вляпаиься. Но да, это юридическая мудотень, за которую всем браться в падлу.

Я не так давно наткнулся в юнити сторе на перерисовки (убогие) близзардовских иконок из ВоВ. За деньги. На предъяву они ответили, «Вот пусть близзард к нам и обращается».
Эээ. Стоп, мы про стекофервлоу говорили, а не гитхаб?
UPD: а, вижу, этот вопрос уже поднят выше)
Может, просто большую часть времени не хочет. Лентяй.
Ооо, вот это да! Вот это зашибись!
UPD 0.1.2:
— Добавлена поддержка Бункера (функционал точно такой же)
— Теперь спойлер не будет невидимым, если в название спойлера ничего не вводить, при условии что не выбрана опция превью (Ctrl)
— Переменная, отвечающая за максимальный размер превью (при зажатом Ctrl) вынесена в константу, и может быть отредактирована в начале кода (по умолчанию — 70 пикселей).
Для обновления перейдите по ссылке скачивания в шапке
Маякните, когда появится более-менее последняя стабильная версия.
А сейчас есть какие-то серьезные баги? О_о
По сути, я планирую выпустить еще несколько версий, но в них будет просто добавлено несколько удобных фич, с текущими фичами вроде всё ок.
Ну вот я не хочу обновлять скрипт ради новых фич, я хочу сразу готовую версию, в которую фичи больше не планируется добавлять
У юзерскриптов имеется стоковый механизм автообновлений через @downloadURL, так что… тебе надо его один раз поставить и забыть о его существовании, он сам обновится.
Господи, как всё сложно… Раньше я был уверен в том, что web — самое сложное, но теперь я это точно знаю.
Здесь оно есть, так что ты просто ставишь скрипт, и TM/GM/VM сам за тебя раз в сутки прочекает наличие обнов и сам их поставит (и спросит, если там изменятся разрешения). Все как раз элементарно.
У меня почему-то автообновление не сработало вчера, хотя я нажал «проверить обновления скриптов», после того как запушил новую версию… Мб там задержка какая-то?
У гитхаба тормозной хост
А на что на самом деле можно наехать — за огромные гифки в посте.
Важно было продемонстрировать функционал каждого хоткея. Без анимации было бы не так наглядно, и текущее сжатие на грани шакалов…
Кстати, как думаешь, стоит ли добавить интерактивные подсказки на место textarea во время перетаскивания?
Текущее сжатие — говно. Я за пять минут ужал две случайные гифки до 4 метров без дополнительной потери качества вообще. И не делай вид, что не знаешь, о чем я, первую гифку ты ужал нормально.

Кстати, как думаешь, стоит ли добавить интерактивные подсказки на место textarea во время перетаскивания?

Как хочешь
Ну скинешь тогда ссылочку? Вставлю в пост
Да просто таким же образом пережми, как и первую
Вон 30-мегабайтная
и еще одна
Заменил, спасибо.
Так… я что-то выпал из реальности Табуна… надо исправляться.

Поглядите-ка, да это Флайер. Да ещё с рабочим скриптом. И, к тому же, крайне полезным в табуножизни!
Не знаю, что думают его хейтеры, но он достоин находиться в соответствующей статейке, причём далеко не на последнем месте: пакодельщики, смотрящие пинтерест, девиант или просто не доверяющие скрипту Хомуры немного, но облегчили себе жизнь, хотя те же превьюшки придётся постоянно менять. Да и обычным юзерам будет проще создавать свои посты.

Поздравляю!

Блок с хотелкойК вопросу о пакодельщиках: было бы прикольно иметь возможность добавлять изображения с другим превью. Например, кидаешь пикчу с зажатым условным Tab и получаешь окно с выбором изображения для превью, после которого создаётся спойлер с выбранным изображением на превью и кинутым перед этим фото внутри спойлера. В теории, такое возможно реализовать, но за практику не ручаюсь, т.к мои познания в кодинге обычно приводят

к такому




О добавлении поста в статьюПост будет добавлен в ближайшее время, т.к объём работ несколько больше, чем просто добавление нового пункта. Ждите в промежутке между 31-ым и 1-м числами.

Авось, руки дойдут до добавления исходников Ушифратора...
зажатым условным Tab

К сожалению, это практически не выполнимо в рамках такого скрипта. В эвенте «дрэг н дроп» передаются 4 хоткея — shift, ctrl, alt, meta. Причем meta работает только на macOS, на винде кнопка win за мета-кнопку не считается. Чтобы мониторить другие кнопки, особенно если они были зажаты при свернутом браузере — придется писать полноценный exe-шник…
возможность добавлять изображения с другим превью.

Но это можно будет реализовать, если просто вынести эти функции в настройки, которых у меня пока нет. Подумаю над этим.
Авось, руки дойдут до добавления исходников Ушифратора…

У меня есть в планах его переделать тоже в виде расширения, без веб-сайта, но это в 10 раз сложнее, чем текущий скрипт. Но если получится — в результате получатся интерактивные ушифры, интерактивность которых не ограничивается обычным движением ушек.
Вообще хорошо бы весь интерфейс скрипта сделать в отдельном «окне» (говорю в кавычках, потому что имею в виду не системное видновое окно, а некую рамку поверх страницы). Перетаскиваешь картинки без всяких сдвиговых клавиш и просто появляется окно с галочками-кнопочками, где можно выставить чего тебе хочется сделать.
Во время дрэг н дропа нет возможности ставить галочки, так как мышка у тебя уже зажата. А делать заранее — ну такое себе. Во время перетаскивания можно передумать…
Перетащил, отпустил, появляется окно, а потом уже текст.
Чем больше этапов — тем хуже, я считаю. Сейчас всё делается в одно действие, и мне бы хотелось не выходить за эти рамки.
Да тут вообще сложновато интерфейс придумать. Горячие клавиши — это самое оно, но придется их запоминать, что не всем по нраву.
Дело даже не в сложности придумать такой интерфейс, а в том, что какой тогда смысл будет в скрипте, если при обычной загрузке картинок нужно будет сделать столько же телодвижений, сколько и со скриптом?
Лично мну всё полностью устраивает как есть.
Бля. Табун — без скриптов, что сапожник без сапог…
сапожник без сапог
Ну это только у Орхидузы с Рандомом :P
достойные имена
кириллица в ФС
/0
Немного не в тему, но когда уже индусы сделают блокнот с UTF8 по умолчанию…
Не дождётесь, 8-битные кодировки ещё долго с нами будут :P
Хватит всем ©. Но скоро уже. Дождемся таки )))
А толку-то от этого, старые файлы куда денутся?

Вон на lib.ru до сих пор куча книг в давно мёртвых CP866 да КОИ8, а уж CP1251 живёт и здравствует, а чем дольше живёт и здравствует, тем больше растёт критичная масса контента, которая не даст просто взять и закопать в будущем.
Воу, как я мог такой годный скрипт пропустить? О.О

UPD: ээээмммм… Что-то он у меня не работает от слова совсем.
В консоли ничего нет. При перетаскивании картинок в поле ввода отображается курсор мышки типа «нельзя сюда перетащить» (на вкшечке и в гугдодоках при этом драг-н-дроп работает).
Windows 7, Firefox 85.0.2, Greasemonkey 4.10.0, скрипт 0.1.2. В консоли никаких ошибок. Прочие табунские скрипты работают, в исключениях пусто.
Йей! Починили =)

В версии 0.1.5 теперь в Firefox + Greasemonkey работает. Проблема оказалась в том, что нужно было разблокировать возможность события drop, запретив обработку dragover, которая, видя перетаскиваемый файл, запрещает дроп, а ещё потом правильным образом получать security key вне контекста страницы.

Ещё, как я понимаю, скоро будет пофикшен гигантский размер превьюшек для ввода имён спойлеров при перетаскивании с шифтом.

Спасибо Sasha-Flyer =)
Я все жду волнительный момент, когда табун станет работать вообще бэз родного бэка, по-ходу осталось недолго =)
Думаю, скоро это случится =) API есть, осталось только интерфейс написать.
Хотя…
Починить поиск и аватарки, наверное, легче, но...)
Ещё, как я понимаю, скоро будет пофикшен гигантский размер превьюшек для ввода имён спойлеров при перетаскивании с шифтом.
Что-то до сих пор не пофикшен =/
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.