MediaWiki:Gadget-cikkertekelo.js

A Wikipédiából, a szabad enciklopédiából

Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.

  • Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
  • Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
  • Internet Explorer / Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
  • Opera: Nyomj Ctrl–F5-öt
/**
 * Cikkértékelő
 * @author Báthory Péter, 2008
 * További információk: [[w:hu:Wikipédia:Cikkértékelő]]
 *
 * A program szabadon módosítható, GNU licenc szerint
 */
//<nowiki>

function CikkErtekelo() {
	this.listaAJAXLetolt();
}

/**
 * Canonical name and numerical value of a class/importance level
 * @typedef {Object} ResolvedAlias
 * @property {string} nev Canonical name of the class/importance
 * @property {number} szam Numerical value of the class/importance
 */

/**
 * @typedef {Object} tSablon
 * @property {string} sablon
 * @property {string} nev
 * @property {string} cim
 * @property {string} besorolas
 * @property {string} fontossag
 * @property {ResolvedAlias} besorolas_full
 * @property {ResolvedAlias} fontossag_full
 * @property {string} szerkeszto
 * @property {string} datum
 * @property {number} [start]
 */

/**
 * @typedef {Object} SList
 * @property {boolean} folytat Whether to continue the assessment started in read view
 * @property {({nev: string, cim: string})[]} values
 */

CikkErtekelo.prototype = {
	listaFajl: 'Wikipédia:Cikkértékelő/műhelylista',
	/** @type {tSablon[]} */
	sablonok: [],
	/** @type {SList} */
	SList: {folytat:false, values:[]},
	vita: {text: ''},
	tobbsablon: false,
	forcetobb: false,
	szerkesztett: -2,
	sablonLista: [],
	ablakban: false,
	divId: {}
};

/** @param {string} text */
CikkErtekelo.prototype.listaFeldolgoz = function CikkErtekeloListaFeldolgoz(text) {
	var lista = text.split('\n');
	for (var i=0; i<lista.length; i++) {
		if (lista[i].indexOf(';') > 2) { //Ez eltünteti a <pre> és </pre>-t is
			this.SList.values.push({
				nev: lista[i].substring(0, lista[i].indexOf(';')),
				cim: lista[i].substring(lista[i].indexOf(';')+1)
			});
		}
	}
	if (this.SList.folytat) {
		var szuloObj = this;
		this.interv = setInterval(function() {
			if (
				document.getElementById('wpTextbox1') !== null
				&& document.getElementById('wpSummary') !== null
			) {
				clearInterval(szuloObj.interv);
				szuloObj.folytat(szuloObj);
			}
		}, 25);    //Valamiért nem tölti be időben a szerkesztőmezőt, ezt kell megvárni
	}
};

CikkErtekelo.prototype.listaAJAXLetolt = function CikkErtekeloListaAjaxLetolt() {
	var that = this;
	$.get({
		url: mw.util.getUrl(this.listaFajl, {action: 'raw'}),
		cache: false
	}).then(function (content) { that.listaFeldolgoz(content); });
};

CikkErtekelo.prototype.vitaAJAXLetolt = function CikkErtekeloVitaAjaxLetolt() {
	var vita = this.vita;
	$.get({
		url: mw.util.getUrl('Vita:' + mw.config.get('wgTitle'), {action: 'raw', section: '0'}),
		cache: false
	}).then(function (content) {
		vita.text = content;
	});
};

/**
 * @param {string} param
 * @param {string} text
 */
CikkErtekelo.prototype.sablonParam = function CikkErtekeloSablonParam(param, text) {
	text = text.replace(/\s/g, ''); // remove whitespace
	var exp = new RegExp('\\|' + param + '\\=');
	if (text.toLowerCase().search(exp) === -1) {
		return '';
	}
	var start = text.toLowerCase().search(exp) + String(text.toLowerCase().match(exp)).length;
	var end   = text.slice(start).search(/(\}\}|\|)/); // ends with }} or |
	if (start > -1 && end > -1) {
		return text.slice(start, start+end);
	} else {
		return '';
	}
};

/**
 * Process a class/importance parameter value
 * @param {string|number} k The lower-case version of the class/importance value as found in the template parameter
 * @param {1|2} n 1 for class, 2 for importance
 * @return {ResolvedAlias}
 */
