Szerkesztő:Xia/qui.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
/* <source lang="javascript">
Kérlek az alábbiakba ne nyúlj bele!
Használati útmutató: [[Szerkesztő:Teemeah/Qui]]. A Qui egy állapotjelző alkalmazás, mellyel könnyedén követheted, hogy WikiBarátaid éppen jelen vannak-e. Alkalmazásához írd be a következőket: "importScript( 'User:Teemeah/qui.js );" a saját [[Special:MyPage/vector.js]] oldaladra.  
    Fejlesztette: [[:en:User:TheDJ]]. Eredeti dokumentáció: [[:en:User:TheDJ/Qui]]. 
    Magyarította: [[User:Teemeah]]

<nowiki> */

// Local variables
var statuspage = '/Állapot';
var friendspage = '/QuiBarátok';
var watcherspage = '/QuiFigyelnek';
var linkprefix = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=User:';
var statusCookieName = 'wikipedia.qui.status';
var encodedUserName = encodeURIComponent(mw.config.get('wgUserName'));

var qui_system = {
	'online'  : [ 'elérhető',   '//upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Green_pog.svg/15px-Green_pog.svg.png' ],
	'around'  : [ 'hol van, hol nem',   '//upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Purple_pog.svg/15px-Purple_pog.svg.png' ],
	'busy'    : [ 'elfoglalt',     '//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Blue_pog.svg/15px-Blue_pog.svg.png' ],
	'sleep'   : [ 'alszik', '//upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Red_pog.svg/15px-Red_pog.svg.png' ],
	'offline' : [ 'nincs itt',  '//upload.wikimedia.org/wikipedia/commons/thumb/4/46/Black_pog.svg/15px-Black_pog.svg.png' ],
	'unknown' : [ 'Ismeretlen',  '//upload.wikimedia.org/wikipedia/commons/thumb/1/1a/White_pog.svg/15px-White_pog.svg.png' ],
};

function qui_init() {
	// Import the CSS elements
	if ( typeof quivar_custom_stylesheet !== 'undefined' ) {
		importStylesheet( quivar_custom_stylesheet );
	} else {
		importStylesheet( 'User:Teemeah/qui.css' );
	}

	var current_status = $.cookie( statusCookieName ) || 'unknown';
	// Add the change status menu
	if( current_status == 'unknown' ) {
		qui_downloadStatus();
	}

	if ( qui_system[ current_status ] === undefined ) {
		mw.notify( $.parseHTML( '<a href="' + mw.config.get('wgScript') + '?title=WP:Qui">Qui</a> nem ismeri fel az állapotot.\nKérlek, ürítsd ki az <a href="' + mw.config.get('wgScript') + '?title=Special:MyPage/Állapot">Állapotjelző oldalad</a>.' ) );
		current_status = 'unknown';
	}
	qui_addMenu( current_status );
}

function qui_addMenu( current_status ) {
	var $indicator = $( '<div>' )
		.addClass( 'qui-indicator noprint' )
		.attr( 'id', 'qui-indicator' );

	var $link = $( '<a>' )
		.attr( 'title', qui_system[ current_status ][ 0 ] )
		.attr( 'id', 'qui-status' )
		.click( qui_openMenu )
		.appendTo( $indicator );
	$( '<img>' )
		.addClass( 'qui-status-image' )
		.attr( 'src', qui_system[ current_status ][ 1 ] )
		.attr( 'alt', qui_system[ current_status ][ 0 ] )
		.appendTo( $link );

	var $menu = $( '<ul>' )
		.addClass( 'qui-menu' )
		.attr( 'id', 'qui-menu' );

	for ( var astatus in qui_system ) {
		if ( astatus !== 'unknown' && typeof qui_system[ astatus ] === 'object' && qui_system[ astatus ].length ) {
			$( '<li>' )
				.addClass( 'qui-menuelement qui-statusitem qui-' + astatus + '-icon' )
				.attr( 'id', 'qui-' + astatus )
				.text( qui_system[ astatus ][ 0 ] )
				.click( qui_switchStatus )
				.appendTo( $menu );
		}
	}

	if ( mw.config.get( 'wgNamespaceNumber' ) == 2 || mw.config.get( 'wgNamespaceNumber' ) == 3 ) {
		var subject_user = mw.config.get( 'wgTitle' ).split( '/' )[ 0 ];

		if ( subject_user != mw.config.get( 'wgUserName' ) ) {
			$( '<li>' )
				.addClass( 'qui-menuelement' )
				.attr( 'id', 'qui-add-friend' )
				.text( 'Felveszem: ' + subject_user )
				.data( 'name', subject_user )
				.click( qui_addFriend )
				.appendTo( $menu );

			
			$( '<li>' )
				.addClass( 'qui-menuelement' )
				.attr( 'id', 'qui-del-friend' )
				.text( 'Leszedem: ' + subject_user )
				.data( 'name', subject_user )
				.click( qui_delFriend )
				.appendTo( $menu );
		}
	}

	$( '<li>' )
		.addClass( 'qui-menuelement' )
		.attr( 'id', 'qui-watchlist' )
		.text( 'Qui figyel téged?' )
		.click( qui_openWatchList )
		.appendTo( $menu );
	$( '<li>' )
		.addClass( 'qui-menuelement' )
		.attr( 'id', 'qui-friends' )
		.text( 'QuiBarátok listája' )
		.click( qui_openFriendsMenu )
		.appendTo( $menu );

	$indicator
		.on( 'click mouseover', qui_openMenu )
		.on( 'mouseout', qui_closeMenu );
	$menu
		.on( 'mouseover', qui_openMenu )
		.on( 'mouseout', qui_closeMenu );

	$indicator
		.append( $menu )
		.appendTo( 'body' );
}

