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() {
...