diff options
| author | Julie Lala <jules@okfoc.us> | 2014-11-29 19:02:35 -0500 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-11-29 19:02:35 -0500 |
| commit | 698f2aa71ffc1b9e56193c13e6366765134152c9 (patch) | |
| tree | 072b8e049870877f189135e3a2398387ae6f96fa | |
| parent | 05d359b6cdabc42025881e0a39c00995d8a29394 (diff) | |
formalizing import/export stuff
| -rw-r--r-- | index.html | 61 | ||||
| -rw-r--r-- | js/clipboard.js | 31 | ||||
| -rw-r--r-- | js/lex.js | 13 | ||||
| -rw-r--r-- | js/matrix.js | 33 |
4 files changed, 102 insertions, 36 deletions
@@ -17,34 +17,47 @@ body { transition: 0.1s linear; } <body class="loading"> -<div> -<div id="canvas_rapper" class="rapper"></div> -</div> -<div style="clear:both"> -<div id="palette_rapper" class="rapper"></div> -<div id="brush_rapper" class="rapper"></div> -<div id="tools_rapper" class="block"> - <span id="square_el" class="tool">square</span> - <span id="circle_el" class="tool">circle</span> - <span id="text_el" class="tool">text</span> - <span id="clear_el" class="tool">clear</span> - <span id="grid_el" class="tool">grid</span> - <span id="shader_el" class="tool">shader</span> + <div> + <div id="canvas_rapper" class="rapper"></div> + </div> - brush size: <span id="width_el" class="ed">5</span> x <span id="height_el" class="ed">5</span> - canvas size: <span id="canvas_width_el" class="ed">80</span> x <span id="canvas_height_el" class="ed">24</span> + <div style="clear:both"> + <div id="palette_rapper" class="rapper"></div> + <div id="brush_rapper" class="rapper"></div> + <div id="tools_rapper" class="block"> + <span id="square_el" class="tool">square</span> + <span id="circle_el" class="tool">circle</span> + <span id="text_el" class="tool">text</span> + <span id="clear_el" class="tool">clear</span> + <span id="grid_el" class="tool">grid</span> + <span id="shader_el" class="tool">shader</span> + <span id="import_el" class="tool">import</span> + <span id="export_el" class="tool">export</span> + + brush size: <span id="width_el" class="ed">5</span> x <span id="height_el" class="ed">5</span> + canvas size: <span id="canvas_width_el" class="ed">80</span> x <span id="canvas_height_el" class="ed">24</span> - <span id="animate_checkbox" class="tool">_ animate</span> -</div> -<textarea id="shader_textarea"></textarea> -</div> -<input type="text" id="cursor_input"> + <span id="animate_checkbox" class="tool">_ animate</span> + </div> + <textarea id="shader_textarea"></textarea> + </div> + + <div id="import_rapper"> + <input type="radio" name="import_format" id="import_ascii"><label for="import_ascii">ascii</label> + <input type="radio" name="import_format" id="import_irssi"><label for="import_irssi">irssi</label> + <input type="radio" name="import_format" id="import_mirc"><label for="import_mirc">mirc</label> + <button id="import_button">import</button> + <button id="export_button">export</button> + <textarea id="import_textarea" cols=80 rows=24></textarea> + </div> + + <input type="text" id="cursor_input"> + </body> <script type="text/javascript-shader" id="demo_shader"> - lex.bg = hue((x+y*y+t/10)/20) - lex.fg = (x+y)%16 - lex.char = (y%2) ? ":" : "%" - + lex.bg = hue((x+y*y+t/10)/20) + lex.fg = (x+y)%16 + lex.char = (y%2) ? ":" : "%" </script> <script src="js/util.js"></script> <script src="js/color.js"></script> diff --git a/js/clipboard.js b/js/clipboard.js index 744901c..501b189 100644 --- a/js/clipboard.js +++ b/js/clipboard.js @@ -1,18 +1,45 @@ var clipboard = (function () { + var format; var disabled = false; var contentType = 'text/plain;charset=utf-8' document.body.addEventListener('copy', function (e) { if (disabled) { return } if (e.clipboardData) { e.preventDefault(); - e.clipboardData.setData(contentType, canvas.ascii()); + e.clipboardData.setData(contentType, canvas.irssi()); } if (window.clipboardData) { e.returnValue = false; - window.clipboardData.setData(contentType, canvas.ascii()); + window.clipboardData.setData(contentType, canvas.irssi()); } }, false); + + function import_data () { + var data = import_textarea.value + lines = data.split("\n") + } + function export_data () { + var output + switch (format) { + case 'ascii': + output = canvas.ascii() + break + case 'mirc': + output = canvas.mirc() + break + case 'irssi': + output = canvas.irssi() + break + } + } + + import_ascii.addEventListener("click", function(){ format = "ascii" }) + import_irssi.addEventListener("click", function(){ format = "irssi" }) + import_mirc.addEventListener("click", function(){ format = "mirc" }) + import_button.addEventListener("click", import_data) + export_button.addEventListener("click", export_data) + // import_textarea return { enable: function(){ disabled = false }, @@ -25,16 +25,23 @@ Lex.prototype.read = function(){ this.char = this.span.innerHTML return this.char } +Lex.prototype.ascii = function(){ + return this.char || " " +} Lex.prototype.sanitize = function(){ return this.char == "%" ? '%%' : this.char || " " } -Lex.prototype.irc = function(){ - var char = this.sanitize() +var fgOnly = false +Lex.prototype.mirc = function(){ + var char = this.char || " " + if (fgOnly) { + return "\x03" + (this.fg&15) + char + } if (this.bg == 1 && this.fg == 0) { return char } else { - return "\\x03" + (this.fg&15) + "," + (this.bg&15) + char + return "\x03" + (this.fg&15) + "," + (this.bg&15) + char } } Lex.prototype.clone = function (lex){ diff --git a/js/matrix.js b/js/matrix.js index 73c2992..4366eaa 100644 --- a/js/matrix.js +++ b/js/matrix.js @@ -86,20 +86,39 @@ Matrix.prototype.ascii = function () { var lines = this.aa.map(function(row, y){ var last, line = "" row.forEach(function(lex, x) { + line += lex.ascii() + }) + return line.replace(/\s+$/,"") + }) + var txt = lines.join("\n") + return txt +} +Matrix.prototype.mirc = function () { + var lines = this.aa.map(function(row, y){ + var last, line = "" + row.forEach(function(lex, x) { if (lex.eq(last)) { line += lex.sanitize() } else { - if (x > 0 && last && (last.bg != 1 || last.fg != 0)) line += "\\x03" - line += lex.irc() + if (x > 0 && last && (last.bg != 1 || last.fg != 0)) line += "\x03" + line += lex.mirc() last = lex } }) - if (last && ! last.isClear()) { line += "\\x03" } - return line.replace(/\s+$/,"").replace(/\"/g, '\\\"').replace(/\`/g, '\\\`') + if (last && ! last.isClear()) { line += "\x03" } + return line.replace(/\s+$/,"") }).filter(function(line){ return line.length > 0 }) - var txt = '/exec -out printf "' + lines.join("\\n") + '"\n' - return txt + return lines.join("\n") +} +Matrix.prototype.irssi = function(){ + var txt = this.mirc() + .replace(/\%/g, '%%') + .replace(/\"/g, '\\\"') + .replace(/\`/g, '\\\`') + .replace(/\\n/g, '\\n') + .replace(/\x03/g, '\\x03') + return '/exec -out printf "' + txt + '"\n' } Matrix.prototype.expand = function(i){ var w = this.w = clamp(this.w+i, 1, 9), h = this.h = clamp(this.h+i, 1, 9) @@ -111,5 +130,5 @@ Matrix.prototype.expand = function(i){ this.rebuild() } Matrix.prototype.contract = function(i){ - brush.expand(-i) + this .expand(-i) } |
