LINUX.ORG.RU

Полезный пустяк


0

1

Короче, панелька для LORCODE, чтоб удобнее было форматировать.

function intag (thetag, argument) {
  var textarea = document.getElementById("msg");
  /*
  if (textarea.selectionStart === undefined) {    // Internet Explorer - не тестировал
	  var textRange = document.selection.createRange ();
	  var rangeParent = textRange.parentElement ();
	  if (rangeParent === textarea) {textRange.text = "[" + thetag + argument + "]" + textRange.text + "[/" + thetag + "]";}
  }
  */
  if (!argument){argument="";} else {argument=" "+argument;}
  textarea.value = textarea.value.substring (0, textarea.selectionStart) + 
	  "[" + thetag + argument + "]" +
	   textarea.value.substring  (textarea.selectionStart, textarea.selectionEnd) +
	  "[/" + thetag + "]" +
	  textarea.value.substring (textarea.selectionEnd);
}


function fix () {
	var textarea = document.getElementById("msg");
	if (textarea.selectionStart != textarea.selectionEnd) {a = textarea.value.substring  (textarea.selectionStart, textarea.selectionEnd);}
	else {a = textarea.value;}
	/*
	a = a.replace(/</g, "<");
	a = a.replace(/>/g, ">");
	//Смысл, правда именно в этих строчках был, но нам это не надо
	*/
	a = a.replace(/\(тм\)|\(ТМ\)|\(tm\)|\(TM\)/g, "™");
	a = a.replace(/\([cC]\)/g, "©");
	a = a.replace(/\([rR]\)/g, "®");
	a = a.replace(/\([fF]\)/g, "£");
	a = a.replace(/\([eE]\)/g, "€");
	a = a.replace(/ - /g, " — ");
	textarea.value = textarea.value.substring (0, textarea.selectionStart) + a + textarea.value.substring (textarea.selectionEnd);
}


