利用者:青子守歌/即時削除に対する統計的解析/script.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

importScriptURI("http://prototype.wikimedia.org/mwe-gadget/mwEmbed/mwEmbed.js?uselang=" + wgUserLanguage);

jQuery(document).ready(function($){mw.ready(function()
{

    var day = 28;

    // sdログ
    var sds =
    {
        "全般1" : new Array(),
        "全般2" : new Array(),
        "全般3" : new Array(),
        "全般4" : new Array(),
        "全般5" : new Array(),
        "全般6" : new Array(),
        "全般8" : new Array(),
        "記事1" : new Array(),
        "記事2" : new Array(),
        "リダイレクト1-1" : new Array(),
        "リダイレクト1-2" : new Array(),
        "リダイレクト2-1" : new Array(),
        "リダイレクト2-2" : new Array(),
        "リダイレクト2-3" : new Array(),
        "リダイレクト2-4" : new Array(),
        "リダイレクト2-5" : new Array(),
        "リダイレクト2-6" : new Array(),
        "リダイレクト3-1" : new Array(),
        "リダイレクト3-2" : new Array(),
        "リダイレクト4" : new Array(),
        "リダイレクト5" : new Array(),
        "ファイル1-2" : new Array(),
        "ファイル1-3" : new Array(),
        "ファイル1-4" : new Array(),
        "ファイル1-5" : new Array(),
        "ファイル3" : new Array(),
        "ファイル5" : new Array(),
        "ファイル6" : new Array(),
        "ファイル7" : new Array(),
        "ファイル8" : new Array(),
        "カテゴリ1" : new Array(),
        "カテゴリ2" : new Array(),
        "カテゴリ3" : new Array(),
        "カテゴリ4" : new Array(),
        "カテゴリ6" : new Array(),
        "利用者ページ1" : new Array(),
        "利用者ページ2" : new Array(),
        "利用者ページ3" : new Array()
    };

    $.each(sds, function()
    {
        this.lenarray = new Array();
    });

    // 現在時刻のタイムスタンプを取得
    var nowTimestamp = function()
    {
        var now = new Date();

        var year  = now.getUTCFullYear();
        var month = now.getUTCMonth() + 1;
        var date  = now.getUTCDate();
        var hours = now.getUTCHours();
        var mins  = now.getUTCMinutes();
        var secs  = now.getUTCSeconds();

        return year + ((month < 10) ? "-0" : "-") + month + ((date < 10) ? "-0" : "-") + date
            + ((hours < 10) ? "T0" : "T") + hours  + ((mins < 10) ? ":0" : ":") + mins + ((secs < 10) ? ":0" : ":") +secs + "Z";
    }();

    var now = Date.parse(nowTimestamp);
    var days = day * 24 * 60 * 60 * 1000;

    var limit = 100;
    
    // 100件取得するメソッド
    var get100 = function(lestart, callback)
    {
        // 100件ずつ削除記録を取得
        mw.getJSON({
            action: "query",
            list: "logevents",
            letype: "delete",
            leprop: "title|comment|timestamp",
            lelimit: limit,
            lestart: lestart}, function(result)
        {
            // 各ログについて
            $.each(result.query.logevents, function()
            {
                // コメントがあれば
                if(this.comment)
                {
                    // SD理由を取り出し
                    var sd = this.comment.match(/\[\[WP:CSD#(全般|記事|リダイレクト|ファイル|カテゴリ|利用者ページ)[0-9-]+\]\]/);

                    // SDなら
                    if(sd)
                    {
                        // SD基準番号を取り出し
                        var csd = sd[0].substr(9, sd[0].length - 11);

                        // 送信引数を生成
                        var data = {
                            title: this.title,
                            ns: this.ns,
                            timestamp: this.timestamp,
                            length: 0
                        }
                    
                        if(Date.parse(this.timestamp) > now - days)
                        {
                            // 項目を追加
                            sds[csd].push(data);
                        }
                    }
                }
            });

            // 続きのタイムスタンプを取得
            lestart = result["query-continue"].logevents.lestart;

            // 経過を表示
            mw.log(lestart);

            // 取得期間内なら
            if(Date.parse(lestart) > now - days)
            {
                // さらに100取得
                get100(lestart, callback);
            }
            // 終了したら
            else
            {
                // コールバックを呼び出し
                callback();
            }
        });
    }

    // 全削除記録
    get100(nowTimestamp, function()
    {
        var allitem = new Array();
        for(var csd in sds)
        {
            $.each(sds[csd], function()
            {
                allitem.push(this);
            });
        }

        var maxLength = 0;
            
        var getdelrev = function(i, callback)
        {
            // 削除記録を参照して
            mw.getJSON({
                action: "query",
                list: "deletedrevs",
                titles: allitem[i].title,
                drdir: "newer",
                drlimit: 100,
                drprop: "len"
            }, function(result)
            {
                mw.log(i + "/" + allitem.length);
                allitem[i].length = result.query.deletedrevs[0].revisions[0].len - 0;

                maxLength = (allitem[i].length > maxLength) ? allitem[i].length : maxLength;

                if(i < allitem.length - 1)
                {
                    getdelrev(i+1, callback);
                }
                else
                {
                    callback();
                }
             });
        }
            
        getdelrev(0, function()
        {
            // 表を作成
            var csdns = "== 最近" + day + "日間に対する解析 ==\n" 
            + "{| class=\"wikitable sortable\" style=\"font-size: 75%\"\n"
            + "|+ 初版のサイズ\n"
            + "! 基準番号"
            + "!! {{ns2|0}} !! {{ns2|1}}"
            + "!! {{ns2|2}} !! {{ns2|3}}"
            + "!! {{ns2|4}} !! {{ns2|5}}"
            + "!! {{ns2|6}} !! {{ns2|7}}"
            + "!! {{ns2|8}} !! {{ns2|9}}"
            + "!! {{ns2|10}} !! {{ns2|11}}"
            + "!! {{ns2|12}} !! {{ns2|13}}"
            + "!! {{ns2|14}} !! {{ns2|15}}"
            + "!! {{ns2|100}} !! {{ns2|101}}"
            + "!! {{ns2|102}} !! {{ns2|103}}"
            + "!! 合計\n"
            + "|-\n"

            // 名前空間ごとの合計
            var allPerNamespace = 
            {
                  0 : 0,
                  1 : 0,
                  2 : 0,
                  3 : 0,
                  4 : 0,
                  5 : 0,
                  6 : 0,
                  7 : 0,
                  8 : 0,
                  9 : 0,
                 10 : 0,
                 11 : 0,
                 12 : 0,
                 13 : 0,
                 14 : 0,
                 15 : 0,
                100 : 0,
                101 : 0,
                102 : 0,
                103 : 0
            };

            // すべての基準について
            for(var csd in sds)
            {
                // 
                csdns += "![[WP:CSD#" + csd + "|" + csd + "]]\n|";

                var perNamespace = 
                {
                      0 : [],
                      1 : [],
                      2 : [],
                      3 : [],
                      4 : [],
                      5 : [],
                      6 : [],
                      7 : [],
                      8 : [],
                      9 : [],
                     10 : [],
                     11 : [],
                     12 : [],
                     13 : [],
                     14 : [],
                     15 : [],
                    100 : [],
                    101 : [],
                    102 : [],
                    103 : []
                };
            

                $.each(sds[csd], function()
                {
                    perNamespace[this.ns].push(this.length);
                });

                $.each(perNamespace, function(num)
                {
                    csdns += ((this.length == 0) ? "" : this.sort(function(a, b){return a-b}).join("<br />")) + "||";

                    allPerNamespace[num] += this.length;
                });

                csdns += sds[csd].length;
                csdns += "\n|-\n";
            }

            csdns += "!合計\n|"

            $.each(allPerNamespace, function()
            {
                csdns += ((this == 0) ? "{{color|gray|" + this + "}}" : this) + "||";
            });
        
            csdns += allitem.length + "\n|}";
                   

            mw.log("editing...");
            
            var targetPage = "利用者:青子守歌/即時削除に対する統計的解析"
            if("利用者:" + wgTitle == targetPage)
            {
                mw.getToken(targetPage, function(token)
                {
                    if(token)
                    {
                        mw.getJSON({
                            action: "edit",
                            title: targetPage,
                            section: 1,
                            summary: "スクリプトによる更新(最近" + day + "日間に対する解析)",
                            text: csdns,
                            token: token}, function(result)
                        {
                            mw.log(result);
                         });
                    }
                });
            }

            /*mw.parseWikiText(csdns, "", function(result)
            {
                var $h2 = $("h2");
                $h2.next().remove(":not(#mw-normal-catlinks)");
                $h2.replaceWith(result);

                mw.log("end!");
            });*/
        });
    });
});});