Редактирование своей статьи на Хабре через выделение цитаты в HabrAjax; поддержка Iceweasel

от автора

В скрипте HabrAjax (113.2013.04.20) добавлено удобное редактирование исправлений в собственных статьях. Достаточно просто выделить уникальный участок текста и среди контекстных кнопок выбрать кнопку <E>. В фрейме половинной высоты откроется поле ввода с выделением именно на том месте, которое было выделено.

Также, обеспечена поддержка браузеров Iceweasel (на основе Fx3.6) в Дебиане и возвращена поддержка Firefox 3.6 в остальных ОС (но там будет иметься проблема установки старой версии Greasemonkey, актуальной для 3.6). Потенциальная аудитория — 1% от остальных пользователей Firefox.

Аудитория пользователей HabrAjax и направленность статьи

Среднее число пользователей скрипта — 40-60 человек. Поэтому, если статью прочитает 3000 человек, то практический интерес она может иметь только для 1.5% читателей. Пусть, ещё 10% будут иметь желание попробовать скрипт. Но не более. Потому что скриптами вообще пользуются немного людей. Остальным — достаточно узнать, что функции, сделанные для удобства пользования, имеются в том или ином скрипте.

Правки собственных статей

Не так давно мы видели героическую и довольно успешную попытку пользователя Хабра сделать WYSIWYM-редактор для статей Хабра. Кратко — это такой редактор, чтобы отображалась структура статьи, и, в частности, было бы удобно находить места правок. «Героичность» подобных попыток — в том, что приходится привязываться к скриптам сайта и «подписываться» на их поддержку. Чуть что изменится — редактор сломается, и надо быстро исправить, синхронизировать изменение. От этого не защищён ни один скрипт, работающий в паре с другим.

В HabrAjax появилось решение для поиска контекста на основе выделенной цитаты. При этом, можно выделять цитаты одну за другой и сделать много правок в исходном поле ввода, прежде чем отправить изменения на сайт или сделать предпросмотр. Привязка к скрипту сайта — тоже, конечно, есть, но значительно более слабая. Скрипту нужно всего лишь знать id в textarea поля редактирования. Никакие другие изменения HTML и JS на сайте не влияют на функцию поиска места правки, кроме, конечно, возможности запустить HabrAjax вообще.

В чём отличие подобного способа правки от традиционного?

Традиционно, если обнаружилась ошибка в тексте своей статьи (например, пропущена запятая), то надо быстро попасть в это же самое место в форме редактирования. Обычно это соопровождается рядом действий:

*) скопировать участок текста, чтобы позже его найти по Ctrl-F при редактировании;
*) открыть статью для редактирования (найти такой значок: );
*) нашли? замечательно, кликаем; теперь ищем в новом открывшемся окне…
*) найти участок текста (желательно, чтобы он был уникальным и не содержал тегов, иначе придётся перебирать) (учесть, что без помощи скрипта высота поля ввода — небольшая);
*) начать правку в районе выделенного участка.

Ну, или искать глазами и смекалкой :).
Используя выделение текста с контекстной кнопкой <E>, теперь в HabrAjax это делается так:
(Будет работать, конечно, только с цитатой из своей собственной статьи при авторизации.)

*) выделить текст, как для копирования;
*) навести на контекстную кнопку <_>, затем кликнуть на <E> (или Ctrl+<E>);

Откроется половинный фрейм со страницей редактирования и будет выделен искомый текст в фрейме в поле ввода.
Если образцов нашлось более 1, об этом будет говорить подсказка, а по ссылке «следующий» — переход к следующему совпадению (в примере на рисунке было выбрано слово «по » и нашлось 8 совпадений). Если не нашлось — ничего не выделится (в примере искали слово "<E>", но оно вводится как "&lt;E>", поэтому ничего не нашлось).

             

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

Если удобнее редактировать в другой вкладке (например, высота окна мала), при нажатии на <E> удерживаем Ctrl, чтобы открыть окно в новой вкладке. Способность работы с несколькими выделениями по очереди не пострадает, потому что общение между окнами идёт через localStorage. Можно даже выделить цитату в другой новой вкладке, а скрипт на странице редактирования её подхватит и выделит у себя.

Конверсия инструмента — от космических технологий к обычным

