Szerkesztő:UTF48/qui.js
Megjelenés
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
- Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy 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:UTF48/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 '<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> */