Користувач:Bunyk/translator.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
// Додає до редактора кнопку що перекладає типові шматки тексту.

jQuery(function ($) {

if(mw.config.get('wgAction') != 'edit') return;

if(!$('#wpTextbox1').wikiEditor) return;

var improve = function() {
	apply_change(fix_booksources, 'оформлення ISBN');
	apply_change(fix_external_wikilinks, 'заміна зовнішніх вікіпосилань внутрішніми');
	apply_change(fix_np, 'заміна неперекладених посилань шаблоном');
	apply_change(fix_ref_names, 'атрибути в лапки');
	apply_change(fix_filmography, 'оформлення фільмографії');
	apply_change(function(m) {return m.replace(/<nowiki\/>/g, '')}, 'прибирання зайвих тегів nowiki');
	apply_change(simplify_wikilink, 'оформлення');
	apply_change(translate_dict, "переклад");
};
var translation_dict = [
	[/==\s*History\s*==/g, '== Історія =='],
	[/==\s*Technology\s*==/g, '== Технологія =='],
	[/==\s*See also\s*==/g, '== Див. також =='],
	[/==\s*External links\s*==/g, '== Посилання =='],
	[/==\s*References\s*==/g, '== Зноски =='],
	[/==\s*Awards\s*==/g, '== Нагороди =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
	// [/==\s*History\s*==/g, '== Історія =='],
];
var translate_dict = function(wikimarkup) {
	var text = wikimarkup;
	for (i = 0; i<translation_dict.length; i++) {
		var e = translation_dict[i];
		text = text.replace(e[0], e[1]);
	}
	return text;
};

var simplify_wikilink = function(wikimarkup) {
	return wikimarkup.replace(/\[\[([^|\]]+)\|\1\]\]/g, '[[$1]]');
};

var fix_filmography = function(wikimarkup) {
	return wikimarkup.replace(
		/{{ВФильмеВерх}}/g, '{{УФільміВерх}}'
	).replace(
		/{{ВФильмеНиз}}/g, '{{УФільміНиз}}'
	).replace(
		/{{ВСериале/g, '{{УСеріалі'
	).replace(
		/{{ВФильме/g, '{{УФільмі'
	).replace(
		/{{ВтФильме/g, '{{УтФільмі'
	).replace(
		/{{ВкФильме/g, '{{УкФільмі'
	);
};

var fix_booksources = function(wikimarkup) {
    // [.../Special:BookSources/1740480503 ISBN 1..]- > ISBN 1..
    return wikimarkup.replace(
    	/Служебная:\s*Источники[_ ]книг/g, 
    	'Special:BookSources'
    ).replace(
    	/\[\[International Standard Book Number\|ISBN\]\]/g, '[[ISBN]]'
    ).replace(
        /\[\S+Special:\s*BookSources\/[\dX]+\s+(ISBN\s+[^\]]+)\]/g, '$1'
    ).replace(
        /\[\[\S*Special:\s*BookSources\/[\dX]+\|(ISBN\s+[^\]]+)\]\]/g, '$1'
    ).replace(
    	/\[\[ISBN\]\]&nbsp;\[\[\S+BookSources\/[\dX]+\|(\d+)\]\]/g, 'ISBN $1'
    );
};

var fix_external_wikilinks = function(wikimarkup) {
	// Замінити [//en.wikipedia.org/wiki/Knight_High_School Старшу лицарську школу]
    // на [[:en:Knight High School|Старшу лицарську школу]]
    
    var substitution = function(match, p1, p2, p3, p4) {
        return '[[:' + p2 + ':' + decodeURIComponent(p3).replace(/_/g, ' ') + '|' + p4 + ']]';
    };

	return wikimarkup.replace(
        /\[([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/wiki\/(\S+)\s+([^\]]+)\]/g,
        substitution
	).replace(
		/\[([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/w\/index\.php\?title=([^& ]+)[^ ]*\s+([^\]]+)\]/g,
		substitution
	).replace(
		/<ref>.*?([Hh]ttps?:)?\/\/(\w{2}).wikipedia.org\/w\/index\.php\?title=([^& ]+).*?\|title=([^|]+).*?<\/ref>/g,
		substitution
	);
};

var fix_np = function(wikimarkup) {
	// Замінити [[:en:Article|asfd]] на {{нп|Article|asfd|en|Article}}
	return wikimarkup.replace(
		/\[\[:?w:(\w{2}):/g,
		'[[:$1:'
	).replace(
		/\[\[([^\]\|]+)\|([^\]\|]+)\]\]\s*<sup>\s*\(?\s*\[\[:(\w+):([^\|]+)\|[^\]]+\]\]\)?\s*<\/sup>/g,
		'{{нп|$1|$2|$3|$4}}'
	).replace(
		/\[\[([^\]\|]+)\]\]\s*<sup>\s*\(?\s*\[\[:(\w+):([^\|]+)\|[^\]]+\]\]\)?\s*<\/sup>/g,
		'{{нп|$1||$2|$3}}'
	).replace(
		/\[\[\s*:\s*(\w{2})\s*:\s*([^\]\|]+)\|?([^\]]+)?\]\]/g,
		'{{нп|$2|$3|$1|$2}}'
	);
};

var fix_ref_names = function(wikimarkup) {
	// атрибути мають бути в лапках
	return wikimarkup.replace(
		/<ref\s+name\s*=\s*(\w*)\s*>/g,
		'<ref name="$1">'
	);
};

var apply_change = function(change, comment) {
	var old_value = document.editform.wpTextbox1.value;
	try {
		document.editform.wpTextbox1.value = change(
			document.editform.wpTextbox1.value
		);
	} catch(err) {
		alert('Помилка в зміні "' + comment + '":\n' + err.message);
	}
	
	if(document.editform.wpTextbox1.value != old_value) { // if changed
		// add comment
		if(document.editform.wpSummary.value.trim()) {
			document.editform.wpSummary.value += ', ';
		}
		document.editform.wpSummary.value += comment;
	}
};

$('#wpTextbox1').wikiEditor('addToToolbar', {
	section: 'advanced',
	group: 'format',
	tools: {
		"wikifixer": {
			label: 'Перекласти шматки статті',
			type: 'button',
			icon: '//upload.wikimedia.org/wikipedia/commons/8/8c/Farm-Fresh_scripts_text.png',
			action: {
           		type: 'callback',
                execute: function(context) { 
                	improve();
                	$('#wpDiff').trigger('click');
                }
			}
		}
	}
});
});