From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// Forked from [[User:Writ Keeper/Scripts/TeahouseTalkbackLink.js]]

// <nowiki>

function tagCategory()

{

	if ($("#mw-content-text").length > 0)

	{

		var $nodeListC = $('a[title^="Category:"]'),

		pdneC = ' (page does not exist)';

		if ($nodeListC !== null)

		{

			var i;

			for (i = 0; i < $nodeListC.length; i++)

			{

				var $link = $($nodeListCi]);

				var newLinkStringC = "|";

				var redlinkC = false;

				var newLinkHrefC = $link0].title;

				if(newLinkHrefC.includes(pdneC))

				{

					redlinkC = true;

					newLinkHrefC = newLinkHrefC.replace(pdneC, "");

				}

				var newLinkIdC = "TCsubmit" + i;

				if (redlinkC === false)

				{

				newLinkStringC += '<a style="font-size:x-small; display:inline-block;" title="Tag page for deletion." noPopup=1 id="' + newLinkIdC + 'Delete">Delete</a>|';

				newLinkStringC += '<a style="font-size:x-small; display:inline-block;" title="Tag page as empty category." noPopup=1 id="' + newLinkIdC + 'Tag">Tag</a>';

				$($link).after(newLinkStringC);

				$("#" + newLinkIdC + "Delete").click({"page":newLinkHrefC}, deleteSubmitC);

				$("#" + newLinkIdC + "Tag").click({"page":newLinkHrefC}, tagSubmitC);

				}

			}

		}

	}

}





function deleteSubmitC(event) {

	var page = event.data.page;

	window.UnusedCategoriesPage = page; // Page will be converted to ID later

	var params = {

			action: 'query',

			format: 'json',

			titles: page,

			prop: 'categoryinfo'

		},

		api = new mw.Api();

	

	api.get( params ).done( function ( data ) {

		var pages = data.query.pages,

			page;

		for ( page in pages ) {

			window.numPagesInCategoryC = pages page ].categoryinfo.pages + pages page ].categoryinfo.subcats;

			if (window.numPagesInCategoryC < 1) { // pages in cat < 1, else skip

				checkIfTaggedForDeletion( window.UnusedCategoriesPage, page );

			}

			else {

				mw.notify("Too many pages in category ("+window.numPagesInCategoryC+"), aborted.");

			}	

			}

	} );

	

}

function checkIfTaggedForDeletion ( page, pageID ) {

	window.abortIfCatEmpty = false;

	var params = {

			action: 'query',

			format: 'json',

			prop: 'categories',

			titles: page

		},

		api = new mw.Api();

	

	api.get( params ).done( function ( data ) {

		var pages = data.query.pages,

			p;

			for ( p in pages ) {

				if (pages p ].categories != null) { // has cats

				//alert(pages[ p ].categories)

				pages p ].categories.forEach( function ( cat ) {

					if ('Category:Empty categories awaiting deletion' === cat.title || 'Category:All categories for discussion' === cat.title || 'Category:Candidates for speedy deletion' === cat.title) {

						// Abort, already tagged

						window.abortIfCatEmpty = true;

						mw.notify('Aborted, "'+page+'" is in a "category discussion" category.');

					}

					

					

					

				} );

			}

		}

		if (window.abortIfCatEmpty === false) {

			checkPageWikitext2( window.UnusedCategoriesPage, pageID );

		}

		//else { // Empty page - no categories

		//	checkPageWikitext2( window.UnusedCategoriesPage, pageID );

		//}

	} );

}



function checkPageWikitext2(page, pageID) {

	    var send_req = {

		    action: 'expandtemplates',

		    text: "{{:"+page+"}}",

		    titles: page,

		    prop: 'wikitext',

		};

		$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) {

		    window.textToCheckForCategories = $( response ).find( '*' ).text();

		    if (window.textToCheckForCategories.match(/__EXPECTUNUSEDCATEGORY__/) === null) { // No match

    			getPageDataC(pageID);



			}

		    else {

		    	mw.notify("'"+page+"' contains __EXPECTUNUSEDCATEGORY__, aborted.");

    		}

	    

});

}

