משתמש:Men770/HotDefaultSort.js

מתוך חב"דפדיה, אנציקלופדיה חב"דית חופשית
קפיצה לניווט קפיצה לחיפוש

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload), או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר: להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh), או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: לפתוח תפריט ← הגדרות (במחשב מק: Opera ← העדפות) ואז ללחוץ על פרטיות ואבטחה ← מחק היסטוריית גלישה ← Cached images and files.
/*** Hot Default Sort ***/

// סקריפט להוספת מיון רגיל בקלות, במקור מויקיפדיה אנגלית, הסבר עליו בדף השיחה כאן.
// Adds an default sort key editor at the bottom of the page near the categories
// Documentation at [[en:w:User:BrandonXLF/HotDefaultSort]]
// By [[en:w:User:BrandonXLF]]

// <nowiki>
mw.hook('wikipage.categories').add(function($cats) {
	var sort = document.createElement('div'),
		dsort = document.createElement('span'),
		edit = document.createElement('input'),
		dflt = document.createElement('span'),
		status = document.createElement('span'),
		actions = document.createElement('span'),
		save = document.createElement('a'),
		cancel = document.createElement('a'),
		remove = document.createElement('a'),
		modify = document.createElement('a'),
		api = new mw.Api();

	function resize() {
		this.style.width = '0px';
		this.style.width = this.scrollWidth + 2 + 'px';
	}

	function transformPage(transform) {
		status.style.display = 'inline';
		edit.disabled = true;

		return api.edit(mw.config.get('wgPageName'), transform).fail(function(_, data) {
			mw.notify(api.getErrorMessage(data), {
				type: 'error',
				tag: 'hotdefaultsort'
			});
		}).always(function() {
			status.style.display = 'none';
			edit.disabled = false;
		});
	}

	function closeEditor() {
		sort.replaceChild(dsort, edit);
		actions.replaceChild(remove, save);
		actions.replaceChild(modify, cancel);
	}

	function saveEditor() {
		if (!edit.value) {
			return removeSortKey().done(function() {
				closeEditor();
			});
		}

		return transformPage(function(rev) {
			var catNS = mw.config.get('wgFormattedNamespaces')[14],
				catRegex = new RegExp(
					'(\\[\\[[' +
					catNS.charAt(0).toLowerCase() +
					catNS.charAt(0).toUpperCase() +
					']' +
					mw.util.escapeRegExp(catNS.substr(1)) +
					'\\:.*)'
				),
				textParts = rev.content.replace(/\n*{{מיון רגיל:.*?}}\n*/g, '').split(catRegex),
				main = textParts.shift() || '',
				cats = textParts.join('');

			return {
				text: main + (main.endsWith('\n') ? '' : '\n\n') + '{{מיון רגיל:' + edit.value.trim() + '}}\n' + cats,
				summary: '{{מיון רגיל}} שונה ל-' + edit.value + ' באמצעות [[User:Men770/HotDefaultSort.js|סקריפט]]',
                                bot: true,
                                minor: true
			};
		}).done(function() {
			dsort.innerText = edit.value;
			modify.innerText = '(±)';
			modify.title = 'Modify';
			remove.style.display = 'inline';
			dflt.style.display = 'none';
			closeEditor();
		});
	}

	function removeSortKey() {
		return transformPage(function(rev) {
			return {
				text: rev.content.replace(/\n*{{מיון רגיל:.*?}}\n*/g, '\n\n'),
				summary: 'הוסר {{מיון רגיל}} באמצעות [[User:Men770/HotDefaultSort.js|סקריפט]]'
			};
		}).done(function() {
			dsort.innerText = mw.config.get('wgTitle');
			modify.innerText = '(+)';
			modify.title = 'הוסף';
			remove.style.display = 'none';
			dflt.style.display = 'inline';
		});
	}

	api.get({
		action: 'query',
		pageids: mw.config.get('wgArticleId'),
		prop: 'pageprops'
	}).then(function(res) {
		var unset = false,
			pp = res.query.pages[mw.config.get('wgArticleId')].pageprops,
			key = pp && pp.defaultsort ? pp.defaultsort : (unset = true) && mw.config.get('wgTitle');

		sort.innerText = 'מיון רגיל: ';

		dsort.innerText = key;
		sort.appendChild(dsort);

		edit.style.minWidth = '100px';
		['paste', 'keydown', 'keyup', 'keypress', 'input', 'change'].forEach(function(eventName) {
			edit.addEventListener(eventName, resize);
		});
		edit.addEventListener('keydown', function(e) {
			if (e.key == 'Enter') saveEditor();
		});

		dflt.innerText = '(לא מוגדר)';
		dflt.style.marginRight = '0.25em';
		dflt.style.display = unset ? 'inline' : 'none';
		dflt.style.fontStyle = 'italic';

		status.style.marginLeft = '0.25em';
		status.style.display = 'none';
		status.innerText = 'שומר...';

		save.innerText = '(✓)';
		save.style.marginRight = '0.25em';
		save.title = 'שמור שינויים';
		save.addEventListener('click', function() {
			saveEditor();
		});

		cancel.innerText = '(x)';
		cancel.style.marginRight = '0.25em';
		cancel.title = 'ביטול';
		cancel.addEventListener('click', function() {
			closeEditor();
		});

		remove.innerText = '(−)';
		remove.title = 'הסר (החלף עם ברירת המחדל)';
		remove.style.marginRight = '0.25em';
		remove.style.display = unset ? 'none' : 'inline';
		remove.addEventListener('click', function() {
			removeSortKey();
		});

		modify.innerText = unset ? '(+)' : '(±)';
		modify.title = unset ? 'הוסף' : 'שנה';
		modify.style.marginRight = '0.25em';
		modify.addEventListener('click', function() {
			sort.replaceChild(edit, dsort);
			edit.value = window.hotDefaultSortInitKey ? window.hotDefaultSortInitKey(dsort.innerText, dflt.style.display === 'inline') : dsort.innerText;
			resize.apply(edit);
			actions.replaceChild(save, remove);
			actions.replaceChild(cancel, modify);
		});

		actions.appendChild(remove);
		actions.appendChild(modify);

		sort.appendChild(dflt);
		sort.appendChild(status);
		sort.appendChild(actions);

		$cats.append(sort);
	});
});
// </nowiki>