Страница 3 из 5

[BETA] CopyPaste

Добавлено: 16.12.2015 19:08
saturn-z
Название: CopyPaste
Автор: saturn-z
Описание: При копировании текста с сайта автоматически подставляется "Источник"

Запрос расширения: http://www.phpbbguru.net/community/topic45014.html

DEMO: ЗДЕСЬ
Версия Расширения: 1.0.1
Требования: phpBB 3.1.*@dev
GitHub репозиторий: https://github.com/saturn-z/CopyPaste
Загрузить расширение: https://github.com/saturn-z/CopyPaste/a ... master.zip

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 12:14
Anvar
Использовал версию от KEMnEP для одного форума.

Изменил подключение файла локализации

Код: Выделить всё

	static public function getSubscribedEvents()
	{
		return array('core.viewtopic_modify_page_title' => 'load_language_on_setup');
	}

	public function load_language_on_setup($event)
	{
		$this->user->add_lang_ext('saturnZ/CopyPaste', 'copypaste_lng');
	}
и в шаблоне ограничил исполнение для всех страниц кроме <!-- IF S_VIEWTOPIC -->

В принципе в версии saturn-z можно сделать аналогично, но источник добавляется к любому копируемому объекту, что может быть не очень то удобно когда код копируешь в исполняемый файл.

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 12:52
KEMnEP
Тогда уж лучше и заменить, если брать за основу мою версию

Код: Выделить всё

	$(document).ready(function() {
		$(".post").bind({
			copy : addLink
		})
	});
Мало ли откуда начнут копировать :lol:

Отправлено спустя 47 минут 12 секунд:
Посмотрел коды на этой странице и подумал, неплохо бы фигурные скобки добавить в исключение. уж они то точно в основном только в коде и встречаются и не по одной {}

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 13:44
southklad
а добавить ссылку именно на нужно сообщение возможно? А не на всю тему?

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 13:46
KEMnEP
можно, только если не менять метод.. придётся каждый раз сравнивать выделенные текст с содержимым всей страницы чтоб найти откуда был взят, а это лишняя нагрузка на клиента, имхо, особенно если учесть страницы с БОЛЬШИМ содержанием.
Упд: собственно из за этого и отказался от поиска целиком блока кода перейдя на ключевые символы вместе с ограничением срабатывания от 6 слов разделённых пробелом.

Отправлено спустя 49 минут 19 секунд:
Хотя лично мне Сатурновский код в нынешнем виде больше нравится, когда будет гораздо больше свободного времени чем сейчас, на его основе и можно будет создать без костыльный вариант, который точно отделит кодбокс от не код бокса, но это точно не в ближайший месяц. если тут кто нибудь раньше его не создаст.

Отправлено спустя 1 час 51 минуту 55 секунд:
Ааа блин! Почему осеняет всегда в дали от тестового компа.
Всего-от за места поиска символов нужно через ечь прогнать все кодебоксы (если есть) на выделеный текс ( или часть его на точное совпадение) и если есть хоть 1 присвоить какойнить переменной значение скажем 1, ну и дальше самое простое просто отменить выполнение вставки если стало хоть раз 1.

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 20:29
saturn-z
KEMnEP писал(а): копируются поля div.content, дабы исключить случайные срабатывания пользовательских нажатий
Не самое лучшее решение. т.к.
KEMnEP писал(а): Мало ли откуда начнут копировать
Пример с сайта Anvar
Пример 
Andy2 » 05.01.2016, 09:24 #15
Eco Logic, Благодарю за помощь, все ништяк. У тебя тв сразу появляется окно (http), у меня пустая страница, чтоб показалось окно плеера надо вместо https написать в адресной строке http и тогда плеер сразу показывается, но происходит разлогин. Можно ли только для этой страницы сделать http ? Наверное в коде надо копать. Может кто знает.
Вставлял скрипт
Лучше использовать div.postbody , или div.inner хотя с последним замечены проблемы с расширением портала, иногда добавляется двойная ссылка на источник.

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 20:39
KEMnEP
saturn-z, я об этом уже писал выше, что лучше .post :roll:

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 22:05
southklad
Заметил ошибку из новой версии из первого сообщения. Если копировать из поля ввода, то текст не копируется, а копируется только текст "источник и ссылка" а то что нужно скопировать не копируется вообще.

Re: [BETA] CopyPaste

Добавлено: 19.01.2016 23:00
saturn-z
igorbond, из какого опять поля что не копируется? Я у себя тестил весь день, ошибок никаких не заметил. И что ты имеешь ввиду под "полем ввода"?

Re: [BETA] CopyPaste

Добавлено: 20.01.2016 8:09
southklad
Если копировать текст не из готового сообщения, а при вводе и предпросмотре, скопировать его из "поля ввода текста сообщения"

Re: [BETA] CopyPaste

Добавлено: 20.01.2016 10:05
saturn-z
igorbond, проверил, всё копируется, ссылка на источник не добавляется.

