Thành viên:CNBH/twinkleimage.js

Bách khoa toàn thư mở Wikipedia

Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.

// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
    TwinkleConfig = {};
}

/**
 TwinkleConfig.summaryAd (string)
 If ad should be added or not to summary, default [[WP:TWINKLE|TWINKLE]]
 */
if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) {
    TwinkleConfig.summaryAd = " dùng [[WP:TW|TW]]";
}

/**
 TwinkleConfig.notifyUserOnDeli (boolean)
 If the user should be notified after placing a file deletion tag
 */
if( typeof( TwinkleConfig.notifyUserOnDeli ) == 'undefined' ) {
    TwinkleConfig.notifyUserOnDeli = true;
}

function twinkleimage() {
    if( wgNamespaceNumber == 6 && !(document.getElementById("mw-sharedupload"))) {
        mw.util.addPortletLink( (typeof pTwinkle != "undefined") ? pTwinkle : "p-cactions", (twinkleConfigExists ? "javascript:twinkleimage.callback()" : 'javascript:alert("Tài khoản của còn quá mới để được sử dụng winkle.");'), "DI", "tw-di", "Đề nghị xóa nhanh tập tin", "");
    }
}

$(twinkleimage);

twinkleimage.callback = function twinkleimageCallback() {
    var Window = new SimpleWindow( 600, 300 );
    Window.setTitle( "Đề nghị xóa tập tin" );
    var form = new QuickForm( twinkleimage.callback.evaluate );
    form.append( {
            type: 'checkbox',
            list: [
                {
                    label: 'Thông báo với người tải lên',
                    value: 'notify',
                    name: 'notify',
                    tooltip: 'Bỏ chọn nếu bạn định đề xuất nhiều hình của một người, và không muốn bị phát vào mông.',
                    checked: TwinkleConfig.notifyUserOnDeli
                }
            ]
        }
    );
    var field = form.append( {
            type: 'field',
            label: 'Loại tác vụ mong muốn'
        } );
    field.append( {
            type: 'radio',
            name: 'type',
            event: twinkleimage.callback.choice,
            list: [
                {
                    label: 'Thiếu nguồn gốc',
                    value: 'thiếu nguồn gốc hình',
                    checked: true,
                    tooltip: 'Hình ảnh hoặc tập tin không có thông tin nguồn gốc'
                },
                {
                    label: 'Thiếu giấy phép',
                    value: 'thiếu giấy phép',
                    tooltip: 'Hình ảnh hoặc tập tin không có thông tin về tình trạng bản quyền'
                },
                {
                    label: 'Thiếu cả nguồn gốc lẫn giấy phép',
                    value: 'thiếu nguồn gốc lẫn giấy phép',
                    tooltip: 'Hình ảnh hoặc tập tin không có thông tin nguồn gốc lẫn tình trạng bản quyền'
                },
                {
                    label: 'Thiếu sự cho phép',
                    value: 'thiếu bằng chứng',
                    tooltip: 'Hình ảnh hoặc tập tin không có bằng chứng là tác giả đồng ý cấp phép cho tập tin'
                },
                {
                    label: 'Thiếu cơ sở hợp lý',
                    value: 'thiếu sử dụng hợp lý',
                    tooltip: 'Hình ảnh hoặc tập tin được tuyên bố là dùng theo quy định sử dụng hợp lý của Wikipedia nhưng không có lời giải thích tại sao lại được cho phép dùng theo quy định đó'
                },
                {
                    label: 'Cơ sở hợp lý gây tranh cãi',
                    value: 'lý do SDHL vô lý',
                    tooltip: 'Hình ảnh hoặc tập tin có cơ sở hợp lý gây tranh cãi'
                },

                {
                    label: 'Sử dụng hợp lý không sử dụng',
                    value: 'SDHL không SD',
                    tooltip: 'Hình ảnh hoặc tập tin không được cấp phép để dùng trên Wikipedia và chỉ cho phép dùng theo tuyên bố sử dụng hợp lý như quy định Wikipedia:Nội dung không tự do, nhưng không dùng trong bài viết nào cả'
                },
                {
                    label: 'Sử dụng hợp lý thay thế được',
                    value: 'SDHL thay thế được',
                    tooltip: 'Hình ảnh hoặc tập tin không thỏa mãn tiêu chí không tự do đầu tiên của Wikipedia tức là nó miêu tả sự vật mà rất có khả năng tìm được hoặc tạo được một hình tự do mà có lượng thông tin tương đương'
                }
            ]
        } );
    form.append( {
            type: 'div',
            label: 'Khu làm việc',
            name: 'work_area'
        } );
    var result = form.render();
    Window.setContent( result );
    Window.display();

    // We must init the
    var evt = document.createEvent( "Event" );
    evt.initEvent( 'change', true, true );
    result.type[0].dispatchEvent( evt );
}

