diff options
| author | timb <opuscule@gmail.com> | 2015-08-15 12:41:41 -0700 |
|---|---|---|
| committer | timb <opuscule@gmail.com> | 2015-08-15 12:41:41 -0700 |
| commit | 930143b966b32649225c2431eba6bbc635630113 (patch) | |
| tree | 6119d49a35078fd20739ba36a1eab1fd67fcf202 /js | |
| parent | 60c50f6fb8257de776ffc211d160456824065dfa (diff) | |
try to load colorcode if url passed in window.location
Diffstat (limited to 'js')
| -rw-r--r-- | js/app.js | 2 | ||||
| -rw-r--r-- | js/clipboard.js | 84 |
2 files changed, 78 insertions, 8 deletions
@@ -13,6 +13,7 @@ var current_tool, current_filetool, current_canvas function init () { build() bind() + clipboard.load_from_location() } function build () { shader.init() @@ -42,6 +43,7 @@ function bind () { brush.bind() controls.bind() keys.bind() + clipboard.bind() window.addEventListener('mouseup', function(e){ dragging = erasing = false diff --git a/js/clipboard.js b/js/clipboard.js index 94a061d..01ca784 100644 --- a/js/clipboard.js +++ b/js/clipboard.js @@ -74,8 +74,8 @@ var clipboard = (function () { }, - import_colorcode: function () { - var data = import_textarea.value + import_colorcode: function (data, no_undo) { + data = data || import_textarea.value var irssi_style_regex = /^\s*\/exec -out printf ("%b" )?"/; @@ -98,10 +98,10 @@ var clipboard = (function () { var json = colorcode.to_json(data, {fg:0, bg:1}) - undo.new() - undo.save_rect(0,0, canvas.w, canvas.h) + if (!no_undo) undo.new() + if (!no_undo) undo.save_rect(0,0, canvas.w, canvas.h) if (json.w !== canvas.w || json.h !== canvas.h){ - undo.save_size(canvas.w, canvas.h) + if (!no_undo) undo.save_size(canvas.w, canvas.h) canvas.resize(json.w, json.h, true) } canvas.clear() @@ -231,11 +231,79 @@ var clipboard = (function () { upload(blob, filename, tag) } clipboard.export_canvas(upload_fn) - }, + } + + } + + function parse_url_search_params(url){ + var params = {} + url = url.split('?') + if (url.length < 2) return params + + var search = url[1].split('&') + for (var i = 0, pair; pair = search[i]; i++){ + pair = pair.split('=') + if (pair.length < 2) continue + var key = pair[0] + var val = pair[1] + if (key in params){ + if (typeof params[key] === 'string'){ + params[key] = [params[key], val] + } + else params[key].push(val) + } + else params[key] = val + } + return params + } + + function get_filetype(txt){ + txt = txt.split('.') + return txt[txt.length - 1].toLowerCase() + } + + function fetch_url(url, f, type){ + type = type || 'arraybuffer' + url = "/cgi-bin/proxy?" + url + // url = "http://198.199.72.134/cors/" + url + var xhr = new XMLHttpRequest() + xhr.open('GET', url, true) + xhr.responseType = type + xhr.addEventListener('load', function(){ f(xhr.response) }) + xhr.send() + } + + function load_text(txt){ + clipboard.import_colorcode(txt, true) + } + + function load_png(buf){ + var chunks = PNG.decode(buf) + if (!chunks) return + var itxt_chunks = [] + for (var i=0, c; c=chunks[i]; i++){ + if (c.type !== 'iTXt') continue + var itxt = PNG.decode_itxt_chunk(c) + if (!itxt.keyword || itxt.keyword !== 'colorcode') continue + clipboard.import_colorcode(itxt.data, true) + } + } + + exports.load_from_location = function(){ + var params = parse_url_search_params(window.location + '') + if (!params.url) return + var url = params.url + var type = get_filetype(url) + switch (type){ + case 'txt': + fetch_url(url, load_text, 'text') + break + case 'png': + fetch_url(url, load_png) + break + } } - - exports.bind() return exports |
