Szerkesztő:Tgr/watchlist.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
// InstaUnwatch
( function () {
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist') {
		function updateButton( $button, type ) {
			var text, title, className;
			switch ( type ) {
				case 'unwatch':
					text = ' [-]';
					title = 'Eltávolítás a figyelőlistáról';
					className = 'unwatch-button';
					break;
				case 'watch':
					text = ' [+]';
					title = 'Visszahelyezés a figyelőlistára';
					className = 'watch-button';
					break;
				case 'wait':
					text = ' […]';
					title = 'folyamatban…';
					className = 'watch-button-inactive';
					break;
				case 'error':
					text = ' [x]';
					title = 'hiba!';
					className = 'watch-button-inactive';
					break;
			}
			return $button
				.text( text )
				.removeClass( 'unwatch-button watch-button watch-button-inactive' )
				.addClass( className )
				.prop( 'title', title );
		}
		
		function installRemoveButton( $ ) {
			// var $diffTexts = $( 'mw-plusminus-pos, mw-plusminus-neg, mw-plusminus-null' );
			$( '.mw-changeslist-title' ).each( function() {
				$( this ).after(
					updateButton( $( '<a>' ).prop( 'href', '#' ), 'unwatch' )
				);
			} );
			
			$( '.mw-changeslist' ).on( 'click', '.watch-button, .unwatch-button', handleButtonClick );
			$( '.mw-changeslist' ).on( 'click', '.watch-button-inactive', function () {
				return false;
			} );
		}
		
		function handleButtonClick( e ) {
			var doAction, undoActionName,
				$button = $( this ),
				isWatchAction = $button.hasClass( 'watch-button' );
				
			e.preventDefault();
			
			if ( isWatchAction ) {
				doAction = watch;
				undoActionName = 'unwatch';
			} else {
				doAction = unwatch;
				undoActionName = 'watch';
			}
			
			updateButton( $button, 'wait' );
			doAction( getPageName( $button ) ).done( function () {
				updateButton( $button, undoActionName );
			} ).fail( function ( error ) {
				updateButton( $button, 'error' );
				mw.log.warn( 'watchlist.js: ', error );
			} );
		}
		
		function getPageName ( $button ) {
			return $button.prev().text();
		}
		
		function watch( pageName, unwatch ) {
			var api = new mw.Api(),
				params = { action: 'watch', titles: pageName },
				action = unwatch ? 'unwatch' : 'watch';
			if ( unwatch ) {
				params.unwatch = 1;
			}
			return api.postWithToken( 'watch', params ).then( function ( data ) {
				if ( !data || !data.watch || !data.watch[0] || ! action in data.watch[0] ) {
					mw.log.warn( 'watchlist.js: ', data );
					return $.Deferred().reject();
				}
				return data;
			} );
		}
		function unwatch( pageName ) {
			return watch ( pageName, true );
		}

		$( installRemoveButton );
	}
} () );