twinkleimage.callback.choice = function twinkleimageCallbackChoose(event) {
    var value = event.target.value;
    var root = event.target.form;
    var work_area = new QuickForm.element( {
            type: 'div',
            name: 'work_area'
        } );

    switch( value ) {
        case 'thiếu nguồn gốc lẫn giấy phép':
        case 'thiếu nguồn gốc hình':
            work_area.append( {
                    type: 'checkbox',
                    name: 'non_free',
                    list: [
                        {
                            label: 'Không tự do',
                            tooltip: 'Hình cấp phép theo tuyên bố sử dụng hợp lý'
                        }
                    ]
                } );
            break;
        case 'thiếu bằng chứng':
            work_area.append( {
                    type: 'input',
                    name: 'source',
                    label: 'Nguồn: '
                } );
            break;
        case 'lý do SDHL vô lý':
            work_area.append( {
                    type: 'textarea',
                    name: 'reason',
                    label: 'Lo ngại: '
                } );
            break;
        case 'SDHL không SD':
            work_area.append( {
                    type: 'input',
                    name: 'replacement',
                    label: 'Thay thế: '
                } );
            break;
        case 'SDHL thay thế được':
            work_area.append( {
                    type: 'checkbox',
                    name: 'old_image',
                    list: [
                        {
                            label: 'Ảnh cũ',
                            tooltip: 'Ảnh được tải lên trước 2006-07-13'
                        }
                    ]
                } );
            break;
        default:
            break;
    };
    work_area.append( { type:'submit' } );
    work_area = work_area.render();
    root.replaceChild( work_area, root.lastChild );
}