function qui_openMenu() {
	$( '#qui-menu' ).show();
}

function qui_closeMenu() {
	$( '#qui-menu' ).hide();
}

function qui_switchStatus( e ) {
	var status = $( this ).attr( 'id' );
	if ( status ) {
		function success() {
			$.cookie( statusCookieName, status, { path: '/' } );
			$( '#qui-status' )
				.attr( 'title', qui_system[ status ][ 0 ] )
				.find( 'img' )
					.attr( 'src', qui_system[ status ][ 1 ] )
					.attr( 'alt', qui_system[ status ][ 0 ] );
		}
		function fail( msg ) {
			alert( 'Az állapotot módosítása sikertelen. Hibaüzenet:\n' + msg );
		}
		status = status.replace( /^qui\-/, '' );
		var qui_cmt = mw.config.get( 'wgUserName' ) + ' most ' + qui_system[ status ][ 0 ].toLowerCase() + '.';
		qui_edit(
			statuspage,
			function () {
			return {
					text: status,
					summary: qui_cmt
				};
			},
			success,
			function ( msg ) {
				if ( msg == 'nocreate-missing' ) {
					qui_create( statuspage, status, { summary: qui_cmt }, success );
				} else {
					fail( msg );
				}
			}
		);
	}
}

function qui_downloadStatus() {
	$.get( linkprefix + encodedUserName + statuspage + '&action=raw' ).done( function ( status ) {
		$.cookie( statusCookieName, status, { path: '/' } );
		qui_addMenu( status );
	} );
}

var buddy_list = {};
// Array fmt: friend: [status, lastseen, HTMLobj]
    
function qui_openFriendsMenu() {
	$.get( linkprefix + encodedUserName + friendspage + '&action=raw' ).done( function ( text ) {
		var users = text.split( /[\r\n]/ );
		var userexp = /\[\[User:([^\/]*)/;
		for ( var i = 0; i < users.length; i++ ) {
			var username = userexp.exec( users[ i ] )[ 1 ];
			if ( username ) {
				buddy_list[ username ] = { status: false, lastseen: false };
				qui_getFriendStatus( username );
			}
		}
	} );
}

function qui_getFriendStatus( friend ) {
	$.get( linkprefix + encodeURIComponent( friend ) + statuspage + '&action=raw' ).done( function ( status ) {
		if ( qui_system[ status ] === undefined ) {
			status = 'unknown';
		}
		buddy_list[ friend ].status = status;
		qui_getFriendLastSeen( friend );
	} );
}

function qui_getFriendLastSeen( friend ) {
	mw.loader.using( 'mediawiki.api', function () {
		new mw.Api().get( {
			action: 'query',
			list: 'usercontribs',
			uclimit: 1,
			ucprop: 'timestamp',
			ucuser: friend
		} ).done( function ( data ) {
			if ( data.query.usercontribs[ 0 ] ) {
				var lastseen = qui_APIToJSDate( data.query.usercontribs[ 0 ].timestamp );
				buddy_list[ friend ].lastseen = lastseen;
			}
			qui_addFriendToMenu( friend );
		} );
	} );
}

function qui_addFriendToMenu( friend ) {
	var status = buddy_list[ friend ].status;
	var lastseen = buddy_list[ friend ].lastseen;

	var lastseen_string = lastseen ? ' (' + qui_lastseenString( lastseen ) + ')' : '';

	$( '<li>' )
		.addClass( 'qui-menuelement qui-friendsitem qui-' + status + '-icon' )
		.attr( 'id', 'qui-friendsitem-' + encodeURIComponent( friend ) )
		.html(
			'<a class="qui-friend-link" href="' + mw.util.getUrl( 'User:' + friend ) + '"'
			+ ' title="' + friend + ' jelenleg ' + qui_system[ status ][ 0 ] + '">' + friend + '</a>'
			+ ' (<a class="qui-friend-talklink" href="' + mw.util.getUrl( 'User talk:' + friend ) + '" title="Vitalap">V</a>)'
			+ ' (<a class="qui-friend-dellink" data-name="' + friend + '" title="QuiBarát törlése">T</a>)' + lastseen_string
		)
		.appendTo( '#qui-menu' )
		.find( '.qui-friend-dellink' ).click( qui_delFriend );

	$( '#qui-friends' ).hide();
}

function qui_addFriend( e ) {
	function success() {
		buddy_list[ newfriend ] = { status: false, lastseen: false };
		qui_getFriendStatus( newfriend );
	}
	function fail( msg ) {
		alert( 'A szaki hozzáadása sikertelen. Hibaüzenet:\n' + msg );
	}
	var newfriend = $( this ).data( 'name' );
    var userexp = new RegExp( '\\[\\[User:' + newfriend + watcherspage + '.*[\r\n]*', 'g' );
    var content = '[[User:' + newfriend + watcherspage + '|' + newfriend + ']]';
    var qui_cmt = '[[User:' + newfriend + '|' + newfriend + ']] hozzáadása a [[WP:Qui|Qui]]Barátokhoz';
    var is_added = false;

	qui_edit(
		friendspage,
		function ( revision ) {
			var currentlist = revision.content;
			if ( currentlist.match( userexp ) ) {
				alert( 'Úgy tűnik, ez a szaki már szerepel a QuiBarátaid listáján.' );
				return currentlist;
			}
			currentlist += '\n' + content;
			currentlist.replace( /[\r\n]+/, '\n' );
			is_added = true;
			return {
				text: currentlist,
				summary: qui_cmt
			};
		},
		success,
		function ( msg ) {
			if ( msg == 'nocreate-missing' ) {
				qui_create( friendspage, content, { summary: qui_cmt }, success, fail );
			} else {
				fail( msg );
			}
		}
	);
}

function qui_delFriend( e ) {
	var oldfriend = $( this ).data( 'name' );
	var userexp = new RegExp( '\\[\\[User:' + oldfriend + watcherspage + '.*[\r\n]*', 'g' );
	var qui_cmt = '[[User:' + oldfriend + '|' + oldfriend + ']] eltávolítása a [[WP:Qui|Qui]]Barátok listájáról';

	qui_edit(
		friendspage,
		function ( revision ) {
			var currentlist = revision.content;
			currentlist = currentlist.replace( userexp, '' );
			return {
				text: currentlist,
				summary: qui_cmt,
				minor: true
			};
		},
		function () {
			$( '#qui-friendsitem-' + encodeURIComponent( oldfriend ) ).remove();
		},
		function ( msg ) {
			alert( 'A szaki eltávolítása sikertelen. Hibaüzenet:\n' + msg );
		}
	);
}

function qui_openWatchList() {
	document.location.href = mw.util.getUrl( 'Special:Whatlinkshere/User:' + mw.config.get( 'wgUserName' ) ) + watcherspage;
}

function qui_lastseenString( our_lastseentime ) {
	var lastseentime = our_lastseentime.getTime();
	var currentDate = new Date().getTime();
	var aminute = 60000; var ahour = 60*aminute; var aday = 24*ahour; amonth = 30.5*aday; var ayear = 12*amonth;
	var aminuteAgo = currentDate - aminute*1.5;
	var ahourAgo = currentDate - ahour*1.5;
	var adayAgo = currentDate - aday*1.5;
	var amonthAgo = currentDate - amonth*1.5;
	var ayearAgo = currentDate - ayear*1.5;

	if( lastseentime < ayearAgo )
		return ''+Math.round((ayearAgo - lastseentime) / ayear)+'y';
	else if( lastseentime < amonthAgo )
		return ''+Math.round((amonthAgo - lastseentime) / amonth)+'mo';
	else if( lastseentime < adayAgo )
		return ''+Math.round((adayAgo - lastseentime) / aday)+'d';
	else if( lastseentime < ahourAgo )
		return ''+Math.round((ahourAgo - lastseentime) / ahour)+'h';
	else if( lastseentime < aminuteAgo )
		return ''+Math.round((aminuteAgo - lastseentime) / aminute)+'m';
	else return '&lt;m';
}

function qui_APIToJSDate(api_date) {
	var hourpart = api_date.slice(api_date.indexOf('T')+1, api_date.indexOf('Z'));
	var hourparts = hourpart.split(':');
	var datepart = api_date.slice(0, api_date.indexOf('T'));
	var dateparts = datepart.split('-');
	var js_date = new Date( dateparts[0], dateparts[1]-1, dateparts[2], hourparts[0], hourparts[1], hourparts[2], 0);
	return js_date;
}

function qui_edit( subpage, callback, done, fail ) {
	mw.loader.using( [ 'mediawiki.api', 'mediawiki.api.edit' ], function () {
		new mw.Api().edit( 'User:' + mw.config.get( 'wgUserName' ) + subpage, callback ).done( done ).fail( fail );
	} )
	.fail( fail );
}

function qui_create( subpage, text, params, done, fail ) {
	mw.loader.using( [ 'mediawiki.api', 'mediawiki.api.edit' ], function () {
		new mw.Api().create( 'User:' + mw.config.get( 'wgUserName' ) + subpage, params, text ).done( done ).fail( fail );
	} )
	.fail( fail );
}

$( qui_init );

/* </nowiki></source> */