function getPageDataC( pageID ) {

	// Get page creator - taken from [[User:Eizen/PageCreator.js]]

	var PageCreator = {

	        getData: function (callback) {

            var that = this;



            this.api.get({

                action: "query",

                prop: "revisions",

                titles: window.UnusedCategoriesPage,

                rvprop: "ids|timestamp|user|userid",

                rvlimit: "1",

                rvdir: "newer",

                format: "json"

            }).done(function ($data) {

                if (!$data.error) {

                    callback(that, $data);

                }

            });

        },

        /**

         * @method handleData

         * @param {object} that

         * @param {json} $result

         * @returns {void}

         */

        handleData: function (that, $result) {

        	//var pageID = getID( page )

        	//mw.notify(pageID)

            var $data = $result.query.pagespageID].revisions0];

            submitDeleteEditsC( $data.user, pageID );

        },

        init: function () {

        	this.api = new mw.Api();

        	this.getData(this.handleData);

        }

        

	};

	PageCreator.init();

}

function submitDeleteEditsC (pageCreator, page) {

	// Check

	if ( !confirm( "Are you sure? (Category contains "+window.numPagesInCategoryC+" pages.)")){

		mw.notify("Aborted.");

		return;

	}

	// Tag for deletion

	var requestDataC =

	{

		minor: false,

		prependtext: "{{db-catempty|help=off}}\n",

		summary: "Requesting speedy deletion ([[Wikipedia:Criteria for speedy deletion#C1. Unpopulated categories|CSD C1]]) (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	new mw.Api().(window.UnusedCategoriesPage, function() {

		return requestDataC;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify("'"+window.UnusedCategoriesPage+"' tagged for deletion!");

			}

			else

			{

				alert('There was an error tagging "'+window.UnusedCategoriesPage+'" for deletion. Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to tag "'+window.UnusedCategoriesPage+'" for deletion. Error: ' + data);

		

	});

	// Notify talk



	var requestDataC2 =

	{

		minor: false,

		appendtext: "\n{{subst:db-catempty-notice|"+window.UnusedCategoriesPage+"}} ~~~~",

		summary: "Notifying user ([[Wikipedia:Criteria for speedy deletion#C1. Unpopulated categories|CSD C1]]) (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	//mw.notify("Created by: "+pageCreator)

	//mw.notify("Tagging: "+window.UnusedCategoriesPage)

	//mw.notify("Page ID: "+page)

	if (pageCreator.match(/bot/i) === null) { // page creator isn't a bot - no match for 'bot' in username

       if (pageCreator != 'Starcheerspeaksnewslostwars') {

	new mw.Api().('User_talk:'+pageCreator, function() { 

		

		return requestDataC2;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify("'User:"+pageCreator+"' notified.");

			}

			else

			{

				alert('There was an error notifying "'+pageCreator+'". Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to notify the user "'+pageCreator+'". Error: ' + data);

		

	});

	}

		else {

			mw.notify('User:"'+pageCreator+'" was not notified, per request.');

		}

	}

	else {

		mw.notify("'User:"+pageCreator+"' is a bot, skipping.");

	}



}

function getID( page ) {

    mw.notify(page);

	var params = {

		action: 'query',

		format: 'json',

		titles: window.UnusedCategoriesPage,

		prop: 'info',

	},

	api = new mw.Api();



	api.get( params ).done( function ( data ) {

	var pages = data.query.pages,

		p;

	for ( p in pages ) {

		mw.notify(pages p ].pageid);

		return pages p ].pageid;

	}

} );

}





function tagSubmitC(event){

	var page = event.data.page;

	checkPageWikitext(page);



}

function checkPageWikitext(page) {

	    var send_req = {

		    action: 'expandtemplates',

		    text: "{{:"+page+"}}",

		    titles: page,

		    prop: 'wikitext',

		};

		$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) {

		    window.textToCheckForCategories = $( response ).find( '*' ).text();

    		tagSubmitC2(page);

	    

});

}

