Beam Up!

by Yoshiharu Kamata

HTML

<script src="https://raw.github.com/jeromeetienne/jquery-qrcode/master/jquery.qrcode.min.js"></script>
<script src="https://raw.github.com/documentcloud/underscore/master/underscore-min.js"></script>
<script src="http://api.polygonpla.net/js/tinylz77.js"></script>
<script src="https://raw.github.com/edtsech/underscore.string/master/dist/underscore.string.min.js"></script>
<div id="qr"></div>
<textarea id="encode-text"></textarea>
<button id="qr-btn">qrcode</button>
<button id="reset">reset</button>
<label>auto delete:<input id="auto-delete" type="text" value="480"/>M</label>

<div id="img-size">
    <input type="radio" id="img-size-s" name="img-size" value="256" checked/><label for="img-size-s">S</label>
    <input type="radio" id="img-size-m" name="img-size" value="512" /><label for="img-size-m">M</label>
    <input type="radio" id="img-size-l" name="img-size" value="1024" /><label for="img-size-l">L</label>

</div>
<div id="drop" style="border:solid 3px;">drop file here</div>

CSS

div.qr {
    margin: 50px 10px;
}

JavaScript

$(function() {
    // base64@javascript#7lines
base64={b:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode:function(s){var t="",p=-6,a=0,i=0,v=0,c;s=unescape(encodeURI(s));while(i
<s.length||p>-6){if(p<0){if(i<s.length){c=s.charCodeAt(i++);v+=8}else{c=0}a=((a
&255)<<8)|(c&255);p+=8}t+=this.b.charAt(v>0?a>>p&63:64);p-=6;v-=6}return t},
decode:function(s){var t="",p=-8,a=0,c,d,i=0;for(;i<s.length;i++){if((c=this.b.
indexOf(s.charAt(i)))>=0){a=(a<<6)|(c&63);if((p+=6)>=0){d=a>>p&255;if(c!=64)t+=
String.fromCharCode(d);a&=63;p-=8}}}return decodeURIComponent(escape(t))}};
    $.base64 = base64;
    _.mixin(_.string.exports());
    $("#img-size").buttonset();
    $.event.props.push('dataTransfer');
    $("#qr-btn").on("click", function() {
        var orgText = $("#encode-text").val();
        $("#qr").empty();

        var encodeStrings = _($.base64.encode(TinyLz77.compress($("#encode-text").val()))).chop($("#img-size [name=img-size]:checked").val());
        var allLength = encodeStrings.length;
        var encodeAry = [];
        
        _(encodeStrings).chain().each(function(encodeStr, idx) {
            var json = {
                a: allLength,
                i: idx,
                d: encodeStr
            },
                isLast = (idx+1 == allLength);                
                
            if(isLast){
                json.r = $("#auto-delete").val() || 0;
            }
            encodeAry.push(json);
            $("<div>").addClass("qr").qrcode(JSON.stringify(json)).appendTo("#qr");
        });
        
        var str = _(encodeAry).chain().shuffle()
            .sortBy(function(data){
            return data.i;
        })
            .tap(function(item){console.log("item0=",item)})
            .reduce(function(result,data){
                result+= data.d;
                return result;
            },'')
            .value();
$("#result").text(str);
    });
    $("#reset").on("click", function() {
       ...