mirror of
https://github.com/lalbornoz/roar.git
synced 2024-11-26 00:46:38 +00:00
Bump to v1.0.7.
This commit is contained in:
parent
21909c5cd0
commit
0b6376e542
2
asciiblaster-cordoba/config.xml
vendored
2
asciiblaster-cordoba/config.xml
vendored
@ -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 <lucio@lucioillanes.de>, based on work by JOLLO NET NA
|
||||
</author>
|
||||
|
4
asciiblaster-cordoba/package-lock.json
generated
vendored
4
asciiblaster-cordoba/package-lock.json
generated
vendored
@ -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",
|
||||
|
2
asciiblaster-cordoba/package.json
vendored
2
asciiblaster-cordoba/package.json
vendored
@ -30,5 +30,5 @@
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"version": "1.0.6"
|
||||
"version": "1.0.7"
|
||||
}
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
@ -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
|
||||
*/
|
@ -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;
|
||||
}
|
||||
*/
|
@ -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
|
||||
*/
|
||||
|
@ -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>
|
||||
|
@ -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!
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -6003,4 +6003,4 @@
|
||||
<glyph unicode="" 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="�" 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 |
Binary file not shown.
@ -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
|
||||
<Alt> + <LMB> on canvas Fill brush with sampled color
|
||||
<Alt> + <Shift> + <LMB> on canvas Copy canvas to brush
|
||||
<Ctrl> + <LMB> on brush Erase cell
|
||||
<Ctrl> + <LMB> on canvas Draw with background color
|
||||
<Shift> + <LMB> on canvas Draw line from last position
|
||||
<Shift> + <LMB> on character box Switch to next character set
|
||||
<Shift> + <LMB> on stored brush Delete stored brush
|
||||
<RMB> 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
|
||||
-->
|
@ -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."
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
||||
})()
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
})()
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
})
|
||||
|
@ -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
|
||||
|
||||
})()
|
@ -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)
|
||||
|
@ -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
|
||||
})()
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
-->
|
||||
|
@ -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
2
asciiblaster-nw/package-lock.json
generated
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "asciiblaster",
|
||||
"version": "1.0.6",
|
||||
"version": "1.0.7",
|
||||
"lockfileVersion": 1
|
||||
}
|
||||
|
2
asciiblaster-nw/package.json
vendored
2
asciiblaster-nw/package.json
vendored
@ -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,
|
||||
|
@ -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 -->
|
||||
|
@ -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 -->
|
||||
|
Loading…
Reference in New Issue
Block a user