LINUX.ORG.RU

LORCode Tools: панель тегов и цитирование выделенного

 


21

29

Скрипт добавляет панель тегов над формами ответа/треда/профиля/etc.
Кроме тегов на панели есть специальные функции:

  • «brs» добавляет [br] к переводам строк;
  • «fix», а-ля викификация: превращает (c) в ©, (f) в £, " - " в " — " и еще много;
  • «deltags-in» снимает крайнее (внешнее) обрамления тегами в выделенном.

Добавляет ссылки сверху постов:

  • «блок-цитата» вставляет выделенный текст (или все сообщение) в тегах [quote];
  • «цитата» вставляет текст, добавляя в начало каждой строки стрелочки цитирования (>);
  • «юзер» вставляет обращение через тег [user] к автору соответствующего поста.

Для установки скрипта в Firefox вам необходимо расширение Greasemonkey, по ссылке на скрипт будет предложено установить его.
В Opera смотрите настройки для сайта >> скрипты, где задается папка JavaScript, в которую и должен быть сохранен скрипт.

Обновления:

  • 03.11.2011: v. 0.1
  • 04.11.2011: v. 0.11
  • 13.11.2011: v. 0.12
  • 14.12.2011: v. 0.13
  • 02.01.2012: v. 0.2
  • 14.04.2012: v. 0.21

Форки:

Официально поддерживается только тема black. Форки любого рода приветствуются.

При обновлениях обновляется все тот же файл, а равно ссылка не меняется (по крайней мере пока). Об обновлениях создаются соответствующие посты в треде, ChangeLog ведется на официальной странице. Рекомендую подписаться на тред.

Скрипт базируется на MultiCodePanel 2 (тоже мой проект) и распространяется на условиях лицензии Creative Commons Attribution 3.0 Unported.

Спасибо за помощь Yareg, спасибо авторам статей «Range, TextRange и Selection», «Учимся писать userscript'ы», «Textarea и управление им с помощью javascript», без вас у меня ничего бы не вышло.

moscwich> Firefox/Greasemonkey: ??? (скажите)
1. Установить Greasemonkey;
2. Перейти по ссылке со скриптом - Greasemonkey предложит установить.

moscwich> Firefox 7/Greasemonkey 0.9: ??? (проверьте)
С Firefox 7.0.1 и самосборным Greasemonkey 0.9 какой-то версии не заработало.

Ja-Ja-Hey-Ho ★★★ ()

Круто, спасибо. Только два вопроса:

  1. Не удобнее ли было бы поместить кнопки прямо над окном ввода, ниже поля для заглавия и подсказки о режимах ввода?
  2. Зачем две разные кнопки для жирного текста? (это, правда, больше к лоркоду в принципе относится.)

И один фичереквест: тег «list» с авторасставлением маркеров после символа перевода строки.

Axon ★★★★★ ()
Ответ на: комментарий от Axon

Axon

Не удобнее ли было бы поместить кнопки прямо над окном ввода, ниже поля для заглавия и подсказки о режимах ввода?

Панелька стопудов над полем ввода сообщения, но я не представляю способа впихнуть ее ниже, чем сейчас. Если только внутри font... Но это как-то не хорошо, мне кажется.

moscwich ()
Ответ на: комментарий от moscwich

Удобнее было если бы панелька яваскриптом создавалась, тогда можно было бы через insertBefore её вставить. В принипе и сейчас можно что-то вроде этого, чтобы не переписывать:

…
<a href=\'javascript:getObj ().wrtSel (undefined, 1, "«", "»");\' title="Кавычки">«»</a>\
</div>' + a.innerHTML;

a.insertBefore(a.getElementsByClassName("atag")[0], document.getElementById("msg"))

hor ()
Ответ на: комментарий от winlook38

Подпишись на тему.
Апдейт (0.11) дам сегодня, обновлю тот же файл на сервере, изменения отпишу.
В блог еще напишу и в вики, наверное. Все ссылки дам сюда, все поясню.

moscwich ()

Очередной реквест: Может удалить нафиг

Сообщение: (В режиме Tex paragraphs игнорируются переносы строк.
Пустая строка (два раза Enter) начинает новый абзац.
Знак '>' в начале абзаца выделяет абзац курсивом цитирования)
Внимание: Новый режим - LORCODE

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

Или это всё никому не мешает? Кто что думает по этому поводу?

hor ()
Ответ на: комментарий от moscwich

Я так удалил:

function removeElement(elem) {
	elem.parentNode.removeChild(elem);
}