CikkErtekelo.prototype.resolveAlias = function CikkErtekeloResolveAlias(k, n) {
	if (k=='kitüntetett' || k=='kiemelt' || k=='kit' || k=='ksz' || k=='k' || (n==1&&k==7)) return {nev:'kitüntetett', szam:7};
	if (k=='színvonalas' || k=='színv' || k=='szín' || (n==1&&k==6)) return {nev:'színvonalas', szam:6};
	if (k=='teljes' || k=='telj' || (n==1&&k==5)) return {nev:'teljes', szam:5};
	if (k=='jól használható' || k=='jólhaszn' || k=='használható'||k=='haszn'|| k=='jhaszn'||k=='a'|| (n==1&&k==4)) return{nev:'jól használható', szam:4};
	if (k=='bővítendő' || k=='bőv' || k=='b' || (n==1&&k==3)) return {nev:'bővítendő', szam:3};
	if (k=='vázlatos' || k=='vázl' || k=='start' || (n==1&&k==2)) return {nev:'vázlatos', szam:2};
	if (k=='születő' || k=='szül' || k=='csonk' || k=='stub' || (n==1&&k==1)) return {nev:'születő', szam:1};
	if (k=='nélkülözhetetlen' || k=='nélk' || (n==2&&k==4)) return {nev:'nélkülözhetetlen', szam:4};
	if (k=='nagyon' || k=='nagy' || (n==2&&k==3)) return {nev:'nagyon fontos', szam:3};
	if (k=='közepesen' || k=='közepes' || k=='köz' || (n==2&&k==2)) return {nev:'közepesen fontos', szam:2};
	if (k=='kevéssé' || k=='kevés' || k=='kev' || (n==2&&k==1)) return {nev:'kevéssé fontos', szam:1};
	return {nev:'', szam:0};
};

CikkErtekelo.prototype.sablonKereso = function CikkErtekeloSablonKereso() {
	/** @param {string} kod */
	function cimkeres(kod) {
		kod = kod.toLowerCase();
		for (var i = 0; i < lista.length; i++) {
			if (lista[i].nev.toLowerCase() == kod) {
				return lista[i].cim;
			}
		}
		return 'ismeretlen sablon';
	}

	// bekapcsolt wikEd-nél Textarea frissítés
	if (typeof wikEdUseWikEd !== 'undefined' && wikEdUseWikEd) {
		WikEdUpdateTextarea();
	}

	var lista = this.SList.values,
		/** @type string */
		m;
	if (document.getElementById('wpTextbox1')) {
		m = document.getElementById('wpTextbox1').value;
	} else {
		m = this.vita.text;
	}
	m = m.replace('{{Sablon:','{{');

	if (m.indexOf('{{') == -1) {
		return;
	}
	var tobbWPOffset = m.indexOf('{{Több WP');
	this.tobbsablon = tobbWPOffset > -1;
	this.sablonok = [];
	if (!this.tobbsablon) {
		for (var i=0; i<lista.length; i++) {
			// {{sablonnév}} vagy {{sablonnév| illeszkedik
			if (m.replace(/[\s\n\t]/g, '').search(new RegExp('\\{\\{'+lista[i].nev+'(\\|\|\}{2})', 'i')) > -1) {
				var offset = m.toLowerCase().indexOf('{{'+lista[i].nev.toLowerCase()),
					s = m.substring(offset, m.indexOf('}}', offset) + 2),
					besorolas = this.sablonParam('besorolás', s) || this.sablonParam('szint', s),
					fontossag = this.sablonParam('fontosság', s);
				this.sablonok.push({
					sablon: s,
					start: offset,
					nev: lista[i].nev,
					cim: cimkeres(lista[i].nev),
					besorolas: besorolas,
					fontossag: fontossag,
					szerkeszto: this.sablonParam('szerkesztő', s) || this.sablonParam('felhasználó', s),
					datum: this.sablonParam('dátum', s),
					besorolas_full: this.resolveAlias(besorolas.toLowerCase(), 1),
					fontossag_full: this.resolveAlias(fontossag.toLowerCase(), 2),
				});
			}
		}
	} else {
		var teljesSablon = m.substring(tobbWPOffset, m.indexOf('}}',tobbWPOffset) + 2);
		var num = Object(teljesSablon.match(/sablon[1-9]{1}/gi)).length;
		for (var i=1; i<=num; i++) {
			var nev = this.sablonParam('sablon'+i, teljesSablon),
				besorolas = this.sablonParam('besorolás'+i, teljesSablon),
				fontossag = this.sablonParam('fontosság'+i, teljesSablon);
			this.sablonok.push({
				sablon: teljesSablon,
				start: tobbWPOffset,
				nev: nev,
				cim: cimkeres(nev),
				besorolas: besorolas,
				fontossag: fontossag,
				szerkeszto: this.sablonParam('szerkesztő'+i, teljesSablon),
				datum: this.sablonParam('dátum'+i, teljesSablon),
				besorolas_full: this.resolveAlias(besorolas.toLowerCase(), 1),
				fontossag_full: this.resolveAlias(fontossag.toLowerCase(), 2),
			});
		}
	}
	/**
	 * @param {tSablon} a
	 * @param {tSablon} b
	 * @returns {number}
	 */
	function rendez(a, b) {
		if (a.start >  b.start) return 1;
		if (a.start == b.start) return 0;
		if (a.start <  b.start) return -1;
	}
	this.sablonok.sort(rendez);
};