function tagSubmitC2(page) {

	if (window.textToCheckForCategories.match(/__EXPECTUNUSEDCATEGORY__/) != null) { // There's a match

    	mw.notify( page+" contains __EXPECTUNUSEDCATEGORY__, aborted.");

	    return;

	}

	if ( !confirm( "Are you sure?")){

		mw.notify("Aborted.");

		return;

	}

	var requestDataC =

	{

		minor: false,

		prependtext: "{{Possibly empty category}}\n",

		summary: "+{{[[Template:Possibly empty category|Possibly empty category]]}} (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	new mw.Api().(page, function() {

		return requestDataC;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify(page+" tagged with {{Possibly empty category}}!");

			}

			else

			{

				alert('There was an error tagging "'+page+'". Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to tag "'+page+'". Error: ' + data);

	});

}

if (mw.config.get("wgPageName") === "Wikipedia:Database_reports/Empty_categories" || mw.config.get("wgPageName") === "Special:UnusedCategories")

{

	mw.loader.using("mediawiki.api", function() 

	{

		// Taken from [[User:Anomie/linkclassifier.js]] to highlight categories tagged for deletion

mw.loader.getScript('//en.wikipedia.org/?title=User:Anomie/linkclassifier.js&action=raw&ctype=text/javascript')

.then( function () { 

		// Linkback: [[User:Anomie/linkclassifier.js]]

		importStylesheet('User:Anomie/linkclassifier.css'); // Linkback: [[User:Anomie/linkclassifier.css]]

        // needs delay - wait until class applied (else does nothing. TODO)

		$('a.deletion').parent().remove(); // hide tagged for deletion

        })

		tagCategory();

	});

}

// </nowiki>
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// Forked from [[User:Writ Keeper/Scripts/TeahouseTalkbackLink.js]]

// <nowiki>

function tagCategory()

{

	if ($("#mw-content-text").length > 0)

	{

		var $nodeListC = $('a[title^="Category:"]'),

		pdneC = ' (page does not exist)';

		if ($nodeListC !== null)

		{

			var i;

			for (i = 0; i < $nodeListC.length; i++)

			{

				var $link = $($nodeListCi]);

				var newLinkStringC = "|";

				var redlinkC = false;

				var newLinkHrefC = $link0].title;

				if(newLinkHrefC.includes(pdneC))

				{

					redlinkC = true;

					newLinkHrefC = newLinkHrefC.replace(pdneC, "");

				}

				var newLinkIdC = "TCsubmit" + i;

				if (redlinkC === false)

				{

				newLinkStringC += '<a style="font-size:x-small; display:inline-block;" title="Tag page for deletion." noPopup=1 id="' + newLinkIdC + 'Delete">Delete</a>|';

				newLinkStringC += '<a style="font-size:x-small; display:inline-block;" title="Tag page as empty category." noPopup=1 id="' + newLinkIdC + 'Tag">Tag</a>';

				$($link).after(newLinkStringC);

				$("#" + newLinkIdC + "Delete").click({"page":newLinkHrefC}, deleteSubmitC);

				$("#" + newLinkIdC + "Tag").click({"page":newLinkHrefC}, tagSubmitC);

				}

			}

		}

	}

}





function deleteSubmitC(event) {

	var page = event.data.page;

	window.UnusedCategoriesPage = page; // Page will be converted to ID later

	var params = {

			action: 'query',

			format: 'json',

			titles: page,

			prop: 'categoryinfo'

		},

		api = new mw.Api();

	

	api.get( params ).done( function ( data ) {

		var pages = data.query.pages,

			page;

		for ( page in pages ) {

			window.numPagesInCategoryC = pages page ].categoryinfo.pages + pages page ].categoryinfo.subcats;

			if (window.numPagesInCategoryC < 1) { // pages in cat < 1, else skip

				checkIfTaggedForDeletion( window.UnusedCategoriesPage, page );

			}

			else {

				mw.notify("Too many pages in category ("+window.numPagesInCategoryC+"), aborted.");

			}	

			}

	} );

	

}

