From fe8692bd051d09d686b9769f065c9b97400c01b8 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Sun, 28 Apr 2019 02:26:10 -0500 Subject: [PATCH 1/3] starting to rewrite everything in typescript --- .gitignore | 4 +- Gruntfile.coffee | 72 --- package-lock.json | 1043 +++--------------------------------- package.json | 15 +- src/Model/Action.ts | 5 + src/Model/AltText.ts | 4 + src/Model/Anchor.ts | 6 + src/Model/Block.ts | 14 + src/Model/BoolHash.ts | 1 + src/Model/Href.ts | 5 + src/Model/Line.ts | 4 + src/Model/ParseError.ts | 5 + src/Model/PlayerOptions.ts | 6 + src/Model/Scene.ts | 10 + src/Model/Story.ts | 9 + src/Model/index.ts | 11 + src/Parser.ts | 117 ++++ src/Player.ts | 30 ++ src/Util.ts | 97 ++++ src/parser.coffee | 76 --- src/util.coffee | 89 --- tsconfig.json | 14 + 22 files changed, 410 insertions(+), 1227 deletions(-) delete mode 100644 Gruntfile.coffee create mode 100644 src/Model/Action.ts create mode 100644 src/Model/AltText.ts create mode 100644 src/Model/Anchor.ts create mode 100644 src/Model/Block.ts create mode 100644 src/Model/BoolHash.ts create mode 100644 src/Model/Href.ts create mode 100644 src/Model/Line.ts create mode 100644 src/Model/ParseError.ts create mode 100644 src/Model/PlayerOptions.ts create mode 100644 src/Model/Scene.ts create mode 100644 src/Model/Story.ts create mode 100644 src/Model/index.ts create mode 100644 src/Parser.ts create mode 100644 src/Player.ts create mode 100644 src/Util.ts delete mode 100644 src/parser.coffee delete mode 100644 src/util.coffee create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index 75e871a..3e2e84b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ -*.swp -bin/ +build/ node_modules/ -.DS_Store diff --git a/Gruntfile.coffee b/Gruntfile.coffee deleted file mode 100644 index 6eed79e..0000000 --- a/Gruntfile.coffee +++ /dev/null @@ -1,72 +0,0 @@ -module.exports = (grunt) -> - pkg = require './package.json' - grunt.initConfig - pkg: pkg - - coffee: - compile: - options: - join: true - bare: true - files: [ - 'bin/ficdown.js': ['src/*.coffee'] - ] - - stylus: - compile: - options: - compress: true - expand: true - files: [ - 'bin/example/player.css': ['src/example/*.styl'] - ] - - uglify: - js: - files: - 'bin/ficdown.min.js': [ - 'bin/ficdown.js' - ] - - copy: - static: - files: [ - expand: true - flatten: true - src: ['src/*.html'] - dest: 'bin/' - ] - example: - files: [ - expand: true - flatten: true - src: ['src/example/*.html', 'src/example/*.png', 'src/example/*.md', 'bin/ficdown.min.js'] - dest: 'bin/example/' - ] - - watch: - js: - files: ['src/**/*.coffee'] - tasks: ['build:js', 'copy:example'] - css: - files: ['src/**/*.styl'] - tasks: ['stylus:compile'] - static: - files: ['src/**/*.html','src/**/*.js','src/**/*.md'] - tasks: ['copy:static', 'copy:example'] - - for name of pkg.devDependencies when name.substring(0, 6) is 'grunt-' - grunt.loadNpmTasks name - - grunt.registerTask 'build:js', [ - 'coffee:compile' - 'uglify:js' - ] - - grunt.registerTask 'default', [ - 'coffee:compile' - 'uglify:js' - 'stylus:compile' - 'copy:static' - 'copy:example' - ] diff --git a/package-lock.json b/package-lock.json index 84aa4d4..45fd003 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1012 +1,97 @@ { "name": "ficdown.js", - "version": "0.9.0", + "version": "0.9.1", "lockfileVersion": 1, "requires": true, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@types/jquery": { + "version": "3.3.29", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.29.tgz", + "integrity": "sha512-FhJvBninYD36v3k6c+bVk1DSZwh7B5Dpb/Pyk3HKVsiohn0nhbefZZ+3JXbWQhFyt0MxSl2jRDdGQPHeOHFXrQ==", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "@types/sizzle": "*" } }, - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "@types/linkify-it": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-2.1.0.tgz", + "integrity": "sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw==", "dev": true }, - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "@types/markdown-it": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.7.tgz", + "integrity": "sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==", + "dev": true, + "requires": { + "@types/linkify-it": "*" + } + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", "dev": true }, "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "dev": true, - "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" - }, - "dependencies": { - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "dev": true - } - } - }, - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", - "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", - "dev": true - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", - "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", - "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", - "dev": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", - "dev": true, - "requires": { - "glob": "3.2.11", - "lodash": "2.4.2" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", - "dev": true, - "requires": { - "async": "0.1.22", - "coffee-script": "1.3.3", - "colors": "0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.1.3", - "getobject": "0.1.0", - "glob": "3.1.21", - "grunt-legacy-log": "0.1.3", - "grunt-legacy-util": "0.2.0", - "hooker": "0.2.3", - "iconv-lite": "0.2.11", - "js-yaml": "2.0.5", - "lodash": "0.9.2", - "minimatch": "0.2.14", - "nopt": "1.0.10", - "rimraf": "2.2.8", - "underscore.string": "2.2.1", - "which": "1.0.9" - }, - "dependencies": { - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", - "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", - "dev": true - } - } - }, - "grunt-contrib-coffee": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-coffee/-/grunt-contrib-coffee-0.10.1.tgz", - "integrity": "sha1-7SLGgp9FiqjqR/hnaEM+mBMUAYY=", - "dev": true, - "requires": { - "chalk": "0.4.0", - "coffee-script": "1.7.1", - "lodash": "2.4.2" - }, - "dependencies": { - "coffee-script": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", - "integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=", - "dev": true, - "requires": { - "mkdirp": "0.3.5" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "grunt-contrib-copy": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.5.0.tgz", - "integrity": "sha1-QQB1rEWlhWuhkbHMclclRQ1KAhU=", - "dev": true - }, - "grunt-contrib-stylus": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-stylus/-/grunt-contrib-stylus-0.17.0.tgz", - "integrity": "sha1-W9hRlO5Kttar98ShlQbHCLYr8EE=", - "dev": true, - "requires": { - "async": "0.8.0", - "chalk": "0.4.0", - "lodash": "2.4.2", - "nib": "1.0.4", - "stylus": "0.46.3" - }, - "dependencies": { - "async": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.8.0.tgz", - "integrity": "sha1-7mXsdymML/FFa8RBigUtDwZDURI=", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "grunt-contrib-uglify": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.5.1.tgz", - "integrity": "sha1-FfCqXo6LpCGuqYCHnuUFvHErbN4=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "lodash": "2.4.2", - "maxmin": "0.2.2", - "uglify-js": "2.8.29" - }, - "dependencies": { - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - } - } - }, - "grunt-contrib-watch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz", - "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=", - "dev": true, - "requires": { - "async": "0.2.10", - "gaze": "0.5.2", - "lodash": "2.4.2", - "tiny-lr-fork": "0.0.5" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "grunt-legacy-log": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", - "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", - "dev": true, - "requires": { - "colors": "0.6.2", - "grunt-legacy-log-utils": "0.1.1", - "hooker": "0.2.3", - "lodash": "2.4.2", - "underscore.string": "2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", - "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", - "dev": true, - "requires": { - "colors": "0.6.2", - "lodash": "2.4.2", - "underscore.string": "2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", - "dev": true, - "requires": { - "async": "0.1.22", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "0.9.2", - "underscore.string": "2.2.1", - "which": "1.0.9" - } - }, - "gzip-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-0.2.0.tgz", - "integrity": "sha1-46KhkSBf5W7jJvXCcUNd+uz7Phw=", - "dev": true, - "requires": { - "browserify-zlib": "0.1.4", - "concat-stream": "1.6.0" - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", - "dev": true, - "requires": { - "argparse": "0.1.16", - "esprima": "1.0.4" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", - "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "maxmin": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-0.2.2.tgz", - "integrity": "sha1-o2ztjMIuOrzRCM+3l6OktAJ1WT8=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "figures": "1.7.0", - "gzip-size": "0.2.0", - "pretty-bytes": "0.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - } - } - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nib": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nib/-/nib-1.0.4.tgz", - "integrity": "sha1-A9OXwnojHzyaWhkOqmjl154vA0U=", - "dev": true, - "requires": { - "stylus": "0.45.1" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "stylus": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.45.1.tgz", - "integrity": "sha1-72n2LJhKSArcDJ1KqvsjgqOJ5FM=", - "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "3.1.0", - "glob": "3.2.11", - "mkdirp": "0.3.5", - "sax": "0.5.8" - } - } - } - }, - "nopt": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "abbrev": "1.1.1" + "sprintf-js": "~1.0.2" } }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", - "dev": true, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "jquery": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz", + "integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ==" + }, + "linkify-it": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", + "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", "requires": { - "nopt": "2.0.0" - }, - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - } + "uc.micro": "^1.0.1" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "pretty-bytes": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-0.1.2.tgz", - "integrity": "sha1-zZApTVihyk6KXQ+5yCJZmIgazwA=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", - "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "sigmund": { + "mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "string_decoder": { + "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "typescript": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", + "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", "dev": true }, - "stylus": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.46.3.tgz", - "integrity": "sha1-C7XWAvY/qAiK0/iv+6LB65JcTXA=", - "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "3.1.0", - "glob": "3.2.11", - "mkdirp": "0.3.5", - "sax": "0.5.8" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - }, - "tiny-lr-fork": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", - "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", - "dev": true, - "requires": { - "debug": "0.7.4", - "faye-websocket": "0.4.4", - "noptify": "0.0.3", - "qs": "0.5.6" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true - } - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" } } } diff --git a/package.json b/package.json index 2a10f49..7f7d044 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,13 @@ "name": "ficdown.js", "version": "0.9.1", "description": "A parser and player for Interactive Fiction written in Ficdown", - "dependencies": {}, + "dependencies": { + "jquery": "^3.4.0", + "markdown-it": "^8.4.2" + }, "devDependencies": { - "coffee-script": "^1.7.1", - "grunt": "^0.4.5", - "grunt-contrib-coffee": "^0.10.1", - "grunt-contrib-uglify": "^0.5.0", - "grunt-contrib-copy": "^0.5.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-contrib-stylus": "^0.17.0" + "@types/jquery": "^3.3.29", + "@types/markdown-it": "0.0.7", + "typescript": "^3.4.5" } } diff --git a/src/Model/Action.ts b/src/Model/Action.ts new file mode 100644 index 0000000..df8755b --- /dev/null +++ b/src/Model/Action.ts @@ -0,0 +1,5 @@ +export type Action = { + lineNumber: number, + state: string, + description: string, +} diff --git a/src/Model/AltText.ts b/src/Model/AltText.ts new file mode 100644 index 0000000..16283d6 --- /dev/null +++ b/src/Model/AltText.ts @@ -0,0 +1,4 @@ +export type AltText = { + passed: string, + failed: string, +} diff --git a/src/Model/Anchor.ts b/src/Model/Anchor.ts new file mode 100644 index 0000000..6e73b9f --- /dev/null +++ b/src/Model/Anchor.ts @@ -0,0 +1,6 @@ +export type Anchor = { + anchor: string, + text: string, + href: string, + title: string, +} diff --git a/src/Model/Block.ts b/src/Model/Block.ts new file mode 100644 index 0000000..935665f --- /dev/null +++ b/src/Model/Block.ts @@ -0,0 +1,14 @@ +import { Line } from './'; + +export enum BlockType { + Action, + Scene, + Story, +} + +export type Block = { + lineNumber: number, + type: BlockType, + name: string, + lines: Line[], +} diff --git a/src/Model/BoolHash.ts b/src/Model/BoolHash.ts new file mode 100644 index 0000000..dd78024 --- /dev/null +++ b/src/Model/BoolHash.ts @@ -0,0 +1 @@ +export type BoolHash = { [name: string]: boolean } diff --git a/src/Model/Href.ts b/src/Model/Href.ts new file mode 100644 index 0000000..77e6343 --- /dev/null +++ b/src/Model/Href.ts @@ -0,0 +1,5 @@ +export type Href = { + target: string, + conditions: string, + toggles: string, +} diff --git a/src/Model/Line.ts b/src/Model/Line.ts new file mode 100644 index 0000000..f105e38 --- /dev/null +++ b/src/Model/Line.ts @@ -0,0 +1,4 @@ +export type Line = { + lineNumber: number, + text: string, +} diff --git a/src/Model/ParseError.ts b/src/Model/ParseError.ts new file mode 100644 index 0000000..571ba4b --- /dev/null +++ b/src/Model/ParseError.ts @@ -0,0 +1,5 @@ +export class ParseError extends Error { + constructor(message: string, public lineNumber: number) { + super(message); + } +} diff --git a/src/Model/PlayerOptions.ts b/src/Model/PlayerOptions.ts new file mode 100644 index 0000000..08c03f2 --- /dev/null +++ b/src/Model/PlayerOptions.ts @@ -0,0 +1,6 @@ +export type PlayerOptions = { + source: string, + id: string, + startText?: string, + endText?: string, +} diff --git a/src/Model/Scene.ts b/src/Model/Scene.ts new file mode 100644 index 0000000..7dc701e --- /dev/null +++ b/src/Model/Scene.ts @@ -0,0 +1,10 @@ +import { BoolHash } from './'; + +export type Scene = { + lineNumber: number, + name: string, + key: string, + description: string, + conditions?: BoolHash, + id?: string; +} diff --git a/src/Model/Story.ts b/src/Model/Story.ts new file mode 100644 index 0000000..74dcf8a --- /dev/null +++ b/src/Model/Story.ts @@ -0,0 +1,9 @@ +import { Scene, Action } from './'; + +export type Story = { + name: string, + description: string, + firstScene: string, + scenes: { [key: string]: Scene[] }, + actions: { [key: string]: Action }, +} diff --git a/src/Model/index.ts b/src/Model/index.ts new file mode 100644 index 0000000..45cdc35 --- /dev/null +++ b/src/Model/index.ts @@ -0,0 +1,11 @@ +export * from './Action'; +export * from './AltText'; +export * from './Anchor'; +export * from './Block'; +export * from './BoolHash'; +export * from './Href'; +export * from './Line'; +export * from './ParseError'; +export * from './PlayerOptions'; +export * from './Scene'; +export * from './Story'; diff --git a/src/Parser.ts b/src/Parser.ts new file mode 100644 index 0000000..1a83f29 --- /dev/null +++ b/src/Parser.ts @@ -0,0 +1,117 @@ +import { + Action, + Block, + BlockType, + BoolHash, + Line, + ParseError, + Scene, + Story, +} from './Model'; +import { Util } from './Util'; + +export class Parser { + public static parse(source: string): Story { + const lines = source.split(/\n|\r\n/); + const blocks = this.extractBlocks(lines); + return this.parseBlocks(blocks); + } + + private static getBlockType(hashCount: 1 | 2 | 3): BlockType { + switch(hashCount) { + case 1: return BlockType.Story; + case 2: return BlockType.Scene; + case 3: return BlockType.Action; + } + } + + private static extractBlocks(lines: string[]): Block[] { + const blocks: Block[] = []; + let currentBlock: Block | undefined = undefined; + for(let i = 0; i < lines.length; i++) { + const match = lines[i].match(/^(#{1,3})\s+([^#].*)$/); + if(match) { + if(currentBlock) blocks.push(currentBlock); + currentBlock = { + lineNumber: i, + type: this.getBlockType(<1 | 2 | 3>match[1].length), + name: match[2], + lines: [], + }; + } else if(currentBlock) { + currentBlock.lines.push({ lineNumber: i, text: lines[i] }); + } + } + if(currentBlock) blocks.push(currentBlock); + return blocks; + } + + private static parseBlocks(blocks: Block[]): Story { + let storyBlock: Block | undefined = + blocks.find(b => b.type === BlockType.Story); + + if(!storyBlock) throw new ParseError('no story block', 0); + const storyName = Util.matchAnchor(storyBlock.name); + if(!storyName) throw new ParseError('no story name', storyBlock.lineNumber); + const storyHref = Util.matchHref(storyName.href); + if(!storyHref) throw new ParseError('no link to first scene', storyBlock.lineNumber); + + const story: Story = { + name: storyName.text, + description: Util.trimText(storyBlock.lines.join("\n")), + firstScene: storyHref.target, + scenes: {}, + actions: {}, + }; + + for(let block of blocks) { + switch(block.type) { + case BlockType.Scene: + const scene = this.blockToScene(block); + if(!story.scenes[scene.key]) story.scenes[scene.key] = []; + story.scenes[scene.key].push(scene); + break; + case BlockType.Action: + const action = this.blockToAction(block); + story.actions[action.state] = action; + break; + } + } + + return story; + } + + private static blockToScene(block: Block): Scene { + const sceneName = Util.matchAnchor(block.name); + let name: string | undefined = undefined; + let key: string; + let conditions: BoolHash | undefined = undefined; + if(sceneName) { + name = sceneName.title + ? Util.trimText(sceneName.title) + : Util.trimText(sceneName.text); + key = Util.normalize(sceneName.text); + const href = Util.matchHref(sceneName.href); + if(href && href.conditions) conditions = + Util.toBoolHash(href.conditions.split('&')); + } else { + name = Util.trimText(block.name); + key = Util.normalize(block.name); + } + return { + name, + key, + conditions, + description: Util.trimText(block.lines.join("\n")), + lineNumber: block.lineNumber, + }; + } + + private static blockToAction(block: Block): Action { + return { + state: Util.normalize(block.name), + description: Util.trimText(block.lines.join("\n")), + lineNumber: block.lineNumber, + }; + } +} diff --git a/src/Player.ts b/src/Player.ts new file mode 100644 index 0000000..8b72b98 --- /dev/null +++ b/src/Player.ts @@ -0,0 +1,30 @@ +import { + BoolHash, + PlayerOptions, + Scene, + Story, +} from './Model'; +import { Parser } from './Parser'; +import * as Markdown from 'markdown-it'; +import * as $ from 'jquery'; + +export class Player { + private static converter = new Markdown(); + private container: JQuery; + private playerState: BoolHash = {}; + private visitedScenes: BoolHash = {}; + private currentScene?: Scene; + private moveCounter: number = 0; + private story: Story; + + constructor(private options: PlayerOptions) { + this.story = Parser.parse(options.source); + let i = 0; + for(let [key, scenes] of Object.entries(this.story.scenes)) { + for(let scene of scenes) scene.id = `#s${ ++i }`; + } + this.container = $(`#${ options.id }`); + this.container.addClass('ficdown').data('player', this); + } + +} diff --git a/src/Util.ts b/src/Util.ts new file mode 100644 index 0000000..1f910f1 --- /dev/null +++ b/src/Util.ts @@ -0,0 +1,97 @@ +import { Anchor, Href, BoolHash, AltText } from './Model'; + +export class Util { + private static regexLib: { [name: string]: RegExp } = { + anchors: /(\[((?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[\])*\])*\])*\])*\])*\])*)\]\([ ]*((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\(\))*\))*\))*\))*\))*\))*)[ ]*((['"])(.*?)\5[ ]*)?\))/gm, + + href: /^(?:\/([a-zA-Z](?:-?[a-zA-Z0-9])*))?(?:\?((?:!?[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:&!?[a-zA-Z](?:-?[a-zA-Z0-9])*)*)?)?(?:#((?:[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:\+[a-zA-Z](?:-?[a-zA-Z0-9])*)*))?$/, + + trim: /^\s+|\s+$/g, + + altText: /^((?:[^|\\]|\\.)*)(?:\|((?:[^|\\]|\\.)+))?$/, + + escapeChar: /\\(?=[^\\])/g, + + emptyListItem: /^[ ]*-\s*([\r\n]+|$)/gm, + }; + + private static matchToAnchor(match: RegExpExecArray): Anchor { + const result: Anchor = { + anchor: match[1], + text: match[2], + href: match[3], + title: match[6], + }; + if(result.href.indexOf('"') === 0) { + result.title = result.href.substring(1, result.href.length - 1); + result.href = ''; + } + return result; + } + + public static matchAnchor(text: string): Anchor | undefined { + const match = this.regexLib.anchors.exec(text); + if(match) return this.matchToAnchor(match); + } + + public static matchAnchors(text: string): Anchor[] { + let match: RegExpExecArray | null; + const anchors: Anchor[] = []; + while(match = this.regexLib.anchors.exec(text)) { + anchors.push(this.matchToAnchor(match)); + } + return anchors; + } + + public static matchHref(text: string): Href | undefined { + const match = this.regexLib.href.exec(text); + if(match) { + return { + target: match[1], + conditions: match[2], + toggles: match[3], + }; + } + } + + public static trimText(text: string): string { + return text.replace(this.regexLib.trim, ''); + } + + public static normalize(text: string): string { + return text.toLowerCase().replace(/^\W+|\W+$/g, '').replace(/\W+/g, '-'); + } + + public static toBoolHash(names: string[]): BoolHash | undefined { + if(names) { + const hash: BoolHash = {}; + for(let name of names) { + if(name.indexOf('!') === 0) { + hash[name.substring(1, name.length)] = false; + } else { + hash[name] = true; + } + } + return hash; + } + } + + public static conditionsMet(state: BoolHash, conditions: BoolHash): boolean { + for(let [cond, val] of Object.entries(conditions)) { + if((val && !state[cond]) || (!val && state[cond])) { + return false; + } + } + return true; + } + + public static splitAltText(text: string): AltText | undefined { + const match = this.regexLib.altText.exec(text); + if(match) { + return { + passed: match[0], + failed: match[1], + }; + } + } +} diff --git a/src/parser.coffee b/src/parser.coffee deleted file mode 100644 index 7aefa68..0000000 --- a/src/parser.coffee +++ /dev/null @@ -1,76 +0,0 @@ -parseText = (text) -> - lines = text.split /\n|\r\n/ - blocks = extractBlocks lines - story = parseBlocks blocks - -getBlockType = (hashCount) -> - switch hashCount - when 1 then 'story' - when 2 then 'scene' - when 3 then 'action' - -extractBlocks = (lines) -> - blocks = [] - currentBlock = null - for line in lines - match = line.match /^(#{1,3})\s+([^#].*)$/ - if match? - if currentBlock != null - blocks.push currentBlock - currentBlock = - type: getBlockType match[1].length - name: match[2] - lines: [] - else - currentBlock.lines.push line - if currentBlock != null - blocks.push currentBlock - return blocks - -parseBlocks = (blocks) -> - storyBlock = null - for block in blocks - if block.type == 'story' - storyBlock = block - break - storyName = matchAnchor storyBlock.name - storyHref = matchHref storyName.href - story = - name: storyName.text - description: trimText storyBlock.lines.join "\n" - firstScene: storyHref.target - scenes: {} - actions: {} - for block in blocks - switch block.type - when 'scene' - scene = blockToScene block - if !story.scenes[scene.key] - story.scenes[scene.key] = [] - story.scenes[scene.key].push scene - when 'action' - action = blockToAction block - story.actions[action.state] = action - return story - -blockToScene = (block) -> - sceneName = matchAnchor block.name - if sceneName? - title = if sceneName.title? then trimText sceneName.title else trimText sceneName.text - key = normalize sceneName.text - href = matchHref sceneName.href - if href?.conditions? - conditions = toBoolHash href.conditions.split '&' - else - title = trimText block.name - key = normalize block.name - scene = - name: if title != '' then title else null - key: key - description: trimText block.lines.join "\n" - conditions: if conditions? then conditions else null - -blockToAction = (block) -> - action = - state: normalize block.name - description: trimText block.lines.join "\n" diff --git a/src/util.coffee b/src/util.coffee deleted file mode 100644 index b84b6be..0000000 --- a/src/util.coffee +++ /dev/null @@ -1,89 +0,0 @@ -regexLib = - - anchors: /(\[((?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[\])*\])*\])*\])*\])*\])*)\]\([ ]*((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\(\))*\))*\))*\))*\))*\))*)[ ]*((['"])(.*?)\5[ ]*)?\))/gm - - href: /^(?:\/([a-zA-Z](?:-?[a-zA-Z0-9])*))?(?:\?((?:!?[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:&!?[a-zA-Z](?:-?[a-zA-Z0-9])*)*)?)?(?:#((?:[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:\+[a-zA-Z](?:-?[a-zA-Z0-9])*)*))?$/ - - trim: /^\s+|\s+$/g - - altText: /^((?:[^|\\]|\\.)*)(?:\|((?:[^|\\]|\\.)+))?$/ - - escapeChar: /\\(?=[^\\])/g - - emptyListItem: /^[ ]*-\s*([\r\n]+|$)/gm - -matchAnchor = (text) -> - re = new RegExp regexLib.anchors - match = re.exec text - if match? - result = - anchor: match[1] - text: match[2] - href: match[3] - title: match[6] - if result.href.indexOf('"') == 0 - result.title = result.href.substring 1, result.href.length - 1 - result.href = '' - return result - return match - -matchAnchors = (text) -> - re = new RegExp regexLib.anchors - anchors = [] - while match = re.exec text - anchor = - anchor: match[1] - text: match[2] - href: match[3] - title: match[6] - if anchor.href.indexOf('"') == 0 - anchor.title = anchor.href.substring 1, anchor.href.length - 1 - anchor.href = '' - anchors.push anchor - return anchors - -trimText = (text) -> - text.replace regexLib.trim, '' - -matchHref = (href) -> - re = new RegExp regexLib.href - match = re.exec href - if match? - result = - target: match[1] - conditions: match[2] - toggles: match[3] - return result - return match - -normalize = (text) -> - text.toLowerCase().replace(/^\W+|\W+$/g, '').replace /\W+/g, '-' - -toBoolHash = (names) -> - if !names? - return null - hash = {} - for name in names - if name.indexOf('!') == 0 - hash[name.substring 1, name.length] = false - else - hash[name] = true - return hash - -conditionsMet = (state, conditions) -> - met = true - for cond, val of conditions - if (val and !state[cond]) or (!val and state[cond]) - met = false - break - return met - -splitAltText = (text) -> - re = new RegExp regexLib.altText - match = re.exec text - if match? - result = - passed: match[1] - failed: match[2] - return result - return diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1c9bb3f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": [ "es2017" ], + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "./build", + "declaration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strict": true, + "sourceMap": true + } +} From f105d9f1d9b1d4f1b0b2a1c10f4afcf0a25d7be3 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Sun, 28 Apr 2019 17:24:33 -0500 Subject: [PATCH 2/3] typescript rewrite closes #8 closes #6 closes #3 --- package-lock.json | 1303 ++++++++++++++++++++++++++++++++++++ package.json | 13 +- src/Model/AltText.ts | 4 +- src/Model/ParseError.ts | 4 +- src/Model/PlayerOptions.ts | 10 +- src/Parser.ts | 6 +- src/Player.ts | 158 ++++- src/Util.ts | 35 +- src/main.ts | 2 + src/player.coffee | 117 ---- src/tests.html | 52 -- test.html | 82 +++ tsconfig.json | 14 +- 13 files changed, 1595 insertions(+), 205 deletions(-) create mode 100644 src/main.ts delete mode 100644 src/player.coffee delete mode 100644 src/tests.html create mode 100644 test.html diff --git a/package-lock.json b/package-lock.json index 45fd003..2636366 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,12 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@types/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha512-qjkHL3wF0JMHMqgm/kmL8Pf8rIiqvueEiZ0g6NVTcBX1WN46GWDr+V5z+gsHUeL0n8TfAmXnYmF7ajsxmBp4PQ==", + "dev": true + }, "@types/jquery": { "version": "3.3.29", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.29.tgz", @@ -28,12 +34,58 @@ "@types/linkify-it": "*" } }, + "@types/node": { + "version": "11.13.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", + "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==", + "dev": true + }, "@types/sizzle": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-node": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", + "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-dynamic-import": "^4.0.0", + "acorn-walk": "^6.1.0", + "xtend": "^4.0.1" + } + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -42,16 +94,724 @@ "sprintf-js": "~1.0.2" } }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", + "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "core-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", + "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "jquery": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz", "integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ==" }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "isarray": "^2.0.4", + "stream-splicer": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", + "dev": true + } + } + }, "linkify-it": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", @@ -60,6 +820,12 @@ "uc.micro": "^1.0.1" } }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, "markdown-it": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", @@ -72,16 +838,465 @@ "uc.micro": "^1.0.5" } }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "module-deps": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz", + "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.0.2", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "typescript": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", @@ -92,6 +1307,94 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, + "uglify-js": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.9.tgz", + "integrity": "sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ==", + "dev": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true } } } diff --git a/package.json b/package.json index 7f7d044..38dc61f 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,24 @@ "name": "ficdown.js", "version": "0.9.1", "description": "A parser and player for Interactive Fiction written in Ficdown", + "scripts": { + "build": "rm -rf ./build && tsc", + "pack": "browserify build/unpacked/main.js --standalone Ficdown > ./build/ficdown.js", + "minify": "uglifyjs build/ficdown.js > build/ficdown.min.js", + "make": "npm run build && npm run pack && npm run minify" + }, "dependencies": { + "core-js": "^3.0.1", "jquery": "^3.4.0", "markdown-it": "^8.4.2" }, "devDependencies": { + "@types/core-js": "^2.5.0", "@types/jquery": "^3.3.29", "@types/markdown-it": "0.0.7", - "typescript": "^3.4.5" + "@types/node": "^11.13.8", + "browserify": "^16.2.3", + "typescript": "^3.4.5", + "uglify-js": "^3.5.9" } } diff --git a/src/Model/AltText.ts b/src/Model/AltText.ts index 16283d6..224e1b5 100644 --- a/src/Model/AltText.ts +++ b/src/Model/AltText.ts @@ -1,4 +1,4 @@ export type AltText = { - passed: string, - failed: string, + passed?: string, + failed?: string, } diff --git a/src/Model/ParseError.ts b/src/Model/ParseError.ts index 571ba4b..a782805 100644 --- a/src/Model/ParseError.ts +++ b/src/Model/ParseError.ts @@ -1,5 +1,7 @@ export class ParseError extends Error { constructor(message: string, public lineNumber: number) { - super(message); + super(lineNumber === 0 + ? message + : `[${ lineNumber }]: ${ message }`); } } diff --git a/src/Model/PlayerOptions.ts b/src/Model/PlayerOptions.ts index 08c03f2..958596e 100644 --- a/src/Model/PlayerOptions.ts +++ b/src/Model/PlayerOptions.ts @@ -1,6 +1,8 @@ export type PlayerOptions = { - source: string, - id: string, - startText?: string, - endText?: string, + source: string, // ficdown story source + id: string, // id of div to inject game into + scroll?: boolean, // continuous scroll mode + html?: boolean, // allow html in story source + startText?: string, // custom link text to start game + endMarkdown?: string, // custom markdown when game ends } diff --git a/src/Parser.ts b/src/Parser.ts index 1a83f29..aea7010 100644 --- a/src/Parser.ts +++ b/src/Parser.ts @@ -58,7 +58,7 @@ export class Parser { const story: Story = { name: storyName.text, - description: Util.trimText(storyBlock.lines.join("\n")), + description: Util.trimText(storyBlock.lines.map(l => l.text).join("\n")), firstScene: storyHref.target, scenes: {}, actions: {}, @@ -102,7 +102,7 @@ export class Parser { name, key, conditions, - description: Util.trimText(block.lines.join("\n")), + description: Util.trimText(block.lines.map(l => l.text).join("\n")), lineNumber: block.lineNumber, }; } @@ -110,7 +110,7 @@ export class Parser { private static blockToAction(block: Block): Action { return { state: Util.normalize(block.name), - description: Util.trimText(block.lines.join("\n")), + description: Util.trimText(block.lines.map(l => l.text).join("\n")), lineNumber: block.lineNumber, }; } diff --git a/src/Player.ts b/src/Player.ts index 8b72b98..80babc6 100644 --- a/src/Player.ts +++ b/src/Player.ts @@ -1,24 +1,37 @@ import { + Action, BoolHash, PlayerOptions, Scene, Story, } from './Model'; import { Parser } from './Parser'; +import { Util } from './Util'; import * as Markdown from 'markdown-it'; import * as $ from 'jquery'; export class Player { - private static converter = new Markdown(); + private converter: Markdown; private container: JQuery; private playerState: BoolHash = {}; private visitedScenes: BoolHash = {}; private currentScene?: Scene; private moveCounter: number = 0; private story: Story; + private startText: string; + private endMarkdown: string; constructor(private options: PlayerOptions) { + this.converter = new Markdown({ + html: options.html, + }); this.story = Parser.parse(options.source); + this.startText = options.startText + ? options.startText + : 'Click to start...'; + this.endMarkdown = options.endMarkdown + ? options.endMarkdown + : "## The End\n\nYou have reached the end of this story. [Click here](restart()) to start over."; let i = 0; for(let [key, scenes] of Object.entries(this.story.scenes)) { for(let scene of scenes) scene.id = `#s${ ++i }`; @@ -27,4 +40,147 @@ export class Player { this.container.addClass('ficdown').data('player', this); } + public play(): void { + this.container.html( + this.converter.render(`# ${ this.story.name }\n\n${ this.story.description }\n\n[${ this.startText }](/${ this.story.firstScene })`)); + this.wireLinks(); + } + + public handleHref(href: string): false { + const match = Util.matchHref(href); + let matchedScene: Scene | undefined = undefined; + const actions: Action[] = []; + if(match && match.toggles) { + const toggles = match.toggles.split('+'); + for(let toggle of toggles) { + if(this.story.actions[toggle]) { + const action: Action = { ...this.story.actions[toggle] }; + action.description = this.resolveDescription(action.description); + actions.push(action); + } + this.playerState[toggle] = true; + } + } + if(match && match.target) { + if(this.story.scenes[match.target]) { + for(let scene of this.story.scenes[match.target]) { + if(Util.conditionsMet(this.playerState, scene.conditions)) { + if(!matchedScene + || !scene.conditions + || !matchedScene.conditions + || Object.keys(scene.conditions).length > Object.keys(matchedScene.conditions).length) { + matchedScene = scene; + } + } + } + } + } + if(matchedScene) { + this.currentScene = matchedScene; + } + const newScene: Scene = { ...this.currentScene! }; + newScene.description = this.resolveDescription(newScene.description); + this.disableOldLinks(); + let newContent = newScene.name ? `## ${ newScene.name }\n\n` : ''; + for(let action of actions) { + newContent += `${ action.description }\n\n`; + } + newContent += newScene.description; + const newHtml = this.processHtml(newScene.id!, this.converter.render(newContent)); + this.visitedScenes[newScene.id!] = true; + if(this.options.scroll) { + const scrollId = `move-${ this.moveCounter++ }`; + this.container.append($('').attr('id', scrollId)); + this.container.append(newHtml); + $([document.documentElement, document.body]).animate({ + scrollTop: $(`#${ scrollId }`).offset()!.top, + }, 1000); + } else { + this.container.html(newHtml); + window.scrollTo(0, 0); + } + this.wireLinks(); + this.checkGameOver(); + return false; + } + + private resolveDescription(description: string): string { + for(let anchor of Util.matchAnchors(description)) { + const href = Util.matchHref(anchor.href); + if(href && href.conditions) { + const conditions = Util.toBoolHash(href.conditions.split('&')); + const satisfied = Util.conditionsMet(this.playerState, conditions); + const alts = Util.splitAltText(anchor.text); + let replace = satisfied ? alts.passed : alts.failed; + if(!replace) replace = ''; + replace = replace.replace(Util.regexLib.escapeChar(), ''); + if(replace === '' || (!href.toggles && !href.target)) { + description = description.replace(anchor.anchor, replace); + } else { + let newHref = href.target ? `/${ href.target }` : ''; + newHref += href.toggles ? `#${ href.toggles }` : ''; + const newAnchor = `[${ replace }](${ newHref })`; + description = description.replace(anchor.anchor, newAnchor); + } + } + } + description = description.replace(Util.regexLib.emptyListItem(), ''); + return description; + } + + private disableOldLinks(): void { + this.container.find('a:not(.external)').each((i, el) => { + const $this = $(el); + $this.addClass('disabled'); + $this.unbind('click'); + $this.click(() => false); + }); + } + + private processHtml(sceneId: string, html: string): string { + const temp = $('
').append($.parseHTML(html)); + if(this.visitedScenes[sceneId]) { + temp.find('blockquote').remove(); + } else { + temp.find('blockquote').each((i, el) => { + const $this = $(el); + $this.replaceWith($this.html()); + }); + } + return temp.html(); + } + + private wireLinks(): void { + this.container.find('a:not(.disabled):not(.external)').each((i, el) => { + const $this = $(el); + const href = $this.attr('href'); + if(href) { + if(!href.match(/^https?:\/\//)) { + $this.click(() => { + $this.addClass('chosen'); + const player: Player = $this.parents('.ficdown').data('player'); + return player.handleHref(href); + }); + } else { + $this.addClass('external'); + } + } + }); + } + + private checkGameOver(): void { + if(this.container.find('a:not(.disabled):not(.external)').length === 0) { + this.container.append(this.converter.render(this.endMarkdown)); + const restartAnchor = this.container.find("a[href='restart()']"); + const options = this.options; + restartAnchor.click(() => { + const game = $(`#${ options.id }`); + const player = new Player(options); + game.empty(); + game.data('player', player); + player.play(); + return false; + }); + } + } } diff --git a/src/Util.ts b/src/Util.ts index 1f910f1..9f3542f 100644 --- a/src/Util.ts +++ b/src/Util.ts @@ -1,18 +1,18 @@ import { Anchor, Href, BoolHash, AltText } from './Model'; export class Util { - private static regexLib: { [name: string]: RegExp } = { - anchors: /(\[((?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[\])*\])*\])*\])*\])*\])*)\]\([ ]*((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\(\))*\))*\))*\))*\))*\))*)[ ]*((['"])(.*?)\5[ ]*)?\))/gm, + public static regexLib: { [name: string]: () => RegExp } = { + anchors: () => /(\[((?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[(?:[^\[\]]+|\[\])*\])*\])*\])*\])*\])*)\]\([ ]*((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\((?:[^()\s]+|\(\))*\))*\))*\))*\))*\))*)[ ]*((['"])(.*?)\5[ ]*)?\))/gm, - href: /^(?:\/([a-zA-Z](?:-?[a-zA-Z0-9])*))?(?:\?((?:!?[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:&!?[a-zA-Z](?:-?[a-zA-Z0-9])*)*)?)?(?:#((?:[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:\+[a-zA-Z](?:-?[a-zA-Z0-9])*)*))?$/, + href: () => /^(?:\/([a-zA-Z](?:-?[a-zA-Z0-9])*))?(?:\?((?:!?[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:&!?[a-zA-Z](?:-?[a-zA-Z0-9])*)*)?)?(?:#((?:[a-zA-Z](?:-?[a-zA-Z0-9])*)(?:\+[a-zA-Z](?:-?[a-zA-Z0-9])*)*))?$/, - trim: /^\s+|\s+$/g, + trim: () => /^\s+|\s+$/g, - altText: /^((?:[^|\\]|\\.)*)(?:\|((?:[^|\\]|\\.)+))?$/, + altText: () => /^((?:[^|\\]|\\.)*)(?:\|((?:[^|\\]|\\.)+))?$/, - escapeChar: /\\(?=[^\\])/g, + escapeChar: () => /\\(?=[^\\])/g, - emptyListItem: /^[ ]*-\s*([\r\n]+|$)/gm, + emptyListItem: () => /^[ ]*-\s*([\r\n]+|$)/gm, }; private static matchToAnchor(match: RegExpExecArray): Anchor { @@ -30,21 +30,22 @@ export class Util { } public static matchAnchor(text: string): Anchor | undefined { - const match = this.regexLib.anchors.exec(text); + const match = this.regexLib.anchors().exec(text); if(match) return this.matchToAnchor(match); } public static matchAnchors(text: string): Anchor[] { let match: RegExpExecArray | null; const anchors: Anchor[] = []; - while(match = this.regexLib.anchors.exec(text)) { + const regex = this.regexLib.anchors(); + while((match = regex.exec(text)) !== null) { anchors.push(this.matchToAnchor(match)); } return anchors; } public static matchHref(text: string): Href | undefined { - const match = this.regexLib.href.exec(text); + const match = this.regexLib.href().exec(text); if(match) { return { target: match[1], @@ -55,7 +56,7 @@ export class Util { } public static trimText(text: string): string { - return text.replace(this.regexLib.trim, ''); + return text.replace(this.regexLib.trim(), ''); } public static normalize(text: string): string { @@ -76,7 +77,8 @@ export class Util { } } - public static conditionsMet(state: BoolHash, conditions: BoolHash): boolean { + public static conditionsMet(state: BoolHash, conditions?: BoolHash): boolean { + if(!conditions) return true; for(let [cond, val] of Object.entries(conditions)) { if((val && !state[cond]) || (!val && state[cond])) { return false; @@ -85,13 +87,14 @@ export class Util { return true; } - public static splitAltText(text: string): AltText | undefined { - const match = this.regexLib.altText.exec(text); + public static splitAltText(text: string): AltText { + const match = this.regexLib.altText().exec(text); if(match) { return { - passed: match[0], - failed: match[1], + passed: match[1], + failed: match[2], }; } + return {}; } } diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..96e352d --- /dev/null +++ b/src/main.ts @@ -0,0 +1,2 @@ +require('core-js'); +module.exports = require('./Player.js').Player; diff --git a/src/player.coffee b/src/player.coffee deleted file mode 100644 index 3bc61c8..0000000 --- a/src/player.coffee +++ /dev/null @@ -1,117 +0,0 @@ -class Player - constructor: ( - @story, - @id, - @startText = "Click to start...", - @endText = '## The End\n\nYou have reached the end of this story. Click here to start over.' - ) -> - @converter = new Markdown.Converter() - @container = $("##{@id}") - @container.addClass('ficdown').data 'player', this - @playerState = {} - @visitedScenes = {} - @currentScene = null - @moveCounter = 0 - i = 0 - scene.id = "s#{++i}" for scene in scenes for key, scenes of @story.scenes - - play: -> - @container.html @converter.makeHtml "##{@story.name}\n\n#{@story.description}\n\n[#{@startText}](/#{@story.firstScene})" - @wireLinks() - - wireLinks: -> - @container.find('a:not(.disabled):not(.external)').each (i) -> - $this = $(this) - if !$this.attr('href').match(/^https?:\/\//)? - $this.click -> - $this.addClass 'chosen' - player = $this.parents('.ficdown').data 'player' - player.handleHref $this.attr 'href' - return false - else - $this.addClass 'external' - - resolveDescription: (description) -> - for anchor in matchAnchors description - href = matchHref anchor.href - if href.conditions? - conditions = toBoolHash href.conditions.split '&' - satisfied = conditionsMet @playerState, conditions - alts = splitAltText anchor.text - replace = if satisfied then alts.passed else alts.failed - if !replace? - replace = '' - replace = replace.replace regexLib.escapeChar, '' - if replace == '' or (!href.toggles? and !href.target?) - description = description.replace anchor.anchor, replace - else - newAnchor = "[#{replace}](#{ if href.target? then "/#{href.target}" else "" }#{ if href.toggles? then "##{href.toggles}" else "" })" - description = description.replace anchor.anchor, newAnchor - description = description.replace regexLib.emptyListItem, '' - return description - - disableOldLinks: -> - @container.find('a:not(.external)').each (i) -> - $this = $(this) - $this.addClass 'disabled' - $this.unbind 'click' - $this.click -> return false - - processHtml: (sceneid, html) -> - temp = $('
').append $.parseHTML html - if @visitedScenes[sceneid] - temp.find('blockquote').remove() - else - temp.find('blockquote').each (i) -> - $this = $(this) - $this.replaceWith $this.html() - return temp.html() - - checkGameOver: -> - if @container.find('a:not(.disabled):not(.external)').length == 0 - @container.append @converter.makeHtml @endText - $('#restart').data('info', [@id, @story]).click -> - info = $(this).data 'info' - $("##{info[0]}").empty() - player = new Player info[1], info[0] - $("##{info[0]}").data 'player', player - player.play() - return false - - handleHref: (href) -> - match = matchHref href - matchedScene = null - actions = [] - if match?.toggles? - toggles = match.toggles.split '+' - for toggle in toggles - if @story.actions[toggle]? - action = $.extend {}, @story.actions[toggle] - action.description = @resolveDescription action.description - actions.push action - @playerState[toggle] = true - if match?.target? - if @story.scenes[match.target]? - for scene in @story.scenes[match.target] - if conditionsMet @playerState, scene.conditions - if !matchedScene? or !scene.conditions? or !matchedScene.conditions? or Object.keys(scene.conditions).length > Object.keys(matchedScene.conditions).length - matchedScene = scene - if matchedScene? - @currentScene = matchedScene - newScene = $.extend {}, @currentScene - newScene.description = @resolveDescription newScene.description - @disableOldLinks() - newContent = "" - newContent += "###{newScene.name}\n\n" if newScene.name? - newContent += "#{action.description}\n\n" for action in actions - newContent += newScene.description - newHtml = @processHtml newScene.id, @converter.makeHtml newContent - @visitedScenes[newScene.id] = true - scrollId = "move-#{@moveCounter++}" - @container.append $('').attr 'id', scrollId - @container.append newHtml - @wireLinks() - @checkGameOver() - @container.parent('.container').animate - scrollTop: $("##{scrollId}").offset().top - @container.offset().top - , 1000 diff --git a/src/tests.html b/src/tests.html deleted file mode 100644 index 2f49396..0000000 --- a/src/tests.html +++ /dev/null @@ -1,52 +0,0 @@ - - - -Ficdown.js Tests - - - -
- -
-
-
-  
-
- - - - diff --git a/test.html b/test.html new file mode 100644 index 0000000..a4c568c --- /dev/null +++ b/test.html @@ -0,0 +1,82 @@ + + + + + Ficdown.js Test + + + +
+ + + + diff --git a/tsconfig.json b/tsconfig.json index 1c9bb3f..df28dd6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,12 @@ { "compilerOptions": { - "lib": [ "es2017" ], - "target": "es6", + "target": "es5", + "lib": ["es2017", "dom"], "module": "commonjs", "moduleResolution": "node", - "outDir": "./build", - "declaration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "strict": true, - "sourceMap": true + "baseUrl": "./src", + "outDir": "./build/unpacked", + "allowJs": true, + "strict": true } } From 0611c9ced54b271cd74433c3b0ebebb065685be6 Mon Sep 17 00:00:00 2001 From: Rudis Muiznieks Date: Sun, 28 Apr 2019 17:52:12 -0500 Subject: [PATCH 3/3] updated docs for new typescript changes --- README.md | 66 +++++++-------- src/example/index.html | 33 -------- src/example/player.styl | 39 --------- src/example/science.png | Bin 152708 -> 0 bytes src/example/story.md | 178 ---------------------------------------- src/example/testing.md | 61 -------------- test.html | 11 +++ 7 files changed, 41 insertions(+), 347 deletions(-) delete mode 100644 src/example/index.html delete mode 100644 src/example/player.styl delete mode 100644 src/example/science.png delete mode 100644 src/example/story.md delete mode 100644 src/example/testing.md diff --git a/README.md b/README.md index 9f710a0..85e28b5 100644 --- a/README.md +++ b/README.md @@ -4,45 +4,39 @@ Ficdown is a system for building interactive fiction using MarkDown syntax, and ## Dependencies -Ficdown.js uses [jQuery](http://jquery.com) for DOM manipulation and [PageDown](https://code.google.com/p/pagedown/) to convert MarkDown into HTML. +The generated ficdown.js and ficdown.min.js include all dependencies ([JQuery](https://jquery.com) and [markdown-it](https://github.com/markdown-it/markdown-it)), so no additional scripts are required to play games. + +## Bulding + +You can compile, pack, and minify with these commands: + +``` +> npm install +> npm run build +> npm run pack +> npm run minify +``` + +You can combine all three `build`, `pack`, and `minify` steps with this command: + +``` +> npm run make +``` ## Usage -You can obtain *ficdown.js* or *ficdown.min.js* from the latest version on the [releases](https://github.com/rudism/Ficdown.js/releases) page. Assuming you've uploaded it to your web server along with a Ficdown story file named *story.md*, your HTML document would look something like this: +You can obtain *ficdown.js* or *ficdown.min.js* from the latest version on the [releases](https://github.com/rudism/Ficdown.js/releases) page. See the example [test.html](https://github.com/rudism/Ficdown.js/blob/master/test.html) file for basic usage and styling. The example includes the story content in a hidden text area so it can run locally in a browser. -```html - - - - My Ficdown Story - - - -
- - - - - - - - - - - - +```javascript +var player = new Ficdown(playerOptions); +player.play(); ``` -You will probably want to do some styling to make the story look better. For an example stylesheet, see the example included in the Ficdown.js repository at [/src/example/player.styl](/src/example/player.styl). +Your `playerOptions` should be an object with the following properties: + +- `source`: Your story's ficdown code. Either store it right in the html document, or make an XHR to pull the story content in from an external file, and put its content here. +- `id`: The id of a div on the page to inject the game into. For example if your html is `
` then you would pass `game` here. +- `scroll` (optional): Set this to `true` if you want the player's full game history to remain on the screen and automatically scroll the page down whenever a new scene is added to the bottom. By default each scene will replace the previous one and the page will be scrolled to the top. +- `html` (optional): Set this to true if your ficdown file contains raw html that you want rendered. By default html will not be rendered. +- `startText` (optional): Set this to override the link text that begins the game. +- `endMarkdown` (optional): Set this to override the "game over" content that is displayed when the player reaches a scene with no more links to follow. Include an anchor with the href set to `restart()` if you want a link that will start the story over from the beginning. diff --git a/src/example/index.html b/src/example/index.html deleted file mode 100644 index 3650696..0000000 --- a/src/example/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -The Robot King - - - - - - - - -
-
-
-
- - - - - - - diff --git a/src/example/player.styl b/src/example/player.styl deleted file mode 100644 index e70d6cb..0000000 --- a/src/example/player.styl +++ /dev/null @@ -1,39 +0,0 @@ -html, body - height 100% -body - font-family 'Maven Pro', sans-serif - background url('science.png') fixed repeat -html, body, h1, h2, p, ul, div - margin 0 - padding 0 -ul - list-style-type circle - margin-left 1.33em -#container - background-color rgba(255,255,255,0.95) - max-width 800px - margin 0 auto - height 100% - overflow-y scroll - overflow-x hidden -#main - position relative - padding 5% - p, h1, h2, ul - margin-bottom 1em -a - color #c00 - text-decoration none - &.disabled - color #999 - &.chosen - color #000 - &:hover - color #000 - &:hover - text-decoration underline - color #f00 - &.disabled - text-decoration none - color #999 - cursor not-allowed diff --git a/src/example/science.png b/src/example/science.png deleted file mode 100644 index 891dcfee86b22d6082214f42ce93d283cf5b64ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152708 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%0D4vKhQn0|185#8n=Iw6^O$l=D2`AqcaBm4+} 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 You wake up and emit a great robot yawn as you stretch your metallic arms. Today is the big day! You have to start your new job working for the Robot King at the Robot Palace! - -You're in your cave and you can see [a peg by the door where you usually hang your raincoat|your raincoat hanging by the door](?raincoat). - -Your cave only has one tiny window, and through it you can see [the sun shining through the clouds|that it's raining heavily outside](?stopped-raining). - -**What do you want to do?** - -- [Go outside and start walking to the palace.](/outside) -- [|Wait for it to stop raining.](?stopped-raining#stopped-raining) -- [|Put on your raincoat.](?raincoat#raincoat) - -### Raincoat - -You take your raincoat and put it on. It fits perfectly! - -### Stopped Raining - -It feels like hours, but it finally stops raining. You hope you won't be late for your new job! - -## Outside - -> You step through the door and feel the water flowing over your metal body. Brrr! That's cold! You start to think that maybe getting your raincoat would be a good idea. This is just the kind of rain that might turn you into a rusty robot statue if you stay in it too long. - -You're standing on your front porch in the pouring rain. You need to get to the palace for your new job, but you don't want to rust! - -**What will you do?** - -- [Continue walking to the palace.](/rusted) -- [Go back into your cave.](/robot-cave) - -## [Outside](?stopped-raining) - -You step through the door and feel the early afternoon sun warming your metal body. It feels good, but you were supposed to start your new job early in the morning! - -You run as fast as you can all the way to the Robot Palace, but it's already too late. - -"You were supposed to be here first thing in the morning," says the palace guard. "We can't have sleepy-head robots working at the Robot Palace! Try finding a different job instead." - -**You've been fired!** - -## Rusted! - -You start walking toward the Robot Palace in the rain. Who needs a raincoat anyway? As you move down the path, rust starts forming on your legs and knees so you have to walk slower. Eventually the rust gets so bad that you can't move anymore at all! - -As your whole body rusts over, you wonder what you could have been thinking. Only a crazy robot would ever go out into the rain without a raincoat! - -You will have a long time to think about your mistake while you wait for another robot to come and help scrape off all the rust so you can move again. Since you never made it to the palace for your new job, you'll probably be fired. - -**You have turned into a rusty robot statue!** - -## [Outside](?raincoat) - -You head out the door and into the rain. It's a good thing you put on your raincoat, because it's just the kind of rain that would probably turn you into a rusty robot statue if you stayed in it for too long. - -You follow the road by your house all the way through town until you reach the door to the Robot Palace. - -The palace guard looks you up and down. "What do you want?" he asks. - -**What will you tell him?** - -- ["I'm the new janitor-bot!"](/palace-gate#new-job) -- ["I'd like a tour of the palace!"](/palace-gate) - -## Palace Gate - -The robot guard looks at you and [nods|frowns](?new-job). "[Oh yeah, they told me to expect you. You're supposed to be starting today right?|We don't do tours on weekdays. Hey, aren't you the new janitor-bot who's starting today?](?new-job)" - -**How will you answer?** - -- ["Yup!"](/palace-entrance) -- ["Nope!"](/back-to-bed) - -## Back to Bed - -The robot guard looks at you with a confused expression on his face, then stops paying attention to you. - -I guess you decided that you don't want a new job today after all. You turn around and walk all the way back home, where you hop back into bed for a quick nap. - -Without a job, you fail to earn any money and you can no longer afford fuel to power yourself. - -**You run out of fuel and shut down forever!** - -## Palace Entrance - -> The robot guard nods and ushers you into the palace through the large front doors. - -> "You'll want to report to the Master Janitor Robot downstairs. He'll give you your uniform and get you started," the guard says, then quickly leaves and shuts the doors behind him. - -The palace entrance is one of the biggest rooms you've ever seen! There are statues of knight-robots and pictures of all of the old Robot Kings going back for centuries lining the walls. The picture closest to you is a picture of the current Robot King. He looks a lot like you! - -There is a grand double staircase leading up to the throne room, a hallway straight ahead that leads to the living quarters, and a door to your left that says "Stairs." - -**Where do you want to go?** - -- [Go upstairs to the throne room.](#throne-room) -- [Go through the hall to the living quarters.](/living-quarters) -- [Go downstairs to see the Master Janitor Robot.](/palace-basement) - -### Throne Room - -You start to ascend the stairs, but then think better of it. You wouldn't know what to do if you ran into the Robot King up there anyway! - -## Living Quarters - -You walk into the hall that leads to the living quarters, and find a gate blocking your way. There is a robot scanner installed on the gate. I guess it only opens for robots who live or work here. Maybe the Master Janitor Robot will have a way for you to get through. - -[Go back to the palace entrance.](/palace-entrance#tried-gate) - -## Palace Basement - -> You walk down three flights of stairs until you reach the basement. The staircase is dark, but the basement is even darker. It's a little scary! You hope you can get the information you need from the Master Janitor Robot and get out of here as quickly as possible. - -You're standing in the basement where new employees can pick up their uniforms and learn what their jobs are for the day. - -[The Master Janitor Robot is pacing back and forth here, muttering to himself.|There is a funny looking robot here pacing back and forth, muttering to himself. That must be the Master Janitor Robot. When he notices you, he stops muttering and stares at you with crazy eyes.](?talked-to-master) - -**What will you do?** - -- [Go back upstairs.](/palace-entrance) -- [Ask the Master Janitor Robot what he's muttering about.](#talked-to-master+muttering) -- [|Ask the Master Janitor Robot about your uniform.](?uniform#talked-to-master+uniform) -- [Ask the Master Janitor Robot about the gate upstairs.](?tried-gate#talked-to-master+about-the-gate) -- [Ask the Master Janitor Robot about your job.](?uniform#started-job) - -### Muttering - -"Muttering?" says the Master Janitor Robot. "Was I muttering? I hadn't noticed." - -The Master Janitor Robot pauses thoughtfully for a moment, then resumes muttering. - -### Uniform - -The Master Janitor Robot's eyes light up a pleasant shade of blue. "Ahh, you must be the new janitor-bot starting today!" he says. - -He walks to a box in the corner and pulls out a blue janitor's uniform, then hands it to you. You put it on. - -### About the Gate - -"Ahh, yes, the gate," says the Master Janitor Robot. "Quite a clever contraption. There's a scanner attached that looks for a special device that's sewn into the [uniform I gave you|uniform that employees here wear](?uniform). [As I said, you'll want to head up there now to start cleaning room 13.](?started-job)" - -### Started Job - -["Like I said before, your|"Ready to get going?" says the Master Janitor Robot. He continues before you have a chance to answer. "Good, good. Your](?started-job) first job will be to clean room 13 in the living quarters. That's where the Robot King keeps all of his spare robes and crowns. There's a janitor's closet right next to that room where you can get a mop to clean the floors, and a duster to dust off the crowns." - -The Master Janitor Robot scratches his chin for a moment, then resumes pacing back and forth and muttering to himself. - -## [Living Quarters](?uniform) - -You head into the hallway that leads to the living quarters and come to a large gate. A scanner attached to the gate lights up and beeps a few times. After a moment, you hear a click and a soft hiss as the gate opens to let you pass. Once you walk through, the gate hisses and clicks shut behind you. - -You notice with some alarm that there's no scanner on the inside of the gate. You don't know how to get back out! - -[Continue...](/living-quarters-2) - -## [Living Quarters 2]("Living Quarters") - -That's when you realize that you never asked the Master Janitor Bot what your job here was. You just took your uniform and left! - -**You have failed to perform your new job because you never found out what it was.** - -## [Living Quarters 2](?started-job "Living Quarters") - -That's no problem though, because you already know what your job is. You continue down the hall, looking at and passing all of the doors until you come to the one marked with a "13." Right next to it is another door labeled "Janitor's Closet." - -You open the closet and grab the mop and duster. You're so excited! Your first day as a janitor working for a Robot King that looks just like you, and you are about to enter a room containing all of his spare robes and crowns. What fun! - -**You have reached the end of the intro to The Robot King.** diff --git a/src/example/testing.md b/src/example/testing.md deleted file mode 100644 index fd3706f..0000000 --- a/src/example/testing.md +++ /dev/null @@ -1,61 +0,0 @@ -# [Cloak of Darkness](/foyer) - -A basic IF demonstration. - -Hurrying through the rainswept November night, you're glad to see the bright lights of the Opera House. It's surprising that there aren't more people about but, hey, what do you expect in a cheap demo game...? - -## [Foyer]("Foyer of the Opera House") - -[You](#examined-self) are standing in a spacious hall, splendidly decorated in red and gold, with glittering chandeliers overhead. The entrance from the street is to the [north](#tried-to-leave), and there are doorways [south](/bar) and [west](/cloakroom). - -### Tried to Leave - -[You've](#examined-self) only just arrived, and besides, the weather outside seems to be getting worse. - -### Examined Self - -[You aren't carrying anything.|You are wearing a handsome cloak, of velvet trimmed with satin, and slightly splattered with raindrops. Its blackness is so deep that it almost seems to suck light from the room.](?lost-cloak) - -## Cloakroom - -The walls of this small room were clearly once lined with hooks, though now only one remains. The exit is a door to the [east](/foyer). - -[Your cloak is on the floor here.](?dropped-cloak) -[Your cloak is hanging on the hook.](?hung-cloak) - -- [Examine the hook.](#examined-hook) -- [Hang your cloak on the hook.](?examined-self&!lost-cloak#lost-cloak+hung-cloak) -- [Drop your cloak on the floor.](?examined-self&!lost-cloak#lost-cloak+dropped-cloak) - -### Examined Hook - -It's just a small brass hook, [with your cloak hanging on it|screwed to the wall](?hung-cloak). - -## [Bar]("Foyer Bar") - -You walk to the bar, but it's so dark here you can't really make anything out. The foyer is back to the [north](/foyer). - -- [Feel around for a light switch.](?!scuffled1#scuffled1+not-in-the-dark) -- [Sit on a bar stool.](?!scuffled2#scuffled2+not-in-the-dark) - -### Not in the Dark - -In the dark? You could easily disturb something. - -## [Bar](?lost-cloak "Foyer Bar") - -The bar, much rougher than you'd have guessed after the opulence of the foyer to the north, is completely empty. There seems to be some sort of message scrawled in the sawdust on the floor. The foyer is back to the [north](/foyer). - -[Examine the message.](/message) - -## [Message]("Foyer Bar") - -The message, neatly marked in the sawdust, reads... - -**You have won!** - -## [Message](?scuffled1&scuffled2 "Foyer Bar") - -The message has been carelessly trampled, making it difficult to read. You can just distinguish the words... - -**You have lost.** diff --git a/test.html b/test.html index a4c568c..faf3100 100644 --- a/test.html +++ b/test.html @@ -3,6 +3,17 @@ Ficdown.js Test +