Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [$('.operations')[0]].map(e=>{
- let btn = (n,f)=>{
- let b = document.createElement('button');
- b.onclick = f;
- b.innerText = n;
- e.parentNode.append(b);
- }
- btn('Подготовить', prepare);
- btn('Добавить отсутствующие', main_send);
- btn('Обновить', main_update);
- let l = document.createElement('label');
- let cb = document.createElement('input');cb.type='checkbox';cb.checked = true;
- notPublishedCheckbox = cb;
- l.append(' ',cb,' Черновик');
- text = document.createElement('div');
- text.contentEditable = true;
- text.style.cssText = 'background:white;border:1px dotted gray; width:49.5%; float:left;';
- text2 = document.createElement('div');
- text2.style.cssText = 'background:hsl(0,0%,95%);border:1px dotted gray; width:49.5%; float:right;';
- e.parentNode.append(l,document.createElement('br'),text,text2);
- })
- info = (...a)=>(console.log(...a),toastr.info(...a));
- alert = (...a)=>(console.warn(...a),toastr.warning(...a));
- prepared = false;
- function prepare(){
- t = text.innerHTML;
- if(!t.match(/<h1/)) return alert('В тексте нет заголовков!');
- t2 = t.replace(/<(?!\/?(h1|br|p|b|s|i|center|right)[\s|>])[^>]*>/g,'');// remove bad tags
- t3 = t2.replace(/<(\/?)(h1|br|b|s|i|center|right)(?=[\s|>])[^>]*>/g,'<$1$2>');// remove attributes
- parts = t3.split(/<h1[^>]*>/)
- .map(e=>e.split('</h1>'))
- .slice(1)
- .map(e=>({
- name:e[0],
- text:tabber(e[1]),
- }))
- text2.innerHTML = [].concat(...parts.map(p=>['<br><br><h1>',p.name,'</h1><br>',p.text.replace(/\n/g,'<br>')])).join('\n');
- prepared = true;
- }
- async function main_send(){
- if(text.innerHTML.length < 100) return alert('Вставьте в белое поле рядом с кнопкой "Добавить часть" скопированный из TinyMCE текст');
- if(!prepared) return alert('Подготовьте текст!');
- info('текст есть','глав: '+parts.length);
- console.log('prepared!');
- await sendAll();
- alert('Вроде всё...\nПоменяйте количество ждущих на 1~10');
- }
- async function main_update(){
- if(text.innerHTML.length < 100) return alert('Вставьте в белое поле рядом с кнопкой "Добавить часть" скопированный из TinyMCE текст');
- if(!prepared) return alert('Подготовьте текст!');
- info('текст есть','глав: '+parts.length);
- console.log('prepared!');
- await updateAll();
- alert('Вроде всё...');
- }
- async function updateAll(){
- for (var i8743 = 0; i8743 < parts.length; i8743++){
- await updateOne(parts[i8743]);
- }
- }
- async function updateOne(p) {
- aa = $('.part>.title>a').toArray().map(a=>({t:a.innerText, ids:a.href.match(/\d+/g)}));
- a0 = aa.find(a=>a.t==p.name);
- if(!a0) return alert('части '+p.name+' нет');
- fanfic_id = a0.ids[0]
- part_id = a0.ids[1]
- info('id: ' +fanfic_id+' / '+part_id);
- ctt = p.text.replace(/<br>/, '\n');
- info('длина текста: ' +ctt.length);
- f = {
- part_id,
- fanfic_id,
- title:p.name,
- content:ctt,
- comment_direction:"0",
- comment:"",
- change_description:"обновлено скриптом",
- status:"1",
- not_published:notPublishedCheckbox.checked?"1":"0",
- auto_pub:"0",
- auto_pub_day:"24",
- auto_pub_month:"12",
- auto_pub_year:"2017",
- auto_pub_hour:"7",
- auto_pub_minute:"0"
- }
- d = new FormData();
- for (k in f) {d.append(k, f[k]);}
- r = await fetch('https://ficbook.net/home/fanfics/partauthoredit_save',{
- method:'POST',
- credentials:'include',
- body:d,
- })
- rt = await r.text();
- info(rt);
- toastr.info(p.name,'Часть отправлена')
- }
- async function sendAll(){
- for (var i8743 = 0; i8743 < parts.length; i8743++){
- await sendOne(parts[i8743]);
- }
- }
- async function sendOne(p) {
- aa = $('.part>.title>a').toArray().map(a=>({t:a.innerText, ids:a.href.match(/\d+/g)}));
- a0 = aa.find(a=>a.t==p.name);
- if(a0) return alert('часть '+p.name+' уже есть');
- hr = text.parentElement.querySelector('a').href;
- fanfic_id = hr.match(/\d+/)[0];
- r = await fetch(hr+'/addpart',{credentials:'include'});
- rt = await r.text();
- info('данные1: ' +rt.length);
- insert_after = rt.match(/<option value="(\d+)" selected/)[1];
- info('insert_after: ' +insert_after);
- ctt = p.text.replace(/<br>/, '\n');
- info('длина текста: ' +ctt.length);
- f = {
- fanfic_id,
- title: p.name,
- content: ctt,
- insert_after,
- status: 1,
- not_published: notPublishedCheckbox.checked,
- auto_pub:0,
- }
- d = new FormData();
- for (k in f) {
- d.append(k, f[k]);
- }
- r = await fetch('https://ficbook.net/home/fanfics/partadd_save',{
- method:'POST',
- credentials:'include',
- body:d,
- })
- rt = await r.text();
- info(rt);
- toastr.info(p.name,'Часть отправлена')
- }
- function tabber(s){
- let hTexts = {};
- function hText(s) {
- if (hTexts[s]) return hTexts[s];
- let a = document.createElement('a');
- a.innerHTML = s;
- return hTexts[s] = a.innerText;
- }
- const nbsp = '\xa0'; //hText(' ');
- const emsp = '\u2003'; //hText(' ');
- const ndash = '\u2013'; //hText('–');
- const replacers = [
- [/\n/g, ' '],
- [/^\s+|\s+$/gm, '\n\n\n'],
- [/&[^;]{2,7};/g, hText],
- [/<br>|<.div><div[^>]*>|<.div>|<div[^>]*>/g, '\n'],
- [/<p[^>]*(center|right)[^>]*>([^]*?)<\/p>/g, '\n<$1>\n$2\n</$1>\n'],
- [/<\/p>\s*<p[^>]*>/g,'\n'],
- [/<\/p>\s*|\s*<p[^>]*>/g,'\n'],
- [/<script>[^]*?<.script>/, ''],
- [/\s*\n{4,}/g, '\n\n\n'],
- [/(\s*)(<(b|i|s)>)/g,'$2$1'],
- [/(^|[^\.])(…|\.{2,4}(?!\.))(?!\n\s)? /gm, '$1… '],
- [/(–|—|―)/gm, ' - '],
- [/--?(?![\-\wа-яёА-ЯЁ])|([^\-\wа-яёА-ЯЁ])-(?![\->\w])/g, `$1 - `],
- [/^((?=.)\s)*/gm, emsp + emsp],
- [/((?!\n)\s)+-\s+/gm, ' ' + ndash + nbsp],
- [/^\s*–/gm, emsp + nbsp + ndash],
- [/\n<center>\n([^]*?)\n<\/center>\n/g, s => s.replace(/^\s*/gm, '')],
- [/\n<right>\n([^]*?)\n<\/right>\n/g, s => s.replace(/^\s*/gm, '')],
- [/\s*<center>\s*([*][\s*]*[*])\s*<\/center>\n*|\n+\s*([*][\s*]*[*])\s*\n+/g, '\n\n\n<center>\n$1$2\n</center>\n\n'],
- [/\n(<.?(center|right)>)\n/g, '$1'],
- [/(<(b|i|s)>)(\s*)/g,'$3$1'],
- [/<(?!\/?(b|i|s|center|right))/g, '<'],
- [/^\s*\n|\n\s*$/g, '']
- ];
- replacers.forEach(rpl => {
- s0 = s;
- s = s.replace(rpl[0], rpl[1]);
- s = s;
- });
- return s;
- }
Advertisement
Add Comment
Please, Sign In to add comment