Bump to v1.0.7.

This commit is contained in:
Lucio Andrés Illanes Albornoz 2018-11-25 13:49:21 +01:00
parent 21909c5cd0
commit 0b6376e542
39 changed files with 828 additions and 1236 deletions

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.lalbornoz.asciiblaster" version="1.0.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="com.lalbornoz.asciiblaster" version="1.0.7" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<author email="lucio@lucioillanes.de" href="https://github.com/lalbornoz/asciiblaster#readme">
Lucio Andrés Illanes Albornoz &lt;lucio@lucioillanes.de&gt;, based on work by JOLLO NET NA
</author>

View File

@ -1,6 +1,6 @@
{
"name": "asciiblaster-cordoba",
"version": "1.0.6",
"version": "1.0.7",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -127,7 +127,7 @@
}
},
"inflight": {
"version": "1.0.6",
"version": "1.0.7",
"bundled": true,
"requires": {
"once": "^1.3.0",

View File

@ -30,5 +30,5 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"version": "1.0.6"
"version": "1.0.7"
}

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10006" android:versionName="1.0.6" package="com.lalbornoz.asciiblaster" xmlns:android="http://schemas.android.com/apk/res/android">
<manifest android:hardwareAccelerated="true" android:versionCode="10007" android:versionName="1.0.7" package="com.lalbornoz.asciiblaster" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">

View File

@ -1,139 +1,43 @@
.fa{color:#fff}.fb{color:#000}.fc{color:#00007F}.fd{color:#009300}.fe{color:red}.ff{color:#7f0000}.fg{color:#9C009C}.fh{color:#FC7F00}.fi{color:#FF0}.fj{color:#00FC00}.fk{color:#009393}.fl{color:#0FF}.fm{color:#0000FC}.fn{color:#F0F}.fo{color:#7F7F7F}.fp{color:#D2D2D2}
.ba{background-color:#fff}.bb{background-color:#000}.bc{background-color:#00007F}.bd{background-color:#009300}.be{background-color:red}.bf{background-color:#7f0000}.bg{background-color:#9C009C}.bh{background-color:#FC7F00}.bi{background-color:#FF0}.bj{background-color:#00FC00}.bk{background-color:#009393}.bl{background-color:#0FF}.bm{background-color:#0000FC}.bn{background-color:#F0F}.bo{background-color:#7F7F7F}.bp{background-color:#D2D2D2}
/*
* Background mIRC colours
*/
.ba {background-color: #FFFFFF}
.bb {background-color: #000000}
.bc {background-color: #00007F}
.bd {background-color: #009300}
.be {background-color: #FF0000}
.bf {background-color: #7f0000}
.bg {background-color: #9C009C}
.bh {background-color: #FC7F00}
.bi {background-color: #FFFF00}
.bj {background-color: #00FC00}
.bk {background-color: #009393}
.bl {background-color: #00FFFF}
.bm {background-color: #0000FC}
.bn {background-color: #FF00FF}
.bo {background-color: #7F7F7F}
.bp {background-color: #D2D2D2}
.winxp .fa{color:rgb(255,255,255)}
.winxp .fb{color:rgb(0,0,0)}
.winxp .fc{color:rgb(0,0,128)}
.winxp .fd{color:rgb(0,128,0)}
.winxp .fe{color:rgb(255,0,0)}
.winxp .ff{color:rgb(128,0,0)}
.winxp .fg{color:rgb(128,0,128)}
.winxp .fh{color:rgb(255,128,0)}
.winxp .fi{color:rgb(255,255,0)}
.winxp .fj{color:rgb(0,255,0)}
.winxp .fk{color:rgb(0,128,128)}
.winxp .fl{color:rgb(0,255,255)}
.winxp .fm{color:rgb(0,0,255)}
.winxp .fn{color:rgb(255,0,255)}
.winxp .fo{color:rgb(128,128,128)}
.winxp .fp{color:rgb(192,192,192)}
/*
* Foreground mIRC colours
*/
.fa {color: #FFFFFF}
.fb {color: #000000}
.fc {color: #00007F}
.fd {color: #009300}
.fe {color: #FF0000}
.ff {color: #7F0000}
.fg {color: #9C009C}
.fh {color: #FC7F00}
.fi {color: #FFFF00}
.fj {color: #00FC00}
.fk {color: #009393}
.fl {color: #00FFFF}
.fm {color: #0000FC}
.fn {color: #FF00FF}
.fo {color: #7F7F7F}
.fp {color: #D2D2D2}
.winxp .ba{background-color:rgb(255,255,255)}
.winxp .bb{background-color:rgb(0,0,0)}
.winxp .bc{background-color:rgb(0,0,128)}
.winxp .bd{background-color:rgb(0,128,0)}
.winxp .be{background-color:rgb(255,0,0)}
.winxp .bf{background-color:rgb(128,0,0)}
.winxp .bg{background-color:rgb(128,0,128)}
.winxp .bh{background-color:rgb(255,128,0)}
.winxp .bi{background-color:rgb(255,255,0)}
.winxp .bj{background-color:rgb(0,255,0)}
.winxp .bk{background-color:rgb(0,128,128)}
.winxp .bl{background-color:rgb(0,255,255)}
.winxp .bm{background-color:rgb(0,0,255)}
.winxp .bn{background-color:rgb(255,0,255)}
.winxp .bo{background-color:rgb(128,128,128)}
.winxp .bp{background-color:rgb(192,192,192)}
.vga .fa{color:rgb(255,255,255)}
.vga .fb{color:rgb(0,0,0)}
.vga .fc{color:rgb(0,0,170)}
.vga .fd{color:rgb(0,170,0)}
.vga .fe{color:rgb(255,85,85)}
.vga .ff{color:rgb(170,0,0)}
.vga .fg{color:rgb(170,0,170)}
.vga .fh{color:rgb(170,85,0)}
.vga .fi{color:rgb(255,255,85)}
.vga .fj{color:rgb(85,255,85)}
.vga .fk{color:rgb(0,170,170)}
.vga .fl{color:rgb(85,255,255)}
.vga .fm{color:rgb(85,85,255)}
.vga .fn{color:rgb(255,85,255)}
.vga .fo{color:rgb(85,85,85)}
.vga .fp{color:rgb(170,170,170)}
.vga .ba{background-color:rgb(255,255,255)}
.vga .bb{background-color:rgb(0,0,0)}
.vga .bc{background-color:rgb(0,0,170)}
.vga .bd{background-color:rgb(0,170,0)}
.vga .be{background-color:rgb(255,85,85)}
.vga .bf{background-color:rgb(170,0,0)}
.vga .bg{background-color:rgb(170,0,170)}
.vga .bh{background-color:rgb(170,85,0)}
.vga .bi{background-color:rgb(255,255,85)}
.vga .bj{background-color:rgb(85,255,85)}
.vga .bk{background-color:rgb(0,170,170)}
.vga .bl{background-color:rgb(85,255,255)}
.vga .bm{background-color:rgb(85,85,255)}
.vga .bn{background-color:rgb(255,85,255)}
.vga .bo{background-color:rgb(85,85,85)}
.vga .bp{background-color:rgb(170,170,170)}
.c64 .fa{color:rgb(255,255,255)}
.c64 .fb{color:rgb(0,0,0)}
.c64 .fc{color:rgb(69,32,170)}
.c64 .fd{color:rgb(101,170,69)}
.c64 .fe{color:rgb(138,101,32)}
.c64 .ff{color:rgb(138,69,32)}
.c64 .fg{color:rgb(138,69,170)}
.c64 .fh{color:rgb(101,69,0)}
.c64 .fi{color:rgb(207,207,101)}
.c64 .fj{color:rgb(170,239,138)}
.c64 .fk{color:rgb(138,138,138)}
.c64 .fl{color:rgb(101,170,207)}
.c64 .fm{color:rgb(138,101,223)}
.c64 .fn{color:rgb(207,138,101)}
.c64 .fo{color:rgb(69,69,69)}
.c64 .fp{color:rgb(170,170,170)}
.c64 .ba{background-color:rgb(255,255,255)}
.c64 .bb{background-color:rgb(0,0,0)}
.c64 .bc{background-color:rgb(69,32,170)}
.c64 .bd{background-color:rgb(101,170,69)}
.c64 .be{background-color:rgb(138,101,32)}
.c64 .bf{background-color:rgb(138,69,32)}
.c64 .bg{background-color:rgb(138,69,170)}
.c64 .bh{background-color:rgb(101,69,0)}
.c64 .bi{background-color:rgb(207,207,101)}
.c64 .bj{background-color:rgb(170,239,138)}
.c64 .bk{background-color:rgb(138,138,138)}
.c64 .bl{background-color:rgb(101,170,207)}
.c64 .bm{background-color:rgb(138,101,223)}
.c64 .bn{background-color:rgb(207,138,101)}
.c64 .bo{background-color:rgb(69,69,69)}
.c64 .bp{background-color:rgb(170,170,170)}
.appleii .fa{color:rgb(255,255,255)}
.appleii .fb{color:rgb(0,0,0)}
.appleii .fc{color:rgb(64,53,121)}
.appleii .fd{color:rgb(64,75,7)}
.appleii .fe{color:rgb(191,180,248)}
.appleii .ff{color:rgb(109,41,64)}
.appleii .fg{color:rgb(218,60,241)}
.appleii .fh{color:rgb(218,104,15)}
.appleii .fi{color:rgb(191,202,134)}
.appleii .fj{color:rgb(38,195,16)}
.appleii .fk{color:rgb(19,87,64)}
.appleii .fl{color:rgb(146,214,191)}
.appleii .fm{color:rgb(37,151,240)}
.appleii .fn{color:rgb(236,168,191)}
.appleii .fo{color:rgb(128,128,128)}
.appleii .fp{color:rgb(128,128,128)}
.appleii .ba{background-color:rgb(255,255,255)}
.appleii .bb{background-color:rgb(0,0,0)}
.appleii .bc{background-color:rgb(64,53,121)}
.appleii .bd{background-color:rgb(64,75,7)}
.appleii .be{background-color:rgb(191,180,248)}
.appleii .bf{background-color:rgb(109,41,64)}
.appleii .bg{background-color:rgb(218,60,241)}
.appleii .bh{background-color:rgb(218,104,15)}
.appleii .bi{background-color:rgb(191,202,134)}
.appleii .bj{background-color:rgb(38,195,16)}
.appleii .bk{background-color:rgb(19,87,64)}
.appleii .bl{background-color:rgb(146,214,191)}
.appleii .bm{background-color:rgb(37,151,240)}
.appleii .bn{background-color:rgb(236,168,191)}
.appleii .bo{background-color:rgb(128,128,128)}
.appleii .bp{background-color:rgb(128,128,128)}
/*
* vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
*/

View File

@ -0,0 +1,13 @@
@font-face {
font-family: 'FixedsysExcelsior301Regular';
font-style: normal;
src: url('../fonts/fsex300-webfont.eot');
src: url('../fonts/fsex300-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/fsex300-webfont.woff') format('woff'),
url('../fonts/fsex300-webfont.ttf') format('truetype'),
url('../fonts/fsex300-webfont.svg#FixedsysExcelsior301Regular') format('svg');
}
/*
* vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
*/

View File

@ -0,0 +1,48 @@
body {
background: #000000;
background-image: url('../images/tile.jpg');
color: rgb(255,255,0);
font-family: times new roman;
font-family: 'FixedsysExcelsior301Regular';
font-size: 16pt;
}
/* {{{ DIV id styles */
div#box {
background: rgba(0,0,100,0.5);
border: 3px solid #0000ff;
border-spacing: 0px;
color: #00ffff!important;
display: inline-block;
font-size: 20px;
font-size: 12pt!important;
margin: 10px 0;
padding: 10px;
}
div#box_wrapper {
margin: 0 auto;
width: 50%;
}
/* }}} */
/* {{{ Element styles */
h1 {
color: #ff00ff!important;
font-size: 42px;
margin-bottom: 15px;
}
h2 {
color: #00ffff!important;
margin-bottom: 15px;
margin-top: 15px;
}
p {
color: white;
}
pre {
color: white;
}
/* }}} */
/*
* vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
*/

View File

@ -1,119 +0,0 @@
.h1 { font-size: 32px }
.h2 { font-size: 24px }
.h3 { font-size: 18.72px }
.h4 { font-size: 16px }
.h5 { font-size: 13.28px }
.h6 { font-size: 10.72px }
[class^=h] {
font-weight: bold;
display:block;
margin-top:8px;
margin-bottom:8px;
}
body {
background:#000;
background-image:url('../images/tile.jpg');
font-size:16pt;
font-family:times new roman;
color:rgb(255,255,0);
}
i {
color:#0f0!important;
}
a:link {
color:rgb(0,255,255);
}
a:visited {
color:#00f;
}
a:active {
color:#fff;
}
.code {
white-space:pre-wrap;
background: rgba(128,0,128,.3);
color: rgb(255,0,255);
font-size: 16pt;
font-family: Consolas, Menlo, Courier, monospace;
}
.inline {
padding: 1px 4px;
}
.block {
padding:12px 16px;
border-width: 0 0 0 5px;
border-style: solid;
border-color:#0f0;
}
table {
border-spacing: 0px;
border:3px solid #00f;
margin:10px 0;
font-size:20px;
color:#0ff!important;
font-size:12pt!important;
}
td {
padding: 6px 9px;
border:2px solid #00f
}
h1 {
font-size:42px;
margin-bottom:15px;
color:#f0f!important
}
h2 {
color:#0ff!important;
margin-top:15px;
margin-bottom:15px;
}
h3 {
color:#f00!important
}
h4 {
color:#0f0!important
}
h5 {
color:#00f!important
}
a:visited i {
color:#00f!important;
}
a i {
color:#f0f!important
}
a:active i {
color:#ff0!important
}
/*
.logo {
background:url('https://jollo.org/assets/images/logo/rebomine_logo.gif');
width:255px;
height:107px;
float:right;
}
*/

View File

@ -1,204 +1,289 @@
textarea,input[type=text],body {
margin:0;
font-family: 'FixedsysExcelsior301Regular';
font-size: 12pt;
font-weight: 100;
line-height: 11pt;
color: #6d6b6d;
-webkit-font-smoothing: antialiased !important;
}
body {
background-color: #000000 !important;
}
@font-face {
font-family: 'FixedsysExcelsior301Regular';
src: url('../fonts/fsex300-webfont.eot');
src: url('../fonts/fsex300-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/fsex300-webfont.woff') format('woff'),
url('../fonts/fsex300-webfont.ttf') format('truetype'),
url('../fonts/fsex300-webfont.svg#FixedsysExcelsior301Regular') format('svg');
font-weighmal;
font-style: normal;
}
a {display: block}
a:link, a:visited {text-decoration: none; color: #6b6760}
a:hover { text-decoration: underline }
.faded { color: #404040; }
.rapper, .block {
float: left;
height:auto;
width:auto;
background-color: #000000;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
/* {{{ BODY.grid styles */
body.grid div {
border-left: 1px solid #444444;
}
.rapper {
white-space:pre-wrap;
word-wrap: break-word;
body.grid span {
border-bottom: 1px solid #444444;
border-right: 1px solid #444444;
}
#ui_rapper .block {
width: 100px;
body.grid .tool {
border: 1px solid #444444;
}
.block {
padding:4px;
body.grid #brush_wrapper > div:first-child,
body.grid #canvas_wrapper > div:first-child,
body.grid #letters_wrapper > div:first-child,
body.grid #palette_wrapper > div:first-child {
border-top: 1px solid #444444;
}
.block:nth-child(n+2) {
padding-left: 30px;
/* }}} */
/* {{{ .initial styles */
.initial #add_custom_el,
.initial #doc_el,
.initial #export_button,
.initial #format_el,
.initial #grid_el,
.initial #import_textarea,
.initial #load_el,
.initial #save_el,
.initial #vertical_checkbox {
}
#textarea_mode { padding: 4px; }
.tool {
cursor: pointer;
}
.hidden {
visibility: hidden;
}
.tool.radio {
margin: 0 8px 0 0;
}
.tool.radio.focused {
color: #000;
background-color: #6d6d6d;
box-shadow: none;
}
.transparent {
background-color: transparent;
background-image: url(../images/gray-dither.gif);
background-size: 8px 8px;
}
@media (-webkit-min-device-pixel-ratio: 2) {
.transparent {
background-size: 4px 4px;
}
}
span,a { min-width: 8px; line-height: 15px; display: inline-block; }
body.pixels {
line-height: 8px;
}
.pixels #brush_rapper span,
.pixels #brush_rapper a,
.pixels #canvas_rapper span,
.pixels #canvas_rapper a { line-height: 8px; overflow: hidden; }
.rapper { cursor: crosshair; }
body.grid span { border-right: 1px solid #444; border-bottom: 1px solid #444; }
body.grid div { border-left: 1px solid #444; }
body.grid #canvas_rapper > div:first-child,
body.grid #palette_rapper > div:first-child,
body.grid #letters_rapper > div:first-child,
body.grid #brush_rapper > div:first-child { border-top: 1px solid #444; }
body.grid .tool { border: 1px solid #444; }
.ed { color: #fff; }
.locked { border-bottom: 1px solid; color: #bbb; text-decoration: none; }
.tool.locked.focused { box-shadow: 0 0; }
.focused { box-shadow: inset 0 0px 2px #fff; border-color: #fff; }
.ba.focused { box-shadow: inset 0 0px 2px #000, inset 0 0px 2px #000; border-color: #000; }
.tool.focused, .ed.focused { color: white; text-decoration: underline; }
.focused { box-shadow: inset 1px 0 2px white, inset -1px 0 2px white, inset 0 1px 2px white, inset 0 -1px 2px white; }
.faba.focused, .fbba.focused, .fcba.focused, .fdba.focused, .feba.focused, .ffba.focused, .fgba.focused, .fhba.focused,
.fiba.focused, .fjba.focused, .fkba.focused, .flba.focused, .fmba.focused, .fnba.focused, .foba.focused, .fpba.focused
{ box-shadow: inset 1px 0 2px #888, inset -1px 0 2px #888, inset 0 1px 2px #888, inset 0 -1px 2px #888; }
body.loading { opacity: 0; }
body { transition: 0.1s linear; }
#import_textarea { font-size: 9pt; }
textarea { font-size:12pt; width: 37vw; height: 300px; background: #333; color: #0f0; border: 0; font-family: 'FixedsysExcelsior301Regular'; outline: 0; border: 1px solid #333; background:#010;}
#import_rapper { display: none; }
#canvas_rapper {
white-space: pre;
box-shadow: 0 0 2px rgba(255,255,255,0.3);
margin: 3px;
}
#ui_rapper { clear:both; float: left; width: 100vw; }
#workspace_rapper { width: 100%; }
.loading .vertical #ui_rapper { clear: none }
.vertical #ui_rapper { width: 320px; float: left; clear: none; }
.vertical .rapper, .vertical .block { float: left; }
.vertical #canvas_rapper,
.vertical #canvas_rapper div,
.vertical #tools_rapper,
.vertical #palette_rapper,
.vertical #brush_container { display: inline-block; float: left; }
.vertical #workspace_rapper { width: auto; position: relative; float: left; }
.vertical #palette_rapper { margin-right: 10px; }
.vertical #tools_block { min-width: 100%; }
#secret_rapper { float: left; clear: right; }
#secret_rapper span { float: left; }
.vertical #secret_rapper { margin-right: 10px; }
.vertical #secret_rapper span { float: left; clear: both; }
.rotated #canvas_rapper {
transform: translateX(-50%) translateY(-50%) translateZ(0) rotate(-90deg);
transform-origin: 50% 50%;
position: absolute;
left: 50%;
}
#tools_block > * {
cursor: crosshair;
}
#brush_rapper, #letters_rapper {
cursor: crosshair;
}
.dropper #canvas_rapper {
cursor: url(../images/dropper.gif) 0 15, auto;
}
.bucket #canvas_rapper {
cursor: url(../images/bucket.png) 3 15, auto;
}
#brush_rapper {
border: 1px solid;
display: inline-block;
margin-bottom: 13px;
float: left;
}
#letters_rapper {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.close { position: absolute; top: 20px; right: 20px; z-index: 2; padding: 10px; background: black; cursor: pointer; }
#experimental_palette_toggle.focused { box-shadow: none; }
#cursor_input { position: fixed; top: 0; right: 0; width:30px; opacity: 0; font-size: 16px; }
/* }}} */
/* {{{ .selector_el styles */
.selector_el {
border: 1px dashed #fff !important;
padding-top: 1px;
position:absolute;
margin-top: -1px;
top:-999px;left:-999px;
pointer-events: none;
}
.selector_el.dragging {
color: #0f0;
border: 1px dashed white !important;
left: -999px;
margin-top: -1px;
padding-top: 1px;
pointer-events: none;
position: absolute;
top: -999px;
}
.selector_el.creating div {
display: none;
display: none; }
.selector_el.dragging {
color: #00FF00;
}
/* }}} */
/* {{{ .tool styles */
.tool {
cursor: pointer;
}
.tool.focused {
color: white;
text-decoration: underline;
}
.tool.locked.focused {
box-shadow: 0 0;
}
.tool.radio {
margin: 0 8px 0 0;
}
.tool.radio.focused {
background-color: #6D6D6D;
box-shadow: none;
color: black;
}
/* }}} */
/* {{{ .vertical styles */
.vertical .wrapper, .vertical .block {
float: left;
}
.vertical #brush_container {
display: inline-block;
float: left;
}
.vertical #canvas_wrapper,
.vertical #canvas_wrapper div,
.vertical #palette_wrapper,
.vertical #palette_wrapper {
margin-right: 10px;
}
.vertical #secret_wrapper {
margin-right: 10px;
}
.vertical #secret_wrapper span {
clear: both;
float: left;
}
.vertical #tools_block {
min-width: 100%;
}
.vertical #tools_wrapper,
.vertical #ui_wrapper {
clear: none;
float: left;
width: 320px;
}
.vertical #workspace_wrapper {
float: left;
position: relative;
width: auto;
}
/* }}} */
/* {{{ Class & id styles (simple) */
.bucket #canvas_wrapper { cursor: url(../images/bucket.png) 3 15, auto; }
.dropper #canvas_wrapper { cursor: url(../images/dropper.gif) 0 15, auto; }
.faded { color: #404040; }
.hidden { visibility: hidden; }
.loading .vertical #ui_wrapper { clear: none }
#experimental_palette_toggle.focused { box-shadow: none; }
#import_wrapper { display: none; }
#tools_block > * { cursor: crosshair; }
#workspace_wrapper { width: 100%; }
/* }}} */
/* {{{ Class styles (complex) */
.ba.focused {
box-shadow: inset 0 0px 2px #000, inset 0 0px 2px black;
border-color: black;
}
.block {
background-color: black;
float: left;
height: auto;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
width: auto;
}
.block {
padding: 4px;
}
.block:nth-child(n+2) {
padding-left: 30px;
}
.close {
background: black;
cursor: pointer;
padding: 10px;
position: absolute;
right: 20px;
top: 20px;
z-index: 2;
}
.custom {
float: left;
margin-right: 5px;
margin-bottom: 5px;
float: left;
margin-bottom: 5px;
margin-right: 5px;
}
@keyframes rainbow {
0% { color: hsl(0,100%,50%) }
33% { color: hsl(90,100%,50%) }
50% { color: #fff }
66% { color: hsl(320,100%,50%) }
100% { color: hsl(360,100%,50%) }
.ed {
color: white;
}
.ed.focused {
color: white;
text-decoration: underline;
}
.faba.focused, .fbba.focused, .fcba.focused, .fdba.focused, .feba.focused, .ffba.focused, .fgba.focused, .fhba.focused,
.fiba.focused, .fjba.focused, .fkba.focused, .flba.focused, .fmba.focused, .fnba.focused, .foba.focused, .fpba.focused {
box-shadow: inset 1px 0 2px #888888, inset -1px 0 2px #888888, inset 0 1px 2px #888888, inset 0 -1px 2px #888888;
}
.focused {
box-shadow: inset 1px 0 2px white, inset -1px 0 2px white, inset 0 1px 2px white, inset 0 -1px 2px white;
border-color: white;
}
.locked {
border-bottom: 1px solid;
color: #bbbbbb;
text-decoration: none;
}
.transparent {
background-color: transparent;
background-image: url(../images/gray-dither.gif);
background-size: 8px 8px;
}
@media (-webkit-min-device-pixel-ratio: 2) {
.transparent {
background-size: 4px 4px;
}
}
.wrapper {
background-color: black;
cursor: crosshair;
float: left;
height: auto;
user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
white-space: pre-wrap;
width: auto;
word-wrap: break-word;
}
/* }}} */
/* {{{ Element styles */
a {
display: block;
}
a:link, a:visited {
color: #6B6760;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body {
background-color: black !important;
transition: 0.1s linear;
}
body.loading {
opacity: 0;
}
span {
display: inline-block;
line-height: 15px;
min-width: 8px;
}
textarea, input[type=text], body {
color: #6D6B6D;
font-family: 'FixedsysExcelsior301Regular';
-webkit-font-smoothing: antialiased !important;
line-height: 11pt;
font-size: 12pt;
font-weight: 100;
margin: 0;
}
/* }}} */
/* {{{ Id styles (complex) */
#brush_wrapper {
border: 1px solid;
display: inline-block;
float: left;
margin-bottom: 13px;
padding-right: 10px;
}
#brush_wrapper, #letters_wrapper {
cursor: crosshair;
}
#canvas_wrapper {
box-shadow: 0 0 2px rgba(255,255,255,0.3);
margin: 3px;
white-space: pre;
}
#cursor_input {
font-size: 16px;
opacity: 0;
position: fixed;
right: 0;
top: 0;
width: 30px;
}
#import_textarea {
background: #001100;
border: 1px solid #333333;
color: #00FF00;
font-family: 'FixedsysExcelsior301Regular';
font-size: 12pt;
height: 300px;
outline: 0;
width: 37vw;
}
#letters_wrapper {
display: inline-block;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
}
#secret_wrapper {
clear: right;
float: left;
}
#secret_wrapper span {
float: left;
}
#textarea_mode {
float: left;
padding: 4px;
}
#ui_wrapper {
clear: both;
float: left;
width: 100vw;
}
#ui_wrapper .block {
width: 100px;
}
/* }}} */
.panke #load_el,
.panke #import_textarea,
.panke #doc_el,
.panke #export_button,
.panke #grid_el,
.panke #save_el,
.panke #vertical_checkbox,
.panke #add_custom_el,
.panke #format_el { display: none !important; }
/*
* vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
*/

View File

@ -1,30 +0,0 @@
<!-- https://raw.githubusercontent.com/lalbornoz/asciiblaster/master/LICENCE -->
<meta charset="UTF-8">
<link rel="stylesheet" href="../css/sally.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="../css/ak.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="../css/nitelite.css" type="text/css" charset="utf-8" />
<style>
body { font-family: 'FixedsysExcelsior301Regular'; }
a:nth-of-type(2n+1), a { color: #0f0; }
a:nth-of-type(2n+2), a { color: #ff0; }
</style>
<br><br>
<center>
<table border=35 cellpadding=10>
<tr><td style="background: rgba(0,0,100,0.5)">
<h1>asdf.us/ascii documentation</h1>
<span style="white-space: pre; color: white;">
These are some handy documents which address some of the more obscure
features of the asdf.us color code tool:
* <a href="tips.txt">tips.txt</a> - Tips on using the keyboard
* <a href="irssi.txt">irssi.txt</a> - Instructions on using IRSSI to make color codes.
For more information on IRC, Color Codes, and much more, visit the
<a href="http://jollo.org/LNT/doc/">documentation sitemap</a>, part of the <a href="http://jollo.org/">Jollo IRC Network</a>.
<a href="/ascii/">asdf.us/ascii</a>

View File

@ -1,153 +0,0 @@
__________________________________________________________________________
____ ____ _____ ____ ___ ___ ____
/_____ _____/ / ___ \ / ____/ / ____/ /_____ _____/
/ / / / \ \ / / / / / /
/ / / /____/ / \ \__ \ \__ / /
/ / / ___ __/ \__ \ \__ \ / /
/ / / / \ \ \ \ \ \ / /
_____/ /_____ / / \ \ ____/ / ____/ /____/ /_____
___/ /__/ /_______\ \__/ /___/ // /____
__________________________________________________________________________
OPTIMIZE YOUR TERMINAL FOR COLOR CODES ON OSX
=============================================
You can use terminal, some nerds seem to prefer iterm2, but it's up to you
... http://iterm2.com/
To see color codes correctly, make sure your term type is xterm-256color --
If you use iterm: https://s3.amazonaws.com/luckyplop/a1b0f0e3d6eae746c82194876f2ccd8b200bc3bb.png
If you use terminal: https://s3.amazonaws.com/luckyplop/6a2270b58ea1cfac587607215e1b829f41d47355.png
Restart iterm after changing this setting.
The default iterm colors are kind of ugly for color codes, so you may want to change them
to something like this..
https://s3.amazonaws.com/luckyplop/c5f3a1f2b8e2f8a745fa2638c21af7d26117b91b.png
You can download this iTerm color preset here:
http://asdf.us/ascii/doc/bamboo.itermcolors
INSTALLING IRSSI ON OSX
=======================
For me the easiest thing is to install homebrew >> http://brew.sh/
Follow les instructions and then..
brew install irssi
Then you run irssi from a terminal by typing the magic word..
irssi
SETTING UP IRSSI FOR COLOR CODES
================================
Use these commands for proper unicode support --
/set term_charset utf-8
/set recode_autodetect_utf8 ON
/set recode_fallback ISO-8859-15
/set recode ON
Use these commands to dump color codes quickly and efficiently --
/set cmd_queue_speed 0msec
/set cmds_max_at_once 1
/set flood_max_msgs 0
/set flood_timecheck 0
To make your log go back very far --
/set scrollback_lines 20000
/set scrollback_time 10day
Remember to type /save after doing a /set to save your changes!
/save
Your irssi configuration will be stored in your home directory in..
.irssi/config
NORMAL IRSSI OPERATION
======================
If you do not want to do the autojoin thing these are the commands you'd normally use to connect:
/server -ssl irc.asdf.us 7777
/join #ascii
SETTING UP IRSSI TO AUTOJOIN #ASCII
===================================
First run irssi, then paste in these commands.
Please change YOUR_NICK_HERE to your preferred username!
/network add -nick YOUR_NICK_HERE -user YOUR_NICK_HERE -realname "YOUR NAME HERE" asdf
/server add -network asdf -auto -ssl irc.asdf.us 7777
/channel add -auto #ascii asdf
/save
/quit
Now run irssi again.. it should autoconnect to the channels and stuff.
If you want it to move you into #ascii by default, you can do ctrl-N and then
/layout save
/save
IRC TIPS
========
/join #ascii -- join a channel :)
/part #ascii -- leave a channel ;(
/quit blabla -- quit irc (with the quit message 'blabla')
/list -- list channels
/nick booboo -- change your nick to booboo
/who #ascii -- show complete list of people on #ascii
/names -- show quick list of names
/msg nick blabla -- send someone a private message ;)
IRSSI TIPS
==========
Ctrl-N -- move to next window
Ctrl-P -- move to previous window
/window close -- close a window
Fn-up arrow -- page up (if you don't have a pageup key)
Fn-down arrow -- page down (if you don't have a pagedown key)
IRSSI SCRIPTING
===============
This is its own can of worms. May we suggest:
http://scripts.irssi.org/scripts/noticelogic.pl
http://scripts.irssi.org/scripts/nickcolor.pl
To make it run on startup, copy it into ~/.irssi/scripts/autorun/ (and restart irssi)
Another fun IRC thing is running an XDCC server for sharing files..
-- for more info see http://asdf.us/xdcc/
AND REMEMBER...
===============
Have fun and be safe online!

View File

@ -1,16 +0,0 @@
asdf.us/ascii tips
==================
These keyboard commands work in brush mode (square, circle, cross):
[ brush smaller
] brush bigger
ctrl~click on brush erase cell
ctrl~click on canvas draw with bg color
shift~click on canvas draw line from last position
alt~click on canvas fill brush with sampled color
alt~shift~click on canvas copy canvas to brush
rightclick on palette set bg color (when drawing with a letter)
h/t timb for guide

View File

@ -6003,4 +6003,4 @@
<glyph unicode="&#xfffc;" horiz-adv-x="3072" d="M256 1152h2688v-1152h-2688v1152zM1536 768h128v-128h-128v128zM1536 512h128v-128h-128v128zM896 384h-128v384h128v-384zM2432 384h-128v128h-256v-128h128v-128h384v128h128v512h-256v-512zM512 384h128v-128h384v128h128v384h-128v128h-384v-128h-128v-384zM1280 256 h512v128h128v128h-128v128h128v128h-128v128h-512v-640z" />
<glyph unicode="&#xfffd;" d="M896 1024h-128v128h-512v-128h-128v-256h256v256h256v-256h-128v-128h-128v-256h256v256h128v128h128v256zM640 256h-256v-256h256v256zM0 1280h1024v-1408h-1024v1408z" />
</font>
</defs></svg>
</defs></svg>

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<!-- {{{ HEAD -->
<head>
<link charset="utf-8" href="../css/fonts.css" rel="stylesheet" type="text/css" />
<link charset="utf-8" href="../css/help.css" rel="stylesheet" type="text/css" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>asciiblaster v1.0.6 documentation</title>
</head>
<!-- }}} -->
<!-- {{{ BODY -->
<body>
<div id="box_wrapper">
<div id="box">
<h1>asciiblaster documentation</h1>
<p>
These are some handy documents which address some of the more obscure features of asciiblaster:
</p>
<h2>Tips on using the keyboard</h2>
<pre>
[ Decrease brush size
] Increase brush size
&lt;Alt&gt; + &lt;LMB&gt; on canvas Fill brush with sampled color
&lt;Alt&gt; + &lt;Shift&gt; + &lt;LMB&gt; on canvas Copy canvas to brush
&lt;Ctrl&gt; + &lt;LMB&gt; on brush Erase cell
&lt;Ctrl&gt; + &lt;LMB&gt; on canvas Draw with background color
&lt;Shift&gt; + &lt;LMB&gt; on canvas Draw line from last position
&lt;Shift&gt; + &lt;LMB&gt; on character box Switch to next character set
&lt;Shift&gt; + &lt;LMB&gt; on stored brush Delete stored brush
&lt;RMB&gt; on palette Set background color (when drawing with a letter)
</pre>
<h2>Notate bene</h2>
<p>
Characters not forming part of the initial set in the character box beneath the colour palette
encode to, assuming UTF-8, 2-3 bytes in total vs. one (1) byte for those part of the initial
set (e.g. 0-9, A-Z, a-z, etc.)<br />
<br />
Internet Explorer is explicitly unsupported.<br />
<br />
Repeating patterns of alternating back- and foreground colours, and vice versa, are encoded
using a single (1) byte in mIRC format (video reverse) and as such save space, especially
with large numbers of repetitions or alternations.
</p>
</div>
</div>
</body>
<!-- }}} -->
</html>
<!--
vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
-->

View File

@ -6,11 +6,9 @@ var selecting = false
var filling = false
var changed = false
var transforming = false
var mirror_x = false
var mirror_y = false
var focused
var canvas, tools, palette, controls, brush, mode
var canvas, tools, palette, controls, brush, mode
var current_tool, current_filetool, current_canvas
var mouse = { x: 0, y: 0 }
@ -19,12 +17,12 @@ function init () {
bind()
}
function build () {
canvas.append(canvas_rapper)
brush.append(brush_rapper)
palette.append(palette_rapper)
letters.append(letters_rapper)
canvas.append(canvas_wrapper)
brush.append(brush_wrapper)
palette.append(palette_wrapper)
letters.append(letters_wrapper)
letters.repaint("Basic Latin")
controls.circle.focus()
brush.bg = colors.red
@ -32,7 +30,7 @@ function build () {
brush.build()
// controls.grid.use()
canvas.resize_rapper()
canvas.resize_wrapper()
}
function bind () {
canvas.bind()
@ -42,14 +40,14 @@ function bind () {
controls.bind()
keys.bind()
clipboard.bind()
window.addEventListener('mouseup', function(e){
dragging = erasing = false
var ae = document.activeElement
if (ae !== import_textarea) {
if (is_desktop) cursor_input.focus()
cursor_input.focus()
}
if (selecting) {
@ -61,20 +59,20 @@ function bind () {
})
window.addEventListener("touchend", function(){
if (current_tool.name === "text") {
if (is_desktop) cursor_input.focus()
cursor_input.focus()
}
dragging = false
})
window.addEventListener('mousedown', function(e){
// if (is_desktop) { cursor_input.focus() }
// cursor_input.focus()
})
document.addEventListener('DOMContentLoaded', function(){
if (is_desktop) { cursor_input.focus() }
cursor_input.focus()
document.body.classList.remove('loading')
})
window.onbeforeunload = function() {
// if (changed && !in_iframe()) return "You have edited this drawing."
}

View File

@ -1,7 +1,7 @@
var clipboard = (function () {
var exports = {
format: "irssi",
format: "mirc",
importing: false,
visible: false,
canvas: document.createElement("canvas"),
@ -19,8 +19,8 @@ var clipboard = (function () {
if (! clipboard.importing) { clipboard.export_data() }
}
},
show: function () { import_rapper.style.display = "block"; clipboard.visible = true; changed = false },
hide: function () { import_rapper.style.display = "none"; clipboard.visible = false },
show: function () { import_wrapper.style.display = "block"; clipboard.visible = true; changed = false },
hide: function () { import_wrapper.style.display = "none"; clipboard.visible = false },
focus: function () {
if (! clipboard.importing) {
import_textarea.focus()
@ -64,28 +64,12 @@ var clipboard = (function () {
}
})
},
import_colorcode: function (data, no_undo) {
if (data && data.preventDefault) {
data = import_textarea.value
}
else {
data = data || import_textarea.value
}
var irssi_style_regex = /^\s*\/exec -out printf ("%b" )?"/;
// turn irssi style into mirc style
if (data.match(irssi_style_regex)){
data = data.replace(/\\x03/gm, '\x03')
.replace(/(\\x..)+/gm, unicode.unescapeFromEscapedBytes)
.replace(/\\x5C/g, '\\')
.replace(/\\n/gm, '\n')
.replace(/\\`/gm, '`')
.replace(/\\"/gm, '"')
.replace(/\\\$/gm, '$')
.replace(irssi_style_regex, '')
.replace(/"\s*$/, '')
import_colorcode: function (data, no_undo) {
if (data && data.preventDefault) {
data = import_textarea.value
} else {
data = data || import_textarea.value
}
var to_json = function(string, opts){
@ -173,9 +157,9 @@ var clipboard = (function () {
}
}
current_filetool && current_filetool.blur()
current_filetool && current_filetool.blur()
},
export_data: function () {
var output
// switch (clipboard.format) {
@ -186,12 +170,6 @@ var clipboard = (function () {
case 'mirc':
output = canvas.mirc({cutoff: 425})
break
case 'irssi':
output = canvas.irssi({cutoff: 425})
break
case 'ansi':
output = canvas.ansi()
break
}
if (output.cutoff){
cutoff_warning_el.style.display = 'block'
@ -204,9 +182,9 @@ var clipboard = (function () {
},
}
return exports
})()

View File

@ -66,7 +66,7 @@ var blit = (function(){
blit.circle = function(A, lex){
var hw = brush.w/2, hh = brush.h/2
var ratio, distance
if (brush.w === brush.h){
distance = distance_square
ratio = hw / hh * (brush.w === 3 || brush.w === 5 ? 1.2 : 1.05)
@ -100,7 +100,7 @@ var blit = (function(){
})
}
blit.square = function(A, lex){
// i.e. no transparency
// i.e. no transparency
}
return blit
})()
@ -108,61 +108,33 @@ var blit = (function(){
var draw = (function(){
var last_point = [0,0]
function down (e, lex, point) {
var w = canvas.w, h = canvas.h
erasing = (e.which == "3" || e.ctrlKey)
changed = true
if (e.shiftKey) {
line (lex, last_point, point, erasing)
if (mirror_x) {
line(lex, [w-last_point[0], last_point[1]], [w-point[0], point[1]], erasing)
}
if (mirror_y) {
line(lex, [last_point[0], h-last_point[1]], [point[0], h-point[1]], erasing)
}
if (mirror_x && mirror_y) {
line(lex, [w-last_point[0], h-last_point[1]], [w-point[0], h-point[1]], erasing)
}
}
else {
stamp (canvas, brush, point[0], point[1], erasing)
if (mirror_x) {
stamp (canvas, brush, w-point[0], point[1], erasing)
}
if (mirror_y) {
stamp (canvas, brush, point[0], h-point[1], erasing)
}
if (mirror_x && mirror_y) {
stamp (canvas, brush, w-point[0], h-point[1], erasing)
}
}
last_point[0] = point[0]
last_point[1] = point[1]
}
function set_last_point (e, point) {
last_point[0] = point[0]
last_point[1] = point[1]
}
function move (e, lex, point) {
var w = canvas.w, h = canvas.h
line(lex, last_point, point, erasing)
if (mirror_x) {
line(lex, [w-last_point[0], last_point[1]], [w-point[0], point[1]], erasing)
}
if (mirror_y) {
line(lex, [last_point[0], h-last_point[1]], [point[0], h-point[1]], erasing)
}
if (mirror_x && mirror_y) {
line(lex, [w-last_point[0], h-last_point[1]], [w-point[0], h-point[1]], erasing)
}
last_point[0] = point[0]
last_point[1] = point[1]
}
function move_toroidal (e, lex, point) {
var w = canvas.w, h = canvas.h
var src_x_quantile = quantile( last_point[0], w )
@ -223,18 +195,12 @@ var draw = (function(){
var y_b = mod( point[1], h )
var last_point_mod = [x_b, y_b], point_mod = [x_a, y_a]
line(lex, last_point_mod, point_mod, erasing)
// if (mirror_x) {
// line(lex, [w-last_point_mod[0], last_point_mod[1]], [w-point_mod[0], point_mod[1]], erasing)
// }
// if (mirror_y) {
// line(lex, [last_point_mod[0], h-last_point_mod[1]], [point_mod[0], h-point_mod[1]], erasing)
// }
}
last_point[0] = point[0]
last_point[1] = point[1]
// y = point.y
}
function point (lex, x, y, erasing) {
stamp (canvas, brush, x, y, erasing)
}
@ -268,7 +234,7 @@ var draw = (function(){
}
})
}
function fill (lex, x, y) {
var q = [ [x,y] ]
var aa = canvas.aa

View File

@ -64,14 +64,6 @@ Lex.prototype.mirc = function(bg_, fg_){
return [bg_, fg_, "\x03" + (this.fg&15) + "," + ((this.bg&15) < 10 && !charIsNaN ? "0" : "") + (this.bg&15) + char]
}
}
Lex.prototype.ansi = function(){
var fg = ansi_fg[ this.fg&15 ]
var bg = ansi_bg[ this.bg&15 ]
var c = this.sanitize()
if (c == "\\") c = "\\\\"
if (c == '"') c = '\\"'
return "\\e[" + fg + ";" + bg + "m" + c
}
Lex.prototype.assign = function (lex){
this.fg = lex.fg
this.bg = lex.bg

View File

@ -58,8 +58,8 @@ Matrix.prototype.demolish = function (){
this.forEach(function(lex){
lex.demolish()
})
while (this.rapper && this.rapper.firstChild) {
this.rapper.removeChild(this.rapper.firstChild);
while (this.wrapper && this.wrapper.firstChild) {
this.wrapper.removeChild(this.wrapper.firstChild);
}
this.aa.forEach(function(row){
row.length = 0
@ -87,7 +87,7 @@ Matrix.prototype.focus = function(x, y){
y = mod(y, this.h)
this.focus_x = x
this.focus_y = y
//focused_input = this
this.aa[y][x].focus()
}
@ -122,15 +122,15 @@ Matrix.prototype.build = function(){
lex.build()
})
}
Matrix.prototype.append = function(rapper){
rapper = this.rapper = rapper || this.rapper
if (! this.rapper) return
Matrix.prototype.append = function(wrapper){
wrapper = this.wrapper = wrapper || this.wrapper
if (! this.wrapper) return
this.aa.forEach(function(row, y){
var div = document.createElement("div")
row.forEach(function(lex, x) {
div.appendChild(lex.span)
})
rapper.appendChild( div )
wrapper.appendChild( div )
})
}
Matrix.prototype.region = function(w,h,x,y) {
@ -164,7 +164,7 @@ Matrix.prototype.resize = function(w,h){
h = h || canvas.h
var div, row, lex
var f = this.f, old_h = this.aa.length, old_w = this.aa[0].length
var rapper = this.rapper
var wrapper = this.wrapper
w = max(w, 1)
h = max(h, 1)
if (h < old_h) {
@ -180,7 +180,7 @@ Matrix.prototype.resize = function(w,h){
else if (h > old_h) {
for (var y = old_h; y < h; y++) {
div = document.createElement("div")
rapper.appendChild( div )
wrapper.appendChild( div )
this.aa[y] = new Array (w)
for (var x = 0; x < w; x++) {
lex = this.aa[y][x] = f(x,y)
@ -188,7 +188,7 @@ Matrix.prototype.resize = function(w,h){
}
}
}
if (w < old_w) {
this.aa.forEach(function(row, y){
while (row.length > w) {
@ -206,38 +206,27 @@ Matrix.prototype.resize = function(w,h){
}
})
}
this.w = w
this.h = h
this.bind && this.bind()
this.focus_clamp()
if (this.rapper && this.rapper.parentNode != document.body) {
this.resize_rapper()
if (this.wrapper && this.wrapper.parentNode != document.body) {
this.resize_wrapper()
}
}
Matrix.prototype.resize_rapper = function(){
var cell = canvas.aa[0][0].span
var cw = cell.offsetWidth
var ch = cell.offsetHeight
// if (canvas.grid) { ch++ }
var width = cw * this.aa[0].length
var height = ch * this.aa.length
if (canvas.grid) { width++; height++ }
if (this.rotated) {
this.rapper.parentNode.classList.add("rotated")
this.rapper.parentNode.style.height = (width) + "px"
this.rapper.parentNode.style.width = (height) + "px"
this.rapper.style.top = (width/2) + "px"
// this.rapper.style.left = ((canvas_rapper.offsetHeight+20)/2) + "px"
}
else {
this.rapper.parentNode.classList.remove("rotated")
this.rapper.parentNode.style.height = ""
this.rapper.style.width =
this.rapper.parentNode.style.width = (width) + "px"
this.rapper.style.top = ""
// canvas_rapper.style.left = "auto"
}
Matrix.prototype.resize_wrapper = function(){
var cell = canvas.aa[0][0].span
var cw = cell.offsetWidth
var ch = cell.offsetHeight
// if (canvas.grid) { ch++ }
var width = cw * this.aa[0].length
var height = ch * this.aa.length
if (canvas.grid) { width++; height++ }
this.wrapper.parentNode.style.height = ""
this.wrapper.style.width =
this.wrapper.parentNode.style.width = (width) + "px"
this.wrapper.style.top = ""
}
Matrix.prototype.ascii = function () {
var lines = this.aa.map(function(row, y){
@ -250,23 +239,6 @@ Matrix.prototype.ascii = function () {
var txt = lines.join("\n")
return txt
}
Matrix.prototype.ansi = function (opts) {
var lines = this.aa.map(function(row, y){
var last, line = ""
row.forEach(function(lex, x) {
if (lex.eqColor(last)) {
line += lex.sanitize()
}
else {
line += lex.ansi()
last = lex
}
})
return line
})
var txt = lines.filter(function(line){ return line.length > 0 }).join('\\e[0m\\n') + "\\e[0m"
return 'echo -e "' + txt + '"'
}
Matrix.prototype.mirc = function (opts) {
var cutoff = false
var lines = this.aa.map(function(row, y){
@ -275,7 +247,7 @@ Matrix.prototype.mirc = function (opts) {
var bg_ = -1, fg_ = 15
if (lex.eqColor(last)) {
line += lex.sanitize()
}
}
else {
[bg_, fg_, line_] = lex.mirc(bg_, fg_)
line += line_; last = lex;
@ -286,39 +258,15 @@ Matrix.prototype.mirc = function (opts) {
}
return line
})
var txt = lines.filter(function(line){ return line.length > 0 }).join('\n')
if (cutoff) {
txt = new String(txt)
txt.cutoff = true
}
return txt
}
Matrix.prototype.irssi = function(opts){
var mirc = this.mirc(opts)
var txt = mirc
// .replace(/\%/g, '%%')
.replace(/\\/g, '\\x5C')
.replace(/\"/g, '\\\"')
// .replace(/\'/g, '\\\'')
.replace(/\`/g, '\\\`')
.replace(/\$/g, '\\$')
// .replace(/\n\s+/g, '\n')
// .replace(/\s+$/g, '\n')
// .replace(/^\n+/, '')
.replace(/\n/g, '\\n')
.replace(/\x02/g, '\\x02')
.replace(/\x03/g, '\\x03')
txt = unicode.escapeToEscapedBytes(txt)
txt = '/exec -out printf "%b" "' + txt + '"\n'
if (mirc.cutoff){
txt = new String(txt)
txt.cutoff = true
}
return txt
}
var undo = (function(){
@ -388,8 +336,8 @@ var save_size = function(w, h, state){
}
// the reason for stringifying the x y coords is so that each
// coordinate is saved only once in an undo state.
// otherwise there would be problems with, eg, a brush stroke
// that passed over the same grid cell twice.
// otherwise there would be problems with, eg, a brush stroke
// that passed over the same grid cell twice.
var save_lex = function(x, y, lex, state){
// var start = Date.now()
state = state || current_undo
@ -509,7 +457,7 @@ var undo = function(){
if (!state) return;
restore_state(state)
// now take the applied undo state and store it on the redo state
// and push the redo state to the redo stack
state.redo.undo = state
@ -522,7 +470,7 @@ var undo = function(){
var redo = function(){
var state = stack.redo.pop();
if (!state) return;
restore_state(state)
state.undo.redo = state

View File

@ -1,5 +1,5 @@
var brush = (function(){
var brush = new Matrix (5, 5, function(x,y){
var lex = new Lex (x,y)
lex.build()
@ -7,9 +7,9 @@ var brush = (function(){
})
brush.modified = false
brush.mask = blit.circle
brush.generate = function(){
brush.fill(brush)
brush.mask(brush)
@ -25,7 +25,7 @@ var brush = (function(){
if (lex.bound) return
lex.bound = true
var point = [x,y]
lex.span.addEventListener('contextmenu', function(e){
e.preventDefault()
@ -83,7 +83,7 @@ var brush = (function(){
brush.contract = function(i){
brush.size_add(-i, -i)
}
brush.load = function(lex){
brush.char = lex.char
brush.fg = lex.fg
@ -98,11 +98,41 @@ var brush = (function(){
brush.fg = 0
brush.bg = 1
brush.opacity = 1
brush.draw_fg = true
brush.draw_bg = true
brush.draw_char = true
return brush
})()
var custom = (function(){
var exports = {}
exports.clone = function (){
var new_brush = brush.clone()
var wrapper = document.createElement("div")
wrapper.className = "custom"
new_brush.append(wrapper)
custom_wrapper.appendChild(wrapper)
// store in localstorage?
wrapper.addEventListener("click", function(e){
if (e.shiftKey) {
wrapper.parentNode.removeChild(wrapper)
delete new_brush
} else {
// load this brush
exports.load(new_brush)
}
})
}
exports.load = function(new_brush){
brush.assign( new_brush )
}
return exports
})()

View File

@ -20,7 +20,6 @@ var canvas = current_canvas = (function(){
e.preventDefault()
})
lex.span.addEventListener('mousedown', function(e){
if (is_mobile) return
e.preventDefault()
dragging = true
current_canvas = canvas
@ -57,7 +56,6 @@ var canvas = current_canvas = (function(){
lex.span.addEventListener("mousemove", function(e){
mouse.x = x
mouse.y = y
if (is_mobile) return
if (! dragging) return
if (drawing) {
draw.move(e, lex, point)
@ -72,45 +70,6 @@ var canvas = current_canvas = (function(){
})
})
if (is_mobile) {
canvas.rapper.addEventListener('touchstart', function(e){
e.preventDefault()
var x, y, point, lex
x = (e.touches[0].pageX - canvas.rapper.offsetTop) / canvas.aa[0][0].span.offsetWidth
y = (e.touches[0].pageY - canvas.rapper.offsetTop) / canvas.aa[0][0].span.offsetHeight
x = ~~clamp(x, 0, canvas.aa[0].length-1)
y = ~~clamp(y, 0, canvas.aa.length-1)
point = [x,y]
lex = canvas.aa[y][x]
dragging = true
if (drawing) {
undo.new()
draw.down(e, lex, point)
}
else if (filling) {
undo.new()
draw.fill(brush, x, y)
}
canvas.focus(x, y)
})
canvas.rapper.addEventListener("touchmove", function(e){
e.preventDefault()
var x, y, point, lex
x = (e.touches[0].pageX - canvas.rapper.offsetTop) / canvas.aa[0][0].span.offsetWidth
y = (e.touches[0].pageY - canvas.rapper.offsetTop) / canvas.aa[0][0].span.offsetHeight
x = ~~clamp(x, 0, canvas.aa[0].length-1)
y = ~~clamp(y, 0, canvas.aa.length-1)
point = [x,y]
lex = canvas.aa[y][x]
if (! dragging) return
if (drawing) {
draw.move(e, lex, point)
}
canvas.focus(x, y)
})
}
}
canvas.min = 1
@ -126,7 +85,7 @@ var canvas = current_canvas = (function(){
if (!no_undo){
undo.new()
undo.save_resize(w, h, old_w, old_h)
}
}
canvas.__proto__.resize.call(canvas, w, h)
controls.canvas_w.char = "" + w

View File

@ -31,7 +31,7 @@ var controls = (function(){
controls.circle.done = function(){
drawing = false
}
controls.square = new Tool (square_el)
controls.square.use = function(){
brush.mask = blit.square
@ -42,7 +42,7 @@ var controls = (function(){
controls.square.done = function(){
drawing = false
}
controls.text = new Tool (text_el)
controls.text.use = function(){
current_filetool && current_filetool.blur()
@ -97,7 +97,7 @@ var controls = (function(){
filling = false
document.body.classList.remove("bucket")
}
controls.undo = new BlurredTool (undo_el)
controls.undo.use = function(){
undo.undo()
@ -119,12 +119,12 @@ var controls = (function(){
controls.grid = new BlurredCheckbox (grid_el)
controls.grid.memorable = true
controls.grid.use = function(state){
state = typeof state == "boolean" ? state : ! document.body.classList.contains("grid")
state = typeof state == "boolean" ? state : ! document.body.classList.contains("grid")
document.body.classList[ state ? "add" : "remove" ]('grid')
letters.grid = palette.grid = canvas.grid = state
canvas.resize_rapper()
palette.resize_rapper()
letters.resize_rapper()
letters.grid = palette.grid = canvas.grid = state
canvas.resize_wrapper()
palette.resize_wrapper()
letters.resize_wrapper()
if (! selection.hidden) selection.reposition()
this.update( state )
}
@ -145,12 +145,12 @@ var controls = (function(){
clipboard.show()
clipboard.import_mode()
}
controls.save_format = new RadioGroup(format_el)
controls.save_format.name = 'save_format'
controls.save_format.memorable = true
var cs = controls.save_format.controls
cs.mirc.use = cs.irssi.use = cs.ascii.use = function(){
cs.mirc.use = cs.ascii.use = function(){
clipboard.export_data()
}
//
@ -162,20 +162,8 @@ var controls = (function(){
this.update(state)
}
controls.advanced = new BlurredCheckbox (advanced_checkbox)
controls.advanced.memorable = true
controls.advanced.use = function(state){
console.log(state)
state = typeof state == "boolean" ? state : ! document.body.classList.contains('panke')
if (state)
document.body.classList.add('panke')
else
document.body.classList.remove('panke')
this.update(state)
}
//
controls.fg = new BlurredCheckbox (fg_checkbox)
controls.fg.use = function(state){
brush.draw_fg = state || ! brush.draw_fg
@ -193,38 +181,7 @@ var controls = (function(){
brush.draw_char = state || ! brush.draw_char
this.update(brush.draw_char)
}
//
// controls.turn = new BlurredCheckbox (turn_checkbox)
// controls.turn.memorable = true
// controls.turn.use = function(state){
// canvas.rotated = typeof state == "boolean" ? state : ! canvas.rotated
// canvas.resize_rapper()
// this.update(canvas.rotated)
// }
// controls.pixels = new BlurredCheckbox (pixels_checkbox)
// controls.pixels.memorable = true
// controls.pixels.use = function(state){
// canvas.pixels = typeof state == "boolean" ? state : ! canvas.pixels
// document.body.classList.toggle("pixels", canvas.pixels)
// this.update(canvas.pixels)
// }
controls.mirror_x = new BlurredCheckbox (mirror_x_checkbox)
controls.mirror_x.use = function(state){
window.mirror_x = typeof state == "boolean" ? state : ! window.mirror_x
this.update(window.mirror_x)
}
controls.mirror_y = new BlurredCheckbox (mirror_y_checkbox)
controls.mirror_y.use = function(state){
window.mirror_y = typeof state == "boolean" ? state : ! window.mirror_y
this.update(window.mirror_y)
}
//
controls.vertical = new BlurredCheckbox (vertical_checkbox)
controls.vertical.memorable = true
controls.vertical.use = function(state){
@ -244,14 +201,14 @@ var controls = (function(){
}
//
controls.brush_w = new Lex (brush_w_el)
controls.brush_h = new Lex (brush_h_el)
controls.canvas_w = new Lex (canvas_w_el)
controls.canvas_h = new Lex (canvas_h_el)
// bind
// bind
controls.bind = function(){
for (var n in controls){
@ -269,7 +226,6 @@ var controls = (function(){
].forEach(function(lex){
lex.span.addEventListener('mousedown', function(e){
lex.focus()
if (is_mobile) cursor_input.focus()
})
});
@ -278,7 +234,7 @@ var controls = (function(){
controls.brush_h.key = keys.single_numeral_key(controls.brush_h, function(h){ brush.resize(brush.w, h) })
controls.brush_h.raw_key = keys.arrow_key(function(h){ brush.size_add(0, h) })
controls.canvas_w.key = keys.multi_numeral_key(controls.canvas_w, 3)
controls.canvas_w.onBlur = keys.multi_numeral_blur(controls.canvas_w, function(w){ canvas.resize(w, canvas.h) })
controls.canvas_w.raw_key = keys.arrow_key(function(w){ canvas.size_add(w, 0) })
@ -286,7 +242,7 @@ var controls = (function(){
controls.canvas_h.key = keys.multi_numeral_key(controls.canvas_h, 3)
controls.canvas_h.onBlur = keys.multi_numeral_blur(controls.canvas_h, function(h){ canvas.resize(canvas.w, h) })
controls.canvas_h.raw_key = keys.arrow_key(function(h){ canvas.size_add(0, h) })
add_custom_el.addEventListener("click", function(){
custom.clone()
})

View File

@ -1,29 +0,0 @@
var custom = (function(){
var exports = {}
exports.clone = function (){
var new_brush = brush.clone()
var rapper = document.createElement("div")
rapper.className = "custom"
new_brush.append(rapper)
custom_rapper.appendChild(rapper)
// store in localstorage?
rapper.addEventListener("click", function(e){
if (e.shiftKey) {
rapper.parentNode.removeChild(rapper)
delete new_brush
} else {
// load this brush
exports.load(new_brush)
}
})
}
exports.load = function(new_brush){
brush.assign( new_brush )
}
return exports
})()

View File

@ -85,7 +85,7 @@ var keys = (function(){
if (e.shiftKey)
undo.redo();
else
undo.undo();
undo.undo();
break
// default:
// if (focused) { focused.key(undefined, e.keyCode) }
@ -102,7 +102,7 @@ var keys = (function(){
cursor_input.value = ""
// console.log("input:", char)
if (current_tool.name != "text" && ! brush.modified) {
brush.char = char
if (char == " ") {
@ -126,14 +126,14 @@ var keys = (function(){
current_canvas.focus_add(1, 0)
}
})
cursor_input.addEventListener("keyup", function(e){
if (! e.altKey) {
document.body.classList.remove("dropper")
}
})
}
keys.int_key = function (f) {
return function (key, keyCode) {
var n = parseInt(key)

View File

@ -1,89 +0,0 @@
var letters = (function(){
var last_charset = ""
var charset_index = 0
var charsets = [
'Basic Latin',
'Latin-1 Supplement',
'Box Drawing',
'Block Elements',
]
var letters = new Matrix (1, 1, function(x,y){
var lex = new Lex (x,y)
return lex
})
letters.charset = ""
letters.repaint = function(charset){
letters.charset = charset = charset || last_charset
last_charset = charset
var chars = unicode.block(charset, 32)
if (chars[0] != " ") chars.unshift(" ")
if (canvas.vertical) {
letters.resize( Math.ceil( chars.length / 16 ), 16 )
}
else {
letters.resize( 32, Math.ceil( chars.length / 32 ) )
}
var i = 0
letters.forEach(function(lex,x,y){
if (canvas.vertical) { x=x^y;y=x^y;x=x^y }
var char = chars[i++]
if (palette.chars.indexOf(brush.char) > 1) {
lex.bg = brush.fg
lex.fg = brush.bg
}
else {
lex.bg = colors.black
lex.fg = brush.fg == fillColor ? colors.black : brush.fg
}
lex.char = char
lex.opacity = 1
lex.build()
})
}
letters.bind = function(){
letters.forEach(function(lex,x,y){
if (lex.bound) return
lex.bound = true
lex.span.addEventListener('mousedown', function(e){
e.preventDefault()
if (e.shiftKey) {
charset_index = (charset_index+1) % charsets.length
letters.repaint(charsets[charset_index])
return
}
else if (e.ctrlKey || e.which == 3) {
brush.char = lex.char
brush.bg = brush.fg
brush.fg = fillColor
}
else {
brush.char = lex.char
if (lex.char == " ") {
brush.bg = brush.fg
}
else if (brush.bg != fillColor) {
brush.fg = brush.bg
brush.bg = fillColor
}
}
if (! brush.modified) {
brush.generate()
}
palette.repaint()
})
lex.span.addEventListener('contextmenu', function(e){
e.preventDefault()
})
})
}
return letters
})()

View File

@ -1,3 +1,93 @@
var letters = (function(){
var last_charset = ""
var charset_index = 0
var charsets = [
'Basic Latin',
'Latin-1 Supplement',
'Box Drawing',
'Block Elements',
]
var letters = new Matrix (1, 1, function(x,y){
var lex = new Lex (x,y)
return lex
})
letters.charset = ""
letters.repaint = function(charset){
letters.charset = charset = charset || last_charset
last_charset = charset
var chars = unicode.block(charset, 32)
if (chars[0] != " ") chars.unshift(" ")
if (canvas.vertical) {
letters.resize( Math.ceil( chars.length / 16 ), 16 )
}
else {
letters.resize( 32, Math.ceil( chars.length / 32 ) )
}
var i = 0
letters.forEach(function(lex,x,y){
if (canvas.vertical) { x=x^y;y=x^y;x=x^y }
var char = chars[i++]
if (palette.chars.indexOf(brush.char) > 1) {
lex.bg = brush.fg
lex.fg = brush.bg
}
else {
lex.bg = colors.black
lex.fg = brush.fg == fillColor ? colors.black : brush.fg
}
lex.char = char
lex.opacity = 1
lex.build()
})
}
letters.bind = function(){
letters.forEach(function(lex,x,y){
if (lex.bound) return
lex.bound = true
lex.span.addEventListener('mousedown', function(e){
e.preventDefault()
if (e.shiftKey) {
charset_index = (charset_index+1) % charsets.length
letters.repaint(charsets[charset_index])
return
}
else if (e.ctrlKey || e.which == 3) {
brush.char = lex.char
brush.bg = brush.fg
brush.fg = fillColor
}
else {
brush.char = lex.char
if (lex.char == " ") {
brush.bg = brush.fg
}
else if (brush.bg != fillColor) {
brush.fg = brush.bg
brush.bg = fillColor
}
}
if (! brush.modified) {
brush.generate()
}
palette.repaint()
})
lex.span.addEventListener('contextmenu', function(e){
e.preventDefault()
})
})
}
return letters
})()
var palette = (function(){
var palette = new Matrix (32, 2, function(x,y){
@ -102,14 +192,14 @@ var palette = (function(){
brush.char = lex.char
brush.opacity = lex.opacity
brush.generate()
brush_rapper.style.borderColor = css_reverse_lookup[fillColor]
brush_wrapper.style.borderColor = css_reverse_lookup[fillColor]
return
})
})
}
brush_rapper.style.borderColor = css_reverse_lookup[fillColor]
brush_wrapper.style.borderColor = css_reverse_lookup[fillColor]
return palette

View File

@ -1,13 +1,13 @@
var selection = (function(){
var creating = false, moving = false, copying = false
var selection_canvas = new Matrix (1, 1, function(x,y){
var lex = new Lex (x,y)
lex.build()
return lex
})
var selector_el = document.createElement("div")
selector_el.className = "selector_el"
selection_canvas.append(selector_el)
@ -21,12 +21,12 @@ var selection = (function(){
// - on mouseup, the selection is locked. then..
// - drag the selection to move it -- this "cuts" it and leaves a blank space on the canvas.
// - shift-drag the selection to copy it
var a = [0, 0]
var b = [0, 0]
var c = [0, 0]
var d = [0, 0]
function reset () {
a[0] = a[1] = b[0] = b[1] = 0
}
@ -42,7 +42,7 @@ var selection = (function(){
var l = left(a,b), m = top(a,b), n = right(a,b), o = bottom(a,b)
a[0] = l ; a[1] = m ; b[0] = n ; b[1] = o
}
function contains (a,b,point) {
var contains_x = a[0] <= point[0] && point[0] <= b[0]
var contains_y = a[1] <= point[1] && point[1] <= b[1]
@ -130,7 +130,7 @@ var selection = (function(){
creating = moving = copying = false
selector_el.classList.remove("dragging")
}
function show () {
selecting = true
}
@ -144,7 +144,7 @@ var selection = (function(){
selection.hidden = true
selecting = false
}
var selection = {}
selection.reposition = reposition
selection.down = down

View File

@ -26,7 +26,7 @@ var Tool = Model({
current_tool = this
this.el.classList.add('focused')
this.use()
if (is_desktop) { cursor_input.focus() }
cursor_input.focus()
},
blur: function(){
current_tool = null
@ -45,7 +45,7 @@ var FileTool = Tool.extend({
current_filetool = this
this.el.classList.add('focused')
this.use()
if (is_desktop) { cursor_input.focus() }
cursor_input.focus()
},
blur: function(){
current_filetool = null
@ -104,7 +104,7 @@ var RadioGroup = Tool.extend({
control.use()
if (this.memorable){
localStorage.setItem("ascii.tools." + this.name, this.value)
}
}
},
bind: function(){
var tool = this

View File

@ -33,7 +33,7 @@ var transform = (function(){
}
function up (e){
}
var modes = {
rotate: {
@ -59,7 +59,7 @@ var transform = (function(){
return true
},
},
scale: {
init: function(e){
mode.independent = e.shiftKey || e.altKey || e.metaKey
@ -86,7 +86,7 @@ var transform = (function(){
return true
},
},
translate: {
init: function(e){
mode.dx = mode.dy = 0
@ -113,7 +113,7 @@ var transform = (function(){
before: function(dx, dy, pdx, pdy, point){
var new_position = mode.is_y ? point[1] : point[0]
var dd = mode.is_y ? pdx : pdy
if (mode.position !== new_position) {
mode.position = new_position
mode.direction = 0
@ -151,19 +151,19 @@ var transform = (function(){
},
*/
}
function set_mode(m){
if (m in modes) {
mode = modes[m]
transforming = true
}
}
function done(){
transforming = false
copy && copy.demolish()
}
return {
down: down,
move: move,

View File

@ -77,7 +77,7 @@ function rgbpixel(d,x,y){
function fit(d,x,y){ rgbpixel(d,x*actual_w/w,y*actual_h/h) }
function step(a, b){
return (b >= a) + 0
return (b >= a) + 0
// ^^ bool -> int
}
@ -167,11 +167,11 @@ d=this.apply(a,arguments))===e?a:d}.bind(d):d;a.init&&a.init.apply(a,arguments)
=Model); // c-{{{-<
function defaults (dest, src) {
dest = dest || {}
for (var i in src) {
dest[i] = typeof dest[i] == 'undefined' ? src[i] : dest[i]
}
return dest
dest = dest || {}
for (var i in src) {
dest[i] = typeof dest[i] == 'undefined' ? src[i] : dest[i]
}
return dest
}
function setSelectionRange(input, selectionStart, selectionEnd) {
@ -190,10 +190,3 @@ function setSelectionRange(input, selectionStart, selectionEnd) {
function setCaretToPos(input, pos) {
setSelectionRange(input, pos, pos);
}
// Naive useragent detection pattern
var is_iphone = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))
var is_ipad = (navigator.userAgent.match(/iPad/i))
var is_android = (navigator.userAgent.match(/Android/i))
var is_mobile = is_iphone || is_ipad || is_android
var is_desktop = ! is_mobile;

View File

@ -1,29 +1,28 @@
Jollo LNT license
Version 1 - February 2015
Copyright, 2015. JOLLO NET NA.
Copyright, 2015. JOLLO NET NA.
The Jollo IRC Network. <//jollo.org/>
Vu, fare wanderer, confronted with raw, programmatic instruction
dans la forme la plus pure. A hesitation, troubled to the terms
qui ce license affirme. Par un voyage du explorer le mechanisme
qui ce license affirme. Par un voyage du explorer le mechanisme
et ponder la fabrication. Voila! La remide: egress sans risque.
Sans trace (Leave No Trace) via sept principales:
0. Modifique language en advance. L'Apposer Jollo LNT license
with copies en distribuer.
1. Non responsible pour neglige programme du problematique.
with copies en distribuer.
1. Non responsible pour neglige programme du problematique.
2. Non sympathie pour neglige programme du problematique.
3. Non permission l'modifique under any circumstance.
4. Non permission distribution under any circumstance.
5. Respect les programmatic instructions.
6. Non interfere avec l'harmonie d'une amitie.

View File

@ -1,10 +1,19 @@
1) document: constraints for video reverse
2) document: Shift + LMB to delete brush, Shift + LMB to switch character sets
3) feature: allow to adjust cutoff warning threshold, {dis,en}able cutoff & print line numbers affected
4) feature: {bold,italic,underline} attributes
5) feature: keyboard instead of [LR]MB
6) feature: {line,measuring} tool
7) feature: status bar w/ position, etc.
8) feature: zoom {in,out}
9) reimplement: {save,upload} as PNG & gallery, shaders (possibly)
10) releases: merge w/ MiRCARTools (into asciiblaster,) provide signed release APK, set is_{iphone,ipad,android,mobile,desktop}
1) feature: {bold,italic,underline} attributes
2) feature: draw w/ keyboard instead of [LR]MB
3) feature: {line,measuring} tool
4) feature: status bar w/ position, etc.
5) feature: zoom {in,out} (esp. on Android)
6) reimplement: ANSI (maybe,) {save,upload} as PNG & gallery, cutoff (print line #(s) affected, tunably,) shaders (maybe)
7) releases: merge w/ MiRCARTools (into asciiblaster,) provide signed release APK
In progress:
1) each newly created & modified(!) ascii is assigned an ascii UUID, if not present already
2) each ascii w/ an ascii UUID is auto-saved to localStorage every 3 minutes
3) ascii autosaves w/ count >8 (or >8*3mins=24mins old) are purged from localStorage
4) asciis w/ count >8 are purged from localStorage
5) limits are tunable and either defaulted or localStorage'd
6) UI lists: a) asciis (with UUID) b) autosaves c) parameters
7) always prompt on close window/exit/...
8) always prompt on new
9) save to text file @ standalone app
10) bump version to 1.0.8, deploy-all.sh, upblog releases to github

View File

@ -1,112 +1,116 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>asciiblaster v1.0.6</title>
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" href="assets/css/sally.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="assets/css/ak.css" type="text/css" charset="utf-8" />
</head>
<body class="loading panke">
<div id="workspace_rapper">
<div id="canvas_rapper" class="rapper"></div>
</div>
<div id="ui_rapper">
<div class="block" id="tools_block">
<div id="palette_rapper"></div>
<div id="secret_rapper">
<span id="experimental_palette_toggle">.</span>
</div>
<div id="letters_rapper"></div>
<div id="custom_rapper"></div>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<!-- {{{ HEAD -->
<head>
<link charset="utf-8" href="assets/css/ak.css" rel="stylesheet" type="text/css" />
<link charset="utf-8" href="assets/css/fonts.css" rel="stylesheet" type="text/css" />
<link charset="utf-8" href="assets/css/sally.css" rel="stylesheet" type="text/css" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="width=device-width, maximum-scale=1.0, user-scalable=yes" name="viewport" />
<title>asciiblaster v1.0.7</title>
</head>
<!-- }}} -->
<!-- {{{ BODY -->
<body class="loading initial">
<!-- {{{ DIV: workspace_wrapper -->
<div id="workspace_wrapper">
<div id="canvas_wrapper" class="wrapper"></div>
</div>
<div id="brush_container" class="block">
<div id="brush_rapper">
<!-- }}} -->
<!-- {{{ DIV: ui_wrapper -->
<div id="ui_wrapper">
<!-- {{{ DIV: tools_block -->
<div class="block" id="tools_block">
<div id="palette_wrapper"></div>
<div id="secret_wrapper">
<span id="experimental_palette_toggle">.</span>
</div>
<div id="letters_wrapper"></div>
<div id="custom_wrapper"></div>
</div>
<br>
<span id="fg_checkbox" class="tool">x fg</span><br>
<span id="bg_checkbox" class="tool">x bg</span><br>
<span id="char_checkbox" class="tool">x char</span><br>
<br>
<span id="add_custom_el" class="tool">+ add</span>
<span id="mirror_x_checkbox" class="tool">_ mirror x</span><br>
<span id="mirror_y_checkbox" class="tool">_ mirror y</span><br>
<br>
<span id="undo_el" class="tool hidden">undo</span><br>
<span id="redo_el" class="tool hidden">redo</span><br>
</div>
<div id="tools_rapper" class="block">
<span id="square_el" class="tool">square</span><br>
<span id="circle_el" class="tool">circle</span><br>
<span id="cross_el" class="tool">cross</span><br>
<span id="text_el" class="tool">text</span><br>
<span id="fill_el" class="tool">fill</span><br>
<span id="select_el" class="tool">select</span><br>
<br>
<span id="rotate_el" class="tool">rotate</span><br>
<span id="scale_el" class="tool">scale</span><br>
<span id="translate_el" class="tool">translate</span><br>
<span id="slice_el" class="tool">slice</span><br>
<span id="grid_el" class="tool">_ grid</span>
<!-- <span id="rotate_checkbox" class="tool">_ rotate</span><br> -->
<span id="vertical_checkbox" class="tool">x vertical</span>
<!-- <span id="pixels_checkbox" class="tool">_ pixels</span><br> -->
</div>
<div id="textarea_mode" style="float: left">
<div>
<span id="clear_el" class="tool">new</span>
<span id="save_el" class="tool">save</span>
<span id="load_el" class="tool">load</span>
<br>
<a id="doc_el" href="assets/doc/index.html" target="_blank">doc</a>
<br>
<span id="advanced_checkbox" class="tool">_ advanced</span>
<br>
<br>
brush: <span id="brush_w_el" class="ed">5</span> x <span id="brush_h_el" class="ed">5</span><br>
canvas: <span id="canvas_w_el" class="ed">100</span> x <span id="canvas_h_el" class="ed">30</span><br>
<!-- }}} -->
<!-- {{{ DIV: brush_container -->
<div id="brush_container" class="block">
<div id="brush_wrapper"></div>
<br />
<span id="fg_checkbox" class="tool">x fg</span><br />
<span id="bg_checkbox" class="tool">x bg</span><br />
<span id="char_checkbox" class="tool">x char</span><br />
<span id="add_custom_el" class="tool">+ add</span><br />
<br />
<span id="undo_el" class="tool hidden">undo</span><br />
<span id="redo_el" class="tool hidden">redo</span><br />
</div>
<div id="import_rapper">
<span id="format_el">ascii *irssi mirc ansi</span>
<span id="import_buttons">
<button id="import_button">import</button>
</span>
<div id="gallery_rapper" /><br >
<div id="cutoff_warning_el">character limit of 425 exceeded</div>
<textarea id="import_textarea"></textarea>
<!-- }}} -->
<!-- {{{ DIV: tools_wrapper -->
<div id="tools_wrapper" class="block">
<span id="square_el" class="tool">square</span><br />
<span id="circle_el" class="tool">circle</span><br />
<span id="cross_el" class="tool">cross</span><br />
<span id="text_el" class="tool">text</span><br />
<span id="fill_el" class="tool">fill</span><br />
<span id="select_el" class="tool">select</span><br />
<br />
<span id="rotate_el" class="tool">rotate</span><br />
<span id="scale_el" class="tool">scale</span><br />
<span id="translate_el" class="tool">translate</span><br />
<span id="slice_el" class="tool">slice</span><br />
</div>
<!-- }}} -->
<!-- {{{ DIV: textarea_mode -->
<div id="textarea_mode">
<div>
<span id="clear_el" class="tool">new</span>
<span id="save_el" class="tool">save</span>
<span id="load_el" class="tool">load</span>
<a id="doc_el" href="assets/html/help.html" target="_blank">help</a>
<br />
brush: <span id="brush_w_el" class="ed">5</span> x <span id="brush_h_el" class="ed">5</span><br />
canvas: <span id="canvas_w_el" class="ed">100</span> x <span id="canvas_h_el" class="ed">30</span><br />
<span id="grid_el" class="tool">_ grid</span>
<span id="vertical_checkbox" class="tool">x vertical</span>
</div>
<div id="import_wrapper">
<span id="format_el">ascii *mirc</span>
<span id="import_buttons">
<button id="import_button">import</button>
</span>
<div id="gallery_wrapper" /><br />
<div id="cutoff_warning_el">character limit of 425 exceeded</div>
<textarea id="import_textarea" cols="100" rows="30"></textarea>
</div>
</div>
<input type="text" id="cursor_input" />
</div>
</div>
<input type="text" id="cursor_input">
</body>
<script src="assets/js/util.js"></script>
<script src="assets/js/unicode.js"></script>
<script src="assets/js/color.js"></script>
<script src="assets/js/clipboard.js"></script>
<script src="assets/js/lex.js"></script>
<script src="assets/js/matrix.js"></script>
<script src="assets/js/gfx.js"></script>
<script src="assets/js/ui/tool.js"></script>
<script src="assets/js/gfx.js"></script>
<script src="assets/js/ui/brush.js"></script>
<script src="assets/js/ui/canvas.js"></script>
<script src="assets/js/ui/custom.js"></script>
<script src="assets/js/ui/keys.js"></script>
<script src="assets/js/ui/controls.js"></script>
<script src="assets/js/ui/palette.js"></script>
<script src="assets/js/ui/letters.js"></script>
<script src="assets/js/ui/selection.js"></script>
<script src="assets/js/ui/transform.js"></script>
<script src="assets/js/app.js"></script>
<!-- }}} -->
<!-- }}} -->
<!-- {{{ SCRIPTs: assets/js/* -->
<script src="assets/js/util.js" type="text/javascript"></script>
<script src="assets/js/unicode.js" type="text/javascript"></script>
<script src="assets/js/color.js" type="text/javascript"></script>
<script src="assets/js/clipboard.js" type="text/javascript"></script>
<script src="assets/js/lex.js" type="text/javascript"></script>
<script src="assets/js/matrix.js" type="text/javascript"></script>
<script src="assets/js/gfx.js" type="text/javascript"></script>
<script src="assets/js/ui/tool.js" type="text/javascript"></script>
<script src="assets/js/gfx.js" type="text/javascript"></script>
<!-- }}} -->
<!-- {{{ SCRIPTs: assets/js/ui/* -->
<script src="assets/js/ui/brush.js" type="text/javascript"></script>
<script src="assets/js/ui/canvas.js" type="text/javascript"></script>
<script src="assets/js/ui/keys.js" type="text/javascript"></script>
<script src="assets/js/ui/controls.js" type="text/javascript"></script>
<script src="assets/js/ui/paletters.js" type="text/javascript"></script>
<script src="assets/js/ui/selection.js" type="text/javascript"></script>
<script src="assets/js/ui/transform.js" type="text/javascript"></script>
<!-- }}} -->
<script src="assets/js/app.js" type="text/javascript"></script>
</body>
<!-- }}} -->
</html>
<!--
vim:ts=2 sw=2 expandtab fenc=utf-8 foldmethod=marker nowrap tw=0
-->

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.lalbornoz.asciiblaster" version="1.0.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="com.lalbornoz.asciiblaster" version="1.0.7" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="Whitelist">
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
<param name="onload" value="true" />

2
asciiblaster-nw/package-lock.json generated vendored
View File

@ -1,5 +1,5 @@
{
"name": "asciiblaster",
"version": "1.0.6",
"version": "1.0.7",
"lockfileVersion": 1
}

View File

@ -18,7 +18,7 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"version": "1.0.6",
"version": "1.0.7",
"window": {
"title": "asciiblaster (standalone NW app)",
"toolbar": true,

View File

@ -7,7 +7,7 @@
<link charset="utf-8" href="../css/fonts.css" rel="stylesheet" type="text/css" />
<link charset="utf-8" href="../css/help.css" rel="stylesheet" type="text/css" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>asciiblaster v1.0.6 documentation</title>
<title>asciiblaster v1.0.7 documentation</title>
</head>
<!-- }}} -->
<!-- {{{ BODY -->

View File

@ -9,7 +9,7 @@
<link charset="utf-8" href="assets/css/sally.css" rel="stylesheet" type="text/css" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="width=device-width, maximum-scale=1.0, user-scalable=yes" name="viewport" />
<title>asciiblaster v1.0.6</title>
<title>asciiblaster v1.0.7</title>
</head>
<!-- }}} -->
<!-- {{{ BODY -->