Далее — возникла отличная рекурсивная идея: если делаем предпросмотр статьи, то достаточно подвесить обработчик выделений на появившийся текст предпросмотра, чтобы из нового текста статьи через localStorage сообщать слушателю изменений о новом выделении статьи. Слушатель тут же выделит этот же текст в поле ввода и подкрутит страницу для просмотра. Круг правок замкнулся на одной странице без фреймов. Но фреймы помогли его создать. Другими словами, если мы выделим текст на странице создания или редактирования статьи, контекстная кнопка <E> покажет этот текст в поле ввода.

Почему правка статьи появилась только сейчас?

Это — совершенно случайное явление. Механизм правок через цитату появился в скрипте месяца 3 назад, но более важны были другие функции — например, ответить на комментарий или написать письмо с цитатой — ведь писать и править статьи могут меньшее количество пользователей. Но недавно появилось время для работы с selection, и заготовленный ранее механизм правки был сделан.

Что на очереди в работе с контекстной цитатой?

Кроме нескольких (точнее, 9-10) работающих контекстных кнопок, пользователь увидит ещё 6 (которые показаны на рисунке вверху), если включит настройку «цитатник-корректор [бета]». Но она пока бесполезна, поскольку весь цикл выделения ошибки в цитате и отправки письма не поддержан. К слову, именно с этой идеи начала развиваться подсистема контекстных кнопок. Но, как видно, всё остальное сделано, а основной механизм — нет, потому что для него не хватает инфраструктуры скриптов. В некотором близком времени появится и этот механизм в группе контекстных кнопок.

Iceweasel и Firefox 3.6

Можно подумать, что эта версия браузера безнадёжно устарела, однако, она уже 1.5 года поддерживается в официальной поставке Linux Debian Squeeze и не думает изменяться. Поэтому, после некоторой паузы в поддержке этой версии браузера, скрипт вернулся к работе с устаревшей, но актуальной для Fx3.6 версией Greasemonkey 0.9.6 (не Scriptish, потому что он с рождения поддерживает только 4-ю версию браузера) и поддержал браузер Iceweasel (Greasemonkey для него подгружается из пакетов, тоже страшно устаревшей версии 0.8).

(Напомню, что для нормального чтения метаданных скрипта в GreaseMonkey нужно удалять "/*" перед "<!" в 4-й строчке скрипта — это давняя и нерешаемая особенность GreaseMonkey, обсуждавшаяся в статье более года назад. Впрочем, оставление этих символов не даст читать лишь логотип и номер версии из метаданных загруженного скрипта — не самые важные данные. Не будут также работать некоторые новые функции, например, передача событий, функции из показа картинок (insertAdjacentHTML), ресайз картинок, составление письма.)

Поддержка ZenComment в Firefox 3.6

Stylish 1.2 в Fx3.6 не поддерживает правило @-moz-document regexp("http://habrahabr.ru/(?!special/).*"), но поддерживает обычное domain(«habrahabr.ru»), поэтому придётся в 3.6 отказаться от исключения URL habrahabr.ru/special/* и заменить правило на domain(«habrahabr.ru») вручную. Или пользоваться встроенной в скрипт версией ZenComment (обычно — актуальная, включается в настройках).

Проблема с Оперой

Сейчас почему-то имеется очень мало пользователей Оперы для этого скрипта, хотя по опросу годовой давности их было нормальное количество. Возможно, связано с тем, что кнопка «Install» на странице не устанавливает скрипт на Оперу, но так было всегда. Установка на Оперу — всегда было более сложной процедурой для юзерскрипта, и это описано даже в одной из статей специально. Тем не менее, скрипт поддерживает Оперу, включая 12-ю версию, работают все функции.

Проблема со счётчиком на хостинге

Примерно 20 марта 2013 счётчик у них на хостинге сломался для всех скриптов. Зная крайнюю неспешность админов, нет ничего удивительного, что он не работает до сих пор. Тем не менее, пользователи прибавляются, судя по опросам. Возможно, нужно устроить собственный счётчик посещений. Давайте сделаем опрос отом, нужен ли для скрипта счётчик посещений.

Другие функции

* Добавлена кнопка <H3> для ввода тега при наборе статьи (а то совсем без них — неудобно).
* Стали прорисовываться рамки таблиц при подгрузке статей.
* Скрипт перешёл на последовательную нумерацию версий, «по билдам», с узнаваемой датой в тексте версии скрипта.
* Научился работать с пустой 500-й страницей, чтобы показать на ней перенаправления на копировщики контента, например, Google Cache и другие. Всё это — примерно за последние месяц-два.

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

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

(Просьба отвечать только пользователям HabrAjax и интересующимся.) Нужен ли счётчик посещений специально для HabrAjax?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/177427/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *