Перейти к контенту

[2.3.x]Вставка имени и быстрая цитата с выделением


Рекомендуемые сообщения

index.php?app=downloads&module=display&section=screenshot&id=444

Название: Вставка имени и быстрая цитата с выделением

Добавил: h8)u

Добавлен: 28 Мар 2007

Обновлен: 10 Май 2007

Категория: IP.Board 2.3.x

 

Модификация добавляет кнопку вставки имени автора в форму ответа, а также кнопку быстрой цитаты.

 

Алгоритм работы JS в основном взят и из прошлых версий подобных модов.

 

Нажмите здесь, чтобы скачать файл

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 220
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

h8)u, у оперы есть некоторые конфликты с таким образом вставки на JS.

Это давно известная проблема оперы, работающего JS кода (по клику) для 7-8 опер я не видел.

Видел только на обработчик onmouseover, но это криво и непонятно (не интуитивно совершенно).

 

В девятой опере действительно все замечательно работает, только что специально проверил :D

Еще раз спасибо за мод, классная нужная штука ;)

Ссылка на комментарий
Поделиться на других сайтах

Немного изменил жабаскриптик. Изменения в основном косметические:

 

- после вставки ника добавляется не первод строки, а "запятая пробел"

- после вставки цитаты добавляется не перевод строки, а два перевода и цитата отделяется от текста пустой строкой.

- после вставки ника или цитаты фокус устанавливается в окно быстрого ответа и не надо лишний раз дергать мышкой

 

 

 

Собственно новый код для вставки в конец файлика ipb_topics.js

 

function ins(name)
{
my_show_div(my_getbyid('qr_open'));
if (document.REPLIER.Post)
{
	var input=document.REPLIER.Post;
	input.value=input.value+"[b]"+name+"[/b]"+", "
	input.focus()
}
}

function copyQ(qinf,date,pid)
{
txt='';
if (document.getSelection)
{
	txt=document.getSelection();
}
else if (document.selection)
{
	txt=document.selection.createRange().text;
}
if (txt.replace(" ","") != "")
{
	txt='[quote name=\''+qinf+'\' date=\''+date+'\' post='+pid+']\n'+txt+'\n[/quote]\n\n';
	input.focus()
}
}

function pasteQ()
{
my_show_div(my_getbyid('qr_open'));
if (document.REPLIER.Post) 
{
	document.REPLIER.Post.value += txt;
	document.REPLIER.Post.focus()
}
}

 

Результаты работы можно посмотреть на http://palmz.in/board/

Изменено пользователем :)mitry
  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

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

Я так лично часто делаю :D.

Ссылка на комментарий
Поделиться на других сайтах

Желательно здесь тоже использовать members_display_name_short, а не name

$poster['ins_q'] = "<a onmouseover=\"copyQ('{$poster['members_display_name_short']}','{$row['q_date']}', '{$row['pid']}');\" href=\"java script:pasteQ();\">Цитата</a>";

Ссылка на комментарий
Поделиться на других сайтах

akura, мод не затрагивает ники никак.

Единственное, можно было как-то повредить JS при редактировании, но это трудно сделать, если следовать инструкции :D.

Ссылка на комментарий
Поделиться на других сайтах

нет, со скриптом всё ок. вот изменения в topics.php дают такой результат

 

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

 

щас буду разбираться

 

-----------------------

 

ну вот, экспериментальным путем я определил, что некликабельность ника автора постинга (только над аватаром), появляется после редактирования файла topics.php, а именно:

 

вместо

 

$poster['_members_display_name'] = "<a
href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name_short']}</a>";
}

 

вставить

 

$poster['_members_display_name'] = "<a href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name_short']}</a>";
$poster['ins_nick'] = "<a href=\"java script:ins('".str_replace(array(" ", "'"), array(" ", "'"), $poster['members_display_name'] )."')\">Вставить ник</a>";
}
$poster['ins_q'] = "<a onmouseover=\"copyQ('{$poster['name']}','{$row['q_date']}', '{$row['pid']}');\" href=\"java script:pasteQ();\">Цитата</a>";

 

никаких конфликтов с другими модами нет.

 

и вот что интересно!

 

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

Ссылка на комментарий
Поделиться на других сайтах

Странно.. =)