//</nowiki>


/**
 * Save the current template’s name to local storage.
 * @param {string} value The template name to save.
 */
CikkErtekelo.prototype.saveTemplateName = function CESaveTemplateName(value) {
	mw.storage.set('cikkertekelo_sablon', value);
};
/**
 * Load the current template’s name from the local storage.
 * @returns {string} The template name.
 */
CikkErtekelo.prototype.loadTemplateName = function CELoadTemplateName() {
	return mw.storage.get('cikkertekelo_sablon');
};
/**
 * Get the current date in ISO 8601 format.
 * @returns {string}
 */
CikkErtekelo.prototype.getIsoDate = function CEGetIsoDate() {
	function nulla(x) {return (x < 10) ? '0'+x : x; } //M-D alakítása MM-DD formára
	var today = new Date();
	return today.getFullYear() + '-' + nulla(today.getMonth() + 1) + '-' + nulla(today.getDate());
};

/**
 * Create the template selector dropdown.
 * @returns {string} The dropdown HTML.
 */
CikkErtekelo.prototype.createSablonLista = function CECreateSablonLista() {
	var lista = this.SList.values;
	var szoveg = '<select name="sablon" id="sablon">\n';
	for (var i = 0; i < lista.length; i++) {
		szoveg += '<option value="' + lista[i].nev + '"' + ((lista[i].nev == this.sablon_nev) ? ' selected' : '') + '>'
			+ lista[i].cim + '</option>\n';
	}
	szoveg += '</select>\n';
	return szoveg;
};

/**
 * Edit the given template upon pressing the template’s button.
 * @param {Event} e The click event.
 * @this {HTMLButtonElement} The button having been pressed.
 */
CikkErtekelo.prototype.sablontHasznal = function CESablontHasznal(e) {
	var num = $(this).data('num');
	var CErt = $(this).data('cert');
	if (num > -1) {
		CErt.szerkesztett = num;
	} else {
		CErt.szerkesztett = -1;
	}
	CErt.ablakWrite(CErt.foablak());
};

/**
 * Generate the main window DOM.
 * @returns {jQuery} The jQuery object representing the newly-built DOM subtree.
 */
