<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="he">
	<id>http://www.breslev.wiki/index.php?action=history&amp;feed=atom&amp;title=%D7%9E%D7%93%D7%99%D7%94_%D7%95%D7%99%D7%A7%D7%99%3AGadget-Cat-a-lot.js</id>
	<title>מדיה ויקי:Gadget-Cat-a-lot.js - היסטוריית גרסאות</title>
	<link rel="self" type="application/atom+xml" href="http://www.breslev.wiki/index.php?action=history&amp;feed=atom&amp;title=%D7%9E%D7%93%D7%99%D7%94_%D7%95%D7%99%D7%A7%D7%99%3AGadget-Cat-a-lot.js"/>
	<link rel="alternate" type="text/html" href="http://www.breslev.wiki/index.php?title=%D7%9E%D7%93%D7%99%D7%94_%D7%95%D7%99%D7%A7%D7%99:Gadget-Cat-a-lot.js&amp;action=history"/>
	<updated>2026-07-24T08:24:17Z</updated>
	<subtitle>היסטוריית הגרסאות של הדף הזה בוויקי</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://www.breslev.wiki/index.php?title=%D7%9E%D7%93%D7%99%D7%94_%D7%95%D7%99%D7%A7%D7%99:Gadget-Cat-a-lot.js&amp;diff=3353&amp;oldid=prev</id>
		<title>יאיר מן: גרסה אחת יובאה</title>
		<link rel="alternate" type="text/html" href="http://www.breslev.wiki/index.php?title=%D7%9E%D7%93%D7%99%D7%94_%D7%95%D7%99%D7%A7%D7%99:Gadget-Cat-a-lot.js&amp;diff=3353&amp;oldid=prev"/>
		<updated>2019-08-28T10:06:35Z</updated>

		<summary type="html">&lt;p&gt;גרסה אחת יובאה&lt;/p&gt;
&lt;p&gt;&lt;b&gt;דף חדש&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// Cat-A-Lot&lt;br /&gt;
// Changes category of multiple files (or pages)&lt;br /&gt;
//&lt;br /&gt;
// Originally by Magnus Manske&lt;br /&gt;
// RegExes by Ilmari Karonen&lt;br /&gt;
// Completely rewritten by DieBuche&lt;br /&gt;
//&lt;br /&gt;
// Modified to work on regular pages instead of files, + Hebrew translation: קיפודנחש&lt;br /&gt;
//&lt;br /&gt;
// READ THIS PAGE IF YOU WANT TO TRANSLATE OR USE THIS ON ANOTHER SITE:&lt;br /&gt;
// http://commons.wikimedia.org/wiki/MediaWiki_talk:Gadget-Cat-a-lot.js/translating&lt;br /&gt;
//&lt;br /&gt;
var catALot = {&lt;br /&gt;
	apiUrl: wgScriptPath + &amp;quot;/api.php&amp;quot;,&lt;br /&gt;
	searchmode: false,&lt;br /&gt;
	version: 2.18,&lt;br /&gt;
	setHeight: 450,&lt;br /&gt;
	init: function () {&lt;br /&gt;
		$(&amp;quot;body&amp;quot;)&lt;br /&gt;
		.append('&amp;lt;div id=&amp;quot;cat_a_lot&amp;quot;&amp;gt;' + '&amp;lt;div id=&amp;quot;cat_a_lot_data&amp;quot;&amp;gt;&amp;lt;div&amp;gt;' + '&amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;cat_a_lot_searchcatname&amp;quot; placeholder=&amp;quot;' + this.i18n.enterName + '&amp;quot;/&amp;gt;'&lt;br /&gt;
		+ '&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;cat_a_lot_category_list&amp;quot;style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;' + '&amp;lt;div id=&amp;quot;cat_a_lot_mark_counter&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;' + '&amp;lt;div id=&amp;quot;cat_a_lot_selections&amp;quot;&amp;gt;' + this.i18n.select&lt;br /&gt;
		+ ' &amp;lt;a id=&amp;quot;cat_a_lot_select_all&amp;quot;&amp;gt;' + this.i18n.all + '&amp;lt;/a&amp;gt; / ' + '&amp;lt;a id=&amp;quot;cat_a_lot_select_none&amp;quot;&amp;gt;' + this.i18n.none + '&amp;lt;/a&amp;gt;'&lt;br /&gt;
		+ '&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&amp;quot;cat_a_lot_head&amp;quot;&amp;gt;' + '&amp;lt;a id=&amp;quot;cat_a_lot_toggle&amp;quot;&amp;gt;Cat-a-lot&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
		if (!this.searchmode) $('#cat_a_lot_selections').append('&amp;lt;br&amp;gt;&amp;lt;a id=&amp;quot;cat_a_lot_remove&amp;quot;&amp;gt;&amp;lt;b&amp;gt;' + this.i18n.removeFromCat + '&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;');&lt;br /&gt;
		$('#cat_a_lot_remove').click(function () {&lt;br /&gt;
			catALot.remove();&lt;br /&gt;
		});&lt;br /&gt;
		$('#cat_a_lot_select_all').click(function () {&lt;br /&gt;
			catALot.toggleAll(true);&lt;br /&gt;
		});&lt;br /&gt;
		$('#cat_a_lot_select_none').click(function () {&lt;br /&gt;
			catALot.toggleAll(false);&lt;br /&gt;
		});&lt;br /&gt;
		$('#cat_a_lot_toggle').click(function () {&lt;br /&gt;
			$(this).toggleClass('cat_a_lot_enabled');&lt;br /&gt;
			catALot.run();&lt;br /&gt;
		});&lt;br /&gt;
		$('#cat_a_lot_searchcatname')&lt;br /&gt;
			.keypress(function (e) {&lt;br /&gt;
				if (e.which == 13)&lt;br /&gt;
					catALot.updateCats($(this).val());&lt;br /&gt;
			})&lt;br /&gt;
			.autocomplete({&lt;br /&gt;
				source: function(request, response) {&lt;br /&gt;
					catALot.doAPICall({action:'opensearch', search: request.term, namespace: 14},&lt;br /&gt;
						function(data){&lt;br /&gt;
							if(data[1])&lt;br /&gt;
								response($(data[1]).map(function(index,item){return item.replace(/.*:/, '');}));&lt;br /&gt;
						}&lt;br /&gt;
					);&lt;br /&gt;
				},&lt;br /&gt;
				open:function(){&lt;br /&gt;
					$(&amp;quot;.ui-autocomplete&amp;quot;)&lt;br /&gt;
						.position({&lt;br /&gt;
							my: &amp;quot;left bottom&amp;quot;,&lt;br /&gt;
							at: &amp;quot;left top&amp;quot;,&lt;br /&gt;
							of: $('#cat_a_lot_searchcatname')&lt;br /&gt;
						});&lt;br /&gt;
				}&lt;br /&gt;
		});&lt;br /&gt;
		importStylesheet('MediaWiki:Gadget-Cat-a-lot.css');&lt;br /&gt;
		this.localCatName = mw.config.get('wgFormattedNamespaces')[14];&lt;br /&gt;
	},&lt;br /&gt;
	findAllLabels: function () {&lt;br /&gt;
		this.labels = $('#mw-pages').find('li');&lt;br /&gt;
		var subCats =  $('#mw-subcategories').find('.CategoryTreeItem');&lt;br /&gt;
		for (var sub = 0; sub &amp;lt; subCats.length; sub++) {&lt;br /&gt;
			var a = $(subCats[sub]).find('a');&lt;br /&gt;
			if (a.length) {&lt;br /&gt;
				a[0]['title'] = catALot.localCatName + &amp;quot;:&amp;quot; + a[0].innerHTML;&lt;br /&gt;
				this.labels.push(subCats[sub]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		$('li a, .CategoryTreeLabel', mw.util.$content).attr({href: '#noSuchAnchor'});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getMarkedLabels: function () {&lt;br /&gt;
		var marked = [];&lt;br /&gt;
		this.selectedLabels = this.labels.filter('.cat_a_lot_selected');&lt;br /&gt;
		this.selectedLabels.each(function () {&lt;br /&gt;
			var file = $(this).find('a[title]');&lt;br /&gt;
			marked.push([file.attr('title'), $(this)]);&lt;br /&gt;
		});&lt;br /&gt;
		return marked;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	updateSelectionCounter: function () {&lt;br /&gt;
		this.selectedLabels = this.labels.filter('.cat_a_lot_selected');&lt;br /&gt;
		$('#cat_a_lot_mark_counter').show().html(this.selectedLabels.length + this.i18n.filesSelected );&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	makeClickable: function () {&lt;br /&gt;
		this.findAllLabels();&lt;br /&gt;
		this.labels.click(function () {&lt;br /&gt;
			$(this).toggleClass('cat_a_lot_selected');&lt;br /&gt;
			catALot.updateSelectionCounter();&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	toggleAll: function (select) {&lt;br /&gt;
		this.labels.toggleClass('cat_a_lot_selected', select);&lt;br /&gt;
		this.updateSelectionCounter();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getSubCats: function (cmcontinue) {&lt;br /&gt;
		var data = {&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			list: 'categorymembers',&lt;br /&gt;
			cmnamespace: 14,&lt;br /&gt;
			cmlimit: 50,&lt;br /&gt;
			cmtitle: this.localCatName + ':' + this.currentCategory&lt;br /&gt;
		};&lt;br /&gt;
		if (cmcontinue)&lt;br /&gt;
			data.cmcontinue = cmcontinue;&lt;br /&gt;
		else&lt;br /&gt;
			this.subCats = [];&lt;br /&gt;
&lt;br /&gt;
		this.doAPICall(data, function (result) {&lt;br /&gt;
&lt;br /&gt;
			var cats = result.query.categorymembers;&lt;br /&gt;
&lt;br /&gt;
			for (var i = 0; i &amp;lt; cats.length; i++) {&lt;br /&gt;
				catALot.subCats.push(cats[i].title.replace(/^[^:]+:/, &amp;quot;&amp;quot;));&lt;br /&gt;
			}&lt;br /&gt;
			if (result['query-continue'])&lt;br /&gt;
				catALot.getSubCats(result['query-continue'].categorymembers.cmcontinue);&lt;br /&gt;
			else {&lt;br /&gt;
				catALot.catCounter++;&lt;br /&gt;
				if (catALot.catCounter == 2) catALot.showCategoryList();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	getParentCats: function () {&lt;br /&gt;
		var data = {&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			prop: 'categories',&lt;br /&gt;
			cllimit: 500,&lt;br /&gt;
			titles: this.localCatName + ':' + this.currentCategory&lt;br /&gt;
		};&lt;br /&gt;
		this.doAPICall(data, function (result) {&lt;br /&gt;
			catALot.parentCats = new Array();&lt;br /&gt;
			var pages = result.query.pages;&lt;br /&gt;
			if (pages[-1] &amp;amp;&amp;amp; pages[-1].missing == '') {&lt;br /&gt;
				catALot.catlist.html('&amp;lt;span id=&amp;quot;cat_a_lot_no_found&amp;quot;&amp;gt;' + catALot.i18n.catNotFound + '&amp;lt;/span&amp;gt;');&lt;br /&gt;
				document.body.style.cursor = 'auto';&lt;br /&gt;
&lt;br /&gt;
				catALot.catlist.append('&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;');&lt;br /&gt;
				catALot.createCatLinks(&amp;quot;→&amp;quot;, [catALot.currentCategory]);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// there should be only one, but we don't know its ID&lt;br /&gt;
			for (var id in pages) {&lt;br /&gt;
				var cats = pages[id].categories;&lt;br /&gt;
			}&lt;br /&gt;
			for (var i = 0; i &amp;lt; cats.length; i++) {&lt;br /&gt;
				catALot.parentCats.push(cats[i].title.replace(/^[^:]+:/, &amp;quot;&amp;quot;));&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			catALot.catCounter++;&lt;br /&gt;
			if (catALot.catCounter == 2) catALot.showCategoryList();&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
	regexBuilder: function (category) {&lt;br /&gt;
		var catname = ( this.localCatName == 'Category' ) ? this.localCatName: this.localCatName + '|Category';&lt;br /&gt;
		catname = '(' + catname + ')';&lt;br /&gt;
&lt;br /&gt;
		// Build a regexp string for matching the given category:&lt;br /&gt;
		// trim leading/trailing whitespace and underscores&lt;br /&gt;
		category = category.replace(/^[\s_]+/, &amp;quot;&amp;quot;).replace(/[\s_]+$/, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		// escape regexp metacharacters (= any ASCII punctuation except _)&lt;br /&gt;
		category = category.replace(/([!-\/:-@\[-^`{-~])/g, '\\$1');&lt;br /&gt;
&lt;br /&gt;
		// any sequence of spaces and underscores should match any other&lt;br /&gt;
		category = category.replace(/[\s_]+/g, '[\\s_]+');&lt;br /&gt;
&lt;br /&gt;
		// Make the first character case-insensitive:&lt;br /&gt;
		var first = category.substr(0, 1);&lt;br /&gt;
		if (first.toUpperCase() != first.toLowerCase()) category = '[' + first.toUpperCase() + first.toLowerCase() + ']' + category.substr(1);&lt;br /&gt;
&lt;br /&gt;
		// Compile it into a RegExp that matches MediaWiki category syntax (yeah, it looks ugly):&lt;br /&gt;
		// XXX: the first capturing parens are assumed to match the sortkey, if present, including the | but excluding the ]]&lt;br /&gt;
		return new RegExp('\\[\\[[\\s_]*' + catname + '[\\s_]*:[\\s_]*' + category + '[\\s_]*(\\|[^\\]]*(?:\\][^\\]]+)*)?\\]\\]', 'ig');&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getContent: function (file, targetcat, mode) {&lt;br /&gt;
&lt;br /&gt;
		var data = {&lt;br /&gt;
			action: 'query',&lt;br /&gt;
			prop: 'info|revisions',&lt;br /&gt;
			rvprop: 'content|timestamp',&lt;br /&gt;
			intoken: 'edit',&lt;br /&gt;
			titles: file[0]&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		this.doAPICall(data, function (result) {&lt;br /&gt;
			catALot.editCategories(result, file, targetcat, mode);&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	editCategories: function (result, file, targetcat, mode) {&lt;br /&gt;
&lt;br /&gt;
		if (result == null) {&lt;br /&gt;
			//Happens on unstable wifi connections..&lt;br /&gt;
			this.connectionError.push(file[0]);&lt;br /&gt;
			this.updateCounter();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var pages = result.query.pages;&lt;br /&gt;
&lt;br /&gt;
		// there should be only one, but we don't know its ID&lt;br /&gt;
		for (var id in pages) {&lt;br /&gt;
			// The edittoken only changes between logins&lt;br /&gt;
			this.edittoken = pages[id].edittoken;&lt;br /&gt;
			var otext = pages[id].revisions[0]['*'];&lt;br /&gt;
			var starttimestamp = pages[id].starttimestamp;&lt;br /&gt;
			var timestamp = pages[id].revisions[0]['timestamp'];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		var sourcecat = wgTitle;&lt;br /&gt;
&lt;br /&gt;
		// Check if that file is already in that category&lt;br /&gt;
		if (mode != &amp;quot;remove&amp;quot; &amp;amp;&amp;amp; this.regexBuilder(targetcat).test(otext)) {&lt;br /&gt;
			//If the new cat is already there, just remove the old one.&lt;br /&gt;
			if (mode == 'move') {&lt;br /&gt;
				mode='remove';&lt;br /&gt;
			} else {&lt;br /&gt;
				this.alreadyThere.push(file[0]);&lt;br /&gt;
				this.updateCounter();&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var text = otext;&lt;br /&gt;
		var comment;&lt;br /&gt;
&lt;br /&gt;
		// Fix text&lt;br /&gt;
		switch (mode) {&lt;br /&gt;
		case 'add':&lt;br /&gt;
			text += &amp;quot;\n[[&amp;quot; + this.localCatName + &amp;quot;:&amp;quot; + targetcat + &amp;quot;]]\n&amp;quot;;&lt;br /&gt;
			comment = this.i18n.summaryAdd + targetcat + &amp;quot;]]&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case 'copy':&lt;br /&gt;
			text = text.replace(this.regexBuilder(sourcecat), &amp;quot;[[&amp;quot; + this.localCatName + &amp;quot;:&amp;quot; + sourcecat + &amp;quot;$2]]\n[[&amp;quot; + this.localCatName + &amp;quot;:&amp;quot; + targetcat + &amp;quot;$2]]&amp;quot;);&lt;br /&gt;
			comment = this.i18n.summaryCopy + sourcecat + &amp;quot;]] &amp;quot; + this.i18n.to + targetcat + &amp;quot;]]&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case 'move':&lt;br /&gt;
			text = text.replace(this.regexBuilder(sourcecat), &amp;quot;[[&amp;quot; + this.localCatName + &amp;quot;:&amp;quot; + targetcat + &amp;quot;$2]]&amp;quot;);&lt;br /&gt;
			comment = this.i18n.summaryMove + sourcecat + &amp;quot;]] &amp;quot; + this.i18n.to + targetcat + &amp;quot;]]&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		case 'remove':&lt;br /&gt;
			text = text.replace(this.regexBuilder(sourcecat), &amp;quot;&amp;quot;);&lt;br /&gt;
			comment = this.i18n.summaryRemove + sourcecat + &amp;quot;]]&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (text == otext) {&lt;br /&gt;
			this.notFound.push(file[0]);&lt;br /&gt;
			this.updateCounter();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var data = {&lt;br /&gt;
			action: 'edit',&lt;br /&gt;
			summary: comment,&lt;br /&gt;
			title: file[0],&lt;br /&gt;
			token: this.edittoken,&lt;br /&gt;
			starttimestamp: starttimestamp,&lt;br /&gt;
			basetimestamp: timestamp,&lt;br /&gt;
			text: text&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		var isBot=$.inArray('bot', wgUserGroups)&amp;gt;-1;&lt;br /&gt;
		if(isBot)&lt;br /&gt;
			data.bot = '1';&lt;br /&gt;
&lt;br /&gt;
		this.doAPICall(data, function (ret) {&lt;br /&gt;
			catALot.updateCounter();&lt;br /&gt;
		});&lt;br /&gt;
		this.markAsDone(file[1], mode, targetcat);&lt;br /&gt;
	},&lt;br /&gt;
	markAsDone: function (label, mode, targetcat) {&lt;br /&gt;
&lt;br /&gt;
		label.addClass('cat_a_lot_markAsDone');&lt;br /&gt;
		switch (mode) {&lt;br /&gt;
		case 'add':&lt;br /&gt;
			label.append('&amp;lt;br&amp;gt;' + this.i18n.addedCat + ' ' + targetcat);&lt;br /&gt;
			break;&lt;br /&gt;
		case 'copy':&lt;br /&gt;
			label.append('&amp;lt;br&amp;gt;' + this.i18n.copiedCat + ' ' + targetcat);&lt;br /&gt;
			break;&lt;br /&gt;
		case 'move':&lt;br /&gt;
			label.append('&amp;lt;br&amp;gt;' + this.i18n.movedCat + ' ' + targetcat);&lt;br /&gt;
			break;&lt;br /&gt;
		case 'remove':&lt;br /&gt;
			label.append('&amp;lt;br&amp;gt;' + this.i18n.movedCat );&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	updateCounter: function () {&lt;br /&gt;
&lt;br /&gt;
		this.counterCurrent++;&lt;br /&gt;
		if (this.counterCurrent &amp;gt; this.counterNeeded) this.displayResult();&lt;br /&gt;
		else this.domCounter.text(this.counterCurrent);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	displayResult: function () {&lt;br /&gt;
&lt;br /&gt;
		document.body.style.cursor = 'auto';&lt;br /&gt;
		$('.cat_a_lot_feedback').addClass('cat_a_lot_done');&lt;br /&gt;
		$('.ui-dialog-content').height('auto');&lt;br /&gt;
		var rep = this.domCounter.parent();&lt;br /&gt;
		rep.html('&amp;lt;h3&amp;gt;' + this.i18n.done + '&amp;lt;/h3&amp;gt;');&lt;br /&gt;
		rep.append( this.i18n.allDone + '&amp;lt;br /&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
		var close = $('&amp;lt;a&amp;gt;').append( this.i18n.returnToPage );&lt;br /&gt;
		close.click(function () {&lt;br /&gt;
			catALot.progressDialog.remove();&lt;br /&gt;
			catALot.toggleAll(false);&lt;br /&gt;
		});&lt;br /&gt;
		rep.append(close);&lt;br /&gt;
		if (this.alreadyThere.length) {&lt;br /&gt;
			rep.append( this.i18n.skippedAlready );&lt;br /&gt;
			rep.append(this.alreadyThere.join('&amp;lt;br&amp;gt;'));&lt;br /&gt;
		}&lt;br /&gt;
		if (this.notFound.length) {&lt;br /&gt;
			rep.append( this.i18n.skippedNotFound );&lt;br /&gt;
			rep.append(this.notFound.join('&amp;lt;br&amp;gt;'));&lt;br /&gt;
		}&lt;br /&gt;
		if (this.connectionError.length) {&lt;br /&gt;
			rep.append( this.i18n.skippedServer );&lt;br /&gt;
			rep.append(this.connectionError.join('&amp;lt;br&amp;gt;'));&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	moveHere: function (targetcat) {&lt;br /&gt;
		this.doSomething(targetcat, 'move');&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	copyHere: function (targetcat) {&lt;br /&gt;
		this.doSomething(targetcat, 'copy');&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	addHere: function (targetcat) {&lt;br /&gt;
		this.doSomething(targetcat, 'add');&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	remove: function () {&lt;br /&gt;
		this.doSomething('', 'remove');&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	doSomething: function (targetcat, mode) {&lt;br /&gt;
		var files = this.getMarkedLabels();&lt;br /&gt;
		if (files.length == 0) {&lt;br /&gt;
			alert( this.i18n.noneSelected );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		this.notFound = [];&lt;br /&gt;
		this.alreadyThere = [];&lt;br /&gt;
		this.connectionError = [];&lt;br /&gt;
		this.counterCurrent = 1;&lt;br /&gt;
		this.counterNeeded = files.length;&lt;br /&gt;
		this.showProgress();&lt;br /&gt;
		for (var i = 0; i &amp;lt; files.length; i++) {&lt;br /&gt;
			this.getContent(files[i], targetcat, mode);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	doAPICall: function (params, callback) {&lt;br /&gt;
&lt;br /&gt;
		params.format = 'json';&lt;br /&gt;
		$.ajax({&lt;br /&gt;
			url: this.apiUrl,&lt;br /&gt;
			cache: false,&lt;br /&gt;
			dataType: 'json',&lt;br /&gt;
			data: params,&lt;br /&gt;
			type: 'POST',&lt;br /&gt;
			success: callback&lt;br /&gt;
		});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	createCatLinks: function (symbol, list) {&lt;br /&gt;
		list.sort();&lt;br /&gt;
		var domlist = this.catlist.find('ul');&lt;br /&gt;
		for (var i = 0; i &amp;lt; list.length; i++) {&lt;br /&gt;
			var li = $('&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
			var link = $('&amp;lt;a&amp;gt;&amp;lt;/a&amp;gt;');&lt;br /&gt;
			link.text(list[i]);&lt;br /&gt;
			li.data('cat', list[i]);&lt;br /&gt;
			link.click(function () {&lt;br /&gt;
				catALot.updateCats($(this).parent().data('cat'));&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			if (this.searchmode) {&lt;br /&gt;
				var add = $('&amp;lt;a class=&amp;quot;cat_a_lot_action&amp;quot;&amp;gt;&amp;lt;b&amp;gt;' + this.i18n.add + '&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;');&lt;br /&gt;
				add.click(function () {&lt;br /&gt;
					catALot.addHere($(this).parent().data('cat'));&lt;br /&gt;
				});&lt;br /&gt;
			} else {&lt;br /&gt;
				var move = $('&amp;lt;a class=&amp;quot;cat_a_lot_move&amp;quot;&amp;gt;&amp;lt;b&amp;gt;' + this.i18n.move + '&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;');&lt;br /&gt;
				move.click(function () {&lt;br /&gt;
					catALot.moveHere($(this).parent().data('cat'));&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
				var copy = $('&amp;lt;a class=&amp;quot;cat_a_lot_action&amp;quot;&amp;gt;&amp;lt;b&amp;gt;' + this.i18n.copy + '&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;');&lt;br /&gt;
				copy.click(function () {&lt;br /&gt;
					catALot.copyHere($(this).parent().data('cat'));&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Can't move to source category&lt;br /&gt;
			if (list[i] != wgTitle &amp;amp;&amp;amp; this.searchmode) li.append(' ').append(add);&lt;br /&gt;
			else if (list[i] != wgTitle &amp;amp;&amp;amp; !this.searchmode) li.append(' ').append(move).append(' ').append(copy);&lt;br /&gt;
			li.append(symbol).append(' ').append(link);&lt;br /&gt;
&lt;br /&gt;
			domlist.append(li);&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getCategoryList: function () {&lt;br /&gt;
		this.catCounter = 0;&lt;br /&gt;
		this.getParentCats();&lt;br /&gt;
		this.getSubCats();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	showCategoryList: function () {&lt;br /&gt;
		var thiscat = [this.currentCategory];&lt;br /&gt;
&lt;br /&gt;
		this.catlist.empty();&lt;br /&gt;
		this.catlist.append('&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;');&lt;br /&gt;
&lt;br /&gt;
		this.createCatLinks(&amp;quot;↑&amp;quot;, this.parentCats);&lt;br /&gt;
		this.createCatLinks(&amp;quot;→&amp;quot;, thiscat);&lt;br /&gt;
		this.createCatLinks(&amp;quot;↓&amp;quot;, this.subCats);&lt;br /&gt;
&lt;br /&gt;
		document.body.style.cursor = 'auto';&lt;br /&gt;
		//Reset width&lt;br /&gt;
		var cat = $('#cat_a_lot');&lt;br /&gt;
		cat.width('');&lt;br /&gt;
		cat.height('');&lt;br /&gt;
		cat.width( cat.width() * 1.05 );&lt;br /&gt;
		var list = $('#cat_a_lot_category_list');&lt;br /&gt;
		list.css({maxHeight: this.setHeight+'px', height: ''});&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	updateCats: function (newcat) {&lt;br /&gt;
		document.body.style.cursor = 'wait';&lt;br /&gt;
&lt;br /&gt;
		this.currentCategory = newcat;&lt;br /&gt;
		this.catlist = $('#cat_a_lot_category_list');&lt;br /&gt;
		this.catlist.html('&amp;lt;div class=&amp;quot;cat_a_lot_loading&amp;quot;&amp;gt;' + this.i18n.loading + '&amp;lt;/div&amp;gt;');&lt;br /&gt;
		this.getCategoryList();&lt;br /&gt;
	},&lt;br /&gt;
	showProgress: function () {&lt;br /&gt;
		document.body.style.cursor = 'wait';&lt;br /&gt;
&lt;br /&gt;
		this.progressDialog = $('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;')&lt;br /&gt;
		.html( this.i18n.editing + ' &amp;lt;span id=&amp;quot;cat_a_lot_current&amp;quot;&amp;gt;' + this.counterCurrent + '&amp;lt;/span&amp;gt; ' + this.i18n.of + this.counterNeeded)&lt;br /&gt;
		.dialog({&lt;br /&gt;
			width: 450,&lt;br /&gt;
			height: 90,&lt;br /&gt;
			minHeight: 90,&lt;br /&gt;
			modal: true,&lt;br /&gt;
			resizable: false,&lt;br /&gt;
			draggable: false,&lt;br /&gt;
			closeOnEscape: false,&lt;br /&gt;
			dialogClass: &amp;quot;cat_a_lot_feedback&amp;quot;&lt;br /&gt;
		});&lt;br /&gt;
		$('.ui-dialog-titlebar').hide();&lt;br /&gt;
		this.domCounter = $('#cat_a_lot_current');&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	run: function () {&lt;br /&gt;
		if ($('.cat_a_lot_enabled').length) {&lt;br /&gt;
			this.makeClickable();&lt;br /&gt;
			$(&amp;quot;#cat_a_lot_data&amp;quot;).show();&lt;br /&gt;
			$('#cat_a_lot').resizable({&lt;br /&gt;
				handles: 'n', &lt;br /&gt;
				alsoResize: '#cat_a_lot_category_list',&lt;br /&gt;
				resize: function(event, ui) {&lt;br /&gt;
					$(this).css({left:&amp;quot;&amp;quot;, top:&amp;quot;&amp;quot;});&lt;br /&gt;
					catALot.setHeight = $(this).height();&lt;br /&gt;
					$('#cat_a_lot_category_list').css({maxHeight: '', width: ''});&lt;br /&gt;
				} &lt;br /&gt;
			});&lt;br /&gt;
			$('#cat_a_lot_category_list').css({maxHeight: '450px'});&lt;br /&gt;
			if (this.searchmode) this.updateCats(&amp;quot;Pictures and images&amp;quot;);&lt;br /&gt;
			else this.updateCats(wgTitle);&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			$(&amp;quot;#cat_a_lot_data&amp;quot;).hide();&lt;br /&gt;
			$(&amp;quot;#cat_a_lot&amp;quot;).resizable( &amp;quot;destroy&amp;quot; );&lt;br /&gt;
			//Unbind click handlers&lt;br /&gt;
			this.labels.off('click');&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	i18n: (wgUserLanguage == &amp;quot;he&amp;quot;) ? {&lt;br /&gt;
		//Progress&lt;br /&gt;
		loading: 'טוען...',&lt;br /&gt;
		editing: 'עורך דף',&lt;br /&gt;
		of: 'מתוך ',&lt;br /&gt;
		skippedAlready: '&amp;lt;h5&amp;gt;הדפים להלן לא שונו, משום שכבר הכילו את הקטגוריה:&amp;lt;/h5&amp;gt;',&lt;br /&gt;
		skippedNotFound: '&amp;lt;h5&amp;gt;הדפים להלן לא שונו, משום שהקטגוריה לא נמצאה:&amp;lt;/h5&amp;gt;',&lt;br /&gt;
		skippedServer: '&amp;lt;h5&amp;gt;Tהדפים להלן לא שונו, בגלל בעית תקשורת/h5&amp;gt;',&lt;br /&gt;
		allDone: 'כל הדפים שונו.',&lt;br /&gt;
		done: 'בוצע!',&lt;br /&gt;
		addedCat: 'קטגוריה התווספה',&lt;br /&gt;
		copiedCat: 'קטגוריה התווספה',&lt;br /&gt;
		movedCat: 'הועברו לקטגוריה',&lt;br /&gt;
		removedCat: 'הוסרו מקטגוריה',&lt;br /&gt;
		returnToPage: 'חזור לדף',&lt;br /&gt;
		catNotFound: 'קטגוריה לא נמצאה.',&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		//as in 17 files selected&lt;br /&gt;
		filesSelected: ' דפים מסומנים.',&lt;br /&gt;
&lt;br /&gt;
		//Actions&lt;br /&gt;
		copy: 'הוסף',&lt;br /&gt;
		move: 'העבר',&lt;br /&gt;
		add: 'הוסף',&lt;br /&gt;
		removeFromCat: 'הסרה מקטגוריה זו',&lt;br /&gt;
		enterName: 'שם קטגוריה להוספה לרשימה',&lt;br /&gt;
		select: 'בחירה',&lt;br /&gt;
		all: 'כולם',&lt;br /&gt;
		none: 'נקה',&lt;br /&gt;
&lt;br /&gt;
		noneSelected: 'אין דפים מסומנים!',&lt;br /&gt;
&lt;br /&gt;
		//Summaries:&lt;br /&gt;
		summaryAdd: 'Cat-a-lot: הוסיף ל[[קטגוריה:',&lt;br /&gt;
		summaryCopy: 'Cat-a-lot: העתיק מ[[קטגוריה:',&lt;br /&gt;
		to: 'ל[[קטגוריה:',&lt;br /&gt;
		summaryMove: 'Cat-a-lot: העביר מ[[קטגוריה:',&lt;br /&gt;
		summaryRemove: 'Cat-a-lot: הסיר מ[[קטגוריה:'&lt;br /&gt;
	}:	{&lt;br /&gt;
		//Progress&lt;br /&gt;
		loading: 'Loading...',&lt;br /&gt;
		editing: 'Editing page',&lt;br /&gt;
		of: 'of ',&lt;br /&gt;
		skippedAlready: '&amp;lt;h5&amp;gt;The following pages were skipped, because the page was already in the category:&amp;lt;/h5&amp;gt;',&lt;br /&gt;
		skippedNotFound: '&amp;lt;h5&amp;gt;The following pages were skipped, because the old category could not be found:&amp;lt;/h5&amp;gt;',&lt;br /&gt;
		skippedServer: '&amp;lt;h5&amp;gt;The following pages couldn\'t be changed, since there were problems connecting to the server:&amp;lt;/h5&amp;gt;',&lt;br /&gt;
		allDone: 'All pages are processed.',&lt;br /&gt;
		done: 'Done!',&lt;br /&gt;
		addedCat: 'Added category',&lt;br /&gt;
		copiedCat: 'Copied to category',&lt;br /&gt;
		movedCat: 'Moved to category',&lt;br /&gt;
		removedCat: 'Removed from category',&lt;br /&gt;
		returnToPage: 'Return to page',&lt;br /&gt;
		catNotFound: 'Category not found.',&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		//as in 17 files selected&lt;br /&gt;
		filesSelected: ' files selected.',&lt;br /&gt;
&lt;br /&gt;
		//Actions&lt;br /&gt;
		copy: 'Copy',&lt;br /&gt;
		move: 'Move',&lt;br /&gt;
		add: 'Add',&lt;br /&gt;
		removeFromCat: 'Remove from this category',&lt;br /&gt;
		enterName: 'Enter category name',&lt;br /&gt;
		select: 'Select',&lt;br /&gt;
		all: 'all',&lt;br /&gt;
		none: 'none',&lt;br /&gt;
&lt;br /&gt;
		noneSelected: 'No files selected!',&lt;br /&gt;
&lt;br /&gt;
		//Summaries:&lt;br /&gt;
		summaryAdd: 'Cat-a-lot: Adding [[Category:',&lt;br /&gt;
		summaryCopy: 'Cat-a-lot: Copying from [[Category:',&lt;br /&gt;
		to: 'to [[Category:',&lt;br /&gt;
		summaryMove: 'Cat-a-lot: Moving from [[Category:',&lt;br /&gt;
		summaryRemove: 'Cat-a-lot: Removing from [[Category:'&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ((wgNamespaceNumber == -1 &amp;amp;&amp;amp; wgCanonicalSpecialPageName == &amp;quot;Search&amp;quot;) || wgNamespaceNumber == 14) {&lt;br /&gt;
	if ( wgNamespaceNumber == -1 ) catALot.searchmode = true;&lt;br /&gt;
	mediaWiki.loader.using(['jquery.ui.dialog', 'jquery.ui.autocomplete'], function () {&lt;br /&gt;
		$(function () {&lt;br /&gt;
			catALot.init();&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>יאיר מן</name></author>
		
	</entry>
</feed>