function checkIfTaggedForDeletion ( page, pageID ) {

	window.abortIfCatEmpty = false;

	var params = {

			action: 'query',

			format: 'json',

			prop: 'categories',

			titles: page

		},

		api = new mw.Api();

	

	api.get( params ).done( function ( data ) {

		var pages = data.query.pages,

			p;

			for ( p in pages ) {

				if (pages p ].categories != null) { // has cats

				//alert(pages[ p ].categories)

				pages p ].categories.forEach( function ( cat ) {

					if ('Category:Empty categories awaiting deletion' === cat.title || 'Category:All categories for discussion' === cat.title || 'Category:Candidates for speedy deletion' === cat.title) {

						// Abort, already tagged

						window.abortIfCatEmpty = true;

						mw.notify('Aborted, "'+page+'" is in a "category discussion" category.');

					}

					

					

					

				} );

			}

		}

		if (window.abortIfCatEmpty === false) {

			checkPageWikitext2( window.UnusedCategoriesPage, pageID );

		}

		//else { // Empty page - no categories

		//	checkPageWikitext2( window.UnusedCategoriesPage, pageID );

		//}

	} );

}



function checkPageWikitext2(page, pageID) {

	    var send_req = {

		    action: 'expandtemplates',

		    text: "{{:"+page+"}}",

		    titles: page,

		    prop: 'wikitext',

		};

		$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) {

		    window.textToCheckForCategories = $( response ).find( '*' ).text();

		    if (window.textToCheckForCategories.match(/__EXPECTUNUSEDCATEGORY__/) === null) { // No match

    			getPageDataC(pageID);



			}

		    else {

		    	mw.notify("'"+page+"' contains __EXPECTUNUSEDCATEGORY__, aborted.");

    		}

	    

});

}

function getPageDataC( pageID ) {

	// Get page creator - taken from [[User:Eizen/PageCreator.js]]

	var PageCreator = {

	        getData: function (callback) {

            var that = this;



            this.api.get({

                action: "query",

                prop: "revisions",

                titles: window.UnusedCategoriesPage,

                rvprop: "ids|timestamp|user|userid",

                rvlimit: "1",

                rvdir: "newer",

                format: "json"

            }).done(function ($data) {

                if (!$data.error) {

                    callback(that, $data);

                }

            });

        },

        /**

         * @method handleData

         * @param {object} that

         * @param {json} $result

         * @returns {void}

         */

        handleData: function (that, $result) {

        	//var pageID = getID( page )

        	//mw.notify(pageID)

            var $data = $result.query.pagespageID].revisions0];

            submitDeleteEditsC( $data.user, pageID );

        },

        init: function () {

        	this.api = new mw.Api();

        	this.getData(this.handleData);

        }

        

	};

	PageCreator.init();

}

function submitDeleteEditsC (pageCreator, page) {

	// Check

	if ( !confirm( "Are you sure? (Category contains "+window.numPagesInCategoryC+" pages.)")){

		mw.notify("Aborted.");

		return;

	}

	// Tag for deletion

	var requestDataC =

	{

		minor: false,

		prependtext: "{{db-catempty|help=off}}\n",

		summary: "Requesting speedy deletion ([[Wikipedia:Criteria for speedy deletion#C1. Unpopulated categories|CSD C1]]) (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	new mw.Api().(window.UnusedCategoriesPage, function() {

		return requestDataC;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify("'"+window.UnusedCategoriesPage+"' tagged for deletion!");

			}

			else

			{

				alert('There was an error tagging "'+window.UnusedCategoriesPage+'" for deletion. Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to tag "'+window.UnusedCategoriesPage+'" for deletion. Error: ' + data);

		

	});

	// Notify talk



	var requestDataC2 =

	{

		minor: false,

		appendtext: "\n{{subst:db-catempty-notice|"+window.UnusedCategoriesPage+"}} ~~~~",

		summary: "Notifying user ([[Wikipedia:Criteria for speedy deletion#C1. Unpopulated categories|CSD C1]]) (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	//mw.notify("Created by: "+pageCreator)

	//mw.notify("Tagging: "+window.UnusedCategoriesPage)

	//mw.notify("Page ID: "+page)

	if (pageCreator.match(/bot/i) === null) { // page creator isn't a bot - no match for 'bot' in username

       if (pageCreator != 'Starcheerspeaksnewslostwars') {

	new mw.Api().('User_talk:'+pageCreator, function() { 

		

		return requestDataC2;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify("'User:"+pageCreator+"' notified.");

			}

			else

			{

				alert('There was an error notifying "'+pageCreator+'". Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to notify the user "'+pageCreator+'". Error: ' + data);

		

	});

	}

		else {

			mw.notify('User:"'+pageCreator+'" was not notified, per request.');

		}

	}

	else {

		mw.notify("'User:"+pageCreator+"' is a bot, skipping.");

	}



}

