檢視 MediaWiki:Gadget-twinkledelimages.js 的原始碼
←
MediaWiki:Gadget-twinkledelimages.js
跳至導覽
跳至搜尋
由於以下原因,您無權編輯此頁面:
本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。 如欲增加或修改 Wiki 的翻譯,請至
translatewiki.net
上的 MediaWiki 在地化專案。
您沒有權限來編輯此 JavaScript 頁面,因為這會影響到所有的網站訪客。
您可以檢視並複製此頁面的原始碼。
//<nowiki> // vim: set noet sts=0 sw=8: (function($){ /* **************************************** *** twinkledelimages.js: Batch deletion of images (sysops only) **************************************** * Mode of invocation: Tab ("Deli-batch") * Active on: Existing non-special pages * Config directives in: TwinkleConfig */ Twinkle.delimages = function twinkledeli() { if( mw.config.get( 'wgNamespaceNumber' ) < 0 || !mw.config.get( 'wgCurRevisionId' ) ) { return; } if( Morebits.userIsInGroup( 'sysop' ) ) { Twinkle.addPortletLink( Twinkle.delimages.callback, "批圖", "tw-deli", "批量刪除此頁內的文件" ); } }; Twinkle.delimages.unlinkCache = {}; Twinkle.delimages.callback = function twinkledeliCallback() { var Window = new Morebits.simpleWindow( 800, 400 ); Window.setTitle( "批量文件刪除" ); Window.setScriptName( "Twinkle" ); Window.addFooterLink( "Twinkle幫助", "WP:TW/DOC#delimages" ); var form = new Morebits.quickForm( Twinkle.delimages.callback.evaluate ); form.append( { type: 'checkbox', list: [ { label: '刪除文件', name: 'delete_image', value: 'delete', checked: true }, { label: '取消此文件的使用', name: 'unlink_image', value: 'unlink', checked: true } ] } ); form.append( { type: 'textarea', name: 'reason', label: '理由:' } ); var query; if( mw.config.get( 'wgNamespaceNumber' ) === 14 ) { // Category: query = { 'action': 'query', 'generator': 'categorymembers', 'gcmtitle': mw.config.get( 'wgPageName' ), 'gcmnamespace': 6, // File: 'gcmlimit' : Twinkle.getPref('deliMax'), 'prop': [ 'imageinfo', 'categories', 'revisions' ], 'grvlimit': 1, 'grvprop': [ 'user' ] }; } else { // prepare for a possible merge with batchdelete alert('致管理員:\n\n' + '我們正在計劃翻新「批量文件刪除」模塊,並在考慮對於分類以外的頁面,此功能是否仍舊值得維護。\n\n' + '既然您正於分類以外的頁面調用「批量文件刪除」,我們希望您能夠於[[WT:TW]]告知Twinkle團隊。如果沒有人告訴我們他還在使用,我們就可能會移除或修改這個功能。\n\n' + '謝謝,\nTwinkle團隊'); //form.append({ type:'div', style:'color:red;font-weight:bold;font-size:larger', label: 'This module is going away. Please use "D-batch" (batch deletion) instead.' }); query = { 'action': 'query', 'generator': 'images', 'titles': mw.config.get( 'wgPageName' ), 'prop': [ 'imageinfo', 'categories', 'revisions' ], 'gimlimit': 'max' }; } var wikipedia_api = new Morebits.wiki.api( '抓取文件', query, function( self ) { var xmlDoc = self.responseXML; var images = $(xmlDoc).find('page[imagerepository="local"]'); var list = []; $.each(images, function() { var $self = $(this); var image = $self.attr('title'); var user = $self.find('imageinfo ii').attr('user'); var last_edit = $self.find('revisions rev').attr('user'); var disputed = $self.find('categories cl[title="Category:快速刪除候選"]').size() > 0; list.push( { 'label': image + '—作者:' + user + ',上次編輯:' + last_edit + ( disputed ? '(爭議' : '' ), 'value': image, 'checked': !disputed }); }); self.params.form.append({ type: 'checkbox', name: 'images', list: list }); self.params.form.append( { type:'submit' } ); var result = self.params.form.render(); self.params.Window.setContent( result ); }); wikipedia_api.params = { form:form, Window:Window }; wikipedia_api.post(); var root = document.createElement( 'div' ); Morebits.status.init( root ); Window.setContent( root ); Window.display(); }; Twinkle.delimages.currentDeleteCounter = 0; Twinkle.delimages.currentUnlinkCounter = 0; Twinkle.delimages.currentdeletor = 0; Twinkle.delimages.callback.evaluate = function twinkledeliCallbackEvaluate(event) { var images = event.target.getChecked( 'images' ); var reason = event.target.reason.value; var delete_image = event.target.delete_image.checked; var unlink_image = event.target.unlink_image.checked; if( ! reason ) { return; } Morebits.simpleWindow.setButtonsEnabled( false ); Morebits.status.init( event.target ); function toCall( work ) { if( work.length === 0 && Twinkle.delimages.currentDeleteCounter <= 0 && Twinkle.delimages.currentUnlinkCounter <= 0 ) { window.clearInterval( Twinkle.delimages.currentdeletor ); Morebits.wiki.removeCheckpoint(); return; } else if( work.length !== 0 && Twinkle.delimages.currentDeleteCounter <= Twinkle.getPref('batchDeleteMinCutOff') && Twinkle.delimages.currentUnlinkCounter <= Twinkle.getPref('batchDeleteMinCutOff') ) { Twinkle.delimages.unlinkCache = []; // Clear the cache var images = work.shift(); Twinkle.delimages.currentDeleteCounter = images.length; Twinkle.delimages.currentUnlinkCounter = images.length; var i; for( i = 0; i < images.length; ++i ) { var image = images[i]; var query = { 'action': 'query', 'titles': image }; var wikipedia_api = new Morebits.wiki.api( '檢查文件 ' + image + ' 是否存在', query, Twinkle.delimages.callbacks.main ); wikipedia_api.params = { image:image, reason:reason, unlink_image:unlink_image, delete_image:delete_image }; wikipedia_api.post(); } } } var work = Morebits.array.chunk( images, Twinkle.getPref('deliChunks') ); Morebits.wiki.addCheckpoint(); Twinkle.delimages.currentdeletor = window.setInterval( toCall, 1000, work ); }; Twinkle.delimages.callbacks = { main: function( self ) { var xmlDoc = self.responseXML; var $data = $(xmlDoc); var normal = $data.find('normalized n').attr('to'); if( normal ) { self.params.image = normal; } var exists = $data.find('pages page[title="'+self.params.image.replace( /"/g, '\\"')+'"]:not([missing])').size() > 0; if( ! exists ) { self.statelem.error( "文件不存在,可能已被刪除" ); return; } if( self.params.unlink_image ) { var query = { 'action': 'query', 'list': 'imageusage', 'iutitle': self.params.image, 'iulimit': Morebits.userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops }; var wikipedia_api = new Morebits.wiki.api( '抓取文件連結', query, Twinkle.delimages.callbacks.unlinkImageInstancesMain ); wikipedia_api.params = self.params; wikipedia_api.post(); } if( self.params.delete_image ) { var imagepage = new Morebits.wiki.page( self.params.image, '刪除文件'); imagepage.setEditSummary( "文件被刪除:" + self.params.reason + Twinkle.getPref('deletionSummaryAd')); imagepage.deletePage(); } }, unlinkImageInstancesMain: function( self ) { var xmlDoc = self.responseXML; var instances = []; $(xmlDoc).find('imageusage iu').each(function(){ instances.push($(this).attr('title')); }); if( instances.length === 0 ) { --Twinkle.delimages.currentUnlinkCounter; return; } $.each( instances, function(k,title) { var page = new Morebits.wiki.page(title, "取消文件在" + title + " 上的使用"); page.setFollowRedirect(true); page.setCallbackParameters({'image': self.params.image, 'reason': self.params.reason}); page.load(Twinkle.delimages.callbacks.unlinkImageInstances); }); }, unlinkImageInstances: function( self ) { var params = self.getCallbackParameters(); var statelem = self.getStatusElement(); var image = params.image.replace( /^(?:Image|File|文件):/, '' ); var old_text = self.getPageText(); var wikiPage = new Morebits.wikitext.page( old_text ); wikiPage.commentOutImage( image , '注釋此文件因其已被刪除' ); var text = wikiPage.getText(); if( text === old_text ) { statelem.error( '取消 ' + image + ' 在 ' + self.getPageName() + ' 上的使用失敗' ); return; } self.setPageText(text); self.setEditSummary('移除文件 ' + image + " 因其已被刪除,理由為「" + params.reason + "」。" + Twinkle.getPref('deletionSummaryAd')); self.setCreateOption('nocreate'); self.save(); } }; })(jQuery); //</nowiki>
返回到「
MediaWiki:Gadget-twinkledelimages.js
」。
導覽選單
個人工具
尚未登入
討論
貢獻
建立帳號
登入
命名空間
訊息
討論
English
視圖
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
近期變更
最新頁面
隨機頁面
建立一個新項目
建立一個新屬性
說明
歡迎
方針與指引
留言板
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