مدیاویکی:Gadget-UserisOnlineOrNo.js

از ویکی‌سفر، راهنمای آزاد سفر

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
// کاربر آنلاین است یا خیر!؟
if(mw.config.get('wgNamespaceNumber')==2 || mw.config.get('wgNamespaceNumber')==3)
mw.loader.using('jquery.tipsy', function() {
    var user=mw.config.get('wgTitle').replace(/\/.*$/, '');
	if (!user)
		return;
		
	function tsToDate(rc) {
		var date = new Date(rc.timestamp);
		return date;
	}

	function ago(ms) {
		var s = ms / 1000;
		if (s < 100)
			return 'چند ثانیه پیش';
		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 'حوالی ' + num + est;
	}
	
	function pic(recent) {
		return 	recent
			? '//upload.wikimedia.org/wikipedia/commons/3/31/Button_Icon_Green.svg'
			: '//upload.wikimedia.org/wikipedia/commons/0/07/Button_Icon_Red.svg';
	}
	
    $.getJSON(mw.util.wikiScript('api'), 
		{action: 'query', list: 'usercontribs', ucuser: user, uclimit: '1', format:'json'}, 
		function (data) {
		   if (data && data.query && data.query.usercontribs && data.query.usercontribs.length) {
				var lastEditTime = tsToDate(data.query.usercontribs[0]),
					timeSinceEdit = new Date() - lastEditTime;
					recent = timeSinceEdit < 1000 * 60 * 20,
					page = data.query.usercontribs[0].title,
					pageLink = $('<a>', {href: mw.util.getUrl(page), text: page}),
					userLinkTitle = 'پیام ' + user + ' در صفحه بحث',
					userLink = $('<a>', {href: mw.util.getUrl('User Talk:' + user) + '?action=edit&section=new', title: userLinkTitle, text: user}),
					div = $('<div>')
						.append('آخرین ویرایش : ' + ago(timeSinceEdit) + '<br />')
						.append('در: ').append(pageLink).append('<br />')
						.append(' پیام بگذار در صفحه بحث: ').append(userLink),
					timer = null,
					img = $('<img>',{src: pic(recent)})
						.css({float: 'left'})
						.css({width: '12px'})
						.css({cursor: 'pointer'})
						.tipsy({gravity: 'nw', trigger: 'manual', title: function(){return div.html();}, html: true, fade: true})
						.mouseover(function() {
							img.tipsy('show')
						})
						.mouseout(function() {
							timer = setTimeout(function(){
								img.tipsy('hide')
							}, 5000);
						});
				$('.tipsy')
					.on('mouseover', function() {
						clearTimeout(timer);
					})
					.on('mouseout', function(){
						timer = setTimeout(function(){
							img.tipsy('hide')
						}, 1000);
					});
				$('#firstHeading').prepend(img);
			}
		}
     ); 
});