a = document.getElementById ("commentForm") || document.getElementById ("messageForm");
if (a) {
	removeElement(a.getElementsByTagName('font')[0])
	removeElement(a.getElementsByTagName('font')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('label')[1])
	
	a.innerHTML = '<style>\
	.atag a {text-decoration: none; background-color:#2e3436; border: #2e3436 outset 1px; color: #729fcf; !important; padding:2px 3px; margin:2px;}\
	.atag a:hover {background-color:#2e3436; border-color:#729fcf;}\
	.atag{margin-top: 5px; margin-bottom: 5px; font-size: 12px; padding: 3px 1px;}\
	…
	
Сначала написал, чтоб сразу массив элементов удалять можно было, но тогда передача аргументов некрасивая из-за br, а так нагляднее получается.

hor ()

LORCode Tools v. 0.11 (Based on MultiCodePanel v. 0.21)

Основные изменения:

  • Bugfix: цитирование.
  • Bugfix: url.
  • Изменено содержание панели: убраны b/i, а кнопки strong/em их заменили (они вставляют таки теги strong/em), добавлены теги списков.
  • Панель вставляется точно надо формой сообщения.
  • Цитата вставляется теперь туда, где был курсор.

И другие предложения из этого треда воплощены.

Ссылка не меняется: http://al-moscwich.tk/data/lor.user.js

moscwich ()
Ответ на: комментарий от hor

tl;dr, хоть бы циклом что-ль... Ну сейчас попробую еще раз.
Кстати, второй font удалять не надо, там ссылка по которой я (как и другие, наверное) частенько перехожу ;)
Причем с font можно делать проще:

a.getElementsByTagName ("font")[0].innerHTML = "";

moscwich ()
Ответ на: комментарий от moscwich

moscwich

Кстати, второй font удалять не надо, там ссылка по которой я (как и другие, наверное) частенько перехожу ;)

Да, убирать не надо. Я вот себе вниз перенес (хотя это у меня уже мания развивается — охото всё поудалять). Вот, может кому-нибудь понадобится:

function removeElement(elem) {
	elem.parentNode.removeChild(elem)
}
a = document.getElementById ("commentForm") || document.getElementById ("messageForm");
if (a) {
	var refLorcode = a.getElementsByTagName('font')[1].getElementsByTagName('a')[0]
		a.insertBefore(refLorcode, a.getElementsByTagName('select')[0].nextSibling)
	removeElement(a.getElementsByTagName('font')[0])
	removeElement(a.getElementsByTagName('font')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('br')[0])
	removeElement(a.getElementsByTagName('label')[1])

	a.innerHTML = '<style>\
        …

moscwich

Причем с font можно делать проще:

a.getElementsByTagName ("font")[0].innerHTML = "";

Хотел написать, что где-то слышал о том, что так лучше не делать, но потом загуглил и вроде как это только в IE баг какой-то там. Так что, наверное, и так можно.

hor ()
Ответ на: комментарий от hor

А сейчас, кстати, в этом случае ошибка валится. ТС, ты же в q() id передаешь. Может так сделать:

window.q = function (id){
	obj = getObj ();
	var seltxt = window.getSelection ();
	msg = document.getElementById(id);
	obj.wrtSel ("[quote=" + msg.getElementsByClassName ("sign")[0].getElementsByTagName ("a")[0].innerHTML + "]" + seltxt.toString () + "[/quote]", "");
}
?

hor ()
Ответ на: комментарий от hor

hor

А сейчас, кстати, в этом случае ошибка валится.

И, по-моему, так и должно быть.

hor

ТС, ты же в q() id передаешь

Да, это лишнее, я сначала думал так делать, но так как сделал — это лучше.

moscwich ()
Ответ на: комментарий от moscwich

moscwich

И, по-моему, так и должно быть.

Текст-то в этом случае да, можно не добавлять, но ошибки то не должны сыпаться. Хотя бы проверку добавь:

while (msg.className != "msg"){
		if(!msg.parentNode) return;
		msg = msg.parentNode;
	}

hor ()
Ответ на: комментарий от derlafff

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

hor ()
Ответ на: комментарий от derlafff

derlafff

а еще лучше передвинуть кнопку цитаты к кнопке «Ответить на сообщение», мне кажется

Тогда выкрутка формы работать не будет почему-то, «Ответить на это сообщение» будет как ссылка работать.

moscwich ()
Ответ на: комментарий от moscwich

moscwich

Теперь при создании новой темы панелька в низу, под textarea, оказывается.

Точно, там у текстареи id другой. Так тогда, чтоль:

a.insertBefore(a.getElementsByClassName("atag")[0], document.getElementById("msg") || document.getElementById("form_msg"));
?

hor ()

Тест

Цитата:

moscwich

Рядом с [#], сверху постов, ссылка [q] процитирует выделенный текст в форму ответа с указанием автора (можно использовать линку любого поста).



жирный зачеркнутый и подчеркнутый текст

drull ★☆☆☆ ()