CikkErtekelo.prototype.foablak = function CEFoablak() {
	var b, f;
	function option(type, text, htmlValue, varValue) {
		return '<option value="' + htmlValue + '"' + (type === (varValue || htmlValue) ? ' selected' : '') + '>' +
			text + '</option>';
	}
	function minosegSelect() {
		return ('<select name="minoseg" id="minoseg">'
			+ option(b, 'Besorolatlan', '')
			+ option(b, 'Kitüntetett', 'kitüntetett')
			+ option(b, 'Színvonalas', 'színvonalas')
			+ option(b, 'Teljes', 'teljes')
			+ option(b, 'Jól használható', 'jólhaszn', 'jól használható')
			+ option(b, 'Bővítendő', 'bővítendő')
			+ option(b, 'Vázlatos', 'vázlatos')
			+ option(b, 'Születő', 'születő')
			+ '</select>');
	}
	function fontossagSelect() {
		return ('<select name="fontossag" id="fontossag">'
			+ option(f, 'Nem értékelt', '')
			+ option(f, 'Nélkülözhetetlen', 'nélkülözhetetlen')
			+ option(f, 'Nagyon fontos', 'nagyon', 'nagyon fontos')
			+ option(f, 'Közepesen fontos', 'közepesen', 'közepesen fontos')
			+ option(f, 'Kevéssé fontos', 'kevéssé', 'kevéssé fontos')
			+ '</select>');
	}
	if (this.szerkesztett > -1 && this.szerkesztett !== false) {
		b = this.sablonok[this.szerkesztett].besorolas_full.nev;
		f = this.sablonok[this.szerkesztett].fontossag_full.nev;
		this.sablon_nev = this.sablonok[this.szerkesztett].nev;
	}
	var $form = $('<form>')
		.attr('name', 'CEurlap')
		.attr('id', 'CEurlap')
		.addClass(this.ablakban ? 'ablakban' : 'dobozban')
		.data('cert', this)
		.on('submit', this.formSubmit);
	var $table = $('<table>').appendTo($form);
	$('<tr>')
		.append(
			$('<td>')
				.attr('colspan', 2)
				.html('<label for="sablon">Beillesztendő sablon:</label> ')
				.append(this.createSablonLista())
		)
		.appendTo($table);
	$('<tr>')
		.append(
			$('<td>').html('<label for="minoseg">Minőség:</label>'),
			$('<td>').html('<label for="fontossag">Fontosság</label>')
		)
		.appendTo($table);
	$('<tr>')
		.append(
			$('<td>').append(minosegSelect),
			$('<td>').append(fontossagSelect)
		)
		.appendTo($table);
	$tobbwpSor = $('<tr>')
		.attr('id', 'tobbwp-sor')
		.toggleClass('nincs-tobbwp', this.sablonok.length < 1)
		.appendTo($table);
	$tobbwpCella = $('<td>')
		.attr('colspan', 2)
		.appendTo($tobbwpSor);
	if (this.sablonok.length > 1 || (this.sablonok.length == 1 && this.szerkesztett == -1)) {
		$tobbwpCella.html('<input type="checkbox" name="tobbwp" id="tobbwp"'
			+ ((this.tobbsablon) ? ' checked' : '') +'> <label for="tobbwp">{'+'{Több WP}} forma használata</label>');
	} else if (this.sablonok.length < 1) {
		$tobbwpCella.text('A szócikket még nem értékelték');
	} else {
		$tobbwpCella.text('\u00a0'); // &nbsp;
	}
	$('<tr>')
		.attr('id', 'gombsor')
		.append(
			$('<td>').html('<input type="submit" value="Mehet">'),
			$('<td>').html('<input type="reset" value="Mégsem">')
		)
		.appendTo($table);
	$form.find('input[type="reset"]').on('click', this.bezar);
	return $form;
};

/**
 * Generate the WikiProject selector window DOM.
 * @returns {jQuery} The jQuery object representing the newly-built DOM subtree.
 */
CikkErtekelo.prototype.kerdesablak = function CEKerdesablak() {
	var CErt = this;
	function button(text, num) {
		return ($('<button>')
			.data('cert', CErt)
			.data('num', num)
			.text(text)
			.on('click', CErt.sablontHasznal)
		);
	}

	var $html = $('<div>')
		.attr('id', 'CEkerdesablak')
		.addClass(this.ablakban ? 'ablakban' : 'dobozban')
		.append('<p>A szócikkhez már tartozik <b>' + this.sablonok.length + '</b> értékelősablon:</p>');
	$table = $('<table>').appendTo($html);
	for (var i = 0; i < this.sablonok.length; ++i) {
		$('<tr>')
			.append($('<td>').append(button('szerkeszt', i)))
			.append($('<td>').text(this.sablonok[i].cim))
			.append($('<td>').text(this.sablonok[i].nev))
			.appendTo($table);
	}
	$('<tr>')
		.append($('<td>').append(button('Új sablon', -1)))
		.append($('<td>').attr('colspan', 2).text('Régieket meghagyja és újat rak be'))
		.appendTo($table);
	return $html;
};

/**
 * Open a new window for the popup.
 */
