Asciiflow2, sans google and tracking, available at https://flow.lain.faith
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="Description" content="Infinite ASCII diagrams, resize, freeform draw, and export straight to text/html.">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
  7. <meta name="apple-mobile-web-app-capable" content="yes" />
  8. <meta name="mobile-web-app-capable" content="yes" />
  9. <link rel="shortcut icon" sizes="196x196" href="images/favicon.png">
  10. <title>ASCIIFlow Infinity</title>
  11. <style>
  12. * {
  13. font-weight: bold;
  14. font-family: sans-serif;
  15. font-size: 0.95em;
  16. color: #666;
  17. }
  18. a {
  19. color: #FF9E20;
  20. }
  21. body {
  22. margin: 0px;
  23. }
  24. button {
  25. cursor: pointer;
  26. }
  27. #drive-file-list li {
  28. list-style: none;
  29. font-size: 15px;
  30. margin: 5px;
  31. }
  32. #draw-tools {
  33. text-align: left;
  34. padding-left: 120px;
  35. display: inline-block;
  36. position: fixed;
  37. width: 100%;
  38. background-color: #FFF;
  39. z-index: 100;
  40. -webkit-box-shadow: 0px 1px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
  41. box-shadow: 0px 1px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
  42. }
  43. #logo-bar {
  44. position: fixed;
  45. left: 0px;
  46. z-index: 101;
  47. margin: 8px;
  48. }
  49. #file-tools {
  50. text-align: right;
  51. display: inline-block;
  52. position: fixed;
  53. right: 2px;
  54. z-index: 100;
  55. }
  56. #draw-tools > button, #file-tools > button {
  57. font-size: 12px;
  58. vertical-align: top;
  59. display: inline-block;
  60. margin: 8px 8px;
  61. width: 24px;
  62. height: 24px;
  63. text-align: center;
  64. cursor: pointer;
  65. outline: 0 !important;
  66. background-size: 200% 100% !important;
  67. background-color: #FFF;
  68. }
  69. #file-tools > button.info-image {
  70. margin-left: 30px;
  71. }
  72. .info-icon, .info-icon-file {
  73. width: 30px;
  74. height: 30px;
  75. margin: 0 0 5px -4px;
  76. background-size: 100% !important;
  77. background-size: 200% 100% !important;
  78. display: inline-block;
  79. }
  80. .info-description {
  81. vertical-align: text-bottom;
  82. margin-left: 10px;
  83. display: inline-block;
  84. height: 30px;
  85. width: 64%;
  86. text-align: left;
  87. }
  88. .info-description br {
  89. display: none;
  90. }
  91. .dialog span {
  92. color: #AAA;
  93. }
  94. #drive-filename {
  95. display: inline-block;
  96. }
  97. #drive-save-state {
  98. display: inline-block;
  99. line-height: 40px;
  100. margin-right: 10px;
  101. color: #bbb;
  102. font-weight: normal;
  103. font-size: 0.9em;
  104. }
  105. #drive-filename {
  106. font-size: 30px;
  107. border: gray 1px solid;
  108. padding: 5px;
  109. background: #EEE;
  110. cursor: pointer;
  111. }
  112. /* Mobile overrides */
  113. @media(max-width:780px) {
  114. #logo-bar {
  115. margin: 10px;
  116. }
  117. #draw-tools > button, #file-tools > button {
  118. margin: 10px 4px;
  119. }
  120. #draw-tools {
  121. text-align: center;
  122. padding-left: 0px;
  123. }
  124. /* Move file tools to the bottom. */
  125. #file-tools {
  126. left: 0px;
  127. padding-left: 9px;
  128. bottom: 0px;
  129. background-color: #FFF;
  130. width: 100%;
  131. text-align: left;
  132. -webkit-box-shadow: 0px -1px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
  133. box-shadow: 0px -1px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
  134. }
  135. #drive-save-state {
  136. line-height: 44px;
  137. margin-right: 6px;
  138. }
  139. #options-button {
  140. position: fixed;
  141. right: 6px;
  142. }
  143. #drive-filename {
  144. display: block;
  145. }
  146. }
  147. .dialog {
  148. position: fixed;
  149. left: 0px;
  150. right: 0px;
  151. top: 0px;
  152. bottom: 0px;
  153. margin: auto;
  154. width: 85%;
  155. height: 89%;
  156. max-width: 640px;
  157. max-height: 380px;
  158. background: #FFF;
  159. display: none;
  160. z-index: 100;
  161. padding: 20px;
  162. text-align: center;
  163. -webkit-box-shadow: 0px 0px 5px 0px #BBB; /* Android 2.3+, iOS 4.0.2-4.2, Safari 3-4 */
  164. box-shadow: 0px 0px 5px 0px #BBB; /* Chrome 6+, Firefox 4+, IE 9+, iOS 5+, Opera 10.50+ */
  165. }
  166. .visible {
  167. display: block !important;
  168. }
  169. #draw-tools > button, #file-tools > button {
  170. border-width: 0px;
  171. }
  172. button.active, .info-icon {
  173. background-position: right;
  174. }
  175. .dialog > button {
  176. margin-top: 6px;
  177. display: inline-block;
  178. }
  179. .close-dialog-button, #import-submit-button, #text-tool-close {
  180. position: absolute;
  181. right: 0px;
  182. bottom: 0px;
  183. margin: 7px;
  184. border: 0;
  185. -webkit-appearance: none;
  186. background-color: transparent;
  187. }
  188. @media(max-width:500px) {
  189. #logo-bar {
  190. display: none;
  191. }
  192. .info-description {
  193. vertical-align: top;
  194. width: 84%;
  195. }
  196. .dialog, .dialog p {
  197. font-size: 0.90em !important;
  198. }
  199. .dialog {
  200. padding: 10px;
  201. max-height: 410px;
  202. }
  203. .info-icon, .info-icon-file {
  204. margin: 0 0 10px -4px;
  205. }
  206. .info-description br {
  207. display: block;
  208. }
  209. .close-dialog-button, #import-submit-button, #text-tool-close {
  210. margin: 10px 3px;
  211. }
  212. }
  213. #options-logo {
  214. margin: 10px 0 0;
  215. }
  216. #options-scroll {
  217. overflow-y: scroll;
  218. height: 91%;
  219. -webkit-overflow-scrolling: touch;
  220. }
  221. #options-scroll p {
  222. margin: 10px 0 15px;
  223. }
  224. .dialog-button-bar {
  225. position: absolute;
  226. right: 0;
  227. bottom: 0;
  228. width: 100%;
  229. height: 8%;
  230. min-height: 34px;
  231. background-color: #DDD;
  232. text-align: right;
  233. }
  234. #import-submit-button {
  235. margin-right: 80px;
  236. }
  237. #ascii-canvas {
  238. position: fixed;
  239. left: 0px;
  240. top: 0px;
  241. width: 100%;
  242. height: 100%;
  243. }
  244. textarea {
  245. width: 100%;
  246. height: 91%;
  247. font-size: 1.2em;
  248. font-weight: normal;
  249. overflow: hidden;
  250. resize: none;
  251. margin: 0px;
  252. padding: 0px;
  253. border: 0px;
  254. font-family: monospace;
  255. white-space: pre;
  256. }
  257. #logo-interstitial {
  258. text-align: center;
  259. vertical-align: middle;
  260. background-color: #FFF;
  261. z-index: 200;
  262. position: fixed;
  263. width: 100%;
  264. height: 100%;
  265. /* transition: opacity 1.5s ease-in-out; */
  266. background-size: 100%;
  267. pointer-events: none;
  268. }
  269. #logo-interstitial > img {
  270. display: inline;
  271. max-width: 100%;
  272. max-height: 100%;
  273. position: fixed;
  274. top: 0;
  275. bottom: 0;
  276. left: 0;
  277. right: 0;
  278. margin: auto;
  279. }
  280. #text-tool-widget {
  281. display: none;
  282. z-index: 100;
  283. position: fixed;
  284. top: 60px;
  285. left: 0px;
  286. right: 0px;
  287. width: 300px;
  288. height: 100px;
  289. margin: auto;
  290. text-align: center;
  291. box-shadow: 0px 0px 3px 3px #CCC;
  292. }
  293. .fade-out {
  294. opacity: 0;
  295. }
  296. .box-image { background-image: url('images/box-icon.gif'); }
  297. .line-image { background-image: url('images/line-icon.gif'); }
  298. .arrow-image { background-image: url('images/arrow-icon.gif'); }
  299. .freeform-image { background-image: url('images/freeform-icon.gif'); }
  300. .erase-image { background-image: url('images/erase-icon.gif'); }
  301. .move-image { background-image: url('images/move-icon.gif'); }
  302. .text-image { background-image: url('images/text-icon.gif'); }
  303. .drive-image { background-image: url('images/drive-icon.gif'); }
  304. .export-image { background-image: url('images/export-icon.gif'); }
  305. .import-image { background-image: url('images/import-icon.gif'); }
  306. .clear-image { background-image: url('images/clear-icon.gif'); }
  307. .undo-image { background-image: url('images/undo-icon.gif'); }
  308. .redo-image { background-image: url('images/redo-icon.gif'); }
  309. .select-image { background-image: url('images/select-icon.gif'); }
  310. .info-image { background-image: url('images/info-icon.gif'); }
  311. /* New intro animation */
  312. .animated {
  313. -webkit-animation-duration: 3s;
  314. animation-duration: 3s;
  315. -webkit-animation-fill-mode: both;
  316. animation-fill-mode: both;
  317. }
  318. @-webkit-keyframes bounceOut {
  319. 0% {
  320. opacity: 0;
  321. -webkit-transform: scale(.9);
  322. transform: scale(.9);
  323. }
  324. 12.5% {
  325. opacity: 1;
  326. -webkit-transform: scale(1);
  327. transform: scale(1);
  328. }
  329. 73% {
  330. -webkit-transform: scale(1);
  331. transform: scale(1);
  332. }
  333. 83% {
  334. -webkit-transform: scale(.95);
  335. transform: scale(.95);
  336. }
  337. 92% {
  338. -webkit-transform: scale(1.1);
  339. transform: scale(1.1);
  340. }
  341. 100% {
  342. -webkit-transform: scale(.3);
  343. transform: scale(.3);
  344. }
  345. }
  346. @keyframes bounceOut {
  347. 0% {
  348. opacity: 0;
  349. -webkit-transform: scale(.9);
  350. -ms-transform: scale(.9);
  351. transform: scale(.9);
  352. }
  353. 12.5% {
  354. opacity: 1;
  355. -webkit-transform: scale(1);
  356. -ms-transform: scale(1);
  357. transform: scale(1);
  358. }
  359. 73% {
  360. -webkit-transform: scale(1);
  361. -ms-transform: scale(1);
  362. transform: scale(1);
  363. }
  364. 83% {
  365. -webkit-transform: scale(.95);
  366. -ms-transform: scale(.95);
  367. transform: scale(.95);
  368. }
  369. 92% {
  370. -webkit-transform: scale(1.1);
  371. -ms-transform: scale(1.1);
  372. transform: scale(1.1);
  373. }
  374. 100% {
  375. -webkit-transform: scale(.3);
  376. -ms-transform: scale(.3);
  377. transform: scale(.3);
  378. }
  379. }
  380. .bounceOut {
  381. -webkit-animation-name: bounceOut;
  382. animation-name: bounceOut;
  383. }
  384. @-webkit-keyframes fadeOut {
  385. 0% {
  386. opacity: 1;
  387. }
  388. 90% {
  389. opacity: 1;
  390. }
  391. 100% {
  392. opacity: 0;
  393. }
  394. }
  395. @keyframes fadeOut {
  396. 0% {
  397. opacity: 1;
  398. }
  399. 90% {
  400. opacity: 1;
  401. }
  402. 100% {
  403. opacity: 0;
  404. }
  405. }
  406. .fadeOut {
  407. -webkit-animation-name: fadeOut;
  408. animation-name: fadeOut;
  409. }
  410. </style>
  411. </head>
  412. <body>
  413. <div id="logo-interstitial" class="animated fadeOut">
  414. <img src="images/logo-full.gif" class="animated bounceOut" />
  415. </div>
  416. <img id="logo-bar" src="images/logo-bar.gif" width="88" height="24" />
  417. <div id="draw-tools">
  418. <button id="box-button" class="tool active box-image" title="Draw boxes"></button>
  419. <button id="line-button" class="tool line-image" title="Draw connecting lines"></button>
  420. <button id="arrow-button" class="tool arrow-image" title="Draw arrows"></button>
  421. <button id="freeform-button" class="tool freeform-image" title="Freeform drawing"></button>
  422. <button id="erase-button" class="tool erase-image" title="Erase square areas"></button>
  423. <button id="move-button" class="tool move-image" title="Resize/move boxes and lines"></button>
  424. <button id="text-button" class="tool text-image" title="Text tool"></button>
  425. <button id="select-button" class="tool select-image" title="Select, copy, cut and move"></button>
  426. </div>
  427. <div id="file-tools">
  428. <button id="export-button" class="tool export-image" title="Export"></button>
  429. <button id="import-button" class="tool import-image" title="Import"></button>
  430. <button id="clear-button" class="tool clear-image" title="Clear"></button>
  431. <button id="undo-button" class="tool undo-image" title="Undo"></button>
  432. <button id="redo-button" class="tool redo-image" title="Redo"></button>
  433. <button id="options-button" class="tool info-image" title="Info"></button>
  434. </div>
  435. <div id="export-button-dialog" class="dialog">
  436. <textarea readonly id="export-area"></textarea>
  437. <div class="dialog-button-bar">
  438. <button class="close-dialog-button">Close</button>
  439. </div>
  440. </div>
  441. <div id="options-button-dialog" class="dialog">
  442. <div id="options-scroll">
  443. <img id="options-logo" src="images/logo-options.gif" width="176" height="48" />
  444. <br>
  445. <button id="use-lines-button">Lines Mode</button>
  446. <button id="use-ascii-button">ASCII Mode</button><br>
  447. <p>Moving around.<br>
  448. Desktop Windows: <span>Hold CTRL and drag the screen.</span><br>
  449. Desktop OSX: <span>Hold CMD and drag the screen.</span><br>
  450. Mobile: <span>Drag quickly to move. Press and hold to start drawing. Pinch to zoom in/out.</span></p>
  451. <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>
  452. <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>
  453. <div class="info-icon arrow-image"></div><div class="info-description">Draw arrows. <span>Connect it to another line to change the orientation.</span></div><br>
  454. <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>
  455. <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>
  456. <div class="info-icon move-image"></div><div class="info-description">Resize boxes and lines. <span>Drag a line to change its size/shape.</span></div><br>
  457. <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>
  458. <br>
  459. <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>
  460. <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>
  461. <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>
  462. <div class="info-icon-file undo-image"></div><div class="info-description">Undo. <br><span>Made a mistake? Undo!</span></div><br>
  463. <div class="info-icon-file redo-image"></div><div class="info-description">Redo. <br><span>Too many Undo's? Redo!</span></div><br>
  464. <br>
  465. <div>File issues as bugs <a href="https://github.com/lewish/asciiflow2/issues" target="_blank">here</a>.</div><br>
  466. <div>Return to the original <a href="http://stable.ascii-flow.appspot.com/">ASCIIFlow</a>.</div><br>
  467. 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>.
  468. <br>
  469. <br>
  470. </div>
  471. <div class="dialog-button-bar">
  472. <button class="close-dialog-button">Close</button>
  473. </div>
  474. </div>
  475. <div id="import-button-dialog" class="dialog">
  476. <textarea id="import-area"></textarea>
  477. <div class="dialog-button-bar">
  478. <button class="close-dialog-button">Close</button>
  479. <button id="import-submit-button">Import</button>
  480. </div>
  481. </div>
  482. <!-- These dialogs are handled seperately. -->
  483. <div id="text-tool-widget">
  484. <textarea id="text-tool-input"></textarea>
  485. <div class="dialog-button-bar">
  486. <button id="text-tool-close">Close</button>
  487. </div>
  488. </div>
  489. <textarea id="freeform-tool-input"></textarea>
  490. <canvas id="ascii-canvas"></canvas>
  491. <script src="jquery-3.1.1.min.js"></script>
  492. <script src="js-compiled.js"></script>
  493. <link rel="stylesheet" type="text/css" href="addtohomescreen.css">
  494. <script src="addtohomescreen.min.js"></script>
  495. <script>
  496. window.setTimeout(function() { $('#logo-interstitial').hide(); }, 3000);
  497. addToHomescreen({
  498. startDelay: 6
  499. });
  500. </script>
  501. </body>
  502. </html>