вопрос
Задача сделать так чтоб при копировании текста (стихотворений например) добавлялась ещё и ссылка откуда копируют.
Я нашёл в интернете кучу примеров но все их можно разделить на 2 вида:
1. не работает на dle
Реализация:
Настраиваемые параметры:
source_link — текст, который будет добавляться к копируемому фрагменту. В данном примере задаётся статически, но при желании генерацию ссылки можно усложнить (например, при копировании с текста с домашней страницы можно возвращать ссылку на статью, из которой взята данная цитата). Для этого в строке magic_div.append(range.cloneContents(), source_link); вместо source_link нужно использовать свою функцию, возвращающую HTML для вставки в копируемый фрагмент.
'#content div.post' — выражение, задающее один или более контейнер с текстом, при копировании которого нужно добавлять ссылку на оригинал. Идея в том, что добавлять ссылку на статью при копировании, скажем, части текста одного из комментариев к статье было бы нелогично. С помощью данного выражения можно задать требуемые защищаемые объекты.
Возможные улучшения: проверка длины копируемого текста. Например, если пользователь копирует меньше 20 слов, не добавлять ссылку. Получить выделенный текст можно через range.cloneContents().textContent.
тут нашёл
и 2. Не копирует форматирование текста. т.е. стихи перестают быть стихами.
Создать текстовой файл copyrtext.js и закидываем его в папку /engine/classes/js/ на своем ресурсе.
Остается прописать его в начале страницы main.tpl между тегами
Нужно рабочее решение. Заранее благодарен за помощь.
Я нашёл в интернете кучу примеров но все их можно разделить на 2 вида:
1. не работает на dle
Реализация:
var source_link = '<p>Подробнее: <a href="' + location.href + '">' + location.href + '</a></p>';
jQuery(
function($)
{
if (window.getSelection) $('#content div.post').bind(
'copy',
function()
{
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var magic_div = $('<div>').css({ overflow : 'hidden', width: '1px', height : '1px', position : 'absolute', top: '-10000px', left : '-10000px' });
magic_div.append(range.cloneContents(), source_link);
$('body').append(magic_div);
var cloned_range = range.cloneRange();
selection.removeAllRanges();
var new_range = document.createRange();
new_range.selectNode(magic_div.get(0));
selection.addRange(new_range);
window.setTimeout(
function()
{
selection.removeAllRanges();
selection.addRange(cloned_range);
magic_div.remove();
}, 0
);
}
);
}
);
Настраиваемые параметры:
source_link — текст, который будет добавляться к копируемому фрагменту. В данном примере задаётся статически, но при желании генерацию ссылки можно усложнить (например, при копировании с текста с домашней страницы можно возвращать ссылку на статью, из которой взята данная цитата). Для этого в строке magic_div.append(range.cloneContents(), source_link); вместо source_link нужно использовать свою функцию, возвращающую HTML для вставки в копируемый фрагмент.
'#content div.post' — выражение, задающее один или более контейнер с текстом, при копировании которого нужно добавлять ссылку на оригинал. Идея в том, что добавлять ссылку на статью при копировании, скажем, части текста одного из комментариев к статье было бы нелогично. С помощью данного выражения можно задать требуемые защищаемые объекты.
Возможные улучшения: проверка длины копируемого текста. Например, если пользователь копирует меньше 20 слов, не добавлять ссылку. Получить выделенный текст можно через range.cloneContents().textContent.
тут нашёл
и 2. Не копирует форматирование текста. т.е. стихи перестают быть стихами.
Создать текстовой файл copyrtext.js и закидываем его в папку /engine/classes/js/ на своем ресурсе.
function addLink() { var body_element = document.getElementsByTagName('body')[0]; var selection; selection = window.getSelection(); var pagelink = "<br /><br /> Источник: <a href='"+document.location.href+"'>"+document.location.href+"</a><br />© dle9.com"; var copytext = selection + pagelink; var newdiv = document.createElement('div'); newdiv.style.position='absolute'; newdiv.style.left='-99999px'; body_element.appendChild(newdiv); newdiv.innerHTML = copytext; selection.selectAllChildren(newdiv); window.setTimeout(function() { body_element.removeChild(newdiv); },0);}document.oncopy = addLink;
Остается прописать его в начале страницы main.tpl между тегами
<head><script type="text/javascript" src="/engine/classes/js/copyrtext.js"></script></head>
Нужно рабочее решение. Заранее благодарен за помощь.
Перед вставить
function addLink() {
var body_element = document.getElementsByTagName('body')[0];
var selection = window.getSelection();
// Вы можете изменить текст в этой строчке
var pagelink = "[b]Источник:[/b] "+document.location.href+"";
var copytext = selection + pagelink;
var newdiv = document.createElement('div');
newdiv.style.position = 'absolute';
newdiv.style.left = '-99999px';
body_element.appendChild(newdiv);
newdiv.innerHTML = copytext;
selection.selectAllChildren(newdiv);
window.setTimeout( function() {
body_element.removeChild(newdiv);
}, 0);
}
document.oncopy = addLink;