הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
// transliterate any Ukrainian into Hebrew according to the Hebrew Wikipedia's transliteration standards

// actual transliteration logic
function uktr_isvowel(ch) {
	return ch.match(/[АЕІОУИаеіоуи]/);
}
function uktr_tr(ch, nikkud, pos, prev, uprev) {
	if(uprev == ch)
	  return ''; // skip double consonants
	switch(ch) {
	    case "Б":
	    case "б":	return 'ב';
	    case "В":
	    case "в":	return (pos == -1 ? 'ו' : (pos == 1 ? 'ב' : (prev == 'ו' ? 'ב' : 'וו')));
	    case "Г":
	    case "г":	return 'ה';
	    case "Ґ":
	    case "ґ":	return 'ג';
	    case "Д":
	    case "д":	return 'ד';
	    case "Ж":
	    case "ж":	return "ז'";
	    case "З":
	    case "з":	return 'ז';
	    case "Й":
	    case "й":	return (pos == -1 ? 'י' : (pos == 1 ? (prev == 'י' ? '' : 'י' ) : (prev == 'י' ? 'י' :'יי')));
	    case "К":
	    case "к":	return 'ק';
	    case "Л":
	    case "л":	return 'ל';
	    case "М":
	    case "м":	return (pos == 1 ? 'ם' : 'מ');
	    case "Н":
	    case "н":	return (pos == 1 ? 'ן' : 'נ');
	    case "П":
	    case "п":	return 'פ';
	    case "Р":
	    case "р":	return 'ר';
	    case "С":
	    case "с":	return 'ס';
	    case "Т":
	    case "т":	return 'ט';
	    case "Ф":
	    case "ф":	return (pos == 1 ? 'ף' : 'פ');
	    case "Х":
	    case "х":	return 'ח';
	    case "Ц":
	    case "ц":	return (pos == 1 ? 'ץ' : 'צ');
	    case "Ч":
	    case "ч":	return (pos == 1 ? "ץ'" : "צ'");
	    case "Ш":
	    case "ш":	return 'ש';
	    case "Щ":
	    case "щ":	return (pos == 1 ? "שץ'" : "שצ'");
	    case "А":
	    case "а́":
	    case "а": return (uktr_isvowel(uprev) ? (pos == 1 ? 'אה' : 'א') : (pos == 1 ? 'ה' : (pos == -1 ? 'א' : '')));
	    case "Е":
	    case "е́":
	    case "е": return (uktr_isvowel(uprev) ? 'א' : (pos == -1 ? 'א' : ''));
	    case "І":
	    case "і́":
	    case "і": return (uktr_isvowel(uprev) ? 'אי' : (pos == -1 ? 'אי' : 'י'));
	    case "О":
	    case "о́":
	    case "о": return (uktr_isvowel(uprev) ? 'או' : (pos == -1 ? 'או' : 'ו'));
	    case "У":
	    case "у́":
	    case "у": return (uktr_isvowel(uprev) ? 'או' : (pos == -1 ? 'או' : 'ו'));
		case "Є":
		case "є": return (pos == -1 ? 'י' : 'יי');
		case "Ї":
		case "ї": return (prev == 'י' ? 'י' : 'יי');
		case "Ю":
		case "Ю́":
		case "ю": return 'יו';
		case "Я":
		case "я́":
		case "я": return (pos == 1 ? 'יה' : 'י');
		case "Ь":
        case "ь": 
        case "'": return '';
        case "И":
        case "и́":
        case "и": return 'י';
	}
	return ch;
}
function uktr_do(str, nikkud) {
  var out = '';
  var buf = str.replace(/\.|,|\?|!́/g,'')
  var stress_removal = {'а́':'а','е́':'е','і́':'і', 'о́':'о', 'у́':'у', 'и́':'и', 'є́':'є', 'я́':'я', 'ю́':'ю', 'ї́':'ї'};
  //buf = buf.replace(/[а́е́і́о́у́и́є́я́ю́ї́]/g, m => stress_removal[m]);
  var words = buf.split(/\s/);
  var len = words.length;
  var i = 0;
  
  for(i = 0; i < len; i += 1) {
  	var j = 0;
  	var prev = '';
  	var jlen = words[i].length;
  	for(; j < jlen; j += 1) {
  	  uprev = (j === 0 ? '' : words[i].charAt(j - 1));
  	  prev = uktr_tr(words[i].charAt(j), nikkud, (j === 0 ? -1 : ( j == jlen - 1 ? 1 : 0)), prev, uprev);
      out += prev;
  	}
  	if(words[i].charAt(jlen - 1) == 'Е' || words[i].charAt(jlen - 1) == 'е' || words[i].charAt(jlen - 1) == 'е́')
  	  out += 'ה';
  	out += ' ';
  }
  return out;
}

// Import the jQuery dialog plugin before starting the rest of this script
mw.loader.using(['jquery.ui'], function() {

    function renderUKTRDialog( ) {
		var $dialog = $( '<div></div>' )
			.html(
				'תעתוק אוקראינית' +
				'<br /><textarea id="uktr_in"></textarea><p /><button id="uktr_go">תעתק!</button><br>תעתיק ללא ניקוד<br><textarea id="uktr_out"></textarea><p />תעתיק מנוקד (בעתיד)<br /><textarea id="uktr_out_nikkud" />'
			)
			.dialog({
				autoOpen: true,
				title: 'תעתוק אוקראינית',
				width: '70%',
				modal: true
			});
		$('#uktr_go').click(function(){
		  $('#uktr_out').val(uktr_do($('#uktr_in').val(), false));
          $('#uktr_out_nikkud').val(uktr_do($('#uktr_in').val(), true));
		});
	}

	function uktr() {
		renderUKTRDialog();
	}

	$(document).ready( function() {
		// Add a link to the toolbox
		var link = mw.util.addPortletLink(
			'p-tb',
			'#',
			'תעתוק אוקראינית',
			't-prettylinkwidget',
			'תעתוק אוטומטי של טקסט אוקראיני לעברית',
			'/',
			'#t-whatlinkshere'
		);

		// Create a jQuery object for this link so that we get
		// to use jQuery awesomeness like .click() for binding functions to events
		// and methods like e.preventDefault();
		$(link).click( function( e ) {
			// Avoid the browser going to '#'
			e.preventDefault();
			uktr();
		});
	});
});