function getID( page ) {

    mw.notify(page);

	var params = {

		action: 'query',

		format: 'json',

		titles: window.UnusedCategoriesPage,

		prop: 'info',

	},

	api = new mw.Api();



	api.get( params ).done( function ( data ) {

	var pages = data.query.pages,

		p;

	for ( p in pages ) {

		mw.notify(pages p ].pageid);

		return pages p ].pageid;

	}

} );

}





function tagSubmitC(event){

	var page = event.data.page;

	checkPageWikitext(page);



}

function checkPageWikitext(page) {

	    var send_req = {

		    action: 'expandtemplates',

		    text: "{{:"+page+"}}",

		    titles: page,

		    prop: 'wikitext',

		};

		$.get( mw.config.get( 'wgScriptPath' ) + '/api.php', send_req, function( response ) {

		    window.textToCheckForCategories = $( response ).find( '*' ).text();

    		tagSubmitC2(page);

	    

});

}

function tagSubmitC2(page) {

	if (window.textToCheckForCategories.match(/__EXPECTUNUSEDCATEGORY__/) != null) { // There's a match

    	mw.notify( page+" contains __EXPECTUNUSEDCATEGORY__, aborted.");

	    return;

	}

	if ( !confirm( "Are you sure?")){

		mw.notify("Aborted.");

		return;

	}

	var requestDataC =

	{

		minor: false,

		prependtext: "{{Possibly empty category}}\n",

		summary: "+{{[[Template:Possibly empty category|Possibly empty category]]}} (via [[User:Qwerfjkl/scripts/unusedCategories|unusedCategories.js]])"

	};

	new mw.Api().(page, function() {

		return requestDataC;

	}).done(function(data) {

		

			if (data && data.result && data.result === 'Success')

			{

				mw.notify(page+" tagged with {{Possibly empty category}}!");

			}

			else

			{

				alert('There was an error tagging "'+page+'". Code: ' + data);

			}

	}).fail(function(data) {

			alert('There was an error using AJAX to tag "'+page+'". Error: ' + data);

	});

}

if (mw.config.get("wgPageName") === "Wikipedia:Database_reports/Empty_categories" || mw.config.get("wgPageName") === "Special:UnusedCategories")

{

	mw.loader.using("mediawiki.api", function() 

	{

		// Taken from [[User:Anomie/linkclassifier.js]] to highlight categories tagged for deletion

mw.loader.getScript('//en.wikipedia.org/?title=User:Anomie/linkclassifier.js&action=raw&ctype=text/javascript')

.then( function () { 

		// Linkback: [[User:Anomie/linkclassifier.js]]

		importStylesheet('User:Anomie/linkclassifier.css'); // Linkback: [[User:Anomie/linkclassifier.css]]

        // needs delay - wait until class applied (else does nothing. TODO)

		$('a.deletion').parent().remove(); // hide tagged for deletion

        })

		tagCategory();

	});

}

// </nowiki>

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook