Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-11-12 17:50:43

Slavik
Гость

Quick Quote and Nick Paste&mod InstantQuote

Как бы покрасивее объединить эти моды? Ничего хорошего в голову не лезет sad Самая большая загвоздка, для меня, что один из них написан на javascript, а второй на php (хоть и внутри ajax). Посоветуйте что-нибудь.

#2 2006-11-12 18:13:17

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Я вижу это дело так.
При клике на "цитировать" появляется див по центру "подождите 2 секунды...", потом он исчезает,а в поле ответа появляется цитата. Собственно всё.
Никакой заковыки в том что у клиента яваскрипт а на сервере пых - невижу.
Кстати в данный момент я пытаюсь перекроить хинт, чтобы показывался и опере9.

#3 2006-11-12 22:35:03

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

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

Насчет хинтов: баг действительно в Оперу 9 пробрался sad Я в таких прибамбасах не силен, могу только морально поддержать smile Если сделаешь, надеюсь, поделишься секретом?

#4 2006-11-13 05:17:26

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Ну надо проверять, если selected != '' то вызывается обработчик InstantQuote

#5 2006-11-13 13:05:58

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Проверять-то надо в javascript'e, а вызывать php

#6 2006-11-13 13:49:31

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Чтобы если ничего не выделено не вставлялся пустой quote, надо в include/board.js

txt = '[quote=' + nick + ']' + txt + '[/quote]
\n'

заменить на

if (txt!='') txt = '[quote=' + nick + ']' + txt + '[/quote]
\n'

#7 2006-11-13 17:04:30

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Хинты осилил. Пришлось изменить подход - делать невидимый блок и при помощи ява-скрипта показывать его в области рядом с курсором. Не ахти как оригинально, но зато работает. Осталось отловить тех у кого не работает и узнать на каких диковинных браузерах они сидят.
Недостаток этого способа - дополнительный ява-скрипт. Я попытался сделать его минимального размера.
Зато есть и положительный момент - обрабочик для хинта назначается динамически, таким образом сокращается хтмл-код, поскольку в начальном виде для каждого хинта нет ничего кроме a href. И самое главное сам хинт прописывается один раз,а не для каждого воцклицательного знака, и это тоже экономия места, таким образом недостаток превращается в достоинство и особенно это эффективно на страницах отображаемых в виде "все посты на одной странице" или когда страница имеет максимальное количество постов.

Инструкция:
1.
header.php
ищем

if (in_array(basename($_SERVER['PHP_SELF']), array('viewtopic.php', 'post.php')))
{
?>
<script type="text/javascript" src="include/board.js"></script>
<?php
}

Меняем на:

if (in_array(basename($_SERVER['PHP_SELF']), array('viewtopic.php', 'post.php')))
{
?>
<script type="text/javascript" src="include/board.js"></script>
<script type="text/javascript" src="include/tooltip.js"></script>
<?php
$hint_box =    '<div id="tooltip" style="visibility:hidden;position: absolute; " class="infobox">'.$lang_topic['Quote Hint'].'</div>';
}

2.
ищем

// START SUBST - <body>
if (isset($focus_element))
{
    $tpl_main = str_replace('<body onload="', '<body onload="document.getElementById(\''.$focus_element[0].'\').'.$focus_element[1].'.focus();', $tpl_main);
    $tpl_main = str_replace('<body>', '<body onload="document.getElementById(\''.$focus_element[0].'\').'.$focus_element[1].'.focus()">', $tpl_main);
}

добавляем после

// QQ_NP HCS TOOLTIP MOD BEGIN
if (isset($hint_box )) {
        $tpl_main = str_replace('<body onload="', '<body onload="relinks();', $tpl_main);
        $tpl_main = str_replace('<body>', '<body onload="relinks();">', $tpl_main);
}
// QQ_NP HCS TOOLTIP MOD END

3.
ищем

// END SUBST - <body>

добавляем после

$tpl_temp =  $hint_box;

4.
Ищем ~194

// START SUBST - <pun_status>
if ($pun_user['is_guest'])
    $tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<p>'.$lang_common['Not logged in'].'</p>'."\n\t\t".'</div>';
