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», без вас у меня ничего бы не вышло.

Ответ на: комментарий от Loki13

Ссылка не работает. Вчера думал что у меня с работы просто закрыто, а сегодня из дома то-же самое

Блин, я до сайта даже по ssh не могу достучаться.
Возможно, что вырубили свет у провайдера)))
Пока качай отсюда: http://rghost.ru/36420183

lexxus-lex ★★★ ()
Ответ на: Нужно? от Kalashnikov

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

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

Попап же закрывается когда мышь уходит с линка, тогда придётся его закрывать по таймауту, или что-то типа того.

В общем, сделал отдельным: http://pastebin.com/RnMga0SV Проверил в Опере и Хромиуме, но должно работать во всём что лучше ие7. В танге и вайте смотрится нормально, для блэка надо будет цсс поправить (border и box-shadow) по вкусу.

Работает только для комментариев на текущей странице. Превью комментов с других страниц скорее всего можно накостылять, но не уверен что нужно.

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

Он ж наверно дом перестраивает. Не слышал о таком, дай посмотреть.

Пробую запилить подгрузку комментариев с предыдущих страниц - с аяксом ерунда какая-то: responseText нормальный, а в responseXML нет ничего. Толи я чего-то не понимаю, толи лор отдаёт хтмл который не парсится XHRом.

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

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

Поковырял загрузку комментариев с предыдущих страниц - ничего хорошего не вышло: XHR не может распарсить код лора, а с ифреймом костыльно и страница дёргается. Потуги оставил закомментироваными если кому интересно.

Пофиксил пару багов (аноны например ломали всё) и передвинул попап вверх чтоб не перекрывалтся тултипом браузера. Получше рассчитывается положение (но всё равно не знаю пока что делать с большими комментами и/или ссылками близкими к правому краю)

http://pastebin.com/iaE9wkBG

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

Впрочем, я не пойму зачем нужно и то и другое.

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

Zhbert ★★★★★ ()

Долгожданная версия LORCode Tools 0.21

Изменения:

  • Bugfix: обработка переводов строк при цитировании сообщений написанных в режиме User line breaks w/quoting (далее — ULB).
  • Теперь режим при цитировании выбирается автоматически («цитата» и «блок-цитата» — это ULB и LORCode соответственно).
  • При использовании «блок-цитаты» имя пользователя опускается, если цитируется тот же пост, форма ответа на который раскрыта.
  • При использовании «цитаты», абзацы из постов, написанных в LORCode, теперь разделяются одинарным (а не двойным) переводом.
  • Функция brs теперь нормально работает и на опере.
  • Из кода скрипта убран черновой ChangeLog.

Ссылка на UserScript не меняется: http://al-moscwich.tk/data/lor.user.js
Расширение Chrome: https://chrome.google.com/webstore/detail/aepbonfjanefjcboonhmjfepodbccfbb?hl=ru

moscwich ()

Апдейт 0.21.1

LORCode объединен с TP, соответственно поправил переключалку режимов. Также режим теперь переключается на TP при использовании [code] или [quote] на панельке, и еще поправил подсказку для кнопок [url] и [user].

moscwich ()
Ответ на: Нужно? от Kalashnikov

Давно такое хотел на ЛОРе. Увидел скриншот и решил тоже запилить. Два дня на написание скрипта, потом еще около недели на изучение JS, исправление и отладку скрипта. В итоге с JS не разобрался, не пойму как это все работает, как должно работать и, соответсвенно, остаются мелкие недоработки, которые хотелось бы исправить, но желания писать на JS уже нет. Результатом в целом доволен и пользуюсь.

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

Вместо страшных закорючек «кнопочки» «В избранное» и «Отслеживать» отображаются там же, где и ранее (справа от «Ответить»), в скобочках - количество подписавшихся.

Например, для этой темы:

moscwich * (03.11.2011 17:18:59)
Последнее исправление: moscwich 12.05.2012 19:44:10 (всего исправлений: 14)

[Ответить на это сообщение] [В избранное (1)][Отслеживать (26)]

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

fix

Оказалось, что id, по которому сообщение удаляется из избранного, генерируется сервером и выдрать его сложновато. Поэтому сделал такой фикс:

var TopicID = (document.getElementsByName("msgid")[0].value);
function memories_add(event, id, w) {
	event.preventDefault();
	var target = document.getElementById(id);
	var evt = document.createEvent("MouseEvents");
	evt.initEvent("click", true, true);
	target.dispatchEvent(evt);
	memories_form_setup(w,0);
	//setTimeout(initForms, 2000);
}
var memcntr = Number(document.getElementById("memories_count").innerHTML);
var favcntr = Number(document.getElementById("favs_count").innerHTML);
function memories_remove(event, id, w){
	event.preventDefault();
	var target = document.getElementById(id);
	var evt = document.createEvent("MouseEvents");
	evt.initEvent("click", true, true);
	target.dispatchEvent(evt);
	memories_form_setup(w,0);
	//setTimeout(initForms, 2000);
}

function memories_form_setup(watch, clear) {
	var el, Id, ParentId, text;
	var memcntr = Number(document.getElementById("memories_count").innerHTML);
	var favcntr = Number(document.getElementById("favs_count").innerHTML);
	if (watch){
		Id = 'memories0_button';
		ParentId = 'memories_button';
	}else{
		Id = 'favs0_button';
		ParentId = 'favs_button';
	}
	el = document.getElementById(Id);
	if(typeof(clear) != "undefined"){
		text = "Подождите, пожалуйста";
	}else{
		parCls = document.getElementById(ParentId).className;
		if (parCls=="") {
			text = watch?"Отслеживать ("+memcntr+")":"В избранное ("+favcntr+")";
			el.onclick = function(evt){ memories_add(evt, ParentId,watch);};
		} else {
			text = watch?"Не отслеживать ("+memcntr+")":"Удалить из избранного ("+favcntr+")";
			el.onclick = function(evt){ memories_remove(evt, ParentId,watch);};
		}
	}
	el.title = text;
	el.innerHTML = text;
}

var TM = document.getElementById("topicMenu");
var favs = document.createElement("li");
var mems = document.createElement("li");
favs.innerHTML = "<a id='favs0_button' href='#'></a>";
mems.innerHTML = "<a id='memories0_button' href='#'></a>";
TM.appendChild(favs);
TM.appendChild(mems);

var Itimeout = setInterval(initForms, 300);
function initForms(){
	clearInterval(Itimeout);
	memories_form_setup(false);
	memories_form_setup(true);
	Itimeout = setInterval(initForms, 3000);
}

var NonShown = document.getElementsByClassName("fav-buttons");
for(var i=0,j=NonShown.length; i<j; i++) NonShown[i].style.display = "none";
Eddy_Em ☆☆☆☆☆ ()
Ответ на: fix от Eddy_Em

Японский городовой! Прямо соревнование какое-то получается: опять этот скрипт не работает. Опять код отображения уродства изменили. Придется на досуге подправить.

Eddy_Em ☆☆☆☆☆ ()

Что-то у меня перестал работать greasemonkey, хотя в скрипте я не ковырялся: ни панельки нет, ни замены дурацких кнопок «избранного».

Firefox 12.0. Неделю назад все работало, вернулся из командировки - фигвам...

Eddy_Em ☆☆☆☆☆ ()