summaryrefslogtreecommitdiff
path: root/js/clipboard.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/clipboard.js')
-rw-r--r--js/clipboard.js84
1 files changed, 76 insertions, 8 deletions
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