Користувач:RLuts/FUCleanUp2.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
if( window.FUCleanUp === undefined ) {
	window.FUCleanUp = {

		install: function() {
			this.menu = 'FairUse Clean Up'; 
			this.rationaleTemplate = 'Обґрунтування добропорядного використання';
			this.informationTemplate = 'Зображення';
			this.musicTemplate = 'Музика';
			
			mw.loader.using(['mediawiki.util']).done(function () {
				var link = mw.util.addPortletLink( 'p-views', '#', this.menu );
				$( link ).click( function ( e ) {
					e.preventDefault();
					FUCleanUp.getContent();
				});
			});
		},
		
		wait: function(str) {
			if(str) {
				mw.loader.using( ['oojs-ui-core', 'oojs-ui-windows'], function() {
					if(FUCleanUp.hasOwnProperty('windowManager') && FUCleanUp.windowManager.isOpened()) {
						FUCleanUp.windowManager.closeWindow();
					}
					FUCleanUp.ProcessDialog = new OO.ui.ProcessDialog();
					FUCleanUp.windowManager = new OO.ui.WindowManager();
					$( 'body' ).append( FUCleanUp.windowManager.$element );
					FUCleanUp.windowManager.addWindows( [ FUCleanUp.ProcessDialog ] );
					FUCleanUp.windowManager.openWindow( FUCleanUp.ProcessDialog, {
						title: 'Зачекайте, будь ласка...',
						message: str
					} );
				//	FUCleanUp.notif = mw.notification.notify(, {autoHide: false, title: ''} );
				} );
			}
		},
		
		getContent: function() {
			this.wait('Завантаження вікітексту сторінки');
			this.count = 0;
			this.tplredirs = {};
			this.tpls = [this.rationaleTemplate, this.informationTemplate, this.musicTemplate];
			var param = {
				action: 'query',
				prop: 'revisions',
				format: 'json',
				rvprop: 'content',
				rvlimit: '1',
				titles: mw.config.get('wgPageName'),
				indexpageids: ''
			};
			mw.loader.using(['mediawiki.util']).done(function () {
				$.get(mw.util.wikiScript('api'), param).done(function(data) {
					FUCleanUp.content = data.query.pages[data.query.pageids[0]].revisions[0]['*'];
					FUCleanUp.wait();
					FUCleanUp.getTplArrays();
				});
			});
		},
		
		getTplArrays: function() {
			if(!this.count) this.wait('Завантаження перенаправлень шаблонів оформлення');
			if(this.tpls.hasOwnProperty(this.count)) {
				this.getTplRedirs(this.tpls[this.count], function() {
					FUCleanUp.count++;
					FUCleanUp.getTplArrays();
				});
			} else {
				this.count = 0;
				this.wait();
				this.getTpls();
			}
		},
		
		getTplRedirs: function(template, success) {
			param = {
				action: 'query',
				list: 'backlinks',
				format: 'json',
				blnamespace: 10,
				blfilterredir: 'redirects',
				blredirect: '',
				bltitle: 'Template:' + template
			};
			mw.loader.using(['mediawiki.util']).done(function () {
				$.get(mw.util.wikiScript('api'), param).done(function(data) {
					if (typeof(success) === 'function') {
						FUCleanUp.tplredirs[template] = [];
						$.each(data.query.backlinks, function() {
							FUCleanUp.tplredirs[template].push(this.title);
						});
						success();
					}
				});
			});
		},
		
		getTpls: function() {
			mw.loader.using('ext.gadget.libWikiDOM', function() {
				FUCleanUp.obj = mw.libs.wikiDOM.parser.text2Obj( FUCleanUp.content );
				if(FUCleanUp.obj.nodesByType.hasOwnProperty('template')) {
					$.each(FUCleanUp.obj.nodesByType.template, function(index, tpl) {
						if($.trim(this.parts[0]) == FUCleanUp.rationaleTemplate || $.inArray($.trim(this.parts[0]), FUCleanUp.tplredirs[FUCleanUp.rationaleTemplate]) != -1) {
							console.log('Rationale template:');
							console.log(FUCleanUp.RatTpl = this.parts);
						}
						if($.trim(this.parts[0]) == FUCleanUp.informationTemplate || $.inArray($.trim(this.parts[0]), FUCleanUp.tplredirs[FUCleanUp.informationTemplate]) != -1) {
							console.log('Information template:');
							console.log(FUCleanUp.InfTpl = this.parts);
						}
						if($.trim(this.parts[0]) == FUCleanUp.musicTemplate || $.inArray($.trim(this.parts[0]), FUCleanUp.tplredirs[FUCleanUp.musicTemplate]) != -1) {
							console.log('Music template:');
							console.log(FUCleanUp.MusTpl = this.parts);
						}
					});
				}
			});
		}
	};
}

$( document ).ready(function () {
//	if(mw.config.get('wgCategories').indexOf('Невільні файли') >= 0)
		FUCleanUp.install();
});