CikkErtekelo.prototype.ablakNyitas = function CEAblakNyitas() {
	var ablak_x = Math.round(screen.width/2)-150;
	var ablak_y = Math.round(screen.height/3)-50;
	var css_url = mw.config.get('wgServer') + mw.util.wikiScript('load') + '?modules=ext.gadget.cikkertekelo&only=styles';
	this.ablakId = window.open('', 'ertekelolista', 'width=400,height=170,left='+ablak_x+',top='+ablak_y);
	this.ablakId.document.title = 'Szócikk értékelés';
	$('<link>').attr('rel', 'stylesheet').attr('href', css_url).appendTo(this.ablakId.document.head);
	this.ablakId.document.body.style.backgroundColor = '#f8f9fa';
	this.ablakId.document.body.style.backgroundImage = 'url(//hu.wikipedia.org/w/skins/MonoBook/headbg.jpg)';
	this.ablakId.window.document.onblur = CErt.ablakId.window.focus;
};

/**
 * Write popup content.
 * @param {jQuery} $html
 */
CikkErtekelo.prototype.ablakWrite = function CEAblakWrite($html) {
	if (this.ablakban) {
		$(this.ablakId.document.body)
			.empty()
			.append($html);
	} else {
		$(this.divId)
			.empty()
			.append($html);
	}
};

/**
 * Open the popup.
 */
CikkErtekelo.prototype.mutat = function CEMutat() {
	if (typeof this.SList !== 'object' || !this.SList.values.length) {
		mw.notify('Próbáld újra, lehet, hogy még nem töltődtek be a fájlok.', {title: 'Hiba!', type: 'error'});

		return;
	}
	this.sablonok = [];
	this.tobbsablon = false;
	this.szerkesztett = -2;
	this.sablonKereso();
	this.sablon_nev = this.loadTemplateName();
	if (this.ablakban) {
		this.ablakNyitas();
	}
	if (this.sablonok.length > 0) {
		this.ablakWrite(this.kerdesablak());
	} else {
		this.ablakWrite(this.foablak());
	}
};

/**
 * Close the popup.
 */
CikkErtekelo.prototype.bezar = function CEBezar() {
	var CErt = $(this.form).data('cert');
	if (CErt.ablakban) {
		CErt.ablakId.window.close();
	} else {
		CErt.BoxKinyit();
	}
};

/**
 * Handle form submit.
 * @param {Event} e The submit event.
 * @this {HTMLFormElement} The form being submitted.
 */
CikkErtekelo.prototype.formSubmit = function CEFormSubmit(e) {
	e.preventDefault();
	var CErt = $(this).data('cert');
	CErt.mehet(this);
	return false;
};

/**
 * Process form content.
 * @param {HTMLFormElement} urlap
 */
CikkErtekelo.prototype.mehet = function CEMehet(urlap) {
	var adatok = {
		nev: urlap.sablon.options[urlap.sablon.selectedIndex].value,
		besorolas: urlap.minoseg.options[urlap.minoseg.selectedIndex].value,
		fontossag: urlap.fontossag.options[urlap.fontossag.selectedIndex].value,
		szerkeszto: mw.config.get('wgUserName'),
		datum: this.getIsoDate()
	};
	this.forcetobb = (urlap.tobbwp && urlap.tobbwp.checked) ? true : false;
	this.saveTemplateName(adatok.nev);
	if (document.getElementById('wpTextbox1')) {
		if (this.ablakId) {
			this.ablakId.window.close();
		}
		this.ertekel(adatok);
	} else {
		var params = {
			action: 'submit',
			cesablon: adatok.nev,
			cebesorolas: adatok.besorolas,
			cefontossag: adatok.fontossag,
			ceszerkesztett: this.szerkesztett,
			ceforcetobb: this.forcetobb
		};
		mw.loader.using('mediawiki.Title', function openTalkPage() {
			var title = new mw.Title(mw.config.get('wgPageName')).getTalkPage();
			if (!title) {
				// no talk namespace, should not happen
				return;
			}
			document.location = mw.util.getUrl(title.toString(), params);
		});
	}
};

/**
 * Parse URL parameters and initiate updating the wikitext in the edit
 * form. Run on edit action when `cesablon` URL parameter is present,
 * after all necessary XHR data has been loaded.
 * @param {CikkErtekelo} obj
 */