Re: [BETA] CopyPaste

Добавлено: 20.01.2016 12:52
KEMnEP
igorbond, а дайте я по вангую! У вас ещё при переходе между страниц одной темы должно вставляться в выделенное копирайт только первой посещённой страницы (если включен аджакс) ну и уж точно у Вас стоит [RC] Быстрый ответ: перезагрузка (QuickReply Reloaded) Версия saturn-z, из коробки с ним не очень дружит.

Re: [BETA] CopyPaste

Добавлено: 20.01.2016 16:28
KEMnEP
Скрипт на основе Re: [BETA] CopyPaste (Пост KEMnEP #478908) теперь корректно ищет и находит любой текст в бокс коде, если выделение меньше чем 5 слов включительно и/или совпадает частично/полностью с любым кодебоксом на странице. но не больше его по размеру слов (проще говоря выделен текст внутри кодебокса или кодебокс целиком кнопкой выделить всё), вставка копирайта не происходит. Если выделен не кодебокс, или кодебокс и ещё текст, копирайт вставляется, при учёте что выделение больше 6 слов, включительно.
Из минусов, если срабатывает копирайт форматирование текста пропадает и вырезаются строки содержашие символы<*> и<!--*-->. Примеры <!-- IF S_VIEWTOPIC --> и <script type="text/javascript">
В свободное время устраню и эту проблему (проблему ли? кто пойдёт читать источник, если скопированное на чужом сайте хорошо отформатировано и удобно с коробки для прочтения) ну и в планах встроить показ с каких именно постов взят код. Если никто не опередит, или я не решу что это уже что то лишние.
Внимание! скрипт работает ТОЛЬКО с кириллицей (русский алфавит с ёЁ) и латиницей.
Установка: содержимое файла overall_footer_after.html полностью заменить на

Код: Выделить всё

<!-- KEMnEP edition-->
<!-- IF S_VIEWTOPIC -->
<script type="text/javascript">
function add_copepast(e, elements) {
	function addLink() {
		var selection = window.getSelection(),
			pagelink = '<p>{L_COPYRIGHT_NAME}: <a href="' + location.href + '">' + location.href + '</a></p>',
			newdiv = document.createElement('div'),
			res1,
			a = selection + '',
			c = 0;
			
		$('.codebox').each(function(){
			var e = a.replace(/[^\w\ёЁdа-яА-Я]/g, '');
			var b = $(this).text();
			var d = b.replace(/[^\w\dёЁа-яА-Я]/g, '');
			eval("res1 = /" + e + "/g.exec('" + d + "')");
			if ( res1 != null) {
				c = 1;
			}
		});
		var text = selection.toString().split(" ");
		if(text.length > 5)
		{
			if ( c != 1)
			{
				var rezka = a.replace(/(\<.*?\>|<!--.*?-->)/g, '');
				var copytext = rezka + pagelink;
				newdiv.style.position = 'absolute';
				newdiv.style.left = '-99999px';

				document.body.appendChild(newdiv);
				newdiv.innerHTML = copytext;
				selection.selectAllChildren(newdiv);

				window.setTimeout(function () {
				document.body.removeChild(newdiv);
				}, 90000);
			}	
		}
	}
	$(document).ready(function() {
		$(".post").bind({
			copy : addLink
		})
	});
}
$(document).ready(function (e) {
   add_copepast(e, $(document));
});
$('#qr_posts').on('qr_loaded', add_copepast);
</script>
<!-- ENDIF -->
<!-- END KEMnEP edition-->
Отправлено спустя 42 минуты 36 секунд:
чуть подправил код скрипта

Re: [BETA] CopyPaste

Добавлено: 21.01.2016 2:40
KEMnEP
Версия скрипта из поста Re: [BETA] CopyPaste (Пост KEMnEP #479018), устраняющая ошибку в console (хоть и правильную с точки зрения функционала отработку скрипта в целом) при специфичном кодебоксе вида
пример 

Код: Выделить всё

                  }
               }
            }
         }
      }
   }
}

Код: Выделить всё

<!-- KEMnEP edition-->
<!-- IF S_VIEWTOPIC -->
<script type="text/javascript">
function add_copepast(e, elements) {
	function addLink() {
		var selection = window.getSelection(),
			pagelink = '<p>{L_COPYRIGHT_NAME}: <a href="' + location.href + '">' + location.href + '</a></p>',
			newdiv = document.createElement('div'),
			res1,
			a = selection + '',
			c = 0;
         
		$('.codebox').each(function(){
			var e = a.replace(/[^\w\dёЁа-яА-Я]/g, ''),
				b = $(this).text(),
				d = b.replace(/[^\w\dёЁа-яА-Я]/g, ''),
				res2 = e[0];
				if ( res2 == undefined) {
					c = 1;
				} else {
					eval("res1 = /" + e + "/g.exec('" + d + "')");
					if ( res1 != null) {
						c = 1;
					}
				}
		});
		var text = selection.toString().split(" ");
		if(text.length > 5)
		{
			if ( c != 1)
			{
				var rezka = a.replace(/(\<.*?\>|<!--.*?-->)/g, ''),
					copytext = rezka + pagelink;
				newdiv.style.position = 'absolute';
				newdiv.style.left = '-99999px';

				document.body.appendChild(newdiv);
				newdiv.innerHTML = copytext;
				selection.selectAllChildren(newdiv);

				window.setTimeout(function () {
					document.body.removeChild(newdiv);
				}, 90000);
			}   
		}
	}
	$(document).ready(function() {
		$(".post").bind({
			copy : addLink
		})
	});
}
$(document).ready(function (e) {
   add_copepast(e, $(document));
});
$('#qr_posts').on('qr_loaded', add_copepast);
</script>
<!-- ENDIF -->
<!-- END KEMnEP edition-->

Re: [BETA] CopyPaste

Добавлено: 21.01.2016 9:03
southklad
saturn-z писал(а): igorbond, проверил, всё копируется, ссылка на источник не добавляется.
При написании ответа, и копировании текста он не копируется вообще. Точнее не так на странице ответа текст не копируется именно из поля ввода текста, а любой другой копируется.

Re: [BETA] CopyPaste

Добавлено: 22.01.2016 22:30
KEMnEP
По сравнению с Re: [BETA] CopyPaste (Пост KEMnEP #479018) добавилось поиск и вставка ссылки номера поста, если такой пост единственный в своём роде, и взято содержимое из него. Если же содержимое не уникально на странице, или скопировано больше одного поста, вставляется ссылка на страницу (все предыдущие правила на счёт 5 слов и кодебокса в силе).

Код: Выделить всё

<!-- KEMnEP edition-->
<!-- IF S_VIEWTOPIC -->
<script type="text/javascript">
function add_copepast(e, elements) {
	function addLink() {
		var selection = window.getSelection(),
			pagelink = '<p>{L_COPYRIGHT_NAME}: <a href="' + location.href + '">' + location.href + '</a></p>',
			newdiv = document.createElement('div'),
			res1,
			a = selection + '',
			c = 0,
			testauthor = 0;
         
		$('.postbody').each(function(){
			if ( c == 0 || testauthor == 0 || testauthor == 1) {
				var self = $(this),
					e = a.replace(/[^\w\dёЁа-яА-Я]/g, ''),
					d = self.find('.codebox').text().replace(/[^\w\dёЁа-яА-Я]/g, ''),
					res2 = e[0];
					if ( res2 == undefined) {
						c = 1;
					} else {
						eval("res1 = /" + e + "/g.exec('" + d + "')");
						if ( res1 != null) {
							c = 1;
						}
					}
					if ( c == 0 ) {
						var textpostbody = self.text().replace(/[^\w\dёЁа-яА-Я]/g, '');
						eval("var res4 = /" + e + "/g.exec('" + textpostbody + "')");
						if ( res4 != null) {
							var authortext = self.find('p.author').html().replace(/(\<a\ href\=\"\.\/|["][>].*)/g, ''),
								domen = location.href.replace(/viewtopic\.php.*/g, '');
								if ( testauthor == 0) {
									pagelink = '<p>{L_COPYRIGHT_NAME}: <a href="' + domen + authortext + '">' + domen + authortext + '</a></p>';
								}
								testauthor = testauthor + 1;
								if ( testauthor == 2) {
									pagelink = '<p>{L_COPYRIGHT_NAME}: <a href="' + location.href + '">' + location.href + '</a></p>';
								}
						}
					}
			}
		});
		var text = selection.toString().split(" ");
		if(text.length > 5)
		{
			if ( c != 1)
			{
				var rezka = a.replace(/(\<.*?\>|<!--.*?-->)/g, ''),
					copytext = rezka + pagelink;
				newdiv.style.position = 'absolute';
				newdiv.style.left = '-99999px';

				document.body.appendChild(newdiv);
				newdiv.innerHTML = copytext;
				selection.selectAllChildren(newdiv);

				window.setTimeout(function () {
					document.body.removeChild(newdiv);
				}, 90000);
			}   
		}
	}
	$(document).ready(function() {
		$(".post").bind({
			copy : addLink
		})
	});
}
$(document).ready(function (e) {
   add_copepast(e, $(document));
});
$('#qr_posts').on('qr_loaded', add_copepast);
</script>
<!-- ENDIF -->
<!-- END KEMnEP edition-->
Отправлено спустя 26 минут 9 секунд:
микро фикс логики

Отправлено спустя 50 минут 42 секунды:
хотя.. пока не устанавливайте эту версию скрипта, я придумал гораздо меньше ресурсо затратный способ. и понял потенциальную ошибку логики, ( можно же только первый совпадающий пост выводить примой ссылкой, если что сами в низ пролистают) но слишком уже спать хочу...