מדיה ויקי:סקריפטים/71.js

מתוך אקו-ויקי, מקום מפגש בנושאי אקולוגיה, חברה וכלכלה.
קפיצה לניווט קפיצה לחיפוש

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload), או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר: להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh), או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: לפתוח תפריט ← הגדרות (במחשב מק: Opera ← העדפות) ואז ללחוץ על פרטיות ואבטחה ← מחק היסטוריית גלישה ← Cached images and files.
// סקריפט 71: הוספת כפתור "תאריכי הוספה" לקטגוריה
//Written by [[User:ערן]]
if (mw.config.get('wgNamespaceNumber') == 14) mw.loader.using( ['mediawiki.util', 'mediawiki.api'] ).done( function() {
	
function tsToDate(rc) {
	var date = new Date(rc.timestamp);
	if (isNaN(date)) {// all sane browsers can just do new Date(rc.timestanp). only IE refuses.
		dar = rc.timestamp.split(/[^\d]/); // timestamp looks like so: "2011-05-05T18:56:27Z"
		var month = parseInt(dar[1],10) - 1; // "Date" expexts months in the range of 0..11, timestamp is more conventional.
		var minutes = parseInt(dar[4], 10) - new Date().getTimezoneOffset();//ts is UTC, but new Date(y,M,d,h,m,s) assumes local TZ
		date = new Date(dar[0],month,dar[2],dar[3],minutes,dar[5]);
	}
	return date;
}
function ago(rec) {
	var ms = now - tsToDate(rec);
	var s = ms / 1000;
	if (s < 100)
		return {c:0, s:'ברגע זה'};
	var ranges = [
		{r: 60, t: 'דקות', s: 'דקה', d: 'שתי דקות'},
		{r: 60, t: 'שעות', s: 'שעה', d: 'שעתיים'},
		{r: 24, t: 'ימים', s: 'יממה', d: 'יומיים'},
		{r: 7, t: 'שבועות', s: 'שבוע', d: 'שבועיים'},
		{r: 52, t: 'שנים', s: 'שנה', d: 'שנתיים'}
	];

	var est = '', num;
	for (var i = 0; i < ranges.length; i++) {
		var range = ranges[i];
		s /= range.r;
		if (s < 1)
			break;
		num = '';
		if (s < 2)
			est = range.s;
		else if (s < 3 && range.d)
			est = range.d;
		else {
			num = '-' + Math.floor(s) + ' ';
			est = range.t;
		}
	}
	return {c: i, s: 'לפני כ' + num + est};
}
{

var now = new Date();


if (window.auto_cat_dates)
	doit();
else
	mw.util.addPortletLink('p-cactions','#','תאריכי הוספה','queryAdded').onclick = doit;

function doit(){
	var
		catQuery={
			list:'categorymembers',
			cmtitle:mw.config.get('wgPageName'),
			cmprop:'timestamp|title|type',
			cmtype:'page|subcat|file',
			cmlimit:500
		},
		catRegex = /^קטגוריה:/,
		colors = ['red', 'red', 'red', 'red', 'orange', 'green'];

	if (mw.util.getParamValue('pagefrom')) catQuery.cmstartsortkey=mw.util.getParamValue('pagefrom');
	var api=new mw.Api();
	api.get(catQuery).done(function(data){
			var linkTitle={}, catTitle = {};
			$('#mw-pages a, #mw-category-media a').each(function(){
				linkTitle[this.title] = this;
			});
			$('#mw-subcategories a').each(function(){
				catTitle[$(this).text()] = this;
			});

			$(data.query.categorymembers).each(function(index, item)
			{
				var when = ago(item),
					span = 
						$('<span>', {title:item.timestamp})
							.css({fontSize: '70%', color: colors[when.c], cursor: 'pointer' })
							.text(' ' + when.s + ' ')
							.click(function() {
								var target = mw.util.getUrl(item.title, { action: 'history', limit:1, offset: item.timestamp.replace(/[:TZ-]/g, '') });
								window.location.href = target;
							});
				if (item.type == 'subcat')
					$(catTitle[item.title.replace(catRegex, '')]).after(span);
				else
					$(linkTitle[item.title]).after(span);
			});
	});
};
}
});