function fixq1 (){
	var textarea = document.getElementById("msg");
	if (textarea.selectionStart != textarea.selectionEnd) {a = textarea.value.substring  (textarea.selectionStart, textarea.selectionEnd);}
	else {a = textarea.value;}
	a = a.replace(/\"([\s\S]*)\"/gim, '«$1»');
	textarea.value = textarea.value.substring (0, textarea.selectionStart) + a + textarea.value.substring (textarea.selectionEnd);
}

function fixq2 (){
	var textarea = document.getElementById("msg");
	if (textarea.selectionStart != textarea.selectionEnd) {a = textarea.value.substring  (textarea.selectionStart, textarea.selectionEnd);}
	else {a = textarea.value;}
	a = a.replace(/\"([\s\S]*)\"/gim, '“$1”');
	textarea.value = textarea.value.substring (0, textarea.selectionStart) + a + textarea.value.substring (textarea.selectionEnd);
}

function br (){
	var textarea = document.getElementById("msg");
	textarea.value = textarea.value.substring (0, textarea.selectionStart) + "[br]" + textarea.value.substring (textarea.selectionEnd);
}

Над msg (для LORCODE):

<div class="atag">
  <a href='javascript:intag ("b");' title="Жирный"><b>[b]</b></a>
  <a href='javascript:intag ("i");' title="Наклонный"><i>[i]</i></a>
  <a href='javascript:intag ("strong");' title="Жирный"><strong>[strong]</strong></a>
  <a href='javascript:intag ("em");' title="Наклонный"><em>[em]</em></a>
  <a href='javascript:intag ("s");' title="Зачеркнутый"><s>[s]</s></a>
  <a href='javascript:intag ("u");' title="Подчеркнутый"><u>[u]</u></a>
  <a href='javascript:br();' title="Перевод строки">[br]</a>
  <a href='javascript:intag ("url");' title="Линка">[url]</a>
  <a href='javascript:intag ("quote");' title="Цитата">[quote]</a>
  <a href='javascript:intag ("code");' title="Код">

</a>
  <a href='javascript:fix ();' alt="Превратить знаки и обозначения в соответствующие спец. символы "> fix </a>
  <a href='javascript:fixq1 ();'>«»</a>
  <a href='javascript:fixq2 ();'>“”</a>
</div>

Стиль (для Black):

.atag a {text-decoration: none; background-color:#333;}

© Я (WTFPL).

За быдлокод особо не ругайте, я с js не особо...

Еще

В конце intag можно добавить:

if (textarea.selectionStart==textarea.selectionEnd){
   textarea.setSelectionRange(
      textarea.selectionStart+thetag.length+argument.length+2,
      textarea.selectionStart+thetag.length+argument.length+2
   );
}
else {
   textarea.selectionStart+=
      thetag.length+argument.length+2;
   textarea.selectionEnd+=
      thetag.length+argument.length+2;
}
moscwich
() автор топика

И еще

else {argument=" «+argument;}

--можно убрать и тогда, например для url можно будет как argument добавить »=" т.е. чтобы вставлялось:

[url=][/url]

Тоже самое с тегом code.

А чтобы курсор вставал после знака «=» (это делают строчки из #2), можно сделать исключения (вставить перед ними), например:

if (thetag=="url" and argument=="="){
   textarea.selectionStart=textarea.selectionStart-1;
   textarea.selectionEnd=textarea.selectionStart;
}
moscwich
() автор топика
Ответ на: комментарий от madcore

Хм...

Вы про это? Ну я не знаю, как там... у меня chrome. и йэто я к себе не прикручивал (это типа предложение по доработке движка).

Но тут придется помучатся... ведь сама форма со всеми причиндалами появляется по скрипту или еще чему-то там... значит просто добавить js код вставляющий html - нельзя. этот js должен выполнятся после раскрытия формы. а для этого надо писать еще один js, который добавит этот js куда надо...

moscwich
() автор топика
Ответ на: Хм... от moscwich

И самое главное, что это все офигенные костыли

Так что лучше дождаться реакции разработчиков движка.

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

Ну вот как можно прикрутить:

function second_passed() {
a = document.getElementsByClassName("reply");
b = '<style>.atag a {text-decoration: none; background-color:#333;} .atag{margin-top: 10px; margin-bottom: 10px;}</style>\
	<div class="atag">\
	  <a href=\'javascript:intag ("b");\' title="Жирный"><b>[b]</b></a>\
	  <a href=\'javascript:intag ("i");\' title="Наклонный"><i>[i]</i></a>\
	  <a href=\'javascript:intag ("strong");\' title="Жирный"><strong>[strong]</strong></a>\
	  <a href=\'javascript:intag ("em");\' title="Наклонный"><em>[em]</em></a>\
	  <a href=\'javascript:intag ("s");\' title="Зачеркнутый"><s>[s]</s></a>\
	  <a href=\'javascript:intag ("u");\' title="Подчеркнутый"><u>[u]</u></a>\
	  <a href=\'javascript:br();\' title="Перевод строки">[br]</a>\
	  <a href=\'javascript:intag ("url");\' title="Линка">[url]</a>\
	  <a href=\'javascript:intag ("quote");\' title="Цитата">[quote]</a>\
	  <a href=\'javascript:intag ("code");\' title="Код">
</a>\
	  <a href=\'javascript:fix ();\' alt="Превратить знаки и обозначения в соответствующие спец. символы "> fix </a>\
	  <a href=\'javascript:fixq1 ();\'>«»</a>\
      <a href=\'javascript:fixq2 ();\'>“”</a>\
	</div>'
if (a.length == 0){a = document.getElementsByClassName("messages"); /*a[a.length-1].innerHTML+=b;*/}
for(var i=0;i<a.length;i++){a[i].innerHTML+=b;}
}
setTimeout(second_passed, 200);

Только она будет у каждого поста, даже если вы не отвечаете на него.

Это добавит html и css, добавьте сюда смысловой js код из #1, если надо - добавления из #2, #3.

Из setTimeout(second_passed, 200); - число 200 можно поменять, зависит от реакции вашего браузера и компьютера. Если у вас не работает - увеличивайте.

з.ы.
В опере проверял - работает. Там добавить просто - стандартными средствами.

moscwich
() автор топика

FF что-то с кнопкой fix - чудит, но впрочем смысл не в ней, она и не нужна особо, хотя там просто условие поставить... но потом эти займусь.

Возврат выделения / перемещение курсора (#2) работал только в Chrome, вот поправка:
В начале функции:

a=textarea.selectionStart;
b=textarea.selectionEnd;
И вместо #2 (если кто не понял, я так говорю о 2-м посте):
if (a==b){
	textarea.setSelectionRange(
		a+thetag.length+argument.length+2,
		b+thetag.length+argument.length+2
	);
}
else {
	textarea.selectionStart=a+
		thetag.length+argument.length+2;
	textarea.selectionEnd=b+
		thetag.length+argument.length+2;
}

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

Ну что, реализовывать будите?

Да или нет? Если нет, почему? Конечно, этот код я имел раньше и писал не сюда специально, но все ревизии в комментах - это я специально сюда.

Я еще правок несколько сделал, ошибки поисправлял, быдлокод поубирал, писать сюда не буду - и так много получается, берите код по ссылке, что я давал или http://al-moscwich.narod.ru/data/lorcodepanel.html.

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

UTF8.
Чтобы преобразовать в CP1251 надо удалить строку 51.

На ЛОРе используется jQuery.

Я ж сказал, я с js плохо дружу.

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

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

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

Короче, я нифига не разобрался. JSP вообще не знаю.

moscwich
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.