Цитата выделенного?

Автор Olkon, 09 февраля 2006, 01:17:18

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Olkon

Как-то не очень удобно когда нажимаешь цитировать, а оно тебе все сообщение в форму ответа загоняет. Как бы так чтоб я выделил текст, а потом нажал цитировать и оно мне только выделнное в форму вставило со всем обрамлением?  ;)

Olkon

Вот на IXBT например сделано так.

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

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

PS - подскажите как оттуда смайлы передрать, привык я к ним...  ;)

lodyr

подскажите, не появился еще этот мод?

Mavn

SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

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

iv_nik

#4
Не совсем мод, но готово. Все благодарности bANAn'y:
В display.template.php ищем
<a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['label'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.gif" alt="' . $message['member']['online']['label'] . '" border="0" />' : $message['member']['online']['label'], '</a>';
После этой строки вставляем:
        //Quote Selection
          echo '

<table><tr>
<td align="left" border="0">
<img src="', $settings['images_url'], '/quote_selection.gif" "' . $txt['quote_sel'] . '" title="' . $txt['quote_sel'] . '" onmouseover="copySelection()" style="cursor: ', $context['browser']['is_ie'] ? 'hand' : 'pointer', '" />
</td></tr></table>';


В script.js добавляем: function copySelection()
{
  var text = null;
        w = window;
        if (w.document.getSelection) {
                text = (w.document.getSelection());
  } else if (w.getSelection) {
                text = (w.getSelection() /*.getRangeAt(0)*/);
        } else if (w.document.selection) {
                var selection = w.document.selection;
                text = selection.createRange().text;
        } else {
                return false;
        }
document.postmodify.message.value += '\n[quote]' + text + '[/quote]\n';
}


Файл quote_selection.gif кладем в папку Images.

Внимание: работает при наведении на кнопку! Это сделано для совместимости с Оперой, которая очень своеобразно обрабатывает выделенный текст.
Если вы уверены, что поддержка Оперы вам не нужна, то код для обычного клика обсуждается здесь: http://www.simplemachines.org/community/index.php?topic=21285.0

lodyr

а где взять файл quote_selection.gif ?
quote_selection.gif

iv_nik

#6
Нарисовать :D Любой значок для кнопки подойдет.
Можно отсюда стащить: http://www.buttongenerator.org/

lodyr

ааа  :D понятно
спасибо, надо попробывать

Olkon

Опробовал докладываю! :)

В ИЕ работает, в мозиле не работает. Вроде слышал, что мозила запрещает скриптам копи-пасте делать и это вроде надо принудитльно включать каким-то хаком?

Дальше -  на IXBT там еще и имя пользователя вставляется, который цитируется. Раз уж пошла такая пьянка, может доделаем до конца? :)


lodyr

там же IXBT при выделении текста появляется окошко с надписью вставить цитату

Olkon

#10
Цитироватьвыделении текста появляется окошко с надписью вставить цитату

Да ладно, и кнопочкой пойдет. С сегодняшнего дня и в файрфоксе все заработало. :)

iv_nik

Цитата: Olkon от 12 мая 2006, 01:38:49Дальше -  на IXBT там еще и имя пользователя вставляется, который цитируется. Раз уж пошла такая пьянка, может доделаем до конца? :)
Да, на оф. форуме это обсуждается, но заставить работать не получается, хотя написан, вроде бы, работающий код. http://www.simplemachines.org/community/index.php?topic=21285.msg196070#msg196070

Olkon

iv_nik

я к сожалению не настолько силен в английском.
: 22 Мая 2006, 22:32:17
Ну и чего там слышно? Добились они каких-то результатов?

vladok

Заодно, чтобы не выдавало ошибок в логе при юзаньи данного хака, надо добавить в файлик Modifications.russian.php строчку $txt['quote_sel']  = 'Цитировать выделенное';
Харе кришна, май либер зольдат...

vladok

И -желательно -заменить onmouseover="copySelection()" на onClick="copySelection()"
Харе кришна, май либер зольдат...

vladok