else
{
    $tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'."\n\t\t\t\t".'<li>'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong></li>'."\n\t\t\t\t".'<li>'.$lang_common['Last visit'].': '.format_time($pun_user['last_visit']).'</li>';

Меняем на

// START SUBST - <pun_status>
if ($pun_user['is_guest'])
    $tpl_temp .= '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<p>'.$lang_common['Not logged in'].'</p>'."\n\t\t".'</div>';
else
{
    $tpl_temp .= '<div id="brdwelcome" class="inbox">'."\n\t\t\t".'<ul class="conl">'."\n\t\t\t\t".'<li>'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong></li>'."\n\t\t\t\t".'<li>'.$lang_common['Last visit'].': '.format_time($pun_user['last_visit']).'</li>';

Пояснение: в предыдущем изменении только добавлениы точки после $tpl_temp, было $tpl_temp=, стало $tpl_temp.= 

5.
Открываем viewtopic.php
ищем

(<a class="quotehint" href="#nogo">!<span class="infobox">'.$lang_topic['Quote Hint'].'</span></a>)

меняем на

<a class="quotehint" href="#nogo">( ! )</a>

повторяем процедуру еще раз. потом открываем post.php и делаем шаг №5 для post.php один раз.

6.
Открываем style/imports/base.css
ищем

a.quotehint span {
    display: none;
}

a.quotehint:hover .infobox {
    font-weight: normal; 
    display: block; 
    position: absolute; 
    top: -7em;
    left: -28em;
    width: 27em; 
    height: 5.5em;
    text-align: left; 
    font-size: 0.8em; 
    padding: 0.5em; 
}

меняем на

DIV.infobox {
    font-weight: normal; 
    display: block;
    visibility:hidden; 
    position: absolute;
    width: 27em; 
    height: 5.5em;
    text-align: left; 
    font-size: 0.8em; 
    padding: 0.5em; 
}

7. открываем по очереди все стили в  style/imports/
находим блок

/****************************************************************/
/* MOD QUICK QUOTE STYLE INDICATORS */
/****************************************************************/

добавляем туда стиль

DIV.infobox {
    border: 1px solid #6C8A3F; 
    background: #F1F1F1 url(../../img/QuickQuote/hint_bg_lithium.gif) no-repeat right bottom;
    color: #333; 
    }

для каждого стиля надо будет подправить следующим образом, все три строки border, background, color
берутся из

a.quotehint:hover .infobox {

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

a.quotehint:hover .infobox u

можно удалить.
8. создать файл include/tooltip.js следущего содержания:

function getAbsPos (p) {
    var s = { x:0, y:0 };
        while (p.offsetParent) {
            s.x += p.offsetLeft;
            s.y += p.offsetTop;
            p = p.offsetParent;
        }
        return s;
    }
function addHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
    return;
}

function hideTip() {
    document.getElementById("tooltip").style.visibility = "hidden";
}

function showTip(e) {
    obj = document.getElementById("tooltip");
    if (e.srcElement)    
        coord = getAbsPos(e.srcElement)
    else 
        coord = getAbsPos(this);
    obj.style.top = coord.y - obj.clientHeight -14 + "px";
    obj.style.left = coord.x - obj.clientWidth + 14 + "px";
    obj.style.visibility = "visible";
}

function relinks() {
      var links = document.links;
      for (var i=0; i<links.length; i++) attachLink(links[i]);
}
    
function attachLink (elt) {
        var re = new RegExp('#nogo'); 
        if (!elt.href.match(re)) return;
        addHandler(elt, 'mouseover', showTip);
        addHandler(elt, 'mouseout', hideTip);
    }

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

#8 2006-11-13 17:17:54

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs пишет:

В ИЕ7 не работает!

Прикольно, сделаешь для IE в FF перестанет работать smile
Ты вроде забыл на этом форуме добавить в стиль oxygen те фичи

#9 2006-11-13 20:24:23

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Ошибка устранена. Оказалось, что ИЕ по своему трактует источник события и обращение к нему через this неуместно. Исправлен ява-скрипт.

#10 2006-11-14 14:15:13

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Инструкцию отредактировал?
А я все-таки смог спарить эти два мода, вот что получилось:
открыть board.js и добавить после:

var txt = ''

вот это:

var postid = ''

function copyPID(pid) {
    postid = pid;
}

после ~52:

function pasteQ() {
    if (txt!='' && document.forms['post']['req_message'])
    insertAtCaret(document.forms['post']['req_message'], txt);

добавить:

    else
        if (postid != '')
        xajax_quote(postid)

в viewtopic.php ищем

$post_actions[] = '<li class="postquote"><a onmouseover="copyQ(\''.pun_htmlspecialchars($cur_post['username']).'\');" href="javascript:pasteQ();">'.$lang_topic['Quote'].'</a>';

меняем на

$post_actions[] = '<li class="postquote"><a onclick="copyPID(\''.$cur_post['id'].'\');" onmouseover="copyQ(\''.pun_htmlspecialchars($cur_post['username']).'\');" href="javascript:pasteQ();">'.$lang_topic['Quote'].'</a>';

через несколько строчек ищем:

$post_actions[] = '<li class="postreport"><a href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>'.$lang_topic['Link separator'].'</li><li class="postdelete"><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>'.$lang_topic['Link separator'].'</li><li class="postedit"><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>'.$lang_topic['Link separator'].'</li><li class="postquote"><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Post reply'].'</a>'.$lang_topic['Link separator'].'<li class="postquote"><a onmouseover="copyQ(\''.pun_htmlspecialchars($cur_post['username']).'\');" href="javascript:pasteQ();">'.$lang_topic['Quote'].'</a>';

меняем на

$post_actions[] = '<li class="postreport"><a href="misc.php?report='.$cur_post['id'].'">'.$lang_topic['Report'].'</a>'.$lang_topic['Link separator'].'</li><li class="postdelete"><a href="delete.php?id='.$cur_post['id'].'">'.$lang_topic['Delete'].'</a>'.$lang_topic['Link separator'].'</li><li class="postedit"><a href="edit.php?id='.$cur_post['id'].'">'.$lang_topic['Edit'].'</a>'.$lang_topic['Link separator'].'</li><li class="postquote"><a href="post.php?tid='.$id.'&amp;qid='.$cur_post['id'].'">'.$lang_topic['Post reply'].'</a>'.$lang_topic['Link separator'].'<li class="postquote"><a onclick="copyPID(\''.$cur_post['id'].'\');" onmouseover="copyQ(\''.pun_htmlspecialchars($cur_post['username']).'\');" href="javascript:pasteQ();">'.$lang_topic['Quote'].'</a>';

Вроде все

#11 2006-11-14 14:42:02

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:

Инструкцию отредактировал?

Конечно, тем более, что изменен только ява-скрипт.
Хотелось бы посмотреть на этот мод в действии, прежде чем прикручивать к форуму. Я так понял на твоем форуме этого нет?

#12 2006-11-14 14:57:26

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Уже есть smile

Добавлено Tue Nov 14 18:14:03 2006 :
Блин, как всегда забыл, мод ставится поверх обоих, и при установке InstantQuote пропустить шаги 10-15

#13 2006-11-14 15:45:00

Bear
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Поставил себе исправление hcs'а, работает как часы на Opera'е.

#14 2006-11-14 21:24:08

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs
ну как? Вроде нормально работает.
Твой хинт и у меня замечательно показывается, из под всеми вами нелюбимой Оперы smile

#15 2006-11-14 21:57:24

Px
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:

Твой хинт и у меня замечательно показывается, из под всеми вами нелюбимой Оперы smile

Какой ужас, срочно надо написать девелоперам, чтобы они исправили эту недоработку big_smile
PS: hcs, я там в предложении код кидал, для корректного цитирования смайликов под мозилловыми, может добавишь всё-таки?

#16 2006-11-15 05:22:43

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Px, разберёмся, добавим.

#17 2006-11-15 10:54:53

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Slavik пишет:

ну как? Вроде нормально работает.

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

#18 2006-11-15 14:31:25

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs пишет:

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

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

#19 2006-11-15 14:51:55

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

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

#20 2006-11-15 16:31:03

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs пишет:

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

У меня в ( ! ) написано smile Хотя интересно будет посмотреть как это выглядит. Сделаешь?

#21 2006-11-20 17:05:51

Kurt
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

А что все это дело добавлет к http://www.punbb.ru/viewtopic.php?id=45

#22 2006-11-20 17:48:55

hcs
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Kurt
Нажми на ссылку "цитировать", ничего не выделяй. Т.е. прикручивание InstantQuote решает вопрос цитирования без перезагрузки страницы.
Второй аспект - решение проблемы, связанной с багом оригинального хинта, точнее баг в опере9, поскольку хинт в ней не отображается.

#23 2006-11-21 17:13:07

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

Чтобы после цитирования форма быстрого ответа становилась активной необходимо:
в board.js перед:

}

function pasteQ() {

добавить:

    textObj.focus();

в quote.server.php вместо (ведь у нас есть супер бб-панель, нам это ни к чему smile):

  $objResponse->addAssign("req_message", "style.height", "300px");

пишем:

  $objResponse->addAssign("req_message", "focus()", "");

#24 2006-11-21 22:20:39

Slavik
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

hcs
А можно хинт немного прозрачным сделать? Вот здесь увидел, он хоть и глупый, но зато прозрачный

Добавлено Wed Nov 22 01:37:06 2006 :
Ссылку забыл: http://www.punres.org/files.php?pid=153 smile

#25 2006-11-22 00:18:55

maximum
Гость

Re: Quick Quote and Nick Paste&mod InstantQuote

О, вот это я понимаю "цитирование", ещё и фокус, прекрасно.
Заценил работу на данном форуме.

Подвал доски

Под управлением FluxBB. Хостинг Hostens