User:RC711/common.js

/*

importScript('User:Obiwankenobi/intercat.js');

USAGE : Add the following line to your common.js page: importScript('User:Obiwankenobi/intercat.js'); Then, add category intersection tags to pages, like: American men|American writers or, to auto-open the first 100, like: American men|American writers You can add as many categories as you want, separated by "|". To use a different namespace, add the correct code to the front before the categories, separated by ";". 2;Wikipedians_in_Cambridgeshire|User en Namespace 0 = Mainspace Namespace 1 = Mainspace talk Namespace 2 = Userspace Namespace 3 = User_talk Namespace 4 = Wikipedia Namespace 5 = Wikipedia_talk var intercat = { e : [] , max : 3000 , columns : 3 , init : function { var me = this ; me.page = mw.config.get('wgPageName') ; me.server = mw.config.get('wgServer').match ( /^\/*([^.]+)\.([^.]+)/ ) ; $('div.intercat,div.intercat_open').each ( function {			var o = $(this) ;                        var cats;                        var ns;                        var nsarray = o.text.split(';'); // split off namespace ID if present                        if (nsarray.length == 1) {                                cats = nsarray[0];                                ns=0; //default to mainspace                        } else if (nsarray.length == 2) {                                ns = nsarray[0];                                cats = nsarray[1];                        } else {                                alert("Too many semicolons!");                        }			cats = cats.split('|') ; // now split the cats //                        var h = ''; //			if (cats.length > 1) { //                                h = " Intersection of " ; //different display logic if we're intersecting vs enumerating //                       } else { //                               h = " Recursive enumeration of all pages in " ; //                       }			var h = ' '; $.each ( cats, function ( k , v ) { //				if ( k > 0 ) h += " &times; " ; //				nn = escape ( v.replace(/ /g,'_') ) + "'>" + v.replace(/_/g,' '); //				h += " " ;   				var nn = escape ( v.replace(/ /g,'_') );				h += '';			} ) ; h += " | Show " ; h += "Loading... " ; h += "  " ; o.html ( h ). css ( { border:'1px solid #DDDDDD', padding:'2px' } ) ; var display = $(o.find('div.intercat_display')) ; var my_e = me.e.length ; me.e.push ( { o:o, cats:cats , loaded:{} , data:{} , offset:0, ns:ns, pagecount:0, total_results:0 } ) ; $(o.find('span.intercat_sh a')).click ( function {				var h = display.is(':visible') ? 'Show' : 'Hide' ;				$(this).text ( h ) ;				display.toggle ;				if ( display.is(':visible') ) me.show ( my_e ) ;				return false ;			} ) ; } ) ;               // auto-load all of the auto-open cats		$.each ( me.e, function ( my_e , v ) { if ( v.o.hasClass('intercat_open') ) { $(v.o.find('span.intercat_sh a')).click ; }		} ) ;	} ,	load : function ( my_e ) {		var me = this ;		$(me.e[my_e].o.find('.intercat_loading')).show ;		$.getJSON ( '//tools.wmflabs.org/catscan2/quick_intersection.php?callback=?', { lang:me.server[1] , project:me.server[2] , cats:me.e[my_e].cats.join("\n") , start:me.e[my_e].offset , ns:me.e[my_e].ns, format:'json', sparse:1, group_by_key:1, get_count:1, max:me.max }, function ( d ) { me.e[my_e].data[me.e[my_e].offset] = d.pages ; me.e[my_e].loaded[me.e[my_e].offset] = d.pagecount ; me.e[my_e].pagecount = d.pagecount; me.e[my_e].total_results = d.total_results ; $(me.e[my_e].o.find('.intercat_loading')).hide ; me.show ( my_e ) ; } ) ;	} ,	getRangeLink : function ( my_e, offset ) {		var me = this ;		if ( me.e[my_e].offset == offset ) return "" + (offset+1) + "&mdash;" + (offset+me.max) + "" ;		return "" + (offset+1) + "&mdash;" + (offset+me.max) + "" ;	} ,	show : function ( my_e ) {		var me = this ;		var off = me.e[my_e].offset ;		if ( undefined === me.e[my_e].loaded[off] ) return me.load ( my_e ) ;                // iterate over all other intersects and close them		$.each ( me.e , function ( my_e , v ) { if ( v != my_e ) { // this doesn't work - can you make this work? // $(me.e[v].o.hide)	 ; }		} ) ;		var navbar = [] ;		for ( var p = 0 ; p < off ; p += me.max ) {			navbar.push ( me.getRangeLink ( my_e, p ) ) ;		}		navbar.push ( me.getRangeLink ( my_e , off ) ) ;		if ( me.e[my_e].data[off].length == me.max ) {			navbar.push ( me.getRangeLink ( my_e , off+me.max ) ) ;			navbar.push ( '...' ) ;		}		var intersectOrEnum = ;               if (me.e[my_e].cats.length > 1) {                        intersectOrEnum = 'intersection';                } else {                        intersectOrEnum = 'category and all sub-categories';                }		var h =  ;                h += " The following " + me.e[my_e].pagecount + " pages are in this " + intersectOrEnum + " out of " + me.e[my_e].total_results + " total. This list may not reflect recent changes (learn more). " ;		h += " " + navbar.join(" | ") + " " ; 		h += "" ;		$.each ( me.e[my_e].data[off], function ( letter , list ) {			h += " " + letter + " " ;			$.each ( list ,	function ( k , v ) {				h += "" ;				h += v.replace(/_/g,' ') ;				h += "</li>" ;			} ) ;		} ) ;		h += "</ul>" ;		h += " " + navbar.join(" | ") + " " ; ;		$(me.e[my_e].o.find('div.intercat_display')).html ( h ) ;	} ,	the_end : '' } ; $ ( function {	if ( mw.config.get('wgAction') != 'view' ) return ;	intercat.init ; } ) ;