CikkErtekelo.prototype.folytat = function CEFolytat(obj) {
	obj.sablonKereso();

	var adatok = {
		nev: String(mw.util.getParamValue('cesablon')).toUpperCase(),
		besorolas: mw.util.getParamValue('cebesorolas') || '',
		fontossag: mw.util.getParamValue('cefontossag') || '',
		szerkeszto: mw.config.get('wgUserName'),
		datum: this.getIsoDate()
	};
	this.szerkesztett = 1 * mw.util.getParamValue('ceszerkesztett');
	this.forcetobb = (mw.util.getParamValue('ceforcetobb') === 'true');

	if (!(this.szerkesztett >= -2 && this.szerkesztett < this.sablonok.length)) {
		// ne indexeljünk ki a tömbből
		mw.notify(
				'Nem sikerült értelmezni a cikkértékelő paramétereit. Ha nem nyúltál bele az URL-be, jelezd a hibát a műszaki kocsmafalon (a pontos URL-lel).',
				{ title: 'Hibás paraméterek', type: 'error' }
		);
	} else {
		this.ertekel(adatok);
	}
};


/**
 * Actually update wikitext in the edit form.
 * @param {object} ujadatok Data from the URL parameters.
 * @param {string} ujadatok.nev The template name.
 * @param {string} ujadatok.besorolas New quality assessment.
 * @param {string} ujadatok.fontossag New importance assessment.
 * @param {string} ujadatok.szerkeszto New assesser (the current user).
 * @param {string} ujadatok.datum New assessment date in ISO 8601
 *  format (the current date).
 */
CikkErtekelo.prototype.ertekel = function CEErtekel(ujadatok) {
	function ertekFormaz(ertek){
		return (ertek == '') ? 'Ø' : ertek;
	}

	if (typeof switchOffWikEd === 'function') {
		switchOffWikEd();
	}

	var $textarea = $('#wpTextbox1'),
		textContent = $textarea.textSelection('getContents'),
		summary = document.getElementById('wpSummary'),
		start;
	if (!this.tobbsablon) {
		start = textContent.length;
		for (var i = 0; i < this.sablonok.length; i++) {
			if (this.sablonok[i].sablon != '') {
				if (textContent.indexOf(this.sablonok[i].sablon) < start) {
					start = textContent.indexOf(this.sablonok[i].sablon);
				}
				textContent = textContent.replace(this.sablonok[i].sablon + '\n', '');
				textContent = textContent.replace(this.sablonok[i].sablon, '');
			}
		}
	} else {
		start = textContent.indexOf(this.sablonok[0].sablon);
		textContent = textContent.replace(this.sablonok[0].sablon, '');
	}
	if (start == textContent.length) {
		// var match = textContent.toLowerCase().match(/\{\{cikktörténet\s*\|.*?\}\}(\r?\n)?/s);
		var match = textContent.toLowerCase().match(new RegExp('\\{\\{cikktörténet\\s*\\|.*?\\}\\}(\\r?\\n)?', 's'));
		if (match) {
			start = match.index + match[0].length;
		} else {
			start = 0;
		}
	}

	if (this.szerkesztett <= -1) {
		this.sablonok.push(ujadatok);
		summary.value = 'Cikk értékelése: ' + ujadatok.nev + '.';
		if (ujadatok.besorolas != '') {
			summary.value += ' Besorolás: ' + ujadatok.besorolas + ', fontosság: ' + ertekFormaz(ujadatok.fontossag);
		}
	} else {
		summary.value = 'Cikk értékelése: ' + ujadatok.nev + ' sablon módosítva lett. Besorolás: ' +
			ertekFormaz(this.sablonok[this.szerkesztett].besorolas) + '→' + ertekFormaz(ujadatok.besorolas) +
			', fontosság: ' +
			ertekFormaz(this.sablonok[this.szerkesztett].fontossag) + '→' + ertekFormaz(ujadatok.fontossag);
		this.sablonok[this.szerkesztett] = ujadatok;
	}

	var beilleszt = '';
	for (var i = 0; i < this.sablonok.length; i++) {
		var temp = this.sablonok[i];
		if (!this.forcetobb) {
			beilleszt += '{' + '{' + temp.nev + '|besorolás=' + temp.besorolas + '|fontosság=' + temp.fontossag
				+ '|szerkesztő=' + (((temp.besorolas + temp.fontossag) != '') ? temp.szerkeszto : '')
				+ '|dátum=' + (((temp.besorolas + temp.fontossag) != '') ? temp.datum : '') + '}}\n';
		} else {
			beilleszt += '|sablon' + (i+1) + '=' + temp.nev
				+ '|besorolás' + (i+1) + '=' + temp.besorolas + '|fontosság' + (i+1) + '=' + temp.fontossag
				+ '|szerkesztő'+ (i+1) + '=' + (((temp.besorolas + temp.fontossag) != '') ? temp.szerkeszto : '')
				+ '|dátum' + (i+1) + '=' + (((temp.besorolas + temp.fontossag) != '') ? temp.datum : '') + '\n';
		}
	}
	if (this.forcetobb) {
		beilleszt = '{'+'{Több WP\n' + beilleszt + '}}';
	}

	if (textContent.slice(start,start+1) != '\n' && textContent.slice(start,start+1) != '\r') {
		beilleszt += '\n';
	}
	$textarea.textSelection('setContents', textContent.slice(0, start) + beilleszt + textContent.slice(start) );

	if (typeof switchOnWikEd === 'function') {
		switchOnWikEd();
	}
};


/**
 * Add assessment button to the WikiEditor toolbar.
 */
CikkErtekelo.prototype.addAssessButtonWikiEditor = function addAssessButtonWikiEditor() {
	CErt.ablakban = true;
	$( '#wpTextbox1' ).wikiEditor(
		'addToToolbar',
		{
			section: 'main',
			group: 'insert',
			tools: {
				'cikkertekelo': {
					type: 'button',
					label: 'Cikkértékelés',
					icon: 'https://upload.wikimedia.org/wikipedia/commons/e/e9/Button_copy_edit.png',
					action: {
						type: 'callback',
						execute: function CEWikiEditorCallback() { CErt.mutat(); }
					}
				}
			}
		}
	);
};

/**
 * Toggle the visibility of the popup.
 */
CikkErtekelo.prototype.BoxKinyit = function CEBoxKinyit() {
	if ($(this.divId).is(':hidden')) {
		$(this.divId).show();
		$('#ca-cert').addClass('open');
		this.mutat();
	} else {
		$(this.divId).hide();
		$('#ca-cert').removeClass('open');
	}
};

/**
 * Add the assessment portal action
 * (used when WikiEditor is not available).
 */
CikkErtekelo.prototype.addAssessBox = function CEAddAssessBox() {
	var node = mw.util.addPortletLink('p-cactions', '#', 'Értékelés', 'ca-cert', 'Cikkértékelő segédeszköz', 'é');
	if (!node) return;
	// Use wrapper to leave `this` pointing to `CErt`
	$(node).click(function boxOpenWrapper(e) {
		e.preventDefault();
		CErt.BoxKinyit();
		return false;
	});

	var $ertekeloBox = $('<div>').attr('id', 'ertekeloBox').hide();
	switch (mw.config.get('skin')) {
		case 'vector':
		case 'vector-2022':
			$ertekeloBox.prependTo('#right-navigation');
			break;
		default:
			$ertekeloBox.appendTo(node);
	}

	if (node.offsetLeft > -1 && !mw.config.get('skin').match( /^vector(-2022)?$/ ) ) {
		$ertekeloBox.css('left', node.offsetLeft + node.offsetWidth - 400 + 'px'); //FF miatt statikusan 400
	}

	CErt.divId = $ertekeloBox[0];
};

//////////////////////////////////////////////////////////
var jogosultsagok = mw.config.get('wgRestrictionEdit') || mw.config.get('wgRestrictionCreate') || [];
if (jogosultsagok.length === 0) {
	var CErt;
	if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) > -1 && mw.config.get('wgNamespaceNumber') % 2) {
		CErt = new CikkErtekelo();
		mw.loader.using('mediawiki.user', function addCELink() {
			if ( mw.user.options.get('usebetatoolbar') ) {
				mw.loader.using('ext.wikiEditor', CErt.addAssessButtonWikiEditor);
			} else {
				$(CErt.addAssessBox);
			}
		});
		if ((mw.util.getParamValue('cesablon') || '') !== '' ) {
			CErt.SList.folytat = true;
		}
	} else if (
		mw.config.get('wgAction') == 'view'
		&& ([0, 1].indexOf(mw.config.get('wgNamespaceNumber')) > -1 || mw.util.getParamValue('debug') == 'true')
		&& mw.config.get('wgCurRevisionId') != false
		&& mw.util.getParamValue('printable') != 'yes'
	) {
		CErt = new CikkErtekelo();
		CErt.vitaAJAXLetolt();
		$(CErt.addAssessBox);
	}
}