1console . log ( 'DokuScripts ver. 2023.03.12 00:56 GMT+9' );
2
3//ВЕЗДЕ
4
5var i, j,
6	lang = JSINFO [ 'lang' ],
7	lhref = window . location . href,
8	lpath = window . location . pathname;
9if ( lang . length > 3 ) lang = '';
10
11/* реклама Яндекса */
12if ( window . yaContextCb != undefined ) {
13	window . yaContextCb . push ( ( ) => {
14		Ya . Context . AdvManager . render ( {
15			renderTo: 'yandex_rtb_R-A-492328-1',
16			blockId: 'R-A-492328-1'
17		} )
18	} );
19};
20
21/* истребитель двоеточий в адресах */
22if ( /:/ . test ( lpath ) ) window . location . pathname = lpath . replace ( /:/g, '/' );
23
24/* замена энтити */
25function fontChanger ( str, openSB, marker, value, closeSB, offset, s ) {
26	var fontValue = parseFloat ( value . replace ( ",", "." ) );
27	if ( fontValue > 0 ) {
28		switch ( marker ) {
29			case '!':
30				return '<span style = "font-size: ' + fontValue + 'em; display: inline-block;">';
31				break;
32			case '=':
33				return '<span style = "line-height: ' + fontValue * 100 + '%; display: inline-block;">';
34				break;
35			case '_':
36				if ( fontValue > 1500 ) fontValue = 1500;
37				return '<span style = "width: ' + fontValue + 'px; display: inline-block;"></span>';
38				break;
39			case 'y':
40			case 'x':
41				return '<span style = "transform: scale' + marker + '(' + fontValue + '); display: inline-block;">';
42				break;
43			default:
44				return '<abbr title="Incorrect marker" >' + openSB + marker + value + closeSB + '</abbr>';
45				break
46		}
47	} else {
48		return '<abbr title = "Incorrect digit" >' + openSB + marker + value + closeSB + '</abbr>'
49	}
50};
51var notedit = document . querySelectorAll ( '.page > div:not(.editBox):not(.search_fulltextresult):not(.table):not(#batchedit), .export > div' );
52if ( notedit ) {
53	for ( i = 0; i < notedit . length; i++ ) {
54		notedit [ i ] . innerHTML = notedit [ i ] . innerHTML . replace ( /(\[)(.)(\d+[\.,]?\d*)(\])/g, fontChanger ) . replace ( /\[\/\]/g, '</span>' );
55	}
56};
57
58// ПОЧТИ ВЕЗДЕ
59
60/* [[ссылка]]ми */
61document . querySelectorAll ( '.page a.wikilink1, .page a.wikilink2, .page a.urlextern, .page a.interwiki' ) . forEach ( e => {
62	if ( e . parentElement != null ) e . parentElement . innerHTML = e . parentElement . innerHTML . replace ( /(<\/a>)([a-zа-ё\']+)/gi, "$2$1" );
63} );
64
65/* озеленение do-ссылок*/
66document . querySelectorAll ( '.page a.wikilink2' ) . forEach ( e => {
67	if ( /do=[^e]/ . test ( e . href ) ) e . className = e . className . replace ( 'wikilink2', 'wikilink1' );
68} );
69
70/* \\ br, -. &shy; */
71document . querySelectorAll ( '.page a.wikilink1, .page a.wikilink2, .page a.urlextern, .page a.interwiki' ) . forEach ( e => {
72	if ( e != null ) {
73		e . innerHTML = e . innerHTML . replace ( /\\\\/gi, "<br>" ) . replace ( /\-\./gi, "&shy;" );
74		e . href = e . href . replace ( /\\\\/gi, "" ) . replace ( /\-\./gi, "" );
75		e . title = e . title . replace ( /\\\\/gi, "" ) . replace ( /\-\./gi, "" );
76	}
77} );
78
79/* исправление времени на текущий пояс */
80
81var timePlace = document . querySelectorAll ( ".pageinfo, .date, .diffnav option, th a, .approval_date, .approval_previous, .apr_upd, .apr_prev, .sum, #draft__status" );
82
83function timeFix ( ) {
84	for ( i = 0; i < timePlace . length; i++ ) {
85		if ( timePlace [ i ] . innerHTML != undefined ) {
86			var timeDigits = timePlace [ i ] . innerHTML . match ( /(\d\d\d\d)\/(\d\d)\/(\d\d) (\d\d):(\d\d)/ );
87			if ( timeDigits != null ) {
88				var newTime = new Date ( Date . parse ( timeDigits [ 1 ] + '-' + timeDigits [ 2 ] + '-' + timeDigits [ 3 ] + 'T' + timeDigits [ 4 ] + ':' + timeDigits [ 5 ] + 'Z' ) ),
89					nParts = {
90						year:		newTime . getFullYear ( ),
91						month:	( newTime . getMonth ( ) + 1 ),
92						day:			newTime . getDate ( ),
93						hour:		newTime . getHours ( ),
94						minute:	newTime . getMinutes ( ),
95					},
96					newParts = { };
97				for ( j in nParts ) {
98					newParts [ j ] = ( parseInt ( nParts [ j ], 10 ) < 10 ) ? ( '0' + nParts [ j ] ) : ( nParts [ j ] );
99				};
100				newTime = newParts . year + '/' + newParts . month + '/' + newParts . day + '&nbsp;' + newParts . hour + ':' + newParts . minute;
101				timePlace [ i ] . innerHTML = timePlace [ i ] . innerHTML . replace ( /\d\d\d\d\/\d\d\/\d\d \d\d:\d\d/, newTime );
102				timePlace [ i ] . style . textShadow = '#000 0 .5px .5px';
103			}
104		}
105	}
106};
107
108if ( timePlace . length > 0 ) {
109	setTimeout ( timeFix, 300 );
110};
111
112// ЦЕНТРАЛИЗАЦИЯ КАРТИНОК
113
114/* эскизы перемещённых картинок - удалить привязку к высоте и ширине */
115document . querySelectorAll ( ".dokuwiki img:not([src*='fetch'])" ) . forEach (
116	e => e . src = e . src . replace ( /[wh]=\d+\&?/g, '' ) . replace ( /tok=......\&?/g, '' ) . replace ( /[\?\&]$/g, '' )
117);
118
119// ГЛАВНАЯ, МЕНЮ, ИНДЕКСЫ И Т.П.
120
121/* меню и админка - пакование в колонки */
122function col_test ( i ) {
123	return /interrobang/ . test ( col_ul [ i ] . querySelector ( 'a' ) . title )
124};
125if ( /(\/menu[\?|#]?|do=admin)/ . test ( lhref ) ) {
126	var col_ul = document . querySelectorAll ( '.page ul, .admin_plugins ul' ),
127		col_li,
128		col_sz = [ ];
129	for ( i = 0; i < col_ul . length; i++ ) {
130		if ( !col_test ( i ) ) { // исключая Интерробанг Студию
131			col_li = col_ul [ i ] . querySelectorAll ( 'div.li' );
132			for ( j = 0; j < col_li . length; j++ ) {
133				col_li [ j ] . style . display = "inline"; // приведение дивов к строчному виду
134				col_sz . push ( col_li [ j ] . offsetWidth ) // заполнение массива их размерами
135			}
136		}
137	};
138	var col_sm = Math . max . apply ( null, col_sz ); // определение наибольшего дива
139	for ( i = 0; i < col_ul . length; i++ ) {
140		if ( !col_test ( i ) && col_ul [ i ] . style ) col_ul [ i ] . style . cssText += " columns: " + col_sm + "px auto; column-gap: 20px;" // адаптивные колонки
141	}
142};
143
144// В КОМИКСОВЫХ РАЗДЕЛАХ
145
146if ( /\/(sci-fi|tlk|wolves|mlp|furry|gamer|other|interrobang)\// . test ( lhref ) ) {
147	/* плашка статуса перевода */
148	if (
149		!( /(\/[adh]\d+|[\?&](do=pre|rev=))/ . test ( lhref ) )
150		&&
151		document . querySelectorAll ( '.ct-container, .fn-container' ) . length == 0
152		&&
153		document . querySelector ( 'img.media' )
154	) {
155		let cot_vid = ' <a href="https://www.youtube.com/embed/w_Pnlt-9o7s?hl=' + lang + '" target=_blank>CoTAN</a> ',
156			clangs = {
157				'be': 'У гэтай паласе няма налепак!<br>Вы можаце выправіць гэта, <a href="?do=edit">адрэдагаваўшы старонку</a> з дапамогай' + cot_vid,
158				'bg': 'В тази лента няма етикети!<br>Можете да поправите това, като <a href="?do=edit">редактирате страницата</a> с' + cot_vid,
159				'br': 'Não há adesivos nesta faixa!<br>Você pode corrigir isso <a href="?do=edit">editando esta página</a> com o' + cot_vid,
160				'cs': 'Na tomto proužku nejsou žádné nálepky!<br>Můžete to napravit <a href="?do=edit">úpravou této stránky</a> pomocí' + cot_vid,
161				'da': 'Der er ingen klistermærker i denne stribe!<br>Du kan rette dette ved at <a href="?do=edit">redigere siden</a> med' + cot_vid,
162				'de': 'In diesem Streifen befinden sich keine Aufkleber!<br>Sie können dies beheben, indem Sie die Seite mit' + cot_vid + '<a href="?do=edit">bearbeiten</a>',
163				'el': 'Δεν υπάρχουν αυτοκόλλητα στην ταινία!<br>Μπορείτε να διορθώσετε αυτό με την <a href="?do=edit">επεξεργασία της σελίδας</a> με το' + cot_vid,
164				'en': 'There are no stickers on this strip!<br>You can fix this by <a href="?do=edit">editing this page</a> with' + cot_vid,
165				'eo': 'Ne estas glumarkoj en ĉi tiu strio!<br>Vi povas solvi ĉi tion <a href="?do=edit">redaktante la paĝon</a> kun' + cot_vid,
166				'es': '¡No hay pegatinas en esta tira!<br>Puedes arreglar esto <a href="?do=edit">editando esta página</a> con' + cot_vid,
167				'fi': 'Tässä nauhassa ei ole tarroja!<br>Voit korjata tämän <a href="?do=edit">muokkaamalla sivua</a>' + cot_vid + 'avulla',
168				'fr': 'Il n\'y a pas d\'autocollants dans cette bande!<br>Vous pouvez résoudre ce problème en <a href="?do=edit">modifiant cette page</a> avec' + cot_vid,
169				'he': 'אין מדבקות ברצועה זו!<br>באפשרותך לתקן זאת על-ידי <a href="?do=edit">עריכת הדף</a> באמצעות' + cot_vid,
170				'hi': 'इस पट्टी में कोई स्टिकर नहीं हैं!<br>आप' + cot_vid + 'के साथ <a href="?do=edit">पेज को एडिट</a> करके इसे ठीक कर सकते हैं',
171				'hu': 'Nincsenek matricák ezen a szalagon!<br>Ezt az oldal' + cot_vid + '-nal segítségével történő <a href="?do=edit">szerkesztésével javíthatod</a>',
172				'id': 'Tidak ada stiker di strip ini!<br>Anda dapat memperbaikinya dengan <a href="?do=edit">mengedit halaman</a> dengan' + cot_vid,
173				'it': 'Non ci sono adesivi in questa striscia!<br>Puoi sistemarlo <a href="?do=edit">modificando questa pagina</a> con' + cot_vid,
174				'ja': 'このストリップにはステッカーがありません!<br>あなたは' + cot_vid + 'で<a href="?do=edit">このページを編集することによって</a>これを直すことができます',
175				'ko': '이 스트립에는 스티커가 없습니다!<br>' + cot_vid + '으로 <a href="?do=edit">페이지를 편집하여</a> 문제를 해결할 수 있습니다',
176				'pl': 'Na tym pasku nie ma naklejek!<br>Możesz to naprawić, <a href="?do=edit">edytując tę stronę</a> za pomocą' + cot_vid,
177				'pt': 'Não há adesivos nesta faixa!<br>Você pode corrigir isso <a href="?do=edit">editando esta página</a> com o' + cot_vid,
178				'ru': 'В этом выпуске нет наклеек!<br>Вы можете исправить это, <a href="?do=edit">отредактировав страницу</a> с помощью' + cot_vid,
179				'sib': '',
180				'sjn': '',
181				'uk': 'У цій смузі немає жодних наклейок!<br>Ви можете виправити це, <a href="?do=edit">відредагувавши цю сторінку</a> за допомогою' + cot_vid,
182				'zh': '这条带上没有贴纸!<br>您可以通过<a href="?do=edit">使用</a>' + cot_vid + '编辑页面来解决此问题'
183			},
184			clang,
185			note = document . createElement ( 'div' ),
186			cnavn = document . querySelector ( '.cnavn' );
187		clangs [ 'sib' ] = clangs [ 'ru' ];
188		clangs [ 'sjn' ] = clangs [ 'en' ];
189		clang = clangs [ lang ] || clangs [ 'en' ],
190		note . style . margin = '1em auto';
191		note . className = 'vycenter note noteimportant';
192		note . innerHTML = '<span class = "oth">' + clang + '</span>';
193		if ( cnavn ) cnavn . parentNode . insertBefore ( note, cnavn . nextSibling );
194	};
195	/* в лентах - сокращение лишних титулов выпусков и озеленение заголовков */
196	if ( /\/(d|h)\d+/ . test ( lhref ) ) {
197		var band_title = Array . from ( document . querySelectorAll ( '.page .plugin_include_content > .level5 > p > strong' ) ) . reverse ( );
198		for ( i = 0; i < band_title . length - 1; i++ ) {
199			if ( band_title [ i ] . innerHTML == band_title [ i + 1 ] . innerHTML ) band_title [ i ] . innerHTML = '';
200		}
201		var div_incs = document . querySelectorAll ( '.page div[id*="plugin_include__"]' );
202		if ( div_incs ) {
203			for ( i = 0; i < div_incs . length; i++ ) {
204				var h5 = div_incs [ i ] . querySelector ( 'h5' );
205				if ( h5 ) {
206					var h5a = document . createElement ( 'a' );
207					h5a . innerHTML = h5 . innerHTML;
208					h5a . href = div_incs [ i ] . id . slice ( 14 ) . replace ( /__/g, '/' );
209					h5a . className = 'wikilink1';
210					h5 . innerHTML = '';
211					h5 . appendChild ( h5a );
212				}
213			}
214		}
215	};
216	if ( /do=export/ . test ( lhref ) ) {
217		/* автопереход по редиректу в экспорте */
218		if ( document . querySelector ( '.noteredirect a' ) ) window . location . href = document . querySelector ( '.noteredirect a' ) . href + '?do=export_xhtml';
219		/* скрытие наклеек по атрибуту hide=1 */
220		if ( /hide=1/ . test ( lhref ) ) {
221			document . querySelectorAll ( '.ct-area, .fn-area' ) . forEach (
222				e => e . style . display = 'none'
223			)
224		}
225	}
226};
227