asciiflow2/index.html

614 lines
14 KiB
HTML
Executable File

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="shortcut icon" sizes="196x196" href="images/favicon.png">
<title>ASCIIFlow Infinity</title>
<style>
* {
font-weight: bold;
font-family: sans-serif;
font-size: 0.95em;
color: #666;
}
a {
color: #FF9E20;
}
body {
margin: 0px;
}
button {
cursor: pointer;
}
#drive-file-list li {
list-style: none;
font-size: 15px;
margin: 5px;
}
#draw-tools {
text-align: left;
padding-left: 120px;
display: inline-block;
position: fixed;
width: 100%;
background-color: #FFF;
z-index: 100;
-webkit-box-shadow: 0px 1px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
box-shadow: 0px 1px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
}
#logo-bar {
position: fixed;
left: 0px;
z-index: 101;
margin: 8px;
}
#file-tools {
text-align: right;
display: inline-block;
position: fixed;
right: 2px;
z-index: 100;
}
#draw-tools > button, #file-tools > button {
font-size: 12px;
vertical-align: top;
display: inline-block;
margin: 8px 8px;
width: 24px;
height: 24px;
text-align: center;
cursor: pointer;
outline: 0 !important;
background-size: 200% 100% !important;
background-color: #FFF;
}
#file-tools > button.info-image {
margin-left: 30px;
}
.info-icon, .info-icon-file {
width: 30px;
height: 30px;
margin: 0 0 5px -4px;
background-size: 100% !important;
background-size: 200% 100% !important;
display: inline-block;
}
.info-description {
vertical-align: text-bottom;
margin-left: 10px;
display: inline-block;
height: 30px;
width: 64%;
text-align: left;
}
.info-description br {
display: none;
}
.dialog span {
color: #AAA;
}
#drive-filename {
display: inline-block;
}
#drive-save-state {
display: inline-block;
line-height: 40px;
margin-right: 10px;
color: #bbb;
font-weight: normal;
font-size: 0.9em;
}
#drive-filename {
font-size: 30px;
border: gray 1px solid;
padding: 5px;
background: #EEE;
cursor: pointer;
}
/* Mobile overrides */
@media(max-width:780px) {
#logo-bar {
margin: 10px;
}
#draw-tools > button, #file-tools > button {
margin: 10px 4px;
}
#draw-tools {
text-align: center;
padding-left: 0px;
}
/* Move file tools to the bottom. */
#file-tools {
left: 0px;
padding-left: 9px;
bottom: 0px;
background-color: #FFF;
width: 100%;
text-align: left;
-webkit-box-shadow: 0px -1px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
box-shadow: 0px -1px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
}
#drive-save-state {
line-height: 44px;
margin-right: 6px;
}
#options-button {
position: fixed;
right: 6px;
}
#drive-filename {
display: block;
}
}
.dialog {
position: fixed;
left: 0px;
right: 0px;
top: 0px;
bottom: 0px;
margin: auto;
width: 85%;
height: 89%;
max-width: 640px;
max-height: 380px;
background: #FFF;
display: none;
z-index: 100;
padding: 20px;
text-align: center;
-webkit-box-shadow: 0px 0px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
box-shadow: 0px 0px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
}
.visible {
display: block !important;
}
#draw-tools > button, #file-tools > button {
border-width: 0px;
}
button.active, .info-icon {
background-position: right;
}
.dialog > button {
margin-top: 6px;
display: inline-block;
}
.close-dialog-button, #import-submit-button, #text-tool-close {
position: absolute;
right: 0px;
bottom: 0px;
margin: 7px;
border: 0;
-webkit-appearance: none;
background-color: transparent;
}
@media(max-width:500px) {
#logo-bar {
display: none;
}
.info-description {
vertical-align: top;
width: 84%;
}
.dialog, .dialog p {
font-size: 0.90em !important;
}
.dialog {
padding: 10px;
max-height: 410px;
}
.info-icon, .info-icon-file {
margin: 0 0 10px -4px;
}
.info-description br {
display: block;
}
.close-dialog-button, #import-submit-button, #text-tool-close {
margin: 10px 3px;
}
}
#options-logo {
margin: 10px 0 0;
}
#options-scroll {
overflow-y: scroll;
height: 91%;
-webkit-overflow-scrolling: touch;
}
#options-scroll p {
margin: 10px 0 15px;
}
.dialog-button-bar {
position: absolute;
right: 0;
bottom: 0;
width: 100%;
height: 8%;
min-height: 34px;
background-color: #DDD;
text-align: right;
}
#import-submit-button {
margin-right: 80px;
}
#ascii-canvas {
position: fixed;
left: 0px;
top: 0px;
}
textarea {
width: 100%;
height: 91%;
font-size: 1.2em;
font-weight: normal;
overflow: hidden;
resize: none;
margin: 0px;
padding: 0px;
border: 0px;
font-family: monospace;
white-space: pre;
}
#logo-interstitial {
text-align: center;
vertical-align: middle;
background-color: #FFF;
z-index: 200;
position: fixed;
width: 100%;
height: 100%;
/* transition: opacity 1.5s ease-in-out; */
background-size: 100%;
pointer-events: none;
}
#logo-interstitial > img {
display: inline;
max-width: 100%;
max-height: 100%;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
#text-tool-widget {
display: none;
z-index: 100;
position: fixed;
top: 60px;
left: 0px;
right: 0px;
width: 300px;
height: 100px;
margin: auto;
text-align: center;
box-shadow: 0px 0px 3px 3px #CCC;
}
.fade-out {
opacity: 0;
}
.box-image { background-image: url('images/box-icon.gif'); }
.line-image { background-image: url('images/line-icon.gif'); }
.freeform-image { background-image: url('images/freeform-icon.gif'); }
.erase-image { background-image: url('images/erase-icon.gif'); }
.move-image { background-image: url('images/move-icon.gif'); }
.text-image { background-image: url('images/text-icon.gif'); }
.drive-image { background-image: url('images/drive-icon.gif'); }
.export-image { background-image: url('images/export-icon.gif'); }
.import-image { background-image: url('images/import-icon.gif'); }
.clear-image { background-image: url('images/clear-icon.gif'); }
.undo-image { background-image: url('images/undo-icon.gif'); }
.redo-image { background-image: url('images/redo-icon.gif'); }
.info-image { background-image: url('images/info-icon.gif'); }
/* New intro animation */
.animated {
-webkit-animation-duration: 3s;
animation-duration: 3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
@-webkit-keyframes bounceOut {
0% {
opacity: 0;
-webkit-transform: scale(.9);
transform: scale(.9);
}
12.5% {
opacity: 1;
-webkit-transform: scale(1);
transform: scale(1);
}
73% {
-webkit-transform: scale(1);
transform: scale(1);
}
83% {
-webkit-transform: scale(.95);
transform: scale(.95);
}
92% {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
100% {
-webkit-transform: scale(.3);
transform: scale(.3);
}
}
@keyframes bounceOut {
0% {
opacity: 0;
-webkit-transform: scale(.9);
-ms-transform: scale(.9);
transform: scale(.9);
}
12.5% {
opacity: 1;
-webkit-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
}
73% {
-webkit-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
}
83% {
-webkit-transform: scale(.95);
-ms-transform: scale(.95);
transform: scale(.95);
}
92% {
-webkit-transform: scale(1.1);
-ms-transform: scale(1.1);
transform: scale(1.1);
}
100% {
-webkit-transform: scale(.3);
-ms-transform: scale(.3);
transform: scale(.3);
}
}
.bounceOut {
-webkit-animation-name: bounceOut;
animation-name: bounceOut;
}
@-webkit-keyframes fadeOut {
0% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes fadeOut {
0% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.fadeOut {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
</style>
</head>
<body>
<div id="logo-interstitial" class="animated fadeOut">
<img src="images/logo-full.gif" class="animated bounceOut" />
</div>
<img id="logo-bar" src="images/logo-bar.gif" width="88" height="24" />
<div id="draw-tools">
<button id="box-button" class="tool active box-image"></button>
<button id="line-button" class="tool line-image"></button>
<button id="freeform-button" class="tool freeform-image"></button>
<button id="erase-button" class="tool erase-image"></button>
<button id="move-button" class="tool move-image"></button>
<button id="text-button" class="tool text-image"></button>
</div>
<div id="file-tools">
<div id="drive-save-state">Unsaved</div>
<button id="drive-button" class="tool drive-image"></button>
<button id="export-button" class="tool export-image"></button>
<button id="import-button" class="tool import-image"></button>
<button id="clear-button" class="tool clear-image"></button>
<button id="undo-button" class="tool undo-image"></button>
<button id="redo-button" class="tool redo-image"></button>
<button id="options-button" class="tool info-image"></button>
</div>
<div id="export-button-dialog" class="dialog">
<textarea readonly id="export-area"></textarea>
<div class="dialog-button-bar">
<button class="close-dialog-button">Close</button>
</div>
</div>
<div id="options-button-dialog" class="dialog">
<div id="options-scroll">
<img id="options-logo" src="images/logo-options.gif" width="176" height="48" />
<br>
<button id="use-lines-button">Lines Mode</button>
<button id="use-ascii-button">ASCII Mode</button><br>
<p>Moving around.<br>
Desktop: <span>Hold CTRL and drag the screen.</span><br>
Mobile: <span>Drag quickly to move. Press and hold to start drawing. Pinch to zoom in/out.</span></p>
<div class="info-icon box-image"></div><div class="info-description">Draw boxes. <span>You can resize them later with the Resize tool.</span></div><br>
<div class="info-icon line-image"></div><div class="info-description">Draw lines. <span>Connect it to another line to change the orientation.</span></div><br>
<div class="info-icon freeform-image"></div><div class="info-description">Draw freehand. <span>Press a character on the keyboard and draw with it.</span></div><br>
<div class="info-icon erase-image"></div><div class="info-description">Erase. <span>Drag out an area to remove its contents from the canvas.</span></div><br>
<div class="info-icon move-image"></div><div class="info-description">Resize boxes and lines. <span>Drag a line to change it's size/shape.</span></div><br>
<div class="info-icon text-image"></div><div class="info-description">Type text. <span>Click and type where you'd like to add text to the canvas.</span></div><br>
<br>
<div class="info-icon-file drive-image"></div><div class="info-description">Save. <span>Connect to Google Drive to save your work automatically.</span></div><br>
<div class="info-icon-file export-image"></div><div class="info-description">Export. <span>Copy your work to use it outside of ASCIIFlow.</span></div><br>
<div class="info-icon-file import-image"></div><div class="info-description">Import. <span>Paste ASCII/text to import it onto the canvas.</span></div><br>
<div class="info-icon-file clear-image"></div><div class="info-description">Clear. <span>Remove the entire contents from the canvas. Can be undone.</span></div><br>
<div class="info-icon-file undo-image"></div><div class="info-description">Undo. <br><span>Made a mistake? Undo!</span></div><br>
<div class="info-icon-file redo-image"></div><div class="info-description">Redo. <br><span>Too many Undo's? Redo!</span></div><br>
<br>
<div>File issues as bugs <a href="https://github.com/lewish/asciiflow2-issues/issues">here</a>.</div><br>
Developed by <a href="https://plus.google.com/+LewisHemens/about">Lewis</a>, Designed by <a href="mailto:info@samirvine.co.uk">Sam</a> and <a href="mailto:ryangilbanks@gmail.com">Ryan</a>.
<br>
<br>
</div>
<div class="dialog-button-bar">
<button class="close-dialog-button">Close</button>
</div>
</div>
<div id="import-button-dialog" class="dialog">
<textarea id="import-area"></textarea>
<div class="dialog-button-bar">
<button class="close-dialog-button">Close</button>
<button id="import-submit-button">Import</button>
</div>
</div>
<!-- These dialogs are handled seperately. -->
<div id="text-tool-widget">
<textarea id="text-tool-input"></textarea>
<div class="dialog-button-bar">
<button id="text-tool-close">Close</button>
</div>
</div>
<div id="drive-dialog" class="dialog">
<div id="drive-filename">Untitled ASCII Diagram</div>
<div style="margin: 5px;">Edit permissions and manage files in <a href="http://drive.google.com/" target="_blank">Google Drive</a>.</div>
<br>
<button id="drive-new-file-button">New Drawing</button>
<br>
<div id="drive-file-list">
<!-- filled with li's -->
</div>
<div class="dialog-button-bar">
<button class="close-dialog-button">Close</button>
</div>
</div>
<textarea id="freeform-tool-input"></textarea>
<canvas id="ascii-canvas"></canvas>
<script src="jquery-1.9.1.min.js"></script>
<script src="js-compiled.js"></script>
<script src="https://apis.google.com/js/client.js?onload=window.gapiCallback"></script>
<script type="text/javascript">
var width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
if (width > 750) {
window._tpm = window._tpm || [];
window._tpm['paywallID'] = '37774341';
window._tpm['trackPageview'] = true;
}
</script>
<script type="text/javascript" src="//code.tinypass.com/tpl/d1/tpm.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-49427709-1', 'asciiflow.com');
ga('send', 'pageview');
</script>
<script>
window.setTimeout(function() { $('#logo-interstitial').hide(); }, 3000);
</script>
</body>
</html>