Bump to v1.0.7.

This commit is contained in:
Lucio Andrés Illanes Albornoz 2018-11-25 13:49:21 +01:00
parent b031c994b5
commit 8ef33b1683
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,46 +1,131 @@
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 }
/* {{{ BODY.grid styles */
body.grid div {
border-left: 1px solid #444444;
}
body.grid span {
border-bottom: 1px solid #444444;
border-right: 1px solid #444444;
}
body.grid .tool {
border: 1px solid #444444;
}
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;
}
/* }}} */
/* {{{ .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 {
}
/* }}} */
/* {{{ .selector_el styles */
.selector_el {
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; }
.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; }
.rapper, .block {
.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;
width:auto;
background-color: #000000;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.rapper {
white-space:pre-wrap;
word-wrap: break-word;
}
#ui_rapper .block {
width: 100px;
-moz-user-select: none;
-webkit-user-select: none;
width: auto;
}
.block {
padding: 4px;
@ -48,157 +133,157 @@ a:hover { text-decoration: underline }
.block:nth-child(n+2) {
padding-left: 30px;
}
#textarea_mode { padding: 4px; }
.tool {
.close {
background: black;
cursor: pointer;
padding: 10px;
position: absolute;
right: 20px;
top: 20px;
z-index: 2;
}
.hidden {
visibility: hidden;
.custom {
float: left;
margin-bottom: 5px;
margin-right: 5px;
}
.tool.radio {
margin: 0 8px 0 0;
.ed {
color: white;
}
.tool.radio.focused {
color: #000;
background-color: #6d6d6d;
box-shadow: none;
.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;
}
}
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 > * {
.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;
}
#brush_rapper, #letters_rapper {
cursor: crosshair;
/* }}} */
/* {{{ Element styles */
a {
display: block;
}
.dropper #canvas_rapper {
cursor: url(../images/dropper.gif) 0 15, auto;
a:link, a:visited {
color: #6B6760;
text-decoration: none;
}
.bucket #canvas_rapper {
cursor: url(../images/bucket.png) 3 15, auto;
a:hover {
text-decoration: underline;
}
#brush_rapper {
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;
margin-bottom: 13px;
float: left;
margin-bottom: 13px;
padding-right: 10px;
}
#letters_rapper {
#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;
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 {
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;
}
.selector_el.creating div {
display: none;
}
.custom {
#secret_wrapper {
clear: right;
float: left;
margin-right: 5px;
margin-bottom: 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%) }
#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

@ -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,8 +6,6 @@ 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
@ -19,10 +17,10 @@ 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()
@ -32,7 +30,7 @@ function build () {
brush.build()
// controls.grid.use()
canvas.resize_rapper()
canvas.resize_wrapper()
}
function bind () {
canvas.bind()
@ -49,7 +47,7 @@ function bind () {
var ae = document.activeElement
if (ae !== import_textarea) {
if (is_desktop) cursor_input.focus()
cursor_input.focus()
}
if (selecting) {
@ -61,17 +59,17 @@ 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')
})

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()
@ -68,26 +68,10 @@ var clipboard = (function () {
import_colorcode: function (data, no_undo) {
if (data && data.preventDefault) {
data = import_textarea.value
}
else {
} 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*$/, '')
}
var to_json = function(string, opts){
var lines_in = string.split(/\r?\n/)
var lines_out = []
@ -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'

View File

@ -115,27 +115,9 @@ var draw = (function(){
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]
@ -149,16 +131,6 @@ var draw = (function(){
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]
}
@ -223,12 +195,6 @@ 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]

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
@ -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)
@ -211,11 +211,11 @@ Matrix.prototype.resize = function(w,h){
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(){
Matrix.prototype.resize_wrapper = function(){
var cell = canvas.aa[0][0].span
var cw = cell.offsetWidth
var ch = cell.offsetHeight
@ -223,21 +223,10 @@ Matrix.prototype.resize_rapper = function(){
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"
}
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){
@ -295,30 +267,6 @@ Matrix.prototype.mirc = function (opts) {
}
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(){

View File

@ -106,3 +106,33 @@ var brush = (function(){
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

View File

@ -122,9 +122,9 @@ var controls = (function(){
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()
canvas.resize_wrapper()
palette.resize_wrapper()
letters.resize_wrapper()
if (! selection.hidden) selection.reposition()
this.update( state )
}
@ -150,7 +150,7 @@ var controls = (function(){
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,18 +162,6 @@ 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)
@ -194,37 +182,6 @@ var controls = (function(){
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){
@ -269,7 +226,6 @@ var controls = (function(){
].forEach(function(lex){
lex.span.addEventListener('mousedown', function(e){
lex.focus()
if (is_mobile) cursor_input.focus()
})
});

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

@ -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

@ -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

View File

@ -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

@ -26,4 +26,3 @@
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>
<?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>
<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" />
<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 class="loading panke">
<div id="workspace_rapper">
<div id="canvas_rapper" class="rapper"></div>
<!-- }}} -->
<!-- {{{ BODY -->
<body class="loading initial">
<!-- {{{ DIV: workspace_wrapper -->
<div id="workspace_wrapper">
<div id="canvas_wrapper" class="wrapper"></div>
</div>
<div id="ui_rapper">
<!-- }}} -->
<!-- {{{ DIV: ui_wrapper -->
<div id="ui_wrapper">
<!-- {{{ DIV: tools_block -->
<div class="block" id="tools_block">
<div id="palette_rapper"></div>
<div id="secret_rapper">
<div id="palette_wrapper"></div>
<div id="secret_wrapper">
<span id="experimental_palette_toggle">.</span>
</div>
<div id="letters_rapper"></div>
<div id="custom_rapper"></div>
<div id="letters_wrapper"></div>
<div id="custom_wrapper"></div>
</div>
<!-- }}} -->
<!-- {{{ DIV: brush_container -->
<div id="brush_container" class="block">
<div id="brush_rapper">
<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>
<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: 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 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: 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>
<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>
<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_rapper">
<span id="format_el">ascii *irssi mirc ansi</span>
<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_rapper" /><br >
<div id="gallery_wrapper" /><br />
<div id="cutoff_warning_el">character limit of 425 exceeded</div>
<textarea id="import_textarea"></textarea>
<textarea id="import_textarea" cols="100" rows="30"></textarea>
</div>
</div>
<input type="text" id="cursor_input" />
</div>
<input type="text" id="cursor_input">
<!-- }}} -->
<!-- }}} -->
<!-- {{{ 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>
<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>
<!-- }}} -->
</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 -->