Menü aufrufen
Toggle preferences menu
Persönliches Menü aufrufen
Nicht angemeldet
Ihre IP-Adresse wird öffentlich sichtbar sein, wenn Sie Änderungen vornehmen.

Benutzer:Col. o'neill/CatTools.js

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
var CatTools = {
	mode: 'AND',
	cat1: '',
	cat2: '',
	suggestions: [],
	continu: '',
	cat1Results: [],
	cat2Results: [],
	results: [],
	init: function(){
		$('#CatToolsInputWrapper').html(
			"<input id='CatToolsInputCat1' type='text' size='50' placeholder='Kategorie 1' list='CatToolsSugg1'>"+
			"<select id='CatToolsInputMode'>"+
				"<option value='AND' selected>und</option>"+
				"<option value='OR'>oder</option>"+
				"<option value='WITHOUT'>ohne</option>"+
			"</select>"+
			"<input id='CatToolsInputCat2' type='text' size='50' placeholder='Kategorie 2' list='CatToolsSugg2'>"+
			"<datalist id='CatToolsSugg1'></datalist>"+
			"<datalist id='CatToolsSugg2'></datalist>"+
			"<input id='CatToolsSubmit' type='button' value='Seiten anzeigen'>"
			);
		$('#CatToolsInputCat1').on('keyup', function(){
			CatTools.existsFeedback('CatToolsInputCat1');
			CatTools.suggest('CatToolsInputCat1', 'CatToolsSugg1');
		});
		$('#CatToolsInputCat2').on('keyup', function(){
			CatTools.existsFeedback('CatToolsInputCat2');
			CatTools.suggest('CatToolsInputCat2', 'CatToolsSugg2');
		});
		$('#CatToolsSubmit').on('click', function(){
			CatTools.reset();
			CatTools.cat1=$('#CatToolsInputCat1').val();
			CatTools.cat2=$('#CatToolsInputCat2').val();
			CatTools.mode=$('#CatToolsInputMode option:selected').val();
			CatTools.exec();
		});
	},
	suggest: function(inputID, datalistID){
		$.get(wgServer+wgScriptPath+'/api.php?action=opensearch&format=json&namespace=14&limit=10&search='+encodeURI($('#'+inputID).val()), function(d){
			if('string'==typeof d) d=JSON.parse(d);
			$('#'+datalistID).empty();
			d[1].forEach(function(v){
				$('#'+datalistID).append($('<option>')).attr('value',v.substring(10));
			});
		}, 'json');
	},
	existsFeedback: function(inputID){
		var exists;
		$.get(wgServer+wgScriptPath+'/api.php?action=query&format=json&titles='+encodeURI($('#'+inputID).val()), function(d){
			if('string'==typeof d) d=JSON.parse(d);
			if(d.query.pages.hasOwnProperty('-1')) exists = false;
			else exists = true;
		}, 'json');
		
		$(inputID).css('background-color', (exists ? '#a7f4a7' : '#f4a7a7'));
	},
	exec: function(){
		CatTools.getCatMembers(CatTools.cat1, 'cat1Results', '');
		while(CatTools.continu.length){
			CatTools.getCatMembers(CatTools.cat1, 'cat1Results', CatTools.continu);
		}
		
		CatTools.getCatMembers(CatTools.cat2, 'cat2Results', '');
		while(CatTools.continu.length){
			CatTools.getCatMembers(CatTools.cat2, 'cat2Results', CatTools.continu);
		}
		
		switch(CatTools.mode){
			default:
			case 'AND':
				CatTools.cat1Results.forEach(function(v){
					if(CatTools.cat2Results.includes(v)) results.push(v);
				});
				break;
			case 'OR':
				CatTools.cat1Results.forEach(function(v){
					if(!CatTools.results.includes(v)) results.push(v);
				});
				CatTools.cat2Results.forEach(function(v){
					if(!CatTools.results.includes(v)) results.push(v);
				});
				break;
			case 'WITHOUT':
				CatTools.cat1Results.forEach(function(v){
					if(!CatTools.cat2Results.includes(v)) results.push(v);
				});
		}
		
		CatTools.render();
	},
	getCatMembers: function(catName, storage, cont){
		$.get(wgServer+wgScriptPath+'/api.php?action=query&list=categorymembers&cmtitle=Kategorie:'+encodeURI(catName)+'&cmlimit=max'+(cont.length ? '&cmcontinue='+cont : ''), function(d){
			if('string'==typeof d) d=JSON.parse(d);
			
			if(d['query-continue']) CatTools.continu = d['query-continue'].categorymembers.cmcontinue;
			else CatTools.continu = '';
			
			d.query.categorymembers.forEach(function(v){
				CatTools[storage].push(v.title);
			});
		}, 'json');
	},
	render: function(){
		$('#CatToolsResultWrapper').show().append($('<ul>'));
		CatTools.results.forEach(function(v){
			$('#CatToolsResultWrapper ul').append($('<li>')).append($('<a>').attr('href','http://stargate-wiki.de/wiki/'+encodeURI(v)).attr('title',v).text(v));
		});
	},
	reset: function(){
		$('#CatToolsResultWrapper').hide().empty();
	}
};
$(CatTools.init);