Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как отобразить выделенный текст над формой, которая появляется при нажатии CTRL+Enter?

Как отобразить выделенный текст над формой, которая появляется при нажатии CTRL+Enter?


     30.10.2017    Все вопросы » Общие вопросы    1249

вопрос
Как отобразить выделенный текст над формой, которая появляется при нажатии CTRL+Enter, и добавить пару стоящих перед/за выделенным текстом слов? В таком виде и отправлять.

Вот как должно быть:
Как отобразить выделенный текст над формой, которая появляется при нажатии CTRL+Enter?

P.S: DLE 12.0.

Ответил: vitnet


Вот весь код

найти
jQuery(function(a){a(document).keydown(...)});

заменить на (dle 9.x)

заменить на (dle 12)

16 комментариев

vitnet
PHP-developer

vitnet - 30 октября 2017 18:47 -

1.0 Открыть файл engine/classes/js/dle_js.js

Найти
<div id='orfom' style='display:none'>"+c+"</div>

Вырезать и добавить выше textarea (не забудьте убрать атрибут style)

пример
<div id='orfom'>«..."+c+"...»</div><br /><textarea name='dle-promt-text' id='dle-promt-text' ....

Phenomen
Юзер

Phenomen - 30 октября 2017 19:15 -

vitnet,
Вот только как еще добавить пару стоящих перед/за выделенным текстом слов? В таком виде и отправлять.

vitnet
PHP-developer

vitnet - 30 октября 2017 19:52 -

Гляньте на том сайте на котором делали скрин.

Phenomen
Юзер

Phenomen - 30 октября 2017 20:20 -

vitnet,
Не получается у них позаимствовать. Сайт: novayagazeta . ru

LazyDev
PHP-developer

LazyDev - 31 октября 2017 11:18 -

***Комментарий удален***

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Phenomen
Юзер

Phenomen - 31 октября 2017 20:26 -

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

GIF: https://yapx.ru/v/aMoX

vitnet
PHP-developer

vitnet - 31 октября 2017 21:26 -

Внимание! У вас нет прав для просмотра скрытого текста.

Phenomen
Юзер

Phenomen - 31 октября 2017 23:10 -

vitnet,
Это к вашей первой инструкции прилагается? Или куда это вставлять?

P.S. Вот еще нашел где такая форма: https://meduza.io, http://www.garant.ru

vitnet
PHP-developer

vitnet - 31 октября 2017 23:16 -

***Комментарий удален***

Phenomen
Юзер

Phenomen - 1 ноября 2017 00:12 -

***Комментарий удален***

LazyDev
PHP-developer

LazyDev - 1 ноября 2017 06:31 -

Phenomen, замените это
a(document).keydown(function(b){if(13==b.which&&b.ctrlKey){b.preventDefault();if(window.getSelection)var c=window.getSelection();else document.getSelection?c=document.getSelection():document.selection&&(c=document.selection.createRange().text);if(""==c)return!1;if(255<c.toString().length)return DLEalert(dle_big_text,dle_info),!1;b={};b[dle_act_lang[3]]=function(){a(this).dialog("close")};b[dle_p_send]=function(){if(1>a("#dle-promt-text").val().length)a("#dle-promt-text").addClass("ui-state-error");
else{var b=a("#dle-promt-text").val(),c=a("#orfom").text();a(this).dialog("close");a("#dlepopup").remove();a.post(dle_root+"engine/ajax/complaint.php",{seltext:c,text:b,user_hash:dle_login_hash,action:"orfo",url:window.location.href},function(a){"ok"==a?DLEalert(dle_p_send_ok,dle_info):DLEalert(a,dle_info)})}};a("#dlepopup").remove();a("body").append("<div id='dlepopup' class='dle-promt' title='"+dle_orfo_title+"' style='display:none'><textarea name='dle-promt-text' id='dle-promt-text' class='ui-widget-content ui-corner-all' style='width:97%;height:80px;'></textarea><div id='orfom' style='display:none'>"+
c+"</div></div>");a("#dlepopup").dialog({autoOpen:!0,width:600,resizable:!1,dialogClass:"modalfixed dle-popup-complaint",buttons:b});a(".modalfixed.ui-dialog").css({position:"fixed"});a("#dlepopup").dialog("option","position",["0","0"])}});
на это
function getSelections(e){var t=window.getSelection().getRangeAt(0),n=t.startOffset,r=t.endOffset,o=t.startContainer,a=t.endContainer;return{beforeText:n>20?"«..."+o.textContent.substr(n-20,20):o.textContent.substr(0,n),afterText:r>a.textContent.length-20?a.textContent.substr(r,20):a.textContent.substr(r,20)+"...»"}}a(document).keydown(function(b){var c,t;if(13==b.which&&b.ctrlKey){if(window.getSelection)c=window.getSelection();else document.getSelection?c=document.getSelection():document.selection&&(c=document.selection.createRange().text);t=getSelections(b);""!=c&&(255<c.toString().length?a.browser.mozilla?alert(dle_big_text):DLEalert(dle_big_text,dle_info):(b={},b[dle_act_lang[3]]=function(){a(this).dialog("close")},b[dle_p_send]=function(){if(1>a("#dle-promt-text").val().length)a("#dle-promt-text").addClass("ui-state-error");else{var b=a("#dle-promt-text").val(),c=a("#orfom").text();a(this).dialog("close");a("#dlepopup").remove();a.post(dle_root+"engine/ajax/complaint.php",{seltext:c,text:b,action:"orfo",url:window.location.href},function(b){"ok"==b?a.browser.mozilla?alert(dle_p_send_ok):DLEalert(dle_p_send_ok,dle_info):a.browser.mozilla?alert(b):DLEalert(b,dle_info)})}},a("#dlepopup").remove(),a("body").append("<div id='dlepopup' title='"+dle_orfo_title+"' style='display:none'><br /><div id='orfom'><p class='select'><span>"+t.beforeText+"</span><strong style='color: #bf381d;'>"+c+"</strong>"+t.afterText+"</span></p></div><br /><textarea name='dle-promt-text' id='dle-promt-text' class='ui-widget-content ui-corner-all' style='width:98%; height:80px; padding: .4em;'></textarea></div>"),a("#dlepopup").dialog({autoOpen:!0,width:550,dialogClass:"modalfixed",buttons:b}),a(".modalfixed.ui-dialog").css({position:"fixed"}),a("#dlepopup").dialog("option","position",["0","0"])))}});

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Phenomen
Юзер

Phenomen - 1 ноября 2017 10:18 -

PunPun,
Заработало, но не показывает если выделить большой кусок: "Выделен слишком большой участок текста".

vitnet,
Вижу вы сделали для DLE 12, там с выделением большого куска все нормально. Но как и в предыдущем коде, что поправил PunPun, не захватывает кусок предыдущего и последующего абзаца.

GIF: https://yapx.ru/v/aPyK

vitnet
PHP-developer

vitnet - 1 ноября 2017 10:46 -

Абзацы оно не будет цеплять.

LazyDev
PHP-developer

LazyDev - 1 ноября 2017 10:59 -

Phenomen, на том сайте так же, можете сами увидеть

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Phenomen
Юзер

Phenomen - 1 ноября 2017 11:23 -

PunPun,
Да, там не захватывает.

На meduza и garant захватывает.

В общем, спасибо и на этом.

LazyDev
PHP-developer

LazyDev - 2 ноября 2017 19:12 -

Открыть engine/classes/js/dle_js.js найти
a("body").append("<div id='dlepopup'
Перед ним вставить
var all_text_content = $(".U_CLASS_WITH_CONTENT").text();var re = new RegExp("([а-яъёa-z0-9\\._\\-,!\\?\\$\\*\\+\\)\\(\\[\\]\\^\\\\\|]+)?\\s?([а-яъёa-z0-9\\._\\-,!\\?\\$\\*\\+\\)\\(\\[\\]\\^\\\\\|]+)?\\s?"+c+"\\s?([а-яъёa-z0-9\\._\\-,!\\?\\$\\*\\+\\)\\(\\[\\]\\^\\\\\|]+)?\\s?([а-яъёa-z0-9\\._\\-,!\\?\\$\\*\\+\\)\\(\\[\\]\\^\\\\\|]+)?", 'gi');var array_find_text = all_text_content.match(re);var find_text = array_find_text[0];find_text = find_text.replace(c, "<b style=\"color:red;\">" + c + "</b>");
Далее найти строку и удалить ее
<div id='orfom' style='display:none'>"+c+"</div>
Далее перед
<textarea
вставить
<div id='orfom'>«..."+find_text+"...»</div>
Заменить U_CLASS_WITH_CONTENT на название класса в котором находится текст новости, те в который обернут тег
{full-story}


Для благодарностей:
Webmoney WMR R118095764291
Webmoney WMZ Z228640084773
Webmoney WMU U218134219019

p.s вот форматированный код с регуляркой, кто захочет сделает ее нормальной.
p.s.s регулярку писал сам на скорую руку.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх