TheBarmaley
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TeXpert Цитата:..как завещал товарищ Прутков - зри, мол.. Цитата: первый код в итоге пока выигрывает конкурс | ..тем более, что наш коллега зачем-то "снял с пробега" все свои варианты.. Цитата: только как выкинуть оттуда сразу лишние фрагменты | ну ок, текст так текст, но тогда уж в "причёсанном" виде, чтоб закрыть вопрос с нечитабельностью..) итак, почти всё под текущую хотелку: без заголовка + сохранение в голый текст + удаление неполных* форумных ссылок + выдёргивание ссылки с её текстом: Код: javascript:function s(){var c=document.createElement("a"),h=new Blob([(new DOMParser).parseFromString(document.querySelectorAll(".post")[this.id].innerHTML.split(/<table[^>]+"sing">/)[0].replace(/( \x3B)|(<a\shref="([^:"]+")?)|(["\s]*target="[^>)]+>)/g,' ').replace(/<br>[ ]*/g,'\n'),"text/html").documentElement.textContent.replace(/[ ]+/g,' ').replace(/\s\[\?\]/g,'').replace(/([ ]*\n)|(\n[ ]*)/g,'\n')],{type:"text/plain"});c.setAttribute("href",URL.createObjectURL(h));c.setAttribute("download",new Date().toTimeString().substr(0,8));c.click();c.remove()}for(var i=0,a=document.querySelectorAll(".post");i<a.length;i++){a[i].parentNode.firstChild.innerHTML="<a id="+i+" class='tpc' href=javascript:>Сохранить текст</a> | "+a[i].parentNode.firstChild.innerHTML;document.getElementById(i).onclick=s} | * полные не стал отламывать, чтобы не усложнять регулярку, да и мало ли на что ссылка попадётся..) чесгря, попробовал пошаманить с полным удалением текста ссылок, но простую регулярку, срабатывающую везде, я не подобрал.. в частности, если внутри тега <a> вложены шрифтовые изменения (жирный/мелкий и пр.) - режется криво.. ну а переусложнять букмарклет - не-не, не айс.. вопчем, лбом побился и плюнул..) ладно.. пробуй, вроде должно всё норм быть.. ап: ..как показало следствие - в регулярку вкралась очепятка, лишняя правая скобка..) на рабочесть кода не влияла, но на всякий случай пофиксил, вот "правильный" код: Код: javascript:function s(){var c=document.createElement("a"),h=new Blob([(new DOMParser).parseFromString(document.querySelectorAll(".post")[this.id].innerHTML.split(/<table[^>]+"sing">/)[0].replace(/( )|(<a\shref="([^:"]+")?)|(["\s]*target="[^>]+>)/g,' ').replace(/<br>[ ]*/g,'\n'),"text/html").documentElement.textContent.replace(/[ ]+/g,' ').replace(/\s\[\?\]/g,'').replace(/([ ]*\n)|(\n[ ]*)/g,'\n')],{type:"text/plain"});c.setAttribute("href",URL.createObjectURL(h));c.setAttribute("download",new Date().toTimeString().substr(0,8));c.click();c.remove()}for(var i=0,a=document.querySelectorAll(".post");i<a.length;i++){a[i].parentNode.firstChild.innerHTML="<a id="+i+" class='tpc' href=javascript:>Сохранить текст</a> | "+a[i].parentNode.firstChild.innerHTML;document.getElementById(i).onclick=s} | ап2: ..по результатам экспериментов - более продвинутая сохранялка в текст, с дополнительными "фичами": - основное - сменил метод "выгрызания" ссылок, теперь содержимое парсим дважды..) - дополнительная фича - декодер ссылок для улучшения их читабельности (без всяких %D0%D1..); - фичи по умолчанию (просто щелчок) - кроме форматированного текста сохраняются также: - все ссылки (включая неполные форумные) + их [текстовое содержимое] - в скобках; - заголовок/урл темы добавляется в начале текста; - имя выходного файла = отформтированный заголовок топика + штемпель текущего времени (мс); - опционально отключаемо: - альт+щелчок = неполные форумные ссылки не обрабатываются, только их текст (как есть); - ктрл+щелчок = ссылки вставляются без текста, только урл; - шифт+щелчок = заголовок топика и его урл в текст не добавляются, имя файла - только штемпель времени.. короче, вот код, пробуем: Код: javascript:function s(){var d=document.createElement("a"),a=event.altKey,c=event.ctrlKey,s=event.shiftKey,h=(new DOMParser).parseFromString(document.querySelectorAll(".post")[this.id].innerHTML.split(/<table[^>]+"sing">/)[0].replace(/[ ]*<br>[ ]*/g,'\n')+(a?'':"<base href='http://forum.ru-board.com/'>"),"text/html"),l=h.getElementsByTagName('a'),i=0;for(i;i<l.length;i++)l[i].href.match('://')&&(l[i].innerHTML=decodeURI(l[i].href)+(c?'':' ['+l[i].innerHTML+']'));h=new Blob([(s?'':document.title+'\n'+location.href+'\n*****\n\n')+(new DOMParser).parseFromString(h.documentElement.outerHTML,"text/html").documentElement.textContent.replace(/[ ]+/g,' ').replace(/\s\[\?\]/g,'')],{type:"text/plain"});d.setAttribute("href",URL.createObjectURL(h));d.setAttribute("download",(s?'':document.title.split(' :: ')[0].replace(/ /g,'_')+'_')+Date.now());d.click();d.remove()}for(var i=0,a=document.querySelectorAll(".post");i<a.length;i++){a[i].parentNode.firstChild.innerHTML="<a id="+i+" class='tpc' href=javascript: title='Alt+клик = без неполных ссылок\nCtrl+клик = без текста ссылок\nShift+клик = без заголовка/имени'>Сохранить текст</a> | "+a[i].parentNode.firstChild.innerHTML;document.getElementById(i).onclick=s} | предупредение: размер букмарклета 1213 байт > 1024! если будут проблемы при запуске (хотя и не должно) - срезаем "титле=..." у кнопки и лишние фильтры/фичи.. например, без фичи шифта и украшательств имени файла и заголовка/урл темы в тексте - как-то так: Код: javascript:function s(){var d=document.createElement("a"),a=event.altKey,c=event.ctrlKey,h=(new DOMParser).parseFromString(document.querySelectorAll(".post")[this.id].innerHTML.split(/<table[^>]+"sing">/)[0].replace(/[ ]*<br>[ ]*/g,'\n')+(a?'':"<base href='http://forum.ru-board.com/'>"),"text/html"),l=h.getElementsByTagName('a'),i=0;for(i;i<l.length;i++)l[i].href.match('://')&&(l[i].innerHTML=decodeURI(l[i].href)+(c?'':' ['+l[i].innerHTML+']'));h=new Blob([(new DOMParser).parseFromString(h.documentElement.outerHTML,"text/html").documentElement.textContent.replace(/[ ]+/g,' ').replace(/\s\[\?\]/g,'')],{type:"text/plain"});d.setAttribute("href",URL.createObjectURL(h));d.setAttribute("download",Date.now());d.click();d.remove()}for(var i=0,a=document.querySelectorAll(".post");i<a.length;i++){a[i].parentNode.firstChild.innerHTML="<a id="+i+" class='tpc' href=javascript: title='Варианты вывода: Alt/Ctrl + щелчок..'>Сохранить текст</a> | "+a[i].parentNode.firstChild.innerHTML;document.getElementById(i).onclick=s} | в этом случае размер = 1021 байт, можно и дальше резать.. вопчем, правим шаблон под себя и пользуемся..)
|