Повыбрасывав все лишнее, перед рекомендованным <a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['label'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.gif" alt="' . $message['member']['online']['label'] . '" border="0" />' : $message['member']['online']['label'], '</a>';обошелся вставкой echo '<a href="javascript:void(0)" onClick="copySelection()">', 'Цитировать выделенное','</a><br />';, разумеется, изменив как сказанно выше, script.js
Харе кришна, май либер зольдат...

Grand

#16
Я реализовал эту функцию по-другому:

1. В файл script.js внес изменения, как описано выше.
2. В папку Themes/****/images/russian/ добавил кнопку quote_selection.gif
3. Вместо предлагаемого изменения в файле Display.template.php я делаю другие изменения:

- вместо
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="doQuote(', $message['id'], ', \'', $context['session_id'], '\'); return false;">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/quote.gif" alt="' . $txt[145] . '" border="0" />' : $txt[145]), '</a>';


пишу код
if ($context['can_reply'] && !empty($options['display_quick_reply']))
echo '
<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="doQuote(', $message['id'], ', \'', $context['session_id'], '\'); return false;">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/quote.gif" alt="' . $txt[145] . '" border="0" />' : $txt[145]), '</a>

<a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="copySelection(); return false;">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/' . $context['user']['language'] . '/quote_selection.gif" alt="' . $txt['quote_selection'] . '" border="0" />' : $txt['quote_selection']), '</a>';


4. В файл Themes/default/languages/index.russian.php добавляю переменную
$txt['quote_selection'] = 'Цитировать выделенное';



Работает только для формы быстрого ответа

Avdenago

Сдела вроде все как надо.
В итоге в Опере не работает... 
Вставляет пустые тэги цитаты...

Как поправить?

Grand

Цитата: Avdenago от 09 января 2007, 12:10:31
Сдела вроде все как надо.
В итоге в Опере не работает... 
Вставляет пустые тэги цитаты...

Как поправить?
Странно. Должно работать. У меня и в ИЕ, и в Опере работает.

Я 100 раз проверил, прежде чем сюда запостить.  :D

Avdenago

Дело наверн в том, что я совместил твое и vladoc'а решение... 

Mrak

Хм... А с указанием имени автора и времени оставления поста все-таки ничего пока не прояснилось? Все-таки в таком виде цитирование выделенного стало бы намного лучше. :(

*мысли вслух* А вот если бы повесить на стандартную кнопку цитирования, чтобы при выделении чего либо она выдавала эту цитату, а без выделения - цитировала бы весь пост, то было бы совсем хорошо ;)

domofor

Цитата: Mrak от 18 января 2007, 21:48:34
*мысли вслух* А вот если бы повесить на стандартную кнопку цитирования, чтобы при выделении чего либо она выдавала эту цитату, а без выделения - цитировала бы весь пост, то было бы совсем хорошо ;)
Пользовался на другом бесплатном движке такой кнопкой - очень удобно! Почему на SMF такого нет - непонятно.

Golden Dragon

#22
на http://dragons-nest.ru/forum/ это реализовано...

реализована копка (общая) если ничего не выделено цитирует все,
если выделено то только цитату...

в опере на ура работает :)

vladok

Не вполне ясно, что именно там реализовано.
"Это" хорошо бы и уточнить :)

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

Тем паче, когда - просто поглядеть, а не почитать решение, позволяющее эту фичу реализовать... ломает вдвойне :)
Харе кришна, май либер зольдат...

vladok

#24
Nikolai, ясненько -теперь, после правки тобою поста стало понятно, о чем таки шла речь  :).
ОК.
См. http://www.simplemachines.org/community/index.php?topic=137730.msg879148#msg879148

Модифицируется Themes\default\xml_topic.js и только он. -все что сверху понаписано не делается  :)

Итак берем xml_topic.js и ищем блок
function doQuote(messageid, cur_session_id)
{
if (quickReplyCollapsed)
window.location.href = smf_scripturl + "?action=post;quote=" + messageid + ";topic=" + smf_topic + "." + smf_start + ";sesc=" + cur_session_id;
else
{
if (window.XMLHttpRequest)
{
if (typeof window.ajax_indicator == "function")
ajax_indicator(true);
getXMLDocument(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id + ";xml", onDocReceived);
}
else
reqWin(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id, 240, 90);

if (navigator.appName == "Microsoft Internet Explorer")
window.location.hash = "quickreply";
else
window.location.hash = "#quickreply";
}
}



Заменяем его на

// Gets the selected text
function getSelect()
{
if (window.getSelection)
{
return window.getSelection();
}
else if (document.getSelection)
{
return document.getSelection();
}
else if (document.selection)
{
return document.selection.createRange().text;
}
return false; //no selection
}

function doQuote(messageid, cur_session_id)
{
if (quickReplyCollapsed)
window.location.href = smf_scripturl + "?action=post;quote=" + messageid + ";topic=" + smf_topic + "." + smf_start + ";sesc=" + cur_session_id;
else
{
if(getSelect() == false) //nothing selected
{
if (window.XMLHttpRequest)
{
if (typeof window.ajax_indicator == "function")
ajax_indicator(true);
getXMLDocument(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id + ";xml", onDocReceived);
}
else
reqWin(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id, 240, 90);

if (navigator.appName == "Microsoft Internet Explorer")
window.location.hash = "quickreply";
else
window.location.hash = "#quickreply";
}
else
{
document.postmodify.message.value += '[quote]' + getSelect() + '[/quote]';
}
}
}


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

vladok

Однако актуальным остается достаточно каверзный и злобно дневный :) вопрос,  извечно муссируемый противными и дотошными юзерами симпл машиновских форумов - каким макаром запихнуть перед куском выделенного текста в цитату еще и автора цитируемой массаги одним кликом?
Так что пляски с бубном вокруг quote selected text продолжаются :)
Эни айдиа, френдс?
Харе кришна, май либер зольдат...

Avdenago

Цитата: vladok от 04 апреля 2007, 02:26:11
И все. Одной штатной кнопкой "Цитировать" в случае выделенного текста имеем голый кусок цитаты, как и  в случ. применения вышеуказанных в данном топике ухищрений, а в случ. невыделенного -всю цитату целиком, как и прежде, но уже с автором, временем поста и проч. байдой.

Хм. Опера 9.10.   Не работает :(

vladok

Avdenago, замени в вышеприведенном строчку document.postmodify.message.value += '[quote]' + getSelect() + '[/quote]'; на document.postmodify.message.value += '\n[quote]' + getSelect() + '[/quote]\n';
Харе кришна, май либер зольдат...

Avdenago

Цитата: vladok от 04 апреля 2007, 12:36:05
Avdenago, замени в вышеприведенном строчку

Спасибо. но не помогло. В Опере цитата полностью, а вот в ИЕ теперь еще перед ней и перевод строки... 

Golden Dragon

хм самое забавное что на том сайте который я приводил сделано все что требуеться :)
(т.е. и автор вставляеться)
(жаль не могу до АдминЧЕГА додолбаться чтоб он исходник кинул :))

vladok

Avdenago, я проверил -в 9.10 с последним изменение работает. ИМХО кеш почистить...
Перевод строки и в предыдущих оригинальных решениях был -у меня все уж привыкли.

***
Nikolai, попинай того админа :)
Харе кришна, май либер зольдат...

Golden Dragon

пинаю :) он ворчит но несдаеться :)

похоже пора доставать биту...

Avdenago

Цитата: vladok от 04 апреля 2007, 14:44:08
Avdenago, я проверил -в 9.10 с последним изменение работает. ИМХО кеш почистить...
Перевод строки и в предыдущих оригинальных решениях был -у меня все уж привыкли.

Итак. Чистил, чистил аж до посинения. Не помогло. Ни в какой опере не работает. В чем дело не знаю ибо в ИЕ работает.
ни в 9.10, ни в чистой девятке, ни даже в 7.54.

Прошу задуматься людей знающих и помочь. может чего то не хватает...  ?  уж очень хорошая вещь...

Fizmatik

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

Fizmatik

Ау....глухо чтоли совсем?
Создание сайтов под-ключ, программирование.
Срок, цена, качество - выберите 2 из 3х.

Skrat

Avdenago, Тестил под разными браузерами и в разных интерпретациях (и с кнопкой и текстовой ссылкой) - все прекрасно работает и в ИЕ и в Огнелисе и в Опере ...

Fizmatik

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

Fizmatik

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


Fizmatik

Ну вот мод собрал, основываясь на посте vladok'a.
Жалко - автора нет, а так он полностью функционален, т.е Quote Selection -
Кнопкой "Цитировать", в случае если фрагмент текста выделен, имеем цитату, содержащую выделенный фрагмент, в случае если фрагмент не выделен - всю цитату целиком, но уже с указанием времени и автора.
Создание сайтов под-ключ, программирование.
Срок, цена, качество - выберите 2 из 3х.

domofor

Поставил указанный мод QuoteSelection.zip - цитата по прежнему ставится вся, а не выделенная, как будто и нет никакого мода. Причем пробовал на втором форуме - тоже бесполезно.

Avdenago

Цитата: dom-forum от 20 июня 2007, 02:18:55
Поставил указанный мод QuoteSelection.zip - цитата по прежнему ставится вся, а не выделенная, как будто и нет никакого мода. Причем пробовал на втором форуме - тоже бесполезно.

В каких браузерах? а то у меня в ИЕ все работает, а в Опере наотрез отказывается.

domofor


Fizmatik

Чесно говоря - парадоксы....я на самом деле не знаю, проверил на всех вышеуказанных браузерах, а также на всех, какие у себя нашёл, да ещё и разных версиях. Работает!
Создание сайтов под-ключ, программирование.
Срок, цена, качество - выберите 2 из 3х.

coltt

у меня тоже прекрасно работает, возможно проблема в ява машине установленой на компе

npokypop

У меня хак от vladok для выделенного текста работает в firefox 2.0.0.9
Осталось придумать чтобы ешо и автора вставляло при выделении текста
Есть свой сайт или форум!
Заработай на нем $$$

aleksandr.v

А у меня вставляет нормально имя автора.

veter

Мод не работает. Тестировал под Firefox 2.0.0.11 и Opera
9.21. В обоих случаях, вся цитата целиком выдаётся.

Update: что выяснилось - если кликать по слову "цитировать" - выдаёт цитату целиком. Если по картинке - всё работает.

Adept

 Советую глянуть тему http://www.simplemachines.ru/index.php/topic,2472.new.html#new. Там я совместил куски кода мода в данной теме и мода doQuote. Выполнена цитата выделенного текста на одной кнопке. Правда вместо имени автора при не выделенном тексте вставляет цитату всего сообщения. Может кому подойдет мод, в Опере работает.

TJe

Цитата: vladok от 04 апреля 2007, 02:26:11
Nikolai, ясненько -теперь, после правки тобою поста стало понятно, о чем таки шла речь  :).
ОК.
См. http://www.simplemachines.org/community/index.php?topic=137730.msg879148#msg879148

Модифицируется Themes\default\xml_topic.js и только он. -все что сверху понаписано не делается  :)

Итак берем xml_topic.js и ищем блок
function doQuote(messageid, cur_session_id)
{
if (quickReplyCollapsed)
window.location.href = smf_scripturl + "?action=post;quote=" + messageid + ";topic=" + smf_topic + "." + smf_start + ";sesc=" + cur_session_id;
else
{
if (window.XMLHttpRequest)
{
if (typeof window.ajax_indicator == "function")
ajax_indicator(true);
getXMLDocument(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id + ";xml", onDocReceived);
}
else
reqWin(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id, 240, 90);

if (navigator.appName == "Microsoft Internet Explorer")
window.location.hash = "quickreply";
else
window.location.hash = "#quickreply";
}
}



Заменяем его на

// Gets the selected text
function getSelect()
{
if (window.getSelection)
{
return window.getSelection();
}
else if (document.getSelection)
{
return document.getSelection();
}
else if (document.selection)
{
return document.selection.createRange().text;
}
return false; //no selection
}

function doQuote(messageid, cur_session_id)
{
if (quickReplyCollapsed)
window.location.href = smf_scripturl + "?action=post;quote=" + messageid + ";topic=" + smf_topic + "." + smf_start + ";sesc=" + cur_session_id;
else
{
if(getSelect() == false) //nothing selected
{
if (window.XMLHttpRequest)
{
if (typeof window.ajax_indicator == "function")
ajax_indicator(true);
getXMLDocument(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id + ";xml", onDocReceived);
}
else
reqWin(smf_scripturl + "?action=quotefast;quote=" + messageid + ";sesc=" + cur_session_id, 240, 90);

if (navigator.appName == "Microsoft Internet Explorer")
window.location.hash = "quickreply";
else
window.location.hash = "#quickreply";
}
else
{
document.postmodify.message.value += '';
}
}
}


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

Я дополнил этот скрипт датой, ником и ссылокой на топик так:
в Display.template.php дописал дополнительные параметры к doQuote - время, ник, топик и id сообщения:

было

doQuote(', $message['id'], ', \'', $context['session_id'], '\')


стало

doQuote(', $message['id'], ', \'', $context['session_id'], '\', \'', $message['member']['name'], '\', \'', $context['current_topic'], '\', \'', $message['id'], '\', \'', $message['timestamp'], '\')


Затем поправил xml_topic.js как было в посте у vladoc'a и добавил новые параметры:
было:

function doQuote(messageid, cur_session_id)


стало:

function doQuote(messageid, cur_session_id,member_namee,cur_topic,mess_id,mess_time)


было

document.postmodify.message.value += '[quote]' + getSelect() + '[/quote]';


стало

document.postmodify.message.value += '[quote author='+member_namee+' link=topic='+cur_topic+'.msg'+mess_id+'#msg'+mess_id+' date='+mess_time+']' + getSelect() + '[/quote]\n';


Всё. У меня на ___forum.coma.su всё работает