フォトライフ一括アップロード

    
      
  • /*
     * @title フォトライフ一括アップロード
     * @description 64bit 版 Firefox だと Flash の一括アップロードが動かないので、その補完のつもりです。
     * @include http://f.hatena.ne.jp/my/up
     * @license MIT License
     * @javascript_url
     */
    (function(){
        function removeNode(e) {
            e.parentNode.removeChild(e);
        }
    
        var form = document.querySelector("form#upload");
        var file_block = form.querySelector("div#upload-form");
    
        var label = document.createElement("div");
        label.innerHTML = "複数のファイルを一括でアップロードします(10個まで)";
        label.style.margin = "1em 0.5ex";
        file_block.parentNode.insertBefore(label, file_block);
    
        var inp = document.createElement("input");
        inp.type = "file";
        inp.multiple = true;
        file_block.parentNode.insertBefore(inp, file_block);
    
        removeNode(form.querySelector("div.upload-submit"));
        removeNode(file_block);
    
        inp.onchange = function() {
            if (this.files.length > 10) {
                alert("同時にアップロードできるのは10個までです!");
                return;
            }
            var form = this.form;
            var form_data = new FormData(form);
            var i = 1;
            Array.from(this.files).forEach(function(f) {
                form_data.append("image" + i, f);
                i += 1;
            });
    
            var upload_url = this.form.action;
            var xhr = new XMLHttpRequest();
            xhr.onload = function(e){
                var opts = form.querySelector("select[name=\"folder\"]");
                var folder = opts[opts.selectedIndex];
                var matches = /(.*\/)up/.exec(upload_url);
                if (matches) {
                    document.location.href = matches[1] + "edit?folder=" + encodeURI(folder.value); 
                }
            };
            xhr.open("POST", upload_url);
            xhr.send(form_data);
    
            label.style.color = "red";
            label.innerHTML = "アップロードしています...";
        };
    }());
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2016/01/31 12:38:36 - 2016-01-31
  2. 2016/01/31 12:36:05 - 2016-01-31
  3. 2016/01/31 11:30:30 - 2016-01-31
  4. 2016/01/30 23:28:08 - 2016-01-30