А можно кусок этого кода + 10 строк снизу и сверху до редактирования файла (когда все работает) и после редактирования (когда не работает?

Ссылка на комментарий
Поделиться на других сайтах

до редактирования

 

// Advanced warn
$left = round( ($row['warn_exp'] - mktime())/(60*60*24) );

if ($row['set_warn'] != 1)
{
if ($poster['signature'] and $this->ipsclass->member['view_sigs'])
{
	if ($row['use_sig'] == 1)
	{
		$this->parser->parse_html  = intval($this->ipsclass->vars['sig_allow_html']);
		$this->parser->parse_nl2br = 1;

		$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($poster['signature']) );
	}
}
}
else
{
$wtext = "<font color=red><b>Предупреждение[!]</b><br /><b>Причина:</b> {$row['warntext']}<br />От: {$row['warned_by']}<br /><b>Осталось:</b> $left дней</font>";

$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($wtext) );
}



	//-----------------------------------------
	// Fix up the membername so it links to the members profile
	//-----------------------------------------

	if ( $poster['id'] )
	{
		$poster['members_display_name'] = "<a href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name']}</a>";
	}

	//-----------------------------------------
	// Parse HTML tag on the fly
	//-----------------------------------------

	$this->parser->parse_html  = ( $this->forum['use_html'] and $this->ipsclass->cache['group_cache'][ $poster['mgroup'] ]['g_dohtml'] and $row['post_htmlstate'] ) ? 1 : 0;
	$this->parser->parse_nl2br = $row['post_htmlstate'] == 2 ? 1 : 0;

			/*------------>Hidden text starts<---->(c)Vic'er<------------*/
	$row['post'] = $this->parser->regex_hide_hidden( $row['post'], $row['author_id']);
	/*------------>Hidden text ends<------>(c)Vic'er<------------*/

	$row['post'] = $this->parser->pre_display_parse( $row['post'] );

 

после

 

// Advanced warn
$left = round( ($row['warn_exp'] - mktime())/(60*60*24) );

if ($row['set_warn'] != 1)
{
if ($poster['signature'] and $this->ipsclass->member['view_sigs'])
{
	if ($row['use_sig'] == 1)
	{
		$this->parser->parse_html  = intval($this->ipsclass->vars['sig_allow_html']);
		$this->parser->parse_nl2br = 1;

		$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($poster['signature']) );
	}
}
}
else
{
$wtext = "<font color=red><b>Предупреждение[!]</b><br /><b>Причина:</b> {$row['warntext']}<br />От: {$row['warned_by']}<br /><b>Осталось:</b> $left дней</font>";

$row['signature'] = $this->ipsclass->compiled_templates['skin_global']->signature_separator( $this->parser->pre_display_parse($wtext) );
}



	//-----------------------------------------
	// Fix up the membername so it links to the members profile
	//-----------------------------------------

	if ( $poster['id'] )
	{
		$poster['_members_display_name'] = "<a href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name_short']}</a>";
		$poster['ins_nick'] = "<a href=\"java script:ins('".str_replace(array(" ", "'"), array(" ", "'"), $poster['members_display_name'] )."')\">Вставить ник</a>";
	}
	$poster['ins_q'] = "<a onmouseover=\"copyQ('{$poster['name']}','{$row['q_date']}', '{$row['pid']}');\" href=\"java script:pasteQ();\">Цитата</a>";

	//-----------------------------------------
	// Parse HTML tag on the fly
	//-----------------------------------------

	$this->parser->parse_html  = ( $this->forum['use_html'] and $this->ipsclass->cache['group_cache'][ $poster['mgroup'] ]['g_dohtml'] and $row['post_htmlstate'] ) ? 1 : 0;
	$this->parser->parse_nl2br = $row['post_htmlstate'] == 2 ? 1 : 0;

			/*------------>Hidden text starts<---->(c)Vic'er<------------*/
	$row['post'] = $this->parser->regex_hide_hidden( $row['post'], $row['author_id']);
	/*------------>Hidden text ends<------>(c)Vic'er<------------*/

	$row['post'] = $this->parser->pre_display_parse( $row['post'] );

 

как видите, стоят моды скрытого текста и предупреждений.

 

вот еще что обнаружил. вроде строчки одиннаковые и до редактирования и после

$poster['_members_display_name'] = "<a
href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name_short']}</a>";

но если её не трогать, только убрать скобку и продолжить строчками из мода, то кликабельность не исчезает, Вставить ник и Цитата видны, но при нажатии на них форум падает

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

Было:
$poster['members_display_name'] = "<a href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name']}</a>";
Стало:
$poster['_members_display_name'] = "<a href='{$this->base_url}showuser={$poster['id']}'>{$poster['members_display_name_short']}</a>";
Разница есть, попробуй убрать "_" или вообще не трогать эту строку, а добавить лишь ниже код мода.
Ссылка на комментарий
Поделиться на других сайтах

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

Кажется, я понял в чем проблема. :D

Строку с members_display_name оставляй без изменений.

Вставка ника и цитата не работают, я думаю, из-за того, что файлы JS не были отредактированы, были отредактированы неправильно или вообще не те файлы.

Я так понимаю, это 2.1.x?

Проверь еще раз JS.

И, кстати, какую ошибку выдает браузер? Можно в интернете где-то посмотреть на эту ошибку?

Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.