twinkleimage.callback.evaluate = function twinkleimageCallbackEvaluate(event) {
    var notify = event.target.notify.checked;
    var types = event.target.type;
    for( var i = 0; i < types.length; ++i ) {
        if( types[i].checked ) {
            var type = types[i].value;
            break;
        }
    }
    if( event.target.non_free ) {
        var non_free = event.target.non_free.checked;
    }
    if( event.target.source ) {
        var source = event.target.source.value;
    }
    if( event.target.reason ) {
        var reason = event.target.reason.value;
    }
    if( event.target.replacement ) {
        var replacement = event.target.replacement.value;
    }
    if( event.target.old_image ) {
        var old_image = event.target.old_image.checked;
    }

    var params = {
        type: type,
        non_free: non_free,
        source: source,
        reason: reason,
        replacement: replacement,
        old_image: old_image
    };
    Status.init( event.target );
    
    // Tagging image
    var query = {
        'title': wgPageName,
        'action': 'submit'
    };

    var wikipedia_wiki = new Wikipedia.wiki( 'Đang đánh dấu tập tin bằng thẻ xóa', query, twinkleimage.callbacks.taggingImage );
    wikipedia_wiki.params = params;
    wikipedia_wiki.get();

    // Notifying uploader
    if( notify ) {
        var query = {
            'action': 'query',
            'prop': 'revisions',
            'titles': wgPageName,
            'rvlimit': 1,
            'rvprop': 'user',
            'rvdir': 'newer'
        }
        var callback = function( self ) {
            var xmlDoc = self.responseXML;
            var user = xmlDoc.evaluate( '//rev/@user', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
            var query = {
                'title': 'Thảo luận Thành viên:' + user,
                'action': 'submit'
            };
            var wikipedia_wiki = new Wikipedia.wiki( 'Thông báo cho người đóng góp đầu tiên (' + user + ')', query, twinkleimage.callbacks.userNotification );
            wikipedia_wiki.params = self.params;
            wikipedia_wiki.followRedirect = true;
            wikipedia_wiki.get();
        }
        var wikipedia_api = new Wikipedia.api( 'Lấy dữ liệu về người đóng góp đầu tiên', query, callback );
        wikipedia_api.params = params;
        wikipedia_api.post();
    } else {
        // No auto-notifiaction, display what was going to be added.
        var noteData = document.createElement( 'pre' );
        noteData.appendChild( document.createTextNode( "\{\{subst:" + type + "-tb|1=" + wgTitle + "\}\} \~\~\~\~" ) );
        Status.info( 'Thông báo', [ 'Dữ liệu dưới đây/tương tự cần được dán vào trang của người tải lên đầu tiên:', document.createElement( 'br' ),  noteData ] );

    }

    // adding tag to captions
    var query = {
        'action': 'query',
        'list': 'imageusage',
        'iutitle': wgPageName,
        'iulimit': userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
    };

    //Disabled, we let [[User:Sambot]] do that now. Also see [[WP:TW/BUG#333]] and [[WP:TW/BUG#285]]:
    //var wikipedia_api = new Wikipedia.api( 'Grabbing file links', query, twinkleimage.callbacks.tagInstancesMain );
    //wikipedia_api.params = params;
    //wikipedia_api.post();
}

twinkleimage.callbacks = {
    taggingImage: function( self ) {
        var form = self.responseXML.getElementById('editform');
        var text = "\{\{" + self.params.type + "|ngày=\{\{subst:CURRENTDAY2\}\}|tháng=\{\{subst:CURRENTMONTH\}\}|năm=\{\{subst:CURRENTYEAR\}\}";
        switch( self.params.type ) {
            case 'thiếu nguồn gốc lẫn giấy phép':
            case 'thiếu nguồn gốc hình':
                text += self.params.non_free ? "|không tự do=có" : "";
                break;
            case 'thiếu bằng chứng':
                text += self.params.reason ? "|nguồn=" + self.params.source : "";
                break;
            case 'lý do SDHL vô lý':
                text += self.params.reason ? "|lý do=" + self.params.reason : "";
                break;
            case 'SDHL không SD':
                text += self.params.replacement ? "|thay thế=" + self.params.replacement : "";
                break;
            case 'SDHL thay thế được':
                text += self.params.old_image ? "|hình cũ=có" : "";
                break;
            default:
                break;
        };
        text += "\}\}\n";
        var postData = {
            'wpMinoredit': undefined, // Per
            'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSection': '',
            'wpSummary': "Tập tin này đang đề nghị xóa theo \[\[WP:XT\]\]." + TwinkleConfig.summaryAd,
            'wpTextbox1': text + form.wpTextbox1.value
        };
        self.post( postData );
    },
    userNotification: function( self ) {
        var form = self.responseXML.getElementById( 'editform' );
        var text = form.wpTextbox1.value;
        text += "\n\{\{subst:" + self.params.type + "-tb|1=" + wgTitle + "\}\} \~\~\~\~";
        var postData = {
            'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
            'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSection': '',
            'wpSummary': 'Thông báo: Xóa \[\[' + wgPageName + '\]\].' + TwinkleConfig.summaryAd,
            'wpTextbox1': text
        };
        self.post( postData );
    },
    tagInstancesMain: function( self ) {
        var statusIndicator = new Status('Đang đánh dấu tập tin', '0%');
        var xmlDoc = self.responseXML;
        var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
        var snapshot = xmlDoc.evaluate('//imageusage/iu/@title', xmlDoc, nsResolver, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );

        var total = snapshot.snapshotLength * 2;

        imageTaggingCounter = 0;
        var onsuccess = function( self ) {
            var obj = self.params.obj;
            var total = self.params.total;
            var now = parseInt( 100 * ++imageTaggingCounter/total ) + '%';
            obj.update( now );
            self.statelem.unlink();
            if( imageTaggingCounter == total ) {
                obj.info( now + ' (đã xong)' );
                Wikipedia.removeCheckpoint();
            }
        }
        var onloaded = onsuccess;

        var onloading = function( self ) {}


        Wikipedia.addCheckpoint();
        for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
            var title = snapshot.snapshotItem(i).value;
            var query = {
                'title': title,
                'action': 'submit'
            }
            var wikipedia_wiki = new Wikipedia.wiki( "Đang đánh dấu " + title, query, twinkleimage.callbacks.tagInstances );
            wikipedia_wiki.params = { title:title, total:total, obj:statusIndicator, days: self.params.old_image ? 2 : 7 };
            wikipedia_wiki.onloading = onloading;
            wikipedia_wiki.onloaded = onloaded;
            wikipedia_wiki.onsuccess = onsuccess;
            wikipedia_wiki.get();
        }
    },
    tagInstances: function( self ) {
        var form = self.responseXML.getElementById('editform');
        var text = form.wpTextbox1.value;
        var old_text = text;
        var wikiPage = new Mediawiki.Page( text );

        var tag = "\{\{Có_thể_xóa-ct|1=\{\{subst:#time:l, j F Y| + " + self.params.days + " days\}\}\}\}";
        wikiPage.addToImageComment( wgTitle, tag );

        text = wikiPage.getText();
        if( text == old_text ) {
            // Nothing to do, return
            self.onsuccess( self );
            Wikipedia.actionCompleted( self );
            return;
        }
        var postData = {
            'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
            'wpWatchthis': undefined,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSection': '',
            'wpSummary': 'Đang đánh dấu [[:Tập tin:' + wgTitle + "]] để chờ xóa theo [[WP:XT|XT]] " + TwinkleConfig.summaryAd,
            'wpTextbox1': text
        };
        self.post( postData );
    }
}