diff --git a/README.md b/README.md
index 565553f..47e1dfe 100644
--- a/README.md
+++ b/README.md
@@ -14,44 +14,4 @@ git clone https://github.com/rtfeldman/elm-0.19-workshop.git
cd elm-workshop
```
-3. Start the server
-
-We'll be running a local server for our Elm UI to use. Let's get it set up.
-
-```shell
-cd server
-npm install
-npm start
-```
-
-If the server started up successfully, you should see
-`> moleculer-runner services` at the end of your terminal.
-
-We're going to leave this server running and not touch it again for the duration
-of the workshop, so **don't close it** until the workshop is over!
-
-## Build the Elm UI
-
-Leave the existing terminal running, and open a **second** terminal.
-
-In the new termnal, `cd` into the `elm-workshop/server/` directory again.
-
-Then run this to build the Elm code for the first time:
-
-```shell
-elm make src/Main.elm --output=../server/public/elm.js
-```
-
-Now open [http://localhost:3000](http://localhost:3000)
-in your browser. You should see this in it:
-
-
-
-If things aren’t working, the instructor will be happy to help!
-
-## Links
-
-* [Elm in Action](https://www.manning.com/books/elm-in-action?a_aid=elm_in_action&a_bid=b15edc5c), a book by [Richard Feldman](https://twitter.com/rtfeldman), creator of this workshop
-* [Official Elm Guide](https://guide.elm-lang.org/) by [Evan Czaplicki](https://twitter.com/czaplic), creator of Elm
-* [Elm Slack](http://elmlang.herokuapp.com/) - amazingly helpful chat community. People in [the `#beginners` channel](https://elmlang.slack.com/messages/C192T0Q1E/) are happy to answer questions!
-* [Elm Discourse](https://discourse.elm-lang.org/) - for longer-form discussions.
+3. Continue with either the [`intro`](https://github.com/rtfeldman/elm-0.19-workshop/blob/master/intro/README.md) or [`advanced`](https://github.com/rtfeldman/elm-0.19-workshop/blob/master/advanced/README.md) instructions, depending on which workshop you're doing!
diff --git a/advanced/README.md b/advanced/README.md
new file mode 100644
index 0000000..34a002d
--- /dev/null
+++ b/advanced/README.md
@@ -0,0 +1,51 @@
+# Advanced Elm Workshop
+
+Getting Started
+===============
+
+If you haven't already, follow the [Getting Started instructions](https://github.com/rtfeldman/elm-0.19-workshop/blob/master/intro/README.md
+) at the root of this repository, then continue here!
+
+## Start the server
+
+We'll be running a local server for our Elm UI to use. Let's get it set up.
+
+```shell
+cd advanced/server
+npm install
+npm start
+```
+
+If the server started up successfully, you should see
+`> moleculer-runner services` at the end of your terminal.
+
+We're going to leave this server running and not touch it again for the duration
+of the workshop, so **don't close it** until the workshop is over!
+
+## Build the Elm UI
+
+Leave the existing terminal running, and open a **second** terminal.
+
+In the new termnal, `cd` into the `elm-workshop/server/` directory again.
+
+Then run this to build the Elm code for the first time:
+
+```shell
+elm make src/Main.elm --output=../server/public/elm.js
+```
+
+## Verify your setup
+
+Open [http://localhost:3000](http://localhost:3000)
+in your browser. You should see this in it:
+
+
+
+If things aren’t working, the instructor will be happy to help!
+
+## Links
+
+* [Elm in Action](https://www.manning.com/books/elm-in-action?a_aid=elm_in_action&a_bid=b15edc5c), a book by [Richard Feldman](https://twitter.com/rtfeldman), creator of this workshop
+* [Official Elm Guide](https://guide.elm-lang.org/) by [Evan Czaplicki](https://twitter.com/czaplic), creator of Elm
+* [Elm Slack](http://elmlang.herokuapp.com/) - amazingly helpful chat community. People in [the `#beginners` channel](https://elmlang.slack.com/messages/C192T0Q1E/) are happy to answer questions!
+* [Elm Discourse](https://discourse.elm-lang.org/) - for longer-form discussions.
diff --git a/advanced/part1/index.html b/advanced/part1/index.html
deleted file mode 100644
index 0b1138d..0000000
--- a/advanced/part1/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
- Conduit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/server/.gitignore b/advanced/server/.gitignore
similarity index 100%
rename from server/.gitignore
rename to advanced/server/.gitignore
diff --git a/server/LICENSE b/advanced/server/LICENSE
similarity index 100%
rename from server/LICENSE
rename to advanced/server/LICENSE
diff --git a/server/data/articles.db b/advanced/server/data/articles.db
similarity index 100%
rename from server/data/articles.db
rename to advanced/server/data/articles.db
diff --git a/server/data/comments.db b/advanced/server/data/comments.db
similarity index 100%
rename from server/data/comments.db
rename to advanced/server/data/comments.db
diff --git a/server/data/favorites.db b/advanced/server/data/favorites.db
similarity index 100%
rename from server/data/favorites.db
rename to advanced/server/data/favorites.db
diff --git a/server/data/follows.db b/advanced/server/data/follows.db
similarity index 100%
rename from server/data/follows.db
rename to advanced/server/data/follows.db
diff --git a/server/data/users.db b/advanced/server/data/users.db
similarity index 100%
rename from server/data/users.db
rename to advanced/server/data/users.db
index d4ac315..deecd23 100644
--- a/server/data/users.db
+++ b/advanced/server/data/users.db
@@ -1,3 +1,3 @@
+{"username":"rtfeldman","email":"richard.t.feldman@gmail.com","password":"$2a$10$4WPM2GSk3pH8COW1UVAVEeu2OC7/CrCzjR91PcPZIw/Ycdvyg3Aqi","bio":"","image":null,"createdAt":{"$$date":1533459071196},"_id":"7r8Pdo5csPGElToj"}
{"username":"SamSample","email":"sam@sample.com","password":"samsample","bio":"I'm the sample user for the workshop. Hi!","image":"https://user-images.githubusercontent.com/1094080/39663282-6459c64e-503e-11e8-8da8-a2af2c81d052.png","createdAt":{"$$date":1525523183044},"_id":"Z1YiwpVIz2GQQ13Q","updatedAt":{"$$date":1525523378471}}
{"username":"wefjbsfdjkhdgrskjhsdfgjhb","email":"sdfgjhsgjhbdfgkjhsdf@sfgdhjfjhgdfgf.com","password":"$2a$10$gnFdddybmitDP.yKM3OjfubgZ1O3geK9N8LymFV4mZYaSGe9WYPby","bio":"","image":null,"createdAt":{"$$date":1525546056406},"_id":"gsZdyqSGbQscoIU6"}
-{"username":"rtfeldman","email":"richard.t.feldman@gmail.com","password":"$2a$10$4WPM2GSk3pH8COW1UVAVEeu2OC7/CrCzjR91PcPZIw/Ycdvyg3Aqi","bio":"","image":null,"createdAt":{"$$date":1533459071196},"_id":"7r8Pdo5csPGElToj"}
diff --git a/server/elm.json b/advanced/server/elm.json
similarity index 100%
rename from server/elm.json
rename to advanced/server/elm.json
diff --git a/server/logo.png b/advanced/server/logo.png
similarity index 100%
rename from server/logo.png
rename to advanced/server/logo.png
diff --git a/server/mixins/db.mixin.js b/advanced/server/mixins/db.mixin.js
similarity index 100%
rename from server/mixins/db.mixin.js
rename to advanced/server/mixins/db.mixin.js
diff --git a/server/moleculer.config.js b/advanced/server/moleculer.config.js
similarity index 100%
rename from server/moleculer.config.js
rename to advanced/server/moleculer.config.js
diff --git a/server/package-lock.json b/advanced/server/package-lock.json
similarity index 100%
rename from server/package-lock.json
rename to advanced/server/package-lock.json
diff --git a/server/package.json b/advanced/server/package.json
similarity index 100%
rename from server/package.json
rename to advanced/server/package.json
diff --git a/server/public/android-chrome-192x192.png b/advanced/server/public/android-chrome-192x192.png
similarity index 100%
rename from server/public/android-chrome-192x192.png
rename to advanced/server/public/android-chrome-192x192.png
diff --git a/server/public/android-chrome-512x512.png b/advanced/server/public/android-chrome-512x512.png
similarity index 100%
rename from server/public/android-chrome-512x512.png
rename to advanced/server/public/android-chrome-512x512.png
diff --git a/server/public/apple-touch-icon.png b/advanced/server/public/apple-touch-icon.png
similarity index 100%
rename from server/public/apple-touch-icon.png
rename to advanced/server/public/apple-touch-icon.png
diff --git a/server/public/asset-manifest.json b/advanced/server/public/asset-manifest.json
similarity index 100%
rename from server/public/asset-manifest.json
rename to advanced/server/public/asset-manifest.json
diff --git a/server/public/assets/images/error.jpg b/advanced/server/public/assets/images/error.jpg
similarity index 100%
rename from server/public/assets/images/error.jpg
rename to advanced/server/public/assets/images/error.jpg
diff --git a/server/public/assets/images/smiley-cyrus.jpg b/advanced/server/public/assets/images/smiley-cyrus.jpg
similarity index 100%
rename from server/public/assets/images/smiley-cyrus.jpg
rename to advanced/server/public/assets/images/smiley-cyrus.jpg
diff --git a/server/public/browserconfig.xml b/advanced/server/public/browserconfig.xml
similarity index 100%
rename from server/public/browserconfig.xml
rename to advanced/server/public/browserconfig.xml
diff --git a/server/public/favicon-16x16.png b/advanced/server/public/favicon-16x16.png
similarity index 100%
rename from server/public/favicon-16x16.png
rename to advanced/server/public/favicon-16x16.png
diff --git a/server/public/favicon-32x32.png b/advanced/server/public/favicon-32x32.png
similarity index 100%
rename from server/public/favicon-32x32.png
rename to advanced/server/public/favicon-32x32.png
diff --git a/server/public/favicon.ico b/advanced/server/public/favicon.ico
similarity index 100%
rename from server/public/favicon.ico
rename to advanced/server/public/favicon.ico
diff --git a/server/public/fonts.css b/advanced/server/public/fonts.css
similarity index 100%
rename from server/public/fonts.css
rename to advanced/server/public/fonts.css
diff --git a/server/public/index.html b/advanced/server/public/index.html
similarity index 100%
rename from server/public/index.html
rename to advanced/server/public/index.html
diff --git a/server/public/main.css b/advanced/server/public/main.css
similarity index 100%
rename from server/public/main.css
rename to advanced/server/public/main.css
diff --git a/server/public/mstile-144x144.png b/advanced/server/public/mstile-144x144.png
similarity index 100%
rename from server/public/mstile-144x144.png
rename to advanced/server/public/mstile-144x144.png
diff --git a/server/public/mstile-150x150.png b/advanced/server/public/mstile-150x150.png
similarity index 100%
rename from server/public/mstile-150x150.png
rename to advanced/server/public/mstile-150x150.png
diff --git a/server/public/mstile-310x150.png b/advanced/server/public/mstile-310x150.png
similarity index 100%
rename from server/public/mstile-310x150.png
rename to advanced/server/public/mstile-310x150.png
diff --git a/server/public/mstile-310x310.png b/advanced/server/public/mstile-310x310.png
similarity index 100%
rename from server/public/mstile-310x310.png
rename to advanced/server/public/mstile-310x310.png
diff --git a/server/public/mstile-70x70.png b/advanced/server/public/mstile-70x70.png
similarity index 100%
rename from server/public/mstile-70x70.png
rename to advanced/server/public/mstile-70x70.png
diff --git a/server/public/safari-pinned-tab.svg b/advanced/server/public/safari-pinned-tab.svg
similarity index 100%
rename from server/public/safari-pinned-tab.svg
rename to advanced/server/public/safari-pinned-tab.svg
diff --git a/server/public/site.webmanifest b/advanced/server/public/site.webmanifest
similarity index 100%
rename from server/public/site.webmanifest
rename to advanced/server/public/site.webmanifest
diff --git a/server/rw-logo.png b/advanced/server/rw-logo.png
similarity index 100%
rename from server/rw-logo.png
rename to advanced/server/rw-logo.png
diff --git a/server/services/api.service.js b/advanced/server/services/api.service.js
similarity index 100%
rename from server/services/api.service.js
rename to advanced/server/services/api.service.js
diff --git a/server/services/articles.service.js b/advanced/server/services/articles.service.js
similarity index 100%
rename from server/services/articles.service.js
rename to advanced/server/services/articles.service.js
diff --git a/server/services/comments.service.js b/advanced/server/services/comments.service.js
similarity index 100%
rename from server/services/comments.service.js
rename to advanced/server/services/comments.service.js
diff --git a/server/services/favorites.service.js b/advanced/server/services/favorites.service.js
similarity index 100%
rename from server/services/favorites.service.js
rename to advanced/server/services/favorites.service.js
diff --git a/server/services/follows.service.js b/advanced/server/services/follows.service.js
similarity index 100%
rename from server/services/follows.service.js
rename to advanced/server/services/follows.service.js
diff --git a/server/services/metrics.service.js b/advanced/server/services/metrics.service.js
similarity index 100%
rename from server/services/metrics.service.js
rename to advanced/server/services/metrics.service.js
diff --git a/server/services/users.service.js b/advanced/server/services/users.service.js
similarity index 100%
rename from server/services/users.service.js
rename to advanced/server/services/users.service.js
diff --git a/server/src/Main.elm b/advanced/server/src/Main.elm
similarity index 100%
rename from server/src/Main.elm
rename to advanced/server/src/Main.elm
diff --git a/elm-package.json b/elm-package.json
deleted file mode 100644
index f5ba1c5..0000000
--- a/elm-package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "version": "1.0.0",
- "summary": "helpful summary of your project, less than 80 characters",
- "repository": "https://github.com/user/project.git",
- "license": "BSD3",
- "source-directories": [
- "."
- ],
- "exposed-modules": [],
- "dependencies": {
- "elm-lang/core": "5.1.1 <= v < 6.0.0",
- "elm-lang/html": "2.0.0 <= v < 3.0.0"
- },
- "elm-version": "0.18.0 <= v < 0.19.0"
-}
diff --git a/server/elm-stuff/exact-dependencies.json b/server/elm-stuff/exact-dependencies.json
deleted file mode 100644
index f74308c..0000000
--- a/server/elm-stuff/exact-dependencies.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "elm-lang/virtual-dom": "2.0.4",
- "elm-lang/html": "2.0.0",
- "elm-lang/core": "5.1.1"
-}
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/.eslintrc b/server/elm-stuff/packages/elm-lang/core/5.1.1/.eslintrc
deleted file mode 100644
index 169879a..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/.eslintrc
+++ /dev/null
@@ -1,156 +0,0 @@
-{
- "parser": "babel-eslint", // https://github.com/babel/babel-eslint
- "plugins": [],
- "env": { // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
- "browser": true, // browser global variables
- "node": true // Node.js global variables and Node.js-specific rules
- },
- "ecmaFeatures": {
- "arrowFunctions": true,
- "blockBindings": true,
- "classes": true,
- "defaultParams": true,
- "destructuring": true,
- "forOf": true,
- "generators": false,
- "modules": true,
- "objectLiteralComputedProperties": true,
- "objectLiteralDuplicateProperties": false,
- "objectLiteralShorthandMethods": true,
- "objectLiteralShorthandProperties": true,
- "spread": true,
- "superInFunctions": true,
- "templateStrings": true,
- },
- "rules": {
-/**
- * Strict mode
- */
- // babel inserts "use strict"; for us
- "strict": [2, "never"], // http://eslint.org/docs/rules/strict
-
-/**
- * Variables
- */
- "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow
- "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
- "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars
- "vars": "local",
- "args": "after-used"
- }],
- "no-use-before-define": 2, // http://eslint.org/docs/rules/no-use-before-define
-
-/**
- * Possible errors
- */
- "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
- "no-console": 1, // http://eslint.org/docs/rules/no-console
- "no-debugger": 1, // http://eslint.org/docs/rules/no-debugger
- "no-alert": 1, // http://eslint.org/docs/rules/no-alert
- "no-constant-condition": 1, // http://eslint.org/docs/rules/no-constant-condition
- "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-dupe-keys
- "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-duplicate-case
- "no-empty": 2, // http://eslint.org/docs/rules/no-empty
- "no-ex-assign": 2, // http://eslint.org/docs/rules/no-ex-assign
- "no-extra-boolean-cast": 0, // http://eslint.org/docs/rules/no-extra-boolean-cast
- "no-extra-semi": 2, // http://eslint.org/docs/rules/no-extra-semi
- "no-func-assign": 2, // http://eslint.org/docs/rules/no-func-assign
- "no-inner-declarations": 2, // http://eslint.org/docs/rules/no-inner-declarations
- "no-invalid-regexp": 2, // http://eslint.org/docs/rules/no-invalid-regexp
- "no-irregular-whitespace": 2, // http://eslint.org/docs/rules/no-irregular-whitespace
- "no-obj-calls": 2, // http://eslint.org/docs/rules/no-obj-calls
- "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-sparse-arrays
- "no-unreachable": 2, // http://eslint.org/docs/rules/no-unreachable
- "use-isnan": 2, // http://eslint.org/docs/rules/use-isnan
- "block-scoped-var": 2, // http://eslint.org/docs/rules/block-scoped-var
-
-/**
- * Best practices
- */
- "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return
- "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly
- "default-case": 2, // http://eslint.org/docs/rules/default-case
- "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation
- "allowKeywords": true
- }],
- "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq
- "max-len": [2, 100, 4],
- "guard-for-in": 2, // http://eslint.org/docs/rules/guard-for-in
- "no-caller": 2, // http://eslint.org/docs/rules/no-caller
- "no-else-return": 2, // http://eslint.org/docs/rules/no-else-return
- "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null
- "no-eval": 2, // http://eslint.org/docs/rules/no-eval
- "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native
- "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind
- "no-fallthrough": 2, // http://eslint.org/docs/rules/no-fallthrough
- "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal
- "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval
- "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks
- "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func
- "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str
- "no-native-reassign": 2, // http://eslint.org/docs/rules/no-native-reassign
- "no-new": 2, // http://eslint.org/docs/rules/no-new
- "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func
- "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers
- "no-octal": 2, // http://eslint.org/docs/rules/no-octal
- "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape
- "no-param-reassign": 2, // http://eslint.org/docs/rules/no-param-reassign
- "no-proto": 2, // http://eslint.org/docs/rules/no-proto
- "no-redeclare": 2, // http://eslint.org/docs/rules/no-redeclare
- "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign
- "no-script-url": 2, // http://eslint.org/docs/rules/no-script-url
- "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare
- "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences
- "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal
- "no-with": 2, // http://eslint.org/docs/rules/no-with
- "radix": 2, // http://eslint.org/docs/rules/radix
- "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife
- "yoda": 2, // http://eslint.org/docs/rules/yoda
-
-/**
- * Style
- */
- "indent": [2, "tab"], // http://eslint.org/docs/rules/indent
- "quotes": [
- 2, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes
- ],
- "camelcase": [2, { // http://eslint.org/docs/rules/camelcase
- "properties": "never"
- }],
- "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing
- "before": false,
- "after": true
- }],
- "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style
- "eol-last": 2, // http://eslint.org/docs/rules/eol-last
- "func-names": 1, // http://eslint.org/docs/rules/func-names
- "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing
- "beforeColon": false,
- "afterColon": true
- }],
- "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
- "max": 2
- }],
- "no-nested-ternary": 2, // http://eslint.org/docs/rules/no-nested-ternary
- "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object
- "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func
- "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces
- "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-parens
- "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle
- "padded-blocks": [2, "never"], // http://eslint.org/docs/rules/padded-blocks
- "semi": [2, "always"], // http://eslint.org/docs/rules/semi
- "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing
- "before": false,
- "after": true
- }],
- "space-after-keywords": 2, // http://eslint.org/docs/rules/space-after-keywords
- "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks
- "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
- "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops
- "space-return-throw-case": 2, // http://eslint.org/docs/rules/space-return-throw-case
- "spaced-comment": [2, "always", {// http://eslint.org/docs/rules/spaced-comment
- "exceptions": ["-", "+"],
- "markers": ["=", "!"] // space here to support sprockets directives
- }]
- }
-}
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/.gitignore b/server/elm-stuff/packages/elm-lang/core/5.1.1/.gitignore
deleted file mode 100644
index 7f3cfe4..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-elm-stuff
-tests/test.js
-node_modules/
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/.travis.yml b/server/elm-stuff/packages/elm-lang/core/5.1.1/.travis.yml
deleted file mode 100644
index 9576ae8..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/.travis.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-sudo: false
-
-cache:
- directories:
- - test/elm-stuff/build-artifacts
- - sysconfcpus
-
-language: node_js
-
-node_js:
- - "4.3"
-
-before_install:
- - if [ ${TRAVIS_OS_NAME} == "osx" ];
- then brew update; brew install nvm; mkdir ~/.nvm; export NVM_DIR=~/.nvm; source $(brew --prefix nvm)/nvm.sh;
- fi
- - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
- - | # epic build time improvement - see https://github.com/elm-lang/elm-compiler/issues/1473#issuecomment-245704142
- if [ ! -d sysconfcpus/bin ];
- then
- git clone https://github.com/obmarg/libsysconfcpus.git;
- cd libsysconfcpus;
- ./configure --prefix=$TRAVIS_BUILD_DIR/sysconfcpus;
- make && make install;
- cd ..;
- fi
-
-install:
- - npm install -g elm@0.18 elm-test
- - mv $(npm config get prefix)/bin/elm-make $(npm config get prefix)/bin/elm-make-old
- - printf '%s\n\n' '#!/bin/bash' 'echo "Running elm-make with sysconfcpus -n 2"' '$TRAVIS_BUILD_DIR/sysconfcpus/bin/sysconfcpus -n 2 elm-make-old "$@"' > $(npm config get prefix)/bin/elm-make
- - chmod +x $(npm config get prefix)/bin/elm-make
-
-script:
- - bash tests/run-tests.sh
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/CONTRIBUTING.md b/server/elm-stuff/packages/elm-lang/core/5.1.1/CONTRIBUTING.md
deleted file mode 100644
index c8bd8b4..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/CONTRIBUTING.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Contributing to the core libraries
-
-Thanks helping with the development of Elm! This document describes the basic
-standards for opening pull requests and making the review process as smooth as
-possible.
-
-## Ground rules
-
- * Always make pull requests minimal. If it can be split up, it should be split up.
- * Use style consistent with the file you are modifying.
- * Use descriptive titles for PRs
- * Provide all the necessary context for evaluation in the PR.
- If there are relevant issues or examples or discussions, add them.
- If things can be summarized, summarize them. The easiest PRs are ones
- that already address the reviewers questions and concerns.
-
-## Documentation Fixes
-
-If you want to fix docs, just open a PR. This is super helpful!
-
-## Bug Fixes
-
-If you find an issue or see one you want to work on, go for it!
-
-The best strategy is often to dive in. Asking for directions usually
-does not work. If someone knew the specifics and knew how how to fix
-it, it is likely they would have already sent the PR themselves!
-
-Also, be sure you are testing.
-
-## Adding New Functions
-
-We are fairly conservative about adding new functions to core libraries.
-If you want to augment the `List` or `Array` library, we recommend creating
-small packages called `list-extras` or `array-extras` that have all the
-features you want. There are already several such packages maintained at
-the [Elm Community organization](https://github.com/elm-community) that
-welcome contributions in the form of pull requests.
-
-Long term, we will set up a process to review `*-extras` packages to move
-stuff into core. By going through packages, it will be much easier to assess
-whether a function is pleasant and useful in practice before committing to it
-in the core libraries.
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/LICENSE b/server/elm-stuff/packages/elm-lang/core/5.1.1/LICENSE
deleted file mode 100644
index e0419a4..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2014-present, Evan Czaplicki
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of Evan Czaplicki nor the names of other
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/README.md b/server/elm-stuff/packages/elm-lang/core/5.1.1/README.md
deleted file mode 100644
index 07c3f6e..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Elm Core Libraries
-
-[](https://travis-ci.org/elm-lang/core)
-
-Every Elm project needs the core libraries. They provide basic functionality including:
-
- * The Basics — addition, subtraction, etc.
- * Data Structures — lists, dictionaries, sets, etc.
-
-
-## Default Imports
-
-All Elm files have some default imports:
-
-```elm
-import Basics exposing (..)
-import List exposing ( List, (::) )
-import Maybe exposing ( Maybe( Just, Nothing ) )
-import Result exposing ( Result( Ok, Err ) )
-import String
-import Tuple
-
-import Debug
-
-import Platform exposing ( Program )
-import Platform.Cmd exposing ( Cmd, (!) )
-import Platform.Sub exposing ( Sub )
-```
-
-The intention is to include things that are both extremely useful and very
-unlikely to overlap with anything that anyone will ever write in a library.
-By keeping the set of default imports small, it also becomes easier to use
-whatever version of `map` suits your fancy. Finally, it makes it easier to
-figure out where the heck a function is coming from.
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/changelog.md b/server/elm-stuff/packages/elm-lang/core/5.1.1/changelog.md
deleted file mode 100644
index 9781f2c..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/changelog.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# 0.15
-
-### Syntax
-
-New `import` syntax with keyword `exposing`.
-
-### Module Changes
-
- * Move `Http` to `elm-http` package and totally redo API
- * Remove `WebSocket` module
- * Add `Task` module
-
-### Channels become Mailboxes
-
-`Graphics.Input` now works with this API (from module `Signal`):
-
-```elm
-type alias Mailbox a = { address : Address a, signal : Signal a }
-
-mailbox : a -> Mailbox a
-```
-
-You can then send messages to the `Address` with functions like `Signal.send`
-and `Signal.message`, or create forwarding addresses with `Signal.forwardTo`.
-
-### Text in Collages
-
-`Graphics.Collage` now has two new functions:
-
-```elm
-text : Text -> Form
-outlinedText : LineStyle -> Text -> Form
-```
-
-These functions render text with the canvas, making things quite a bit faster.
-The underlying implementation of `Text` has also been improved dramatically.
-
-### Miscellaneous
-
- * Change types of `head`, `tail`, `maximum`, `minimum` by wrapping output in `Maybe`
- * Move `leftAligned`, `centered`, `rightAligned` from `Text` to `Graphics.Element`
- * Move `asText` from `Text` to `Graphics.Element`, renaming it to `show` in the process
- * Remove `Text.plainText` (can be replaced by `Graphics.Element.leftAligned << Text.fromString`)
- * Change type of `Keyboard.keysDown` from `Signal (List KeyCode)` to `Signal (Set KeyCode)`
- * Remove `Keyboard.directions`
- * Rename `Keyboard.lastPressed` to `Keyboard.presses`
-
-
-# 0.14
-
-### Syntax
-
- * Keyword `type` becomes `type alias`
- * Keyword `data` becomes `type`
- * Remove special list syntax in types, so `[a]` becomes `List a`
-
-
-### Reduce Default Imports
-
-The set of default imports has been reduced to the following:
-
-```haskell
-import Basics (..)
-import Maybe ( Maybe( Just, Nothing ) )
-import Result ( Result( Ok, Err ) )
-import List ( List )
-import Signal ( Signal )
-```
-
-### Make JSON parsing easy
-
- * Added `Json.Decode` and `Json.Encode` libraries
-
-
-### Use more natural names
-
- * Rename `String.show` to `String.toString`
-
- * Replace `List.zip` with `List.map2 (,)`
- * Replace `List.zipWith f` with `List.map2 f`
-
- * Rename `Signal.liftN` to `Signal.mapN`
- * Rename `Signal.merges` to `Signal.mergeMany`
-
-
-### Simplify Signal Library
-
- * Revamp `Input` concept as `Signal.Channel`
- * Remove `Signal.count`
- * Remove `Signal.countIf`
- * Remove `Signal.combine`
-
-
-### Randomness Done Right
-
- * No longer signal-based
- * Use a `Generator` to create random values
-
-
-
-### Revamp Maybes and Error Handling
-
- * Add the following functions to `Maybe`
-
- withDefault : a -> Maybe a -> a
- oneOf : List (Maybe a) -> Maybe a
- map : (a -> b) -> Maybe a -> Maybe b
- andThen : Maybe a -> (a -> Maybe b) -> Maybe b
-
- * Remove `Maybe.maybe` so `maybe 0 sqrt Nothing` becomes `withDefault 0 (map sqrt Nothing)`
-
- * Remove `Maybe.isJust` and `Maybe.isNothing` in favor of pattern matching
-
- * Add `Result` library for proper error handling. This is for cases when
- you want a computation to succeed, but if there is a mistake, it should
- produce a nice error message.
-
- * Remove `Either` in favor of `Result` or custom union types
-
- * Revamp functions that result in a `Maybe`.
-
- - Remove `Dict.getOrElse` and `Dict.getOrFail` in favor of `withDefault 0 (Dict.get key dict)`
- - Remove `Array.getOrElse` and `Array.getOrFail` in favor of `withDefault 0 (Array.get index array)`
- - Change `String.toInt : String -> Maybe Int` to `String.toInt : String -> Result String Int`
- - Change `String.toFloat : String -> Maybe Float` to `String.toFloat : String -> Result String Float`
-
-
-### Make appending more logical
-
- * Add the following functions to `Text`:
-
- empty : Text
- append : Text -> Text -> Text
- concat : [Text] -> Text
- join : Text -> [Text] -> Text
-
- * Make the following changes in `List`:
- - Replace `(++)` with `append`
- - Remove `join`
-
-### Miscellaneous
-
- * Rename `Text.toText` to `Text.fromString`
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/elm-package.json b/server/elm-stuff/packages/elm-lang/core/5.1.1/elm-package.json
deleted file mode 100644
index 2f25729..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/elm-package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "version": "5.1.1",
- "summary": "Elm's standard libraries",
- "repository": "http://github.com/elm-lang/core.git",
- "license": "BSD3",
- "source-directories": [
- "src"
- ],
- "exposed-modules": [
- "Array",
- "Basics",
- "Bitwise",
- "Char",
- "Color",
- "Date",
- "Debug",
- "Dict",
- "Json.Decode",
- "Json.Encode",
- "List",
- "Maybe",
- "Platform",
- "Platform.Cmd",
- "Platform.Sub",
- "Process",
- "Random",
- "Regex",
- "Result",
- "Set",
- "String",
- "Task",
- "Time",
- "Tuple"
- ],
- "native-modules": true,
- "dependencies": {},
- "elm-version": "0.18.0 <= v < 0.19.0"
-}
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Array.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Array.elm
deleted file mode 100644
index 58ae2ba..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Array.elm
+++ /dev/null
@@ -1,240 +0,0 @@
-module Array exposing
- ( Array
- , empty, repeat, initialize, fromList
- , isEmpty, length, push, append
- , get, set
- , slice, toList, toIndexedList
- , map, indexedMap, filter, foldl, foldr
- )
-
-{-| A library for fast immutable arrays. The elements in an array must have the
-same type. The arrays are implemented in Relaxed Radix Balanced-Trees for fast
-reads, updates, and appends.
-
-# Arrays
-@docs Array
-
-# Creating Arrays
-@docs empty, repeat, initialize, fromList
-
-# Basics
-@docs isEmpty, length, push, append
-
-# Get and Set
-@docs get, set
-
-# Taking Arrays Apart
-@docs slice, toList, toIndexedList
-
-# Mapping, Filtering, and Folding
-@docs map, indexedMap, filter, foldl, foldr
--}
-
-import Native.Array
-import Basics exposing (..)
-import Maybe exposing (..)
-import List
-
-
-{-| Representation of fast immutable arrays. You can create arrays of integers
-(`Array Int`) or strings (`Array String`) or any other type of value you can
-dream up.
--}
-type Array a = Array
-
-
-{-| Initialize an array. `initialize n f` creates an array of length `n` with
-the element at index `i` initialized to the result of `(f i)`.
-
- initialize 4 identity == fromList [0,1,2,3]
- initialize 4 (\n -> n*n) == fromList [0,1,4,9]
- initialize 4 (always 0) == fromList [0,0,0,0]
--}
-initialize : Int -> (Int -> a) -> Array a
-initialize =
- Native.Array.initialize
-
-
-{-| Creates an array with a given length, filled with a default element.
-
- repeat 5 0 == fromList [0,0,0,0,0]
- repeat 3 "cat" == fromList ["cat","cat","cat"]
-
-Notice that `repeat 3 x` is the same as `initialize 3 (always x)`.
--}
-repeat : Int -> a -> Array a
-repeat n e =
- initialize n (always e)
-
-
-{-| Create an array from a list.
--}
-fromList : List a -> Array a
-fromList =
- Native.Array.fromList
-
-
-{-| Create a list of elements from an array.
-
- toList (fromList [3,5,8]) == [3,5,8]
--}
-toList : Array a -> List a
-toList =
- Native.Array.toList
-
-
--- TODO: make this a native function.
-{-| Create an indexed list from an array. Each element of the array will be
-paired with its index.
-
- toIndexedList (fromList ["cat","dog"]) == [(0,"cat"), (1,"dog")]
--}
-toIndexedList : Array a -> List (Int, a)
-toIndexedList array =
- List.map2
- (,)
- (List.range 0 (Native.Array.length array - 1))
- (Native.Array.toList array)
-
-
-{-| Apply a function on every element in an array.
-
- map sqrt (fromList [1,4,9]) == fromList [1,2,3]
--}
-map : (a -> b) -> Array a -> Array b
-map =
- Native.Array.map
-
-
-{-| Apply a function on every element with its index as first argument.
-
- indexedMap (*) (fromList [5,5,5]) == fromList [0,5,10]
--}
-indexedMap : (Int -> a -> b) -> Array a -> Array b
-indexedMap =
- Native.Array.indexedMap
-
-
-{-| Reduce an array from the left. Read `foldl` as “fold from the left”.
-
- foldl (::) [] (fromList [1,2,3]) == [3,2,1]
--}
-foldl : (a -> b -> b) -> b -> Array a -> b
-foldl =
- Native.Array.foldl
-
-
-{-| Reduce an array from the right. Read `foldr` as “fold from the right”.
-
- foldr (+) 0 (repeat 3 5) == 15
--}
-foldr : (a -> b -> b) -> b -> Array a -> b
-foldr =
- Native.Array.foldr
-
-
-{-| Keep only elements that satisfy the predicate:
-
- filter isEven (fromList [1,2,3,4,5,6]) == (fromList [2,4,6])
--}
-filter : (a -> Bool) -> Array a -> Array a
-filter isOkay arr =
- let
- update x xs =
- if isOkay x then
- Native.Array.push x xs
- else
- xs
- in
- Native.Array.foldl update Native.Array.empty arr
-
-{-| Return an empty array.
-
- length empty == 0
--}
-empty : Array a
-empty =
- Native.Array.empty
-
-
-{-| Push an element to the end of an array.
-
- push 3 (fromList [1,2]) == fromList [1,2,3]
--}
-push : a -> Array a -> Array a
-push =
- Native.Array.push
-
-
-{-| Return Just the element at the index or Nothing if the index is out of range.
-
- get 0 (fromList [0,5,3]) == Just 0
- get 2 (fromList [0,5,3]) == Just 3
- get 5 (fromList [0,5,3]) == Nothing
- get -1 (fromList [0,5,3]) == Nothing
-
--}
-get : Int -> Array a -> Maybe a
-get i array =
- if 0 <= i && i < Native.Array.length array then
- Just (Native.Array.get i array)
- else
- Nothing
-
-
-{-| Set the element at a particular index. Returns an updated array.
-If the index is out of range, the array is unaltered.
-
- set 1 7 (fromList [1,2,3]) == fromList [1,7,3]
--}
-set : Int -> a -> Array a -> Array a
-set =
- Native.Array.set
-
-
-{-| Get a sub-section of an array: `(slice start end array)`. The `start` is a
-zero-based index where we will start our slice. The `end` is a zero-based index
-that indicates the end of the slice. The slice extracts up to but not including
-`end`.
-
- slice 0 3 (fromList [0,1,2,3,4]) == fromList [0,1,2]
- slice 1 4 (fromList [0,1,2,3,4]) == fromList [1,2,3]
-
-Both the `start` and `end` indexes can be negative, indicating an offset from
-the end of the array.
-
- slice 1 -1 (fromList [0,1,2,3,4]) == fromList [1,2,3]
- slice -2 5 (fromList [0,1,2,3,4]) == fromList [3,4]
-
-This makes it pretty easy to `pop` the last element off of an array: `slice 0 -1 array`
--}
-slice : Int -> Int -> Array a -> Array a
-slice =
- Native.Array.slice
-
-
-{-| Return the length of an array.
-
- length (fromList [1,2,3]) == 3
--}
-length : Array a -> Int
-length =
- Native.Array.length
-
-
-{-| Determine if an array is empty.
-
- isEmpty empty == True
--}
-isEmpty : Array a -> Bool
-isEmpty array =
- length array == 0
-
-
-{-| Append two arrays to a new one.
-
- append (repeat 2 42) (repeat 3 81) == fromList [42,42,81,81,81]
--}
-append : Array a -> Array a -> Array a
-append =
- Native.Array.append
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Basics.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Basics.elm
deleted file mode 100644
index 2d06c86..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Basics.elm
+++ /dev/null
@@ -1,650 +0,0 @@
-module Basics exposing
- ( (==), (/=)
- , (<), (>), (<=), (>=), max, min, Order (..), compare
- , not, (&&), (||), xor
- , (+), (-), (*), (/), (^), (//), rem, (%), negate, abs, sqrt, clamp, logBase, e
- , pi, cos, sin, tan, acos, asin, atan, atan2
- , round, floor, ceiling, truncate, toFloat
- , degrees, radians, turns
- , toPolar, fromPolar
- , isNaN, isInfinite
- , toString, (++)
- , identity, always, (<|), (|>), (<<), (>>), flip, curry, uncurry, Never, never
- )
-
-{-| Tons of useful functions that get imported by default.
-
-# Equality
-@docs (==), (/=)
-
-# Comparison
-
-These functions only work on `comparable` types. This includes numbers,
-characters, strings, lists of comparable things, and tuples of comparable
-things. Note that tuples with 7 or more elements are not comparable; why
-are your tuples so big?
-
-@docs (<), (>), (<=), (>=), max, min, Order, compare
-
-# Booleans
-@docs not, (&&), (||), xor
-
-# Mathematics
-@docs (+), (-), (*), (/), (^), (//), rem, (%), negate, abs, sqrt, clamp, logBase, e
-
-# Trigonometry
-@docs pi, cos, sin, tan, acos, asin, atan, atan2
-
-# Number Conversions
-@docs round, floor, ceiling, truncate, toFloat
-
-# Angle Conversions
-All angle conversions result in “standard Elm angles”
-which happen to be radians.
-
-@docs degrees, radians, turns
-
-# Polar Coordinates
-@docs toPolar, fromPolar
-
-# Floating Point Checks
-@docs isNaN, isInfinite
-
-# Strings and Lists
-@docs toString, (++)
-
-# Higher-Order Helpers
-@docs identity, always, (<|), (|>), (<<), (>>), flip, curry, uncurry, Never, never
-
--}
-
-import Native.Basics
-import Native.Utils
-
-
-{-| Convert radians to standard Elm angles (radians). -}
-radians : Float -> Float
-radians t =
- t
-
-
-{-| Convert degrees to standard Elm angles (radians). -}
-degrees : Float -> Float
-degrees =
- Native.Basics.degrees
-
-
-{-| Convert turns to standard Elm angles (radians).
-One turn is equal to 360°.
--}
-turns : Float -> Float
-turns =
- Native.Basics.turns
-
-
-{-| Convert polar coordinates (r,θ) to Cartesian coordinates (x,y). -}
-fromPolar : (Float,Float) -> (Float,Float)
-fromPolar =
- Native.Basics.fromPolar
-
-
-{-| Convert Cartesian coordinates (x,y) to polar coordinates (r,θ). -}
-toPolar : (Float,Float) -> (Float,Float)
-toPolar =
- Native.Basics.toPolar
-
-
-{-|-}
-(+) : number -> number -> number
-(+) =
- Native.Basics.add
-
-
-{-|-}
-(-) : number -> number -> number
-(-) =
- Native.Basics.sub
-
-
-{-|-}
-(*) : number -> number -> number
-(*) =
- Native.Basics.mul
-
-
-{-| Floating point division. -}
-(/) : Float -> Float -> Float
-(/) =
- Native.Basics.floatDiv
-
-
-infixl 6 +
-infixl 6 -
-infixl 7 *
-infixl 7 /
-infixr 8 ^
-
-infixl 7 //
-infixl 7 %
-
-
-{-| Integer division. The remainder is discarded. -}
-(//) : Int -> Int -> Int
-(//) =
- Native.Basics.div
-
-
-{-| Find the remainder after dividing one number by another.
-
- rem 11 4 == 3
- rem 12 4 == 0
- rem 13 4 == 1
- rem -1 4 == -1
--}
-rem : Int -> Int -> Int
-rem =
- Native.Basics.rem
-
-
-{-| Perform [modular arithmetic](http://en.wikipedia.org/wiki/Modular_arithmetic).
-
- 7 % 2 == 1
- -1 % 4 == 3
--}
-(%) : Int -> Int -> Int
-(%) =
- Native.Basics.mod
-
-
-{-| Exponentiation
-
- 3^2 == 9
--}
-(^) : number -> number -> number
-(^) =
- Native.Basics.exp
-
-
-{-|-}
-cos : Float -> Float
-cos =
- Native.Basics.cos
-
-
-{-|-}
-sin : Float -> Float
-sin =
- Native.Basics.sin
-
-
-{-|-}
-tan : Float -> Float
-tan =
- Native.Basics.tan
-
-
-{-|-}
-acos : Float -> Float
-acos =
- Native.Basics.acos
-
-
-{-|-}
-asin : Float -> Float
-asin =
- Native.Basics.asin
-
-
-{-| You probably do not want to use this. It takes `(y/x)` as the
-argument, so there is no way to know whether the negative signs comes from
-the `y` or `x`. Thus, the resulting angle is always between π/2 and -π/2
-(in quadrants I and IV). You probably want to use `atan2` instead.
--}
-atan : Float -> Float
-atan =
- Native.Basics.atan
-
-
-{-| This helps you find the angle of a Cartesian coordinate.
-You will almost certainly want to use this instead of `atan`.
-So `atan2 y x` computes *atan(y/x)* but also keeps track of which
-quadrant the angle should really be in. The result will be between
-π and -π, giving you the full range of angles.
--}
-atan2 : Float -> Float -> Float
-atan2 =
- Native.Basics.atan2
-
-
-{-| Take the square root of a number. -}
-sqrt : Float -> Float
-sqrt =
- Native.Basics.sqrt
-
-
-{-| Negate a number.
-
- negate 42 == -42
- negate -42 == 42
- negate 0 == 0
--}
-negate : number -> number
-negate =
- Native.Basics.negate
-
-
-{-| Take the absolute value of a number. -}
-abs : number -> number
-abs =
- Native.Basics.abs
-
-
-{-| Calculate the logarithm of a number with a given base.
-
- logBase 10 100 == 2
- logBase 2 256 == 8
--}
-logBase : Float -> Float -> Float
-logBase =
- Native.Basics.logBase
-
-
-{-| Clamps a number within a given range. With the expression
-`clamp 100 200 x` the results are as follows:
-
- 100 if x < 100
- x if 100 <= x < 200
- 200 if 200 <= x
--}
-clamp : number -> number -> number -> number
-clamp =
- Native.Basics.clamp
-
-
-{-| An approximation of pi. -}
-pi : Float
-pi =
- Native.Basics.pi
-
-
-{-| An approximation of e. -}
-e : Float
-e =
- Native.Basics.e
-
-
-{-| Check if values are “the same”.
-
-**Note:** Elm uses structural equality on tuples, records, and user-defined
-union types. This means the values `(3, 4)` and `(3, 4)` are definitely equal.
-This is not true in languages like JavaScript that use reference equality on
-objects.
-
-**Note:** Equality (in the Elm sense) is not possible for certain types. For
-example, the functions `(\n -> n + 1)` and `(\n -> 1 + n)` are “the
-same” but detecting this in general is [undecidable][]. In a future
-release, the compiler will detect when `(==)` is used with problematic
-types and provide a helpful error message. This will require quite serious
-infrastructure work that makes sense to batch with another big project, so the
-stopgap is to crash as quickly as possible. Problematic types include functions
-and JavaScript values like `Json.Encode.Value` which could contain functions
-if passed through a port.
-
-[undecidable]: https://en.wikipedia.org/wiki/Undecidable_problem
--}
-(==) : a -> a -> Bool
-(==) =
- Native.Basics.eq
-
-
-{-| Check if values are not “the same”.
-
-So `(a /= b)` is the same as `(not (a == b))`.
--}
-(/=) : a -> a -> Bool
-(/=) =
- Native.Basics.neq
-
-
-{-|-}
-(<) : comparable -> comparable -> Bool
-(<) =
- Native.Basics.lt
-
-
-{-|-}
-(>) : comparable -> comparable -> Bool
-(>) =
- Native.Basics.gt
-
-
-{-|-}
-(<=) : comparable -> comparable -> Bool
-(<=) =
- Native.Basics.le
-
-
-{-|-}
-(>=) : comparable -> comparable -> Bool
-(>=) =
- Native.Basics.ge
-
-
-infix 4 ==
-infix 4 /=
-infix 4 <
-infix 4 >
-infix 4 <=
-infix 4 >=
-
-
-{-| Compare any two comparable values. Comparable values include `String`, `Char`,
-`Int`, `Float`, `Time`, or a list or tuple containing comparable values.
-These are also the only values that work as `Dict` keys or `Set` members.
--}
-compare : comparable -> comparable -> Order
-compare =
- Native.Basics.compare
-
-
-{-| Represents the relative ordering of two things.
-The relations are less than, equal to, and greater than.
--}
-type Order = LT | EQ | GT
-
-
-{-| Find the smaller of two comparables. -}
-min : comparable -> comparable -> comparable
-min =
- Native.Basics.min
-
-
-{-| Find the larger of two comparables. -}
-max : comparable -> comparable -> comparable
-max =
- Native.Basics.max
-
-
-{-| The logical AND operator. `True` if both inputs are `True`.
-
-**Note:** When used in the infix position, like `(left && right)`, the operator
-short-circuits. This means if `left` is `False` we do not bother evaluating `right`
-and just return `False` overall.
--}
-(&&) : Bool -> Bool -> Bool
-(&&) =
- Native.Basics.and
-
-
-{-| The logical OR operator. `True` if one or both inputs are `True`.
-
-**Note:** When used in the infix position, like `(left || right)`, the operator
-short-circuits. This means if `left` is `True` we do not bother evaluating `right`
-and just return `True` overall.
--}
-(||) : Bool -> Bool -> Bool
-(||) =
- Native.Basics.or
-
-
-infixr 3 &&
-infixr 2 ||
-
-
-{-| The exclusive-or operator. `True` if exactly one input is `True`. -}
-xor : Bool -> Bool -> Bool
-xor =
- Native.Basics.xor
-
-
-{-| Negate a boolean value.
-
- not True == False
- not False == True
--}
-not : Bool -> Bool
-not =
- Native.Basics.not
-
-
--- Conversions
-
-{-| Round a number to the nearest integer. -}
-round : Float -> Int
-round =
- Native.Basics.round
-
-
-{-| Truncate a number, rounding towards zero. -}
-truncate : Float -> Int
-truncate =
- Native.Basics.truncate
-
-
-{-| Floor function, rounding down. -}
-floor : Float -> Int
-floor =
- Native.Basics.floor
-
-
-{-| Ceiling function, rounding up. -}
-ceiling : Float -> Int
-ceiling =
- Native.Basics.ceiling
-
-
-{-| Convert an integer into a float. -}
-toFloat : Int -> Float
-toFloat =
- Native.Basics.toFloat
-
-
-{-| Determine whether a float is an undefined or unrepresentable number.
-NaN stands for *not a number* and it is [a standardized part of floating point
-numbers](http://en.wikipedia.org/wiki/NaN).
-
- isNaN (0/0) == True
- isNaN (sqrt -1) == True
- isNaN (1/0) == False -- infinity is a number
- isNaN 1 == False
--}
-isNaN : Float -> Bool
-isNaN =
- Native.Basics.isNaN
-
-
-{-| Determine whether a float is positive or negative infinity.
-
- isInfinite (0/0) == False
- isInfinite (sqrt -1) == False
- isInfinite (1/0) == True
- isInfinite 1 == False
-
-Notice that NaN is not infinite! For float `n` to be finite implies that
-`not (isInfinite n || isNaN n)` evaluates to `True`.
--}
-isInfinite : Float -> Bool
-isInfinite =
- Native.Basics.isInfinite
-
-
-{-| Turn any kind of value into a string. When you view the resulting string
-with `Text.fromString` it should look just like the value it came from.
-
- toString 42 == "42"
- toString [1,2] == "[1,2]"
- toString "he said, \"hi\"" == "\"he said, \\\"hi\\\"\""
--}
-toString : a -> String
-toString =
- Native.Utils.toString
-
-
-{-| Put two appendable things together. This includes strings, lists, and text.
-
- "hello" ++ "world" == "helloworld"
- [1,1,2] ++ [3,5,8] == [1,1,2,3,5,8]
--}
-(++) : appendable -> appendable -> appendable
-(++) =
- Native.Utils.append
-
-
-infixr 5 ++
-
-
--- Function Helpers
-
-{-| Function composition, passing results along in the suggested direction. For
-example, the following code checks if the square root of a number is odd:
-
- not << isEven << sqrt
-
-You can think of this operator as equivalent to the following:
-
- (g << f) == (\x -> g (f x))
-
-So our example expands out to something like this:
-
- \n -> not (isEven (sqrt n))
--}
-(<<) : (b -> c) -> (a -> b) -> (a -> c)
-(<<) g f x =
- g (f x)
-
-
-{-| Function composition, passing results along in the suggested direction. For
-example, the following code checks if the square root of a number is odd:
-
- sqrt >> isEven >> not
-
-This direction of function composition seems less pleasant than `(<<)` which
-reads nicely in expressions like: `filter (not << isRegistered) students`
--}
-(>>) : (a -> b) -> (b -> c) -> (a -> c)
-(>>) f g x =
- g (f x)
-
-
-{-| Forward function application `x |> f == f x`. This function is useful
-for avoiding parentheses and writing code in a more natural way.
-Consider the following code to create a pentagon:
-
- scale 2 (move (10,10) (filled blue (ngon 5 30)))
-
-This can also be written as:
-
- ngon 5 30
- |> filled blue
- |> move (10,10)
- |> scale 2
--}
-(|>) : a -> (a -> b) -> b
-(|>) x f =
- f x
-
-
-{-| Backward function application `f <| x == f x`. This function is useful for
-avoiding parentheses. Consider the following code to create a text element:
-
- leftAligned (monospace (fromString "code"))
-
-This can also be written as:
-
- leftAligned <| monospace <| fromString "code"
--}
-(<|) : (a -> b) -> a -> b
-(<|) f x =
- f x
-
-
-infixr 9 <<
-infixl 9 >>
-infixr 0 <|
-infixl 0 |>
-
-
-{-| Given a value, returns exactly the same value. This is called
-[the identity function](http://en.wikipedia.org/wiki/Identity_function).
--}
-identity : a -> a
-identity x =
- x
-
-
-{-| Create a function that *always* returns the same value. Useful with
-functions like `map`:
-
- List.map (always 0) [1,2,3,4,5] == [0,0,0,0,0]
-
- -- List.map (\_ -> 0) [1,2,3,4,5] == [0,0,0,0,0]
- -- always = (\x _ -> x)
--}
-always : a -> b -> a
-always a _ =
- a
-
-
-{-| Flip the order of the first two arguments to a function. -}
-flip : (a -> b -> c) -> (b -> a -> c)
-flip f b a =
- f a b
-
-
-{-| Change how arguments are passed to a function.
-This splits paired arguments into two separate arguments.
--}
-curry : ((a,b) -> c) -> a -> b -> c
-curry f a b =
- f (a,b)
-
-
-{-| Change how arguments are passed to a function.
-This combines two arguments into a single pair.
--}
-uncurry : (a -> b -> c) -> (a,b) -> c
-uncurry f (a,b) =
- f a b
-
-
-{-| A value that can never happen! For context:
-
- - The boolean type `Bool` has two values: `True` and `False`
- - The unit type `()` has one value: `()`
- - The never type `Never` has no values!
-
-You may see it in the wild in `Html Never` which means this HTML will never
-produce any messages. You would need to write an event handler like
-`onClick ??? : Attribute Never` but how can we fill in the question marks?!
-So there cannot be any event handlers on that HTML.
-
-You may also see this used with tasks that never fail, like `Task Never ()`.
-
-The `Never` type is useful for restricting *arguments* to a function. Maybe my
-API can only accept HTML without event handlers, so I require `Html Never` and
-users can give `Html msg` and everything will go fine. Generally speaking, you
-do not want `Never` in your return types though.
--}
-type Never = JustOneMore Never
-
-
-{-| A function that can never be called. Seems extremely pointless, but it
-*can* come in handy. Imagine you have some HTML that should never produce any
-messages. And say you want to use it in some other HTML that *does* produce
-messages. You could say:
-
- import Html exposing (..)
-
- embedHtml : Html Never -> Html msg
- embedHtml staticStuff =
- div []
- [ text "hello"
- , Html.map never staticStuff
- ]
-
-So the `never` function is basically telling the type system, make sure no one
-ever calls me!
--}
-never : Never -> a
-never (JustOneMore nvr) =
- never nvr
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Bitwise.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Bitwise.elm
deleted file mode 100644
index 14c7a82..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Bitwise.elm
+++ /dev/null
@@ -1,90 +0,0 @@
-module Bitwise exposing
- ( and, or, xor, complement
- , shiftLeftBy, shiftRightBy, shiftRightZfBy
- )
-
-{-| Library for [bitwise operations](http://en.wikipedia.org/wiki/Bitwise_operation).
-
-# Basic Operations
-@docs and, or, xor, complement
-
-# Bit Shifts
-@docs shiftLeftBy, shiftRightBy, shiftRightZfBy
--}
-
-import Native.Bitwise
-
-
-{-| Bitwise AND
--}
-and : Int -> Int -> Int
-and =
- Native.Bitwise.and
-
-
-{-| Bitwise OR
--}
-or : Int -> Int -> Int
-or =
- Native.Bitwise.or
-
-
-{-| Bitwise XOR
--}
-xor : Int -> Int -> Int
-xor =
- Native.Bitwise.xor
-
-
-{-| Flip each bit individually, often called bitwise NOT
--}
-complement : Int -> Int
-complement =
- Native.Bitwise.complement
-
-
-{-| Shift bits to the left by a given offset, filling new bits with zeros.
-This can be used to multiply numbers by powers of two.
-
- shiftLeftBy 1 5 == 10
- shiftLeftBy 5 1 == 32
--}
-shiftLeftBy : Int -> Int -> Int
-shiftLeftBy =
- Native.Bitwise.shiftLeftBy
-
-
-{-| Shift bits to the right by a given offset, filling new bits with
-whatever is the topmost bit. This can be used to divide numbers by powers of two.
-
- shiftRightBy 1 32 == 16
- shiftRightBy 2 32 == 8
- shiftRightBy 1 -32 == -16
-
-This is called an [arithmetic right shift][ars], often written (>>), and
-sometimes called a sign-propagating right shift because it fills empty spots
-with copies of the highest bit.
-
-[ars]: http://en.wikipedia.org/wiki/Bitwise_operation#Arithmetic_shift
--}
-shiftRightBy : Int -> Int -> Int
-shiftRightBy =
- Native.Bitwise.shiftRightBy
-
-
-{-| Shift bits to the right by a given offset, filling new bits with zeros.
-
- shiftRightZfBy 1 32 == 16
- shiftRightZfBy 2 32 == 8
- shiftRightZfBy 1 -32 == 2147483632
-
-This is called an [logical right shift][lrs], often written (>>>), and
-sometimes called a zero-fill right shift because it fills empty spots with
-zeros.
-
-[lrs]: http://en.wikipedia.org/wiki/Bitwise_operation#Logical_shift
--}
-shiftRightZfBy : Int -> Int -> Int
-shiftRightZfBy =
- Native.Bitwise.shiftRightZfBy
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Char.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Char.elm
deleted file mode 100644
index 288f50b..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Char.elm
+++ /dev/null
@@ -1,103 +0,0 @@
-module Char exposing
- ( isUpper, isLower, isDigit, isOctDigit, isHexDigit
- , toUpper, toLower, toLocaleUpper, toLocaleLower
- , KeyCode, toCode, fromCode
- )
-
-{-| Functions for working with characters. Character literals are enclosed in
-`'a'` pair of single quotes.
-
-# Classification
-@docs isUpper, isLower, isDigit, isOctDigit, isHexDigit
-
-# Conversion
-@docs toUpper, toLower, toLocaleUpper, toLocaleLower
-
-# Key Codes
-@docs KeyCode, toCode, fromCode
-
--}
-
-import Native.Char
-import Basics exposing ((&&), (||), (>=), (<=))
-
-
-isBetween : Char -> Char -> Char -> Bool
-isBetween low high char =
- let code = toCode char
- in
- (code >= toCode low) && (code <= toCode high)
-
-
-{-| True for upper case ASCII letters. -}
-isUpper : Char -> Bool
-isUpper =
- isBetween 'A' 'Z'
-
-
-{-| True for lower case ASCII letters. -}
-isLower : Char -> Bool
-isLower =
- isBetween 'a' 'z'
-
-
-{-| True for ASCII digits `[0-9]`. -}
-isDigit : Char -> Bool
-isDigit =
- isBetween '0' '9'
-
-
-{-| True for ASCII octal digits `[0-7]`. -}
-isOctDigit : Char -> Bool
-isOctDigit =
- isBetween '0' '7'
-
-
-{-| True for ASCII hexadecimal digits `[0-9a-fA-F]`. -}
-isHexDigit : Char -> Bool
-isHexDigit char =
- isDigit char || isBetween 'a' 'f' char || isBetween 'A' 'F' char
-
-
-{-| Convert to upper case. -}
-toUpper : Char -> Char
-toUpper =
- Native.Char.toUpper
-
-
-{-| Convert to lower case. -}
-toLower : Char -> Char
-toLower =
- Native.Char.toLower
-
-
-{-| Convert to upper case, according to any locale-specific case mappings. -}
-toLocaleUpper : Char -> Char
-toLocaleUpper =
- Native.Char.toLocaleUpper
-
-
-{-| Convert to lower case, according to any locale-specific case mappings. -}
-toLocaleLower : Char -> Char
-toLocaleLower =
- Native.Char.toLocaleLower
-
-
-{-| Keyboard keys can be represented as integers. These are called *key codes*.
-You can use [`toCode`](#toCode) and [`fromCode`](#fromCode) to convert between
-key codes and characters.
--}
-type alias KeyCode = Int
-
-
-{-| Convert to key code.
--}
-toCode : Char -> KeyCode
-toCode =
- Native.Char.toCode
-
-
-{-| Convert from key code. -}
-fromCode : KeyCode -> Char
-fromCode =
- Native.Char.fromCode
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Color.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Color.elm
deleted file mode 100644
index d150240..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Color.elm
+++ /dev/null
@@ -1,456 +0,0 @@
-module Color exposing
- ( Color, rgb, rgba, hsl, hsla, greyscale, grayscale, complement
- , Gradient, linear, radial
- , toRgb, toHsl
- , red, orange, yellow, green, blue, purple, brown
- , lightRed, lightOrange, lightYellow, lightGreen, lightBlue, lightPurple, lightBrown
- , darkRed, darkOrange, darkYellow, darkGreen, darkBlue, darkPurple, darkBrown
- , white, lightGrey, grey, darkGrey, lightCharcoal, charcoal, darkCharcoal, black
- , lightGray, gray, darkGray
- )
-
-{-| Library for working with colors. Includes
-[RGB](https://en.wikipedia.org/wiki/RGB_color_model) and
-[HSL](http://en.wikipedia.org/wiki/HSL_and_HSV) creation, gradients, and
-built-in names.
-
-# Colors
-@docs Color
-
-# Creation
-@docs rgb, rgba, hsl, hsla, greyscale, grayscale, complement
-
-# Gradients
-@docs Gradient, linear, radial
-
-# Extracting Colors
-@docs toRgb, toHsl
-
-# Built-in Colors
-These colors come from the [Tango
-palette](http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines)
-which provides aesthetically reasonable defaults for colors. Each color also
-comes with a light and dark version.
-
-### Standard
-@docs red, orange, yellow, green, blue, purple, brown
-
-### Light
-@docs lightRed, lightOrange, lightYellow, lightGreen, lightBlue, lightPurple, lightBrown
-
-### Dark
-@docs darkRed, darkOrange, darkYellow, darkGreen, darkBlue, darkPurple, darkBrown
-
-### Eight Shades of Grey
-These colors are a compatible series of shades of grey, fitting nicely
-with the Tango palette.
-@docs white, lightGrey, grey, darkGrey, lightCharcoal, charcoal, darkCharcoal, black
-
-These are identical to the *grey* versions. It seems the spelling is regional, but
-that has never helped me remember which one I should be writing.
-@docs lightGray, gray, darkGray
-
--}
-
-import Basics exposing (..)
-
-
-{-| Representation of colors.
--}
-type Color
- = RGBA Int Int Int Float
- | HSLA Float Float Float Float
-
-
-{-| Create RGB colors with an alpha component for transparency.
-The alpha component is specified with numbers between 0 and 1. -}
-rgba : Int -> Int -> Int -> Float -> Color
-rgba =
- RGBA
-
-
-{-| Create RGB colors from numbers between 0 and 255 inclusive. -}
-rgb : Int -> Int -> Int -> Color
-rgb r g b =
- RGBA r g b 1
-
-
-{-| Create [HSL colors](http://en.wikipedia.org/wiki/HSL_and_HSV)
-with an alpha component for transparency.
--}
-hsla : Float -> Float -> Float -> Float -> Color
-hsla hue saturation lightness alpha =
- HSLA (hue - turns (toFloat (floor (hue / (2*pi))))) saturation lightness alpha
-
-
-{-| Create [HSL colors](http://en.wikipedia.org/wiki/HSL_and_HSV). This gives
-you access to colors more like a color wheel, where all hues are arranged in a
-circle that you specify with standard Elm angles (radians).
-
- red = hsl (degrees 0) 1 0.5
- green = hsl (degrees 120) 1 0.5
- blue = hsl (degrees 240) 1 0.5
-
- pastelRed = hsl (degrees 0) 0.7 0.7
-
-To cycle through all colors, just cycle through degrees. The saturation level
-is how vibrant the color is, like a dial between grey and bright colors. The
-lightness level is a dial between white and black.
--}
-hsl : Float -> Float -> Float -> Color
-hsl hue saturation lightness =
- hsla hue saturation lightness 1
-
-
-{-| Produce a gray based on the input. 0 is white, 1 is black.
--}
-grayscale : Float -> Color
-grayscale p =
- HSLA 0 0 (1-p) 1
-
-
-{-| Produce a gray based on the input. 0 is white, 1 is black.
--}
-greyscale : Float -> Color
-greyscale p =
- HSLA 0 0 (1-p) 1
-
-
-{-| Produce a “complementary color”. The two colors will
-accent each other. This is the same as rotating the hue by 180°.
--}
-complement : Color -> Color
-complement color =
- case color of
- HSLA h s l a ->
- hsla (h + degrees 180) s l a
-
- RGBA r g b a ->
- let
- (h,s,l) = rgbToHsl r g b
- in
- hsla (h + degrees 180) s l a
-
-
-{-| Extract the components of a color in the HSL format.
--}
-toHsl : Color -> { hue:Float, saturation:Float, lightness:Float, alpha:Float }
-toHsl color =
- case color of
- HSLA h s l a ->
- { hue=h, saturation=s, lightness=l, alpha=a }
-
- RGBA r g b a ->
- let
- (h,s,l) = rgbToHsl r g b
- in
- { hue=h, saturation=s, lightness=l, alpha=a }
-
-
-{-| Extract the components of a color in the RGB format.
--}
-toRgb : Color -> { red:Int, green:Int, blue:Int, alpha:Float }
-toRgb color =
- case color of
- RGBA r g b a ->
- { red = r, green = g, blue = b, alpha = a }
-
- HSLA h s l a ->
- let
- (r,g,b) = hslToRgb h s l
- in
- { red = round (255 * r)
- , green = round (255 * g)
- , blue = round (255 * b)
- , alpha = a
- }
-
-
-fmod : Float -> Int -> Float
-fmod f n =
- let
- integer = floor f
- in
- toFloat (integer % n) + f - toFloat integer
-
-
-rgbToHsl : Int -> Int -> Int -> (Float,Float,Float)
-rgbToHsl red green blue =
- let
- r = toFloat red / 255
- g = toFloat green / 255
- b = toFloat blue / 255
-
- cMax = max (max r g) b
- cMin = min (min r g) b
-
- c = cMax - cMin
-
- hue =
- degrees 60 *
- if cMax == r then
- fmod ((g - b) / c) 6
- else if cMax == g then
- ((b - r) / c) + 2
- else {- cMax == b -}
- ((r - g) / c) + 4
-
- lightness =
- (cMax + cMin) / 2
-
- saturation =
- if lightness == 0 then
- 0
- else
- c / (1 - abs (2 * lightness - 1))
- in
- (hue, saturation, lightness)
-
-
-hslToRgb : Float -> Float -> Float -> (Float,Float,Float)
-hslToRgb hue saturation lightness =
- let
- chroma = (1 - abs (2 * lightness - 1)) * saturation
- normHue = hue / degrees 60
-
- x = chroma * (1 - abs (fmod normHue 2 - 1))
-
- (r,g,b) =
- if normHue < 0 then (0, 0, 0)
- else if normHue < 1 then (chroma, x, 0)
- else if normHue < 2 then (x, chroma, 0)
- else if normHue < 3 then (0, chroma, x)
- else if normHue < 4 then (0, x, chroma)
- else if normHue < 5 then (x, 0, chroma)
- else if normHue < 6 then (chroma, 0, x)
- else (0, 0, 0)
-
- m = lightness - chroma / 2
- in
- (r + m, g + m, b + m)
-
-
---toV3 : Color -> V3
-
---toV4 : Color -> V4
-
-{-| Abstract representation of a color gradient.
--}
-type Gradient
- = Linear (Float,Float) (Float,Float) (List (Float,Color))
- | Radial (Float,Float) Float (Float,Float) Float (List (Float,Color))
-
-
-{-| Create a linear gradient. Takes a start and end point and then a series of
-“color stops” that indicate how to interpolate between the start and
-end points. See [this example](http://elm-lang.org/examples/linear-gradient) for a
-more visual explanation.
--}
-linear : (Float, Float) -> (Float, Float) -> List (Float,Color) -> Gradient
-linear =
- Linear
-
-
-{-| Create a radial gradient. First takes a start point and inner radius. Then
-takes an end point and outer radius. It then takes a series of “color
-stops” that indicate how to interpolate between the inner and outer
-circles. See [this example](http://elm-lang.org/examples/radial-gradient) for a
-more visual explanation.
--}
-radial : (Float,Float) -> Float -> (Float,Float) -> Float -> List (Float,Color) -> Gradient
-radial =
- Radial
-
-
--- BUILT-IN COLORS
-
-{-|-}
-lightRed : Color
-lightRed =
- RGBA 239 41 41 1
-
-
-{-|-}
-red : Color
-red =
- RGBA 204 0 0 1
-
-
-{-|-}
-darkRed : Color
-darkRed =
- RGBA 164 0 0 1
-
-
-{-|-}
-lightOrange : Color
-lightOrange =
- RGBA 252 175 62 1
-
-
-{-|-}
-orange : Color
-orange =
- RGBA 245 121 0 1
-
-
-{-|-}
-darkOrange : Color
-darkOrange =
- RGBA 206 92 0 1
-
-
-{-|-}
-lightYellow : Color
-lightYellow =
- RGBA 255 233 79 1
-
-
-{-|-}
-yellow : Color
-yellow =
- RGBA 237 212 0 1
-
-
-{-|-}
-darkYellow : Color
-darkYellow =
- RGBA 196 160 0 1
-
-
-{-|-}
-lightGreen : Color
-lightGreen =
- RGBA 138 226 52 1
-
-
-{-|-}
-green : Color
-green =
- RGBA 115 210 22 1
-
-
-{-|-}
-darkGreen : Color
-darkGreen =
- RGBA 78 154 6 1
-
-
-{-|-}
-lightBlue : Color
-lightBlue =
- RGBA 114 159 207 1
-
-
-{-|-}
-blue : Color
-blue =
- RGBA 52 101 164 1
-
-
-{-|-}
-darkBlue : Color
-darkBlue =
- RGBA 32 74 135 1
-
-
-{-|-}
-lightPurple : Color
-lightPurple =
- RGBA 173 127 168 1
-
-
-{-|-}
-purple : Color
-purple =
- RGBA 117 80 123 1
-
-
-{-|-}
-darkPurple : Color
-darkPurple =
- RGBA 92 53 102 1
-
-
-{-|-}
-lightBrown : Color
-lightBrown =
- RGBA 233 185 110 1
-
-
-{-|-}
-brown : Color
-brown =
- RGBA 193 125 17 1
-
-
-{-|-}
-darkBrown : Color
-darkBrown =
- RGBA 143 89 2 1
-
-
-{-|-}
-black : Color
-black =
- RGBA 0 0 0 1
-
-
-{-|-}
-white : Color
-white =
- RGBA 255 255 255 1
-
-
-{-|-}
-lightGrey : Color
-lightGrey =
- RGBA 238 238 236 1
-
-
-{-|-}
-grey : Color
-grey =
- RGBA 211 215 207 1
-
-
-{-|-}
-darkGrey : Color
-darkGrey =
- RGBA 186 189 182 1
-
-
-{-|-}
-lightGray : Color
-lightGray =
- RGBA 238 238 236 1
-
-
-{-|-}
-gray : Color
-gray =
- RGBA 211 215 207 1
-
-
-{-|-}
-darkGray : Color
-darkGray =
- RGBA 186 189 182 1
-
-
-{-|-}
-lightCharcoal : Color
-lightCharcoal =
- RGBA 136 138 133 1
-
-
-{-|-}
-charcoal : Color
-charcoal =
- RGBA 85 87 83 1
-
-
-{-|-}
-darkCharcoal : Color
-darkCharcoal =
- RGBA 46 52 54 1
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Date.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Date.elm
deleted file mode 100644
index 0d62982..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Date.elm
+++ /dev/null
@@ -1,150 +0,0 @@
-module Date exposing
- ( Date, fromString, toTime, fromTime
- , year, month, Month(..)
- , day, dayOfWeek, Day(..)
- , hour, minute, second, millisecond
- , now
- )
-
-{-| Library for working with dates. Email the mailing list if you encounter
-issues with internationalization or locale formatting.
-
-# Dates
-@docs Date, now
-
-# Conversions
-@docs fromString, toTime, fromTime
-
-# Extractions
-@docs year, month, Month, day, dayOfWeek, Day, hour, minute, second, millisecond
-
--}
-
-import Native.Date
-import Task exposing (Task)
-import Time exposing (Time)
-import Result exposing (Result)
-
-
-
--- DATES
-
-
-{-| Representation of a date.
--}
-type Date = Date
-
-
-{-| Get the `Date` at the moment when this task is run.
--}
-now : Task x Date
-now =
- Task.map fromTime Time.now
-
-
-
--- CONVERSIONS AND EXTRACTIONS
-
-
-{-| Represents the days of the week.
--}
-type Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
-
-
-{-| Represents the month of the year.
--}
-type Month
- = Jan | Feb | Mar | Apr
- | May | Jun | Jul | Aug
- | Sep | Oct | Nov | Dec
-
-
-{-| Attempt to read a date from a string.
--}
-fromString : String -> Result String Date
-fromString =
- Native.Date.fromString
-
-
-{-| Convert a `Date` to a time in milliseconds.
-
-A time is the number of milliseconds since
-[the Unix epoch](http://en.wikipedia.org/wiki/Unix_time).
--}
-toTime : Date -> Time
-toTime =
- Native.Date.toTime
-
-
-{-| Convert a time in milliseconds into a `Date`.
-
-A time is the number of milliseconds since
-[the Unix epoch](http://en.wikipedia.org/wiki/Unix_time).
--}
-fromTime : Time -> Date
-fromTime =
- Native.Date.fromTime
-
-
-{-| Extract the year of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the integer `1990`.
--}
-year : Date -> Int
-year =
- Native.Date.year
-
-
-{-| Extract the month of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the month `Jun` as defined below.
--}
-month : Date -> Month
-month =
- Native.Date.month
-
-
-{-| Extract the day of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the integer `23`.
--}
-day : Date -> Int
-day =
- Native.Date.day
-
-
-{-| Extract the day of the week for a given date. Given the date 23 June
-1990 at 11:45AM this returns the day `Sat` as defined below.
--}
-dayOfWeek : Date -> Day
-dayOfWeek =
- Native.Date.dayOfWeek
-
-
-{-| Extract the hour of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the integer `11`.
--}
-hour : Date -> Int
-hour =
- Native.Date.hour
-
-
-{-| Extract the minute of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the integer `45`.
--}
-minute : Date -> Int
-minute =
- Native.Date.minute
-
-
-{-| Extract the second of a given date. Given the date 23 June 1990 at 11:45AM
-this returns the integer `0`.
--}
-second : Date -> Int
-second =
- Native.Date.second
-
-
-{-| Extract the millisecond of a given date. Given the date 23 June 1990 at 11:45:30.123AM
-this returns the integer `123`.
--}
-millisecond : Date -> Int
-millisecond =
- Native.Date.millisecond
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Debug.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Debug.elm
deleted file mode 100644
index 49668f5..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Debug.elm
+++ /dev/null
@@ -1,62 +0,0 @@
-module Debug exposing
- ( log
- , crash
- )
-
-{-| This library is for investigating bugs or performance problems. It should
-*not* be used in production code.
-
-# Debugging
-@docs log, crash
--}
-
-import Native.Debug
-
-
-{-| Log a tagged value on the developer console, and then return the value.
-
- 1 + log "number" 1 -- equals 2, logs "number: 1"
- length (log "start" []) -- equals 0, logs "start: []"
-
-Notice that `log` is not a pure function! It should *only* be used for
-investigating bugs or performance problems.
--}
-log : String -> a -> a
-log =
- Native.Debug.log
-
-
-{-| Crash the program with an error message. This is an uncatchable error,
-intended for code that is soon-to-be-implemented. For example, if you are
-working with a large ADT and have partially completed a case expression, it may
-make sense to do this:
-
- type Entity = Ship | Fish | Captain | Seagull
-
- drawEntity entity =
- case entity of
- Ship ->
- ...
-
- Fish ->
- ...
-
- _ ->
- Debug.crash "TODO"
-
-The Elm compiler recognizes each `Debug.crash` and when you run into it at
-runtime, the error will point to the corresponding module name and line number.
-For `case` expressions that ends with a wildcard pattern and a crash, it will
-also show the value that snuck through. In our example, that'd be `Captain` or
-`Seagull`.
-
-**Use this if** you want to do some testing while you are partway through
-writing a function.
-
-**Do not use this if** you want to do some typical try-catch exception handling.
-Use the [`Maybe`](Maybe) or [`Result`](Result) libraries instead.
--}
-crash : String -> a
-crash =
- Native.Debug.crash
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Dict.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Dict.elm
deleted file mode 100644
index 0bb9501..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Dict.elm
+++ /dev/null
@@ -1,661 +0,0 @@
-module Dict exposing
- ( Dict
- , empty, singleton, insert, update
- , isEmpty, get, remove, member, size
- , filter
- , partition
- , foldl, foldr, map
- , union, intersect, diff, merge
- , keys, values
- , toList, fromList
- )
-
-{-| A dictionary mapping unique keys to values. The keys can be any comparable
-type. This includes `Int`, `Float`, `Time`, `Char`, `String`, and tuples or
-lists of comparable types.
-
-Insert, remove, and query operations all take *O(log n)* time.
-
-# Dictionaries
-@docs Dict
-
-# Build
-@docs empty, singleton, insert, update, remove
-
-# Query
-@docs isEmpty, member, get, size
-
-# Lists
-@docs keys, values, toList, fromList
-
-# Transform
-@docs map, foldl, foldr, filter, partition
-
-# Combine
-@docs union, intersect, diff, merge
-
--}
-
-
-import Basics exposing (..)
-import Maybe exposing (..)
-import List exposing (..)
-import Native.Debug
-import String
-
-
-
--- DICTIONARIES
-
-
--- BBlack and NBlack should only be used during the deletion
--- algorithm. Any other occurrence is a bug and should fail an assert.
-type NColor
- = Red
- | Black
- | BBlack -- Double Black, counts as 2 blacks for the invariant
- | NBlack -- Negative Black, counts as -1 blacks for the invariant
-
-
-type LeafColor
- = LBlack
- | LBBlack -- Double Black, counts as 2
-
-
-{-| A dictionary of keys and values. So a `(Dict String User)` is a dictionary
-that lets you look up a `String` (such as user names) and find the associated
-`User`.
--}
-type Dict k v
- = RBNode_elm_builtin NColor k v (Dict k v) (Dict k v)
- | RBEmpty_elm_builtin LeafColor
-
-
-{-| Create an empty dictionary. -}
-empty : Dict k v
-empty =
- RBEmpty_elm_builtin LBlack
-
-
-maxWithDefault : k -> v -> Dict k v -> (k, v)
-maxWithDefault k v r =
- case r of
- RBEmpty_elm_builtin _ ->
- (k, v)
-
- RBNode_elm_builtin _ kr vr _ rr ->
- maxWithDefault kr vr rr
-
-
-{-| Get the value associated with a key. If the key is not found, return
-`Nothing`. This is useful when you are not sure if a key will be in the
-dictionary.
-
- animals = fromList [ ("Tom", Cat), ("Jerry", Mouse) ]
-
- get "Tom" animals == Just Cat
- get "Jerry" animals == Just Mouse
- get "Spike" animals == Nothing
-
--}
-get : comparable -> Dict comparable v -> Maybe v
-get targetKey dict =
- case dict of
- RBEmpty_elm_builtin _ ->
- Nothing
-
- RBNode_elm_builtin _ key value left right ->
- case compare targetKey key of
- LT ->
- get targetKey left
-
- EQ ->
- Just value
-
- GT ->
- get targetKey right
-
-
-{-| Determine if a key is in a dictionary. -}
-member : comparable -> Dict comparable v -> Bool
-member key dict =
- case get key dict of
- Just _ ->
- True
-
- Nothing ->
- False
-
-
-{-| Determine the number of key-value pairs in the dictionary. -}
-size : Dict k v -> Int
-size dict =
- sizeHelp 0 dict
-
-
-sizeHelp : Int -> Dict k v -> Int
-sizeHelp n dict =
- case dict of
- RBEmpty_elm_builtin _ ->
- n
-
- RBNode_elm_builtin _ _ _ left right ->
- sizeHelp (sizeHelp (n+1) right) left
-
-
-{-| Determine if a dictionary is empty.
-
- isEmpty empty == True
--}
-isEmpty : Dict k v -> Bool
-isEmpty dict =
- dict == empty
-
-
-{- The actual pattern match here is somewhat lax. If it is given invalid input,
-it will do the wrong thing. The expected behavior is:
-
- red node => black node
- black node => same
- bblack node => xxx
- nblack node => xxx
-
- black leaf => same
- bblack leaf => xxx
--}
-ensureBlackRoot : Dict k v -> Dict k v
-ensureBlackRoot dict =
- case dict of
- RBNode_elm_builtin Red key value left right ->
- RBNode_elm_builtin Black key value left right
-
- _ ->
- dict
-
-
-{-| Insert a key-value pair into a dictionary. Replaces value when there is
-a collision. -}
-insert : comparable -> v -> Dict comparable v -> Dict comparable v
-insert key value dict =
- update key (always (Just value)) dict
-
-
-{-| Remove a key-value pair from a dictionary. If the key is not found,
-no changes are made. -}
-remove : comparable -> Dict comparable v -> Dict comparable v
-remove key dict =
- update key (always Nothing) dict
-
-
-type Flag = Insert | Remove | Same
-
-
-{-| Update the value of a dictionary for a specific key with a given function. -}
-update : comparable -> (Maybe v -> Maybe v) -> Dict comparable v -> Dict comparable v
-update k alter dict =
- let
- up dict =
- case dict of
- -- expecting only black nodes, never double black nodes here
- RBEmpty_elm_builtin _ ->
- case alter Nothing of
- Nothing ->
- (Same, empty)
-
- Just v ->
- (Insert, RBNode_elm_builtin Red k v empty empty)
-
- RBNode_elm_builtin clr key value left right ->
- case compare k key of
- EQ ->
- case alter (Just value) of
- Nothing ->
- (Remove, rem clr left right)
-
- Just newValue ->
- (Same, RBNode_elm_builtin clr key newValue left right)
-
- LT ->
- let (flag, newLeft) = up left in
- case flag of
- Same ->
- (Same, RBNode_elm_builtin clr key value newLeft right)
-
- Insert ->
- (Insert, balance clr key value newLeft right)
-
- Remove ->
- (Remove, bubble clr key value newLeft right)
-
- GT ->
- let (flag, newRight) = up right in
- case flag of
- Same ->
- (Same, RBNode_elm_builtin clr key value left newRight)
-
- Insert ->
- (Insert, balance clr key value left newRight)
-
- Remove ->
- (Remove, bubble clr key value left newRight)
-
- (flag, updatedDict) =
- up dict
- in
- case flag of
- Same ->
- updatedDict
-
- Insert ->
- ensureBlackRoot updatedDict
-
- Remove ->
- blacken updatedDict
-
-
-{-| Create a dictionary with one key-value pair. -}
-singleton : comparable -> v -> Dict comparable v
-singleton key value =
- insert key value empty
-
-
-
--- HELPERS
-
-
-isBBlack : Dict k v -> Bool
-isBBlack dict =
- case dict of
- RBNode_elm_builtin BBlack _ _ _ _ ->
- True
-
- RBEmpty_elm_builtin LBBlack ->
- True
-
- _ ->
- False
-
-
-moreBlack : NColor -> NColor
-moreBlack color =
- case color of
- Black ->
- BBlack
-
- Red ->
- Black
-
- NBlack ->
- Red
-
- BBlack ->
- Native.Debug.crash "Can't make a double black node more black!"
-
-
-lessBlack : NColor -> NColor
-lessBlack color =
- case color of
- BBlack ->
- Black
-
- Black ->
- Red
-
- Red ->
- NBlack
-
- NBlack ->
- Native.Debug.crash "Can't make a negative black node less black!"
-
-
-{- The actual pattern match here is somewhat lax. If it is given invalid input,
-it will do the wrong thing. The expected behavior is:
-
- node => less black node
-
- bblack leaf => black leaf
- black leaf => xxx
--}
-lessBlackTree : Dict k v -> Dict k v
-lessBlackTree dict =
- case dict of
- RBNode_elm_builtin c k v l r ->
- RBNode_elm_builtin (lessBlack c) k v l r
-
- RBEmpty_elm_builtin _ ->
- RBEmpty_elm_builtin LBlack
-
-
-reportRemBug : String -> NColor -> String -> String -> a
-reportRemBug msg c lgot rgot =
- Native.Debug.crash <|
- String.concat
- [ "Internal red-black tree invariant violated, expected "
- , msg, " and got ", toString c, "/", lgot, "/", rgot
- , "\nPlease report this bug to "
- ]
-
-
--- Remove the top node from the tree, may leave behind BBlacks
-rem : NColor -> Dict k v -> Dict k v -> Dict k v
-rem color left right =
- case (left, right) of
- (RBEmpty_elm_builtin _, RBEmpty_elm_builtin _) ->
- case color of
- Red ->
- RBEmpty_elm_builtin LBlack
-
- Black ->
- RBEmpty_elm_builtin LBBlack
-
- _ ->
- Native.Debug.crash "cannot have bblack or nblack nodes at this point"
-
- (RBEmpty_elm_builtin cl, RBNode_elm_builtin cr k v l r) ->
- case (color, cl, cr) of
- (Black, LBlack, Red) ->
- RBNode_elm_builtin Black k v l r
-
- _ ->
- reportRemBug "Black/LBlack/Red" color (toString cl) (toString cr)
-
- (RBNode_elm_builtin cl k v l r, RBEmpty_elm_builtin cr) ->
- case (color, cl, cr) of
- (Black, Red, LBlack) ->
- RBNode_elm_builtin Black k v l r
-
- _ ->
- reportRemBug "Black/Red/LBlack" color (toString cl) (toString cr)
-
- -- l and r are both RBNodes
- (RBNode_elm_builtin cl kl vl ll rl, RBNode_elm_builtin _ _ _ _ _) ->
- let
- (k, v) =
- maxWithDefault kl vl rl
-
- newLeft =
- removeMax cl kl vl ll rl
- in
- bubble color k v newLeft right
-
-
--- Kills a BBlack or moves it upward, may leave behind NBlack
-bubble : NColor -> k -> v -> Dict k v -> Dict k v -> Dict k v
-bubble c k v l r =
- if isBBlack l || isBBlack r then
- balance (moreBlack c) k v (lessBlackTree l) (lessBlackTree r)
-
- else
- RBNode_elm_builtin c k v l r
-
-
--- Removes rightmost node, may leave root as BBlack
-removeMax : NColor -> k -> v -> Dict k v -> Dict k v -> Dict k v
-removeMax c k v l r =
- case r of
- RBEmpty_elm_builtin _ ->
- rem c l r
-
- RBNode_elm_builtin cr kr vr lr rr ->
- bubble c k v l (removeMax cr kr vr lr rr)
-
-
--- generalized tree balancing act
-balance : NColor -> k -> v -> Dict k v -> Dict k v -> Dict k v
-balance c k v l r =
- let
- tree =
- RBNode_elm_builtin c k v l r
- in
- if blackish tree then
- balanceHelp tree
-
- else
- tree
-
-
-blackish : Dict k v -> Bool
-blackish t =
- case t of
- RBNode_elm_builtin c _ _ _ _ ->
- c == Black || c == BBlack
-
- RBEmpty_elm_builtin _ ->
- True
-
-
-balanceHelp : Dict k v -> Dict k v
-balanceHelp tree =
- case tree of
- -- double red: left, left
- RBNode_elm_builtin col zk zv (RBNode_elm_builtin Red yk yv (RBNode_elm_builtin Red xk xv a b) c) d ->
- balancedTree col xk xv yk yv zk zv a b c d
-
- -- double red: left, right
- RBNode_elm_builtin col zk zv (RBNode_elm_builtin Red xk xv a (RBNode_elm_builtin Red yk yv b c)) d ->
- balancedTree col xk xv yk yv zk zv a b c d
-
- -- double red: right, left
- RBNode_elm_builtin col xk xv a (RBNode_elm_builtin Red zk zv (RBNode_elm_builtin Red yk yv b c) d) ->
- balancedTree col xk xv yk yv zk zv a b c d
-
- -- double red: right, right
- RBNode_elm_builtin col xk xv a (RBNode_elm_builtin Red yk yv b (RBNode_elm_builtin Red zk zv c d)) ->
- balancedTree col xk xv yk yv zk zv a b c d
-
- -- handle double blacks
- RBNode_elm_builtin BBlack xk xv a (RBNode_elm_builtin NBlack zk zv (RBNode_elm_builtin Black yk yv b c) (RBNode_elm_builtin Black _ _ _ _ as d)) ->
- RBNode_elm_builtin Black yk yv (RBNode_elm_builtin Black xk xv a b) (balance Black zk zv c (redden d))
-
- RBNode_elm_builtin BBlack zk zv (RBNode_elm_builtin NBlack xk xv (RBNode_elm_builtin Black _ _ _ _ as a) (RBNode_elm_builtin Black yk yv b c)) d ->
- RBNode_elm_builtin Black yk yv (balance Black xk xv (redden a) b) (RBNode_elm_builtin Black zk zv c d)
-
- _ ->
- tree
-
-
-balancedTree : NColor -> k -> v -> k -> v -> k -> v -> Dict k v -> Dict k v -> Dict k v -> Dict k v -> Dict k v
-balancedTree col xk xv yk yv zk zv a b c d =
- RBNode_elm_builtin
- (lessBlack col)
- yk
- yv
- (RBNode_elm_builtin Black xk xv a b)
- (RBNode_elm_builtin Black zk zv c d)
-
-
--- make the top node black
-blacken : Dict k v -> Dict k v
-blacken t =
- case t of
- RBEmpty_elm_builtin _ ->
- RBEmpty_elm_builtin LBlack
-
- RBNode_elm_builtin _ k v l r ->
- RBNode_elm_builtin Black k v l r
-
-
--- make the top node red
-redden : Dict k v -> Dict k v
-redden t =
- case t of
- RBEmpty_elm_builtin _ ->
- Native.Debug.crash "can't make a Leaf red"
-
- RBNode_elm_builtin _ k v l r ->
- RBNode_elm_builtin Red k v l r
-
-
-
--- COMBINE
-
-
-{-| Combine two dictionaries. If there is a collision, preference is given
-to the first dictionary.
--}
-union : Dict comparable v -> Dict comparable v -> Dict comparable v
-union t1 t2 =
- foldl insert t2 t1
-
-
-{-| Keep a key-value pair when its key appears in the second dictionary.
-Preference is given to values in the first dictionary.
--}
-intersect : Dict comparable v -> Dict comparable v -> Dict comparable v
-intersect t1 t2 =
- filter (\k _ -> member k t2) t1
-
-
-{-| Keep a key-value pair when its key does not appear in the second dictionary.
--}
-diff : Dict comparable v -> Dict comparable v -> Dict comparable v
-diff t1 t2 =
- foldl (\k v t -> remove k t) t1 t2
-
-
-{-| The most general way of combining two dictionaries. You provide three
-accumulators for when a given key appears:
-
- 1. Only in the left dictionary.
- 2. In both dictionaries.
- 3. Only in the right dictionary.
-
-You then traverse all the keys from lowest to highest, building up whatever
-you want.
--}
-merge
- : (comparable -> a -> result -> result)
- -> (comparable -> a -> b -> result -> result)
- -> (comparable -> b -> result -> result)
- -> Dict comparable a
- -> Dict comparable b
- -> result
- -> result
-merge leftStep bothStep rightStep leftDict rightDict initialResult =
- let
- stepState rKey rValue (list, result) =
- case list of
- [] ->
- (list, rightStep rKey rValue result)
-
- (lKey, lValue) :: rest ->
- if lKey < rKey then
- stepState rKey rValue (rest, leftStep lKey lValue result)
-
- else if lKey > rKey then
- (list, rightStep rKey rValue result)
-
- else
- (rest, bothStep lKey lValue rValue result)
-
- (leftovers, intermediateResult) =
- foldl stepState (toList leftDict, initialResult) rightDict
- in
- List.foldl (\(k,v) result -> leftStep k v result) intermediateResult leftovers
-
-
-
--- TRANSFORM
-
-
-{-| Apply a function to all values in a dictionary.
--}
-map : (comparable -> a -> b) -> Dict comparable a -> Dict comparable b
-map f dict =
- case dict of
- RBEmpty_elm_builtin _ ->
- RBEmpty_elm_builtin LBlack
-
- RBNode_elm_builtin clr key value left right ->
- RBNode_elm_builtin clr key (f key value) (map f left) (map f right)
-
-
-{-| Fold over the key-value pairs in a dictionary, in order from lowest
-key to highest key.
--}
-foldl : (comparable -> v -> b -> b) -> b -> Dict comparable v -> b
-foldl f acc dict =
- case dict of
- RBEmpty_elm_builtin _ ->
- acc
-
- RBNode_elm_builtin _ key value left right ->
- foldl f (f key value (foldl f acc left)) right
-
-
-{-| Fold over the key-value pairs in a dictionary, in order from highest
-key to lowest key.
--}
-foldr : (comparable -> v -> b -> b) -> b -> Dict comparable v -> b
-foldr f acc t =
- case t of
- RBEmpty_elm_builtin _ ->
- acc
-
- RBNode_elm_builtin _ key value left right ->
- foldr f (f key value (foldr f acc right)) left
-
-
-{-| Keep a key-value pair when it satisfies a predicate. -}
-filter : (comparable -> v -> Bool) -> Dict comparable v -> Dict comparable v
-filter predicate dictionary =
- let
- add key value dict =
- if predicate key value then
- insert key value dict
-
- else
- dict
- in
- foldl add empty dictionary
-
-
-{-| Partition a dictionary according to a predicate. The first dictionary
-contains all key-value pairs which satisfy the predicate, and the second
-contains the rest.
--}
-partition : (comparable -> v -> Bool) -> Dict comparable v -> (Dict comparable v, Dict comparable v)
-partition predicate dict =
- let
- add key value (t1, t2) =
- if predicate key value then
- (insert key value t1, t2)
-
- else
- (t1, insert key value t2)
- in
- foldl add (empty, empty) dict
-
-
-
--- LISTS
-
-
-{-| Get all of the keys in a dictionary, sorted from lowest to highest.
-
- keys (fromList [(0,"Alice"),(1,"Bob")]) == [0,1]
--}
-keys : Dict comparable v -> List comparable
-keys dict =
- foldr (\key value keyList -> key :: keyList) [] dict
-
-
-{-| Get all of the values in a dictionary, in the order of their keys.
-
- values (fromList [(0,"Alice"),(1,"Bob")]) == ["Alice", "Bob"]
--}
-values : Dict comparable v -> List v
-values dict =
- foldr (\key value valueList -> value :: valueList) [] dict
-
-
-{-| Convert a dictionary into an association list of key-value pairs, sorted by keys. -}
-toList : Dict comparable v -> List (comparable,v)
-toList dict =
- foldr (\key value list -> (key,value) :: list) [] dict
-
-
-{-| Convert an association list into a dictionary. -}
-fromList : List (comparable,v) -> Dict comparable v
-fromList assocs =
- List.foldl (\(key,value) dict -> insert key value dict) empty assocs
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Decode.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Decode.elm
deleted file mode 100644
index 0fc853d..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Decode.elm
+++ /dev/null
@@ -1,520 +0,0 @@
-module Json.Decode exposing
- ( Decoder, string, bool, int, float
- , nullable, list, array, dict, keyValuePairs
- , field, at, index
- , maybe, oneOf
- , decodeString, decodeValue, Value
- , map, map2, map3, map4, map5, map6, map7, map8
- , lazy, value, null, succeed, fail, andThen
- )
-
-{-| Turn JSON values into Elm values. Definitely check out this [intro to
-JSON decoders][guide] to get a feel for how this library works!
-
-[guide]: https://guide.elm-lang.org/interop/json.html
-
-# Primitives
-@docs Decoder, string, bool, int, float
-
-# Data Structures
-@docs nullable, list, array, dict, keyValuePairs
-
-# Object Primitives
-@docs field, at, index
-
-# Inconsistent Structure
-@docs maybe, oneOf
-
-# Run Decoders
-@docs decodeString, decodeValue, Value
-
-# Mapping
-
-**Note:** If you run out of map functions, take a look at [elm-decode-pipeline][pipe]
-which makes it easier to handle large objects, but produces lower quality type
-errors.
-
-[pipe]: http://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest
-
-@docs map, map2, map3, map4, map5, map6, map7, map8
-
-# Fancy Decoding
-@docs lazy, value, null, succeed, fail, andThen
--}
-
-
-import Array exposing (Array)
-import Dict exposing (Dict)
-import Json.Encode as JsEncode
-import List
-import Maybe exposing (Maybe(..))
-import Result exposing (Result(..))
-import Native.Json
-
-
-
--- PRIMITIVES
-
-
-{-| A value that knows how to decode JSON values.
--}
-type Decoder a = Decoder
-
-
-{-| Decode a JSON string into an Elm `String`.
-
- decodeString string "true" == Err ...
- decodeString string "42" == Err ...
- decodeString string "3.14" == Err ...
- decodeString string "\"hello\"" == Ok "hello"
- decodeString string "{ \"hello\": 42 }" == Err ...
--}
-string : Decoder String
-string =
- Native.Json.decodePrimitive "string"
-
-
-{-| Decode a JSON boolean into an Elm `Bool`.
-
- decodeString bool "true" == Ok True
- decodeString bool "42" == Err ...
- decodeString bool "3.14" == Err ...
- decodeString bool "\"hello\"" == Err ...
- decodeString bool "{ \"hello\": 42 }" == Err ...
--}
-bool : Decoder Bool
-bool =
- Native.Json.decodePrimitive "bool"
-
-
-{-| Decode a JSON number into an Elm `Int`.
-
- decodeString int "true" == Err ...
- decodeString int "42" == Ok 42
- decodeString int "3.14" == Err ...
- decodeString int "\"hello\"" == Err ...
- decodeString int "{ \"hello\": 42 }" == Err ...
--}
-int : Decoder Int
-int =
- Native.Json.decodePrimitive "int"
-
-
-{-| Decode a JSON number into an Elm `Float`.
-
- decodeString float "true" == Err ..
- decodeString float "42" == Ok 42
- decodeString float "3.14" == Ok 3.14
- decodeString float "\"hello\"" == Err ...
- decodeString float "{ \"hello\": 42 }" == Err ...
--}
-float : Decoder Float
-float =
- Native.Json.decodePrimitive "float"
-
-
-
--- DATA STRUCTURES
-
-
-{-| Decode a nullable JSON value into an Elm value.
-
- decodeString (nullable int) "13" == Ok (Just 13)
- decodeString (nullable int) "42" == Ok (Just 42)
- decodeString (nullable int) "null" == Ok Nothing
- decodeString (nullable int) "true" == Err ..
--}
-nullable : Decoder a -> Decoder (Maybe a)
-nullable decoder =
- oneOf
- [ null Nothing
- , map Just decoder
- ]
-
-
-{-| Decode a JSON array into an Elm `List`.
-
- decodeString (list int) "[1,2,3]" == Ok [1,2,3]
- decodeString (list bool) "[true,false]" == Ok [True,False]
--}
-list : Decoder a -> Decoder (List a)
-list decoder =
- Native.Json.decodeContainer "list" decoder
-
-
-{-| Decode a JSON array into an Elm `Array`.
-
- decodeString (array int) "[1,2,3]" == Ok (Array.fromList [1,2,3])
- decodeString (array bool) "[true,false]" == Ok (Array.fromList [True,False])
--}
-array : Decoder a -> Decoder (Array a)
-array decoder =
- Native.Json.decodeContainer "array" decoder
-
-
-{-| Decode a JSON object into an Elm `Dict`.
-
- decodeString (dict int) "{ \"alice\": 42, \"bob\": 99 }"
- == Dict.fromList [("alice", 42), ("bob", 99)]
--}
-dict : Decoder a -> Decoder (Dict String a)
-dict decoder =
- map Dict.fromList (keyValuePairs decoder)
-
-
-{-| Decode a JSON object into an Elm `List` of pairs.
-
- decodeString (keyValuePairs int) "{ \"alice\": 42, \"bob\": 99 }"
- == [("alice", 42), ("bob", 99)]
--}
-keyValuePairs : Decoder a -> Decoder (List (String, a))
-keyValuePairs =
- Native.Json.decodeKeyValuePairs
-
-
-
--- OBJECT PRIMITIVES
-
-
-{-| Decode a JSON object, requiring a particular field.
-
- decodeString (field "x" int) "{ \"x\": 3 }" == Ok 3
- decodeString (field "x" int) "{ \"x\": 3, \"y\": 4 }" == Ok 3
- decodeString (field "x" int) "{ \"x\": true }" == Err ...
- decodeString (field "x" int) "{ \"y\": 4 }" == Err ...
-
- decodeString (field "name" string) "{ \"name\": \"tom\" }" == Ok "tom"
-
-The object *can* have other fields. Lots of them! The only thing this decoder
-cares about is if `x` is present and that the value there is an `Int`.
-
-Check out [`map2`](#map2) to see how to decode multiple fields!
--}
-field : String -> Decoder a -> Decoder a
-field =
- Native.Json.decodeField
-
-
-{-| Decode a nested JSON object, requiring certain fields.
-
- json = """{ "person": { "name": "tom", "age": 42 } }"""
-
- decodeString (at ["person", "name"] string) json == Ok "tom"
- decodeString (at ["person", "age" ] int ) json == Ok "42
-
-This is really just a shorthand for saying things like:
-
- field "person" (field "name" string) == at ["person","name"] string
--}
-at : List String -> Decoder a -> Decoder a
-at fields decoder =
- List.foldr field decoder fields
-
-
-{-| Decode a JSON array, requiring a particular index.
-
- json = """[ "alice", "bob", "chuck" ]"""
-
- decodeString (index 0 string) json == Ok "alice"
- decodeString (index 1 string) json == Ok "bob"
- decodeString (index 2 string) json == Ok "chuck"
- decodeString (index 3 string) json == Err ...
--}
-index : Int -> Decoder a -> Decoder a
-index =
- Native.Json.decodeIndex
-
-
-
--- WEIRD STRUCTURE
-
-
-{-| Helpful for dealing with optional fields. Here are a few slightly different
-examples:
-
- json = """{ "name": "tom", "age": 42 }"""
-
- decodeString (maybe (field "age" int )) json == Ok (Just 42)
- decodeString (maybe (field "name" int )) json == Ok Nothing
- decodeString (maybe (field "height" float)) json == Ok Nothing
-
- decodeString (field "age" (maybe int )) json == Ok (Just 42)
- decodeString (field "name" (maybe int )) json == Ok Nothing
- decodeString (field "height" (maybe float)) json == Err ...
-
-Notice the last example! It is saying we *must* have a field named `height` and
-the content *may* be a float. There is no `height` field, so the decoder fails.
-
-Point is, `maybe` will make exactly what it contains conditional. For optional
-fields, this means you probably want it *outside* a use of `field` or `at`.
--}
-maybe : Decoder a -> Decoder (Maybe a)
-maybe decoder =
- Native.Json.decodeContainer "maybe" decoder
-
-
-{-| Try a bunch of different decoders. This can be useful if the JSON may come
-in a couple different formats. For example, say you want to read an array of
-numbers, but some of them are `null`.
-
- import String
-
- badInt : Decoder Int
- badInt =
- oneOf [ int, null 0 ]
-
- -- decodeString (list badInt) "[1,2,null,4]" == Ok [1,2,0,4]
-
-Why would someone generate JSON like this? Questions like this are not good
-for your health. The point is that you can use `oneOf` to handle situations
-like this!
-
-You could also use `oneOf` to help version your data. Try the latest format,
-then a few older ones that you still support. You could use `andThen` to be
-even more particular if you wanted.
--}
-oneOf : List (Decoder a) -> Decoder a
-oneOf =
- Native.Json.oneOf
-
-
-
--- MAPPING
-
-
-{-| Transform a decoder. Maybe you just want to know the length of a string:
-
- import String
-
- stringLength : Decoder Int
- stringLength =
- map String.length string
-
-It is often helpful to use `map` with `oneOf`, like when defining `nullable`:
-
- nullable : Decoder a -> Decoder (Maybe a)
- nullable decoder =
- oneOf
- [ null Nothing
- , map Just decoder
- ]
--}
-map : (a -> value) -> Decoder a -> Decoder value
-map =
- Native.Json.map1
-
-
-{-| Try two decoders and then combine the result. We can use this to decode
-objects with many fields:
-
- type alias Point = { x : Float, y : Float }
-
- point : Decoder Point
- point =
- map2 Point
- (field "x" float)
- (field "y" float)
-
- -- decodeString point """{ "x": 3, "y": 4 }""" == Ok { x = 3, y = 4 }
-
-It tries each individual decoder and puts the result together with the `Point`
-constructor.
--}
-map2 : (a -> b -> value) -> Decoder a -> Decoder b -> Decoder value
-map2 =
- Native.Json.map2
-
-
-{-| Try three decoders and then combine the result. We can use this to decode
-objects with many fields:
-
- type alias Person = { name : String, age : Int, height : Float }
-
- person : Decoder Person
- person =
- map3 Person
- (at ["name"] string)
- (at ["info","age"] int)
- (at ["info","height"] float)
-
- -- json = """{ "name": "tom", "info": { "age": 42, "height": 1.8 } }"""
- -- decodeString person json == Ok { name = "tom", age = 42, height = 1.8 }
-
-Like `map2` it tries each decoder in order and then give the results to the
-`Person` constructor. That can be any function though!
--}
-map3 : (a -> b -> c -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder value
-map3 =
- Native.Json.map3
-
-
-{-|-}
-map4 : (a -> b -> c -> d -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder d -> Decoder value
-map4 =
- Native.Json.map4
-
-
-{-|-}
-map5 : (a -> b -> c -> d -> e -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder d -> Decoder e -> Decoder value
-map5 =
- Native.Json.map5
-
-
-{-|-}
-map6 : (a -> b -> c -> d -> e -> f -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder d -> Decoder e -> Decoder f -> Decoder value
-map6 =
- Native.Json.map6
-
-
-{-|-}
-map7 : (a -> b -> c -> d -> e -> f -> g -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder d -> Decoder e -> Decoder f -> Decoder g -> Decoder value
-map7 =
- Native.Json.map7
-
-
-{-|-}
-map8 : (a -> b -> c -> d -> e -> f -> g -> h -> value) -> Decoder a -> Decoder b -> Decoder c -> Decoder d -> Decoder e -> Decoder f -> Decoder g -> Decoder h -> Decoder value
-map8 =
- Native.Json.map8
-
-
-
--- RUN DECODERS
-
-
-{-| Parse the given string into a JSON value and then run the `Decoder` on it.
-This will fail if the string is not well-formed JSON or if the `Decoder`
-fails for some reason.
-
- decodeString int "4" == Ok 4
- decodeString int "1 + 2" == Err ...
--}
-decodeString : Decoder a -> String -> Result String a
-decodeString =
- Native.Json.runOnString
-
-
-{-| Run a `Decoder` on some JSON `Value`. You can send these JSON values
-through ports, so that is probably the main time you would use this function.
--}
-decodeValue : Decoder a -> Value -> Result String a
-decodeValue =
- Native.Json.run
-
-
-{-| A JSON value.
--}
-type alias Value = JsEncode.Value
-
-
-
--- FANCY PRIMITIVES
-
-
-{-| Ignore the JSON and produce a certain Elm value.
-
- decodeString (succeed 42) "true" == Ok 42
- decodeString (succeed 42) "[1,2,3]" == Ok 42
- decodeString (succeed 42) "hello" == Err ... -- this is not a valid JSON string
-
-This is handy when used with `oneOf` or `andThen`.
--}
-succeed : a -> Decoder a
-succeed =
- Native.Json.succeed
-
-
-{-| Ignore the JSON and make the decoder fail. This is handy when used with
-`oneOf` or `andThen` where you want to give a custom error message in some
-case.
-
-See the [`andThen`](#andThen) docs for an example.
--}
-fail : String -> Decoder a
-fail =
- Native.Json.fail
-
-
-{-| Create decoders that depend on previous results. If you are creating
-versioned data, you might do something like this:
-
- info : Decoder Info
- info =
- field "version" int
- |> andThen infoHelp
-
- infoHelp : Int -> Decoder Info
- infoHelp version =
- case version of
- 4 ->
- infoDecoder4
-
- 3 ->
- infoDecoder3
-
- _ ->
- fail <|
- "Trying to decode info, but version "
- ++ toString version ++ " is not supported."
-
- -- infoDecoder4 : Decoder Info
- -- infoDecoder3 : Decoder Info
--}
-andThen : (a -> Decoder b) -> Decoder a -> Decoder b
-andThen =
- Native.Json.andThen
-
-
-{-| Sometimes you have JSON with recursive structure, like nested comments.
-You can use `lazy` to make sure your decoder unrolls lazily.
-
- type alias Comment =
- { message : String
- , responses : Responses
- }
-
- type Responses = Responses (List Comment)
-
- comment : Decoder Comment
- comment =
- map2 Comment
- (field "message" string)
- (field "responses" (map Responses (list (lazy (\_ -> comment)))))
-
-If we had said `list comment` instead, we would start expanding the value
-infinitely. What is a `comment`? It is a decoder for objects where the
-`responses` field contains comments. What is a `comment` though? Etc.
-
-By using `list (lazy (\_ -> comment))` we make sure the decoder only expands
-to be as deep as the JSON we are given. You can read more about recursive data
-structures [here][].
-
-[here]: https://github.com/elm-lang/elm-compiler/blob/master/hints/recursive-alias.md
--}
-lazy : (() -> Decoder a) -> Decoder a
-lazy thunk =
- andThen thunk (succeed ())
-
-
-{-| Do not do anything with a JSON value, just bring it into Elm as a `Value`.
-This can be useful if you have particularly crazy data that you would like to
-deal with later. Or if you are going to send it out a port and do not care
-about its structure.
--}
-value : Decoder Value
-value =
- Native.Json.decodePrimitive "value"
-
-
-{-| Decode a `null` value into some Elm value.
-
- decodeString (null False) "null" == Ok False
- decodeString (null 42) "null" == Ok 42
- decodeString (null 42) "42" == Err ..
- decodeString (null 42) "false" == Err ..
-
-So if you ever see a `null`, this will return whatever value you specified.
--}
-null : a -> Decoder a
-null =
- Native.Json.decodeNull
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Encode.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Encode.elm
deleted file mode 100644
index 29e6fc9..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Json/Encode.elm
+++ /dev/null
@@ -1,102 +0,0 @@
-module Json.Encode exposing
- ( Value
- , encode
- , string, int, float, bool, null
- , list, array
- , object
- )
-
-{-| Library for turning Elm values into Json values.
-
-# Encoding
-@docs encode, Value
-
-# Primitives
-@docs string, int, float, bool, null
-
-# Arrays
-@docs list, array
-
-# Objects
-@docs object
--}
-
-import Array exposing (Array)
-import Native.Json
-
-
-{-| Represents a JavaScript value.
--}
-type Value = Value
-
-
-{-| Convert a `Value` into a prettified string. The first argument specifies
-the amount of indentation in the resulting string.
-
- person =
- object
- [ ("name", string "Tom")
- , ("age", int 42)
- ]
-
- compact = encode 0 person
- -- {"name":"Tom","age":42}
-
- readable = encode 4 person
- -- {
- -- "name": "Tom",
- -- "age": 42
- -- }
--}
-encode : Int -> Value -> String
-encode =
- Native.Json.encode
-
-
-{-|-}
-string : String -> Value
-string =
- Native.Json.identity
-
-
-{-|-}
-int : Int -> Value
-int =
- Native.Json.identity
-
-
-{-| Encode a Float. `Infinity` and `NaN` are encoded as `null`.
--}
-float : Float -> Value
-float =
- Native.Json.identity
-
-
-{-|-}
-bool : Bool -> Value
-bool =
- Native.Json.identity
-
-
-{-|-}
-null : Value
-null =
- Native.Json.encodeNull
-
-
-{-|-}
-object : List (String, Value) -> Value
-object =
- Native.Json.encodeObject
-
-
-{-|-}
-array : Array Value -> Value
-array =
- Native.Json.encodeArray
-
-
-{-|-}
-list : List Value -> Value
-list =
- Native.Json.encodeList
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/List.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/List.elm
deleted file mode 100644
index 0b7ddf9..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/List.elm
+++ /dev/null
@@ -1,613 +0,0 @@
-module List exposing
- ( isEmpty, length, reverse, member
- , head, tail, filter, take, drop
- , singleton, repeat, range, (::), append, concat, intersperse
- , partition, unzip
- , map, map2, map3, map4, map5
- , filterMap, concatMap, indexedMap
- , foldr, foldl
- , sum, product, maximum, minimum, all, any, scanl
- , sort, sortBy, sortWith
- )
-
-{-| A library for manipulating lists of values. Every value in a
-list must have the same type.
-
-# Basics
-@docs isEmpty, length, reverse, member
-
-# Sub-lists
-@docs head, tail, filter, take, drop
-
-# Putting Lists Together
-@docs singleton, repeat, range, (::), append, concat, intersperse
-
-# Taking Lists Apart
-@docs partition, unzip
-
-# Mapping
-@docs map, map2, map3, map4, map5
-
-If you can think of a legitimate use of `mapN` where `N` is 6 or more, please
-let us know on [the list](https://groups.google.com/forum/#!forum/elm-discuss).
-The current sentiment is that it is already quite error prone once you get to
-4 and possibly should be approached another way.
-
-# Special Maps
-@docs filterMap, concatMap, indexedMap
-
-# Folding
-@docs foldr, foldl
-
-# Special Folds
-@docs sum, product, maximum, minimum, all, any, scanl
-
-# Sorting
-@docs sort, sortBy, sortWith
-
--}
-
-import Basics exposing (..)
-import Maybe
-import Maybe exposing ( Maybe(Just,Nothing) )
-import Native.List
-
-
-{-| Add an element to the front of a list. Pronounced *cons*.
-
- 1 :: [2,3] == [1,2,3]
- 1 :: [] == [1]
--}
-(::) : a -> List a -> List a
-(::) =
- Native.List.cons
-
-
-infixr 5 ::
-
-
-{-| Extract the first element of a list.
-
- head [1,2,3] == Just 1
- head [] == Nothing
--}
-head : List a -> Maybe a
-head list =
- case list of
- x :: xs ->
- Just x
-
- [] ->
- Nothing
-
-
-{-| Extract the rest of the list.
-
- tail [1,2,3] == Just [2,3]
- tail [] == Nothing
--}
-tail : List a -> Maybe (List a)
-tail list =
- case list of
- x :: xs ->
- Just xs
-
- [] ->
- Nothing
-
-
-{-| Determine if a list is empty.
-
- isEmpty [] == True
--}
-isEmpty : List a -> Bool
-isEmpty xs =
- case xs of
- [] ->
- True
-
- _ ->
- False
-
-
-{-| Figure out whether a list contains a value.
-
- member 9 [1,2,3,4] == False
- member 4 [1,2,3,4] == True
--}
-member : a -> List a -> Bool
-member x xs =
- any (\a -> a == x) xs
-
-
-{-| Apply a function to every element of a list.
-
- map sqrt [1,4,9] == [1,2,3]
-
- map not [True,False,True] == [False,True,False]
--}
-map : (a -> b) -> List a -> List b
-map f xs =
- foldr (\x acc -> f x :: acc) [] xs
-
-
-{-| Same as `map` but the function is also applied to the index of each
-element (starting at zero).
-
- indexedMap (,) ["Tom","Sue","Bob"] == [ (0,"Tom"), (1,"Sue"), (2,"Bob") ]
--}
-indexedMap : (Int -> a -> b) -> List a -> List b
-indexedMap f xs =
- map2 f (range 0 (length xs - 1)) xs
-
-
-{-| Reduce a list from the left.
-
- foldl (::) [] [1,2,3] == [3,2,1]
--}
-foldl : (a -> b -> b) -> b -> List a -> b
-foldl func acc list =
- case list of
- [] ->
- acc
-
- x :: xs ->
- foldl func (func x acc) xs
-
-
-{-| Reduce a list from the right.
-
- foldr (+) 0 [1,2,3] == 6
--}
-foldr : (a -> b -> b) -> b -> List a -> b
-foldr =
- Native.List.foldr
-
-
-{-| Reduce a list from the left, building up all of the intermediate results into a list.
-
- scanl (+) 0 [1,2,3,4] == [0,1,3,6,10]
--}
-scanl : (a -> b -> b) -> b -> List a -> List b
-scanl f b xs =
- let
- scan1 x accAcc =
- case accAcc of
- acc :: _ ->
- f x acc :: accAcc
-
- [] ->
- [] -- impossible
- in
- reverse (foldl scan1 [b] xs)
-
-
-{-| Keep only elements that satisfy the predicate.
-
- filter isEven [1,2,3,4,5,6] == [2,4,6]
--}
-filter : (a -> Bool) -> List a -> List a
-filter pred xs =
- let
- conditionalCons front back =
- if pred front then
- front :: back
-
- else
- back
- in
- foldr conditionalCons [] xs
-
-
-{-| Apply a function that may succeed to all values in the list, but only keep
-the successes.
-
- onlyTeens =
- filterMap isTeen [3, 15, 12, 18, 24] == [15, 18]
-
- isTeen : Int -> Maybe Int
- isTeen n =
- if 13 <= n && n <= 19 then
- Just n
-
- else
- Nothing
--}
-filterMap : (a -> Maybe b) -> List a -> List b
-filterMap f xs =
- foldr (maybeCons f) [] xs
-
-
-maybeCons : (a -> Maybe b) -> a -> List b -> List b
-maybeCons f mx xs =
- case f mx of
- Just x ->
- x :: xs
-
- Nothing ->
- xs
-
-
-{-| Determine the length of a list.
-
- length [1,2,3] == 3
--}
-length : List a -> Int
-length xs =
- foldl (\_ i -> i + 1) 0 xs
-
-
-{-| Reverse a list.
-
- reverse [1,2,3,4] == [4,3,2,1]
--}
-reverse : List a -> List a
-reverse list =
- foldl (::) [] list
-
-
-{-| Determine if all elements satisfy the predicate.
-
- all isEven [2,4] == True
- all isEven [2,3] == False
- all isEven [] == True
--}
-all : (a -> Bool) -> List a -> Bool
-all isOkay list =
- not (any (not << isOkay) list)
-
-
-{-| Determine if any elements satisfy the predicate.
-
- any isEven [2,3] == True
- any isEven [1,3] == False
- any isEven [] == False
--}
-any : (a -> Bool) -> List a -> Bool
-any isOkay list =
- case list of
- [] ->
- False
-
- x :: xs ->
- -- note: (isOkay x || any isOkay xs) would not get TCO
- if isOkay x then
- True
-
- else
- any isOkay xs
-
-
-{-| Put two lists together.
-
- append [1,1,2] [3,5,8] == [1,1,2,3,5,8]
- append ['a','b'] ['c'] == ['a','b','c']
-
-You can also use [the `(++)` operator](Basics#++) to append lists.
--}
-append : List a -> List a -> List a
-append xs ys =
- case ys of
- [] ->
- xs
-
- _ ->
- foldr (::) ys xs
-
-
-{-| Concatenate a bunch of lists into a single list:
-
- concat [[1,2],[3],[4,5]] == [1,2,3,4,5]
--}
-concat : List (List a) -> List a
-concat lists =
- foldr append [] lists
-
-
-{-| Map a given function onto a list and flatten the resulting lists.
-
- concatMap f xs == concat (map f xs)
--}
-concatMap : (a -> List b) -> List a -> List b
-concatMap f list =
- concat (map f list)
-
-
-{-| Get the sum of the list elements.
-
- sum [1,2,3,4] == 10
--}
-sum : List number -> number
-sum numbers =
- foldl (+) 0 numbers
-
-
-{-| Get the product of the list elements.
-
- product [1,2,3,4] == 24
--}
-product : List number -> number
-product numbers =
- foldl (*) 1 numbers
-
-
-{-| Find the maximum element in a non-empty list.
-
- maximum [1,4,2] == Just 4
- maximum [] == Nothing
--}
-maximum : List comparable -> Maybe comparable
-maximum list =
- case list of
- x :: xs ->
- Just (foldl max x xs)
-
- _ ->
- Nothing
-
-
-{-| Find the minimum element in a non-empty list.
-
- minimum [3,2,1] == Just 1
- minimum [] == Nothing
--}
-minimum : List comparable -> Maybe comparable
-minimum list =
- case list of
- x :: xs ->
- Just (foldl min x xs)
-
- _ ->
- Nothing
-
-
-{-| Partition a list based on a predicate. The first list contains all values
-that satisfy the predicate, and the second list contains all the value that do
-not.
-
- partition (\x -> x < 3) [0,1,2,3,4,5] == ([0,1,2], [3,4,5])
- partition isEven [0,1,2,3,4,5] == ([0,2,4], [1,3,5])
--}
-partition : (a -> Bool) -> List a -> (List a, List a)
-partition pred list =
- let
- step x (trues, falses) =
- if pred x then
- (x :: trues, falses)
-
- else
- (trues, x :: falses)
- in
- foldr step ([],[]) list
-
-
-{-| Combine two lists, combining them with the given function.
-If one list is longer, the extra elements are dropped.
-
- map2 (+) [1,2,3] [1,2,3,4] == [2,4,6]
-
- map2 (,) [1,2,3] ['a','b'] == [ (1,'a'), (2,'b') ]
-
- pairs : List a -> List b -> List (a,b)
- pairs lefts rights =
- map2 (,) lefts rights
--}
-map2 : (a -> b -> result) -> List a -> List b -> List result
-map2 =
- Native.List.map2
-
-
-{-|-}
-map3 : (a -> b -> c -> result) -> List a -> List b -> List c -> List result
-map3 =
- Native.List.map3
-
-
-{-|-}
-map4 : (a -> b -> c -> d -> result) -> List a -> List b -> List c -> List d -> List result
-map4 =
- Native.List.map4
-
-
-{-|-}
-map5 : (a -> b -> c -> d -> e -> result) -> List a -> List b -> List c -> List d -> List e -> List result
-map5 =
- Native.List.map5
-
-
-{-| Decompose a list of tuples into a tuple of lists.
-
- unzip [(0, True), (17, False), (1337, True)] == ([0,17,1337], [True,False,True])
--}
-unzip : List (a,b) -> (List a, List b)
-unzip pairs =
- let
- step (x,y) (xs,ys) =
- (x :: xs, y :: ys)
- in
- foldr step ([], []) pairs
-
-
-{-| Places the given value between all members of the given list.
-
- intersperse "on" ["turtles","turtles","turtles"] == ["turtles","on","turtles","on","turtles"]
--}
-intersperse : a -> List a -> List a
-intersperse sep xs =
- case xs of
- [] ->
- []
-
- hd :: tl ->
- let
- step x rest =
- sep :: x :: rest
-
- spersed =
- foldr step [] tl
- in
- hd :: spersed
-
-
-{-| Take the first *n* members of a list.
-
- take 2 [1,2,3,4] == [1,2]
--}
-take : Int -> List a -> List a
-take n list =
- takeFast 0 n list
-
-
-takeFast : Int -> Int -> List a -> List a
-takeFast ctr n list =
- if n <= 0 then
- []
- else
- case ( n, list ) of
- ( _, [] ) ->
- list
-
- ( 1, x :: _ ) ->
- [ x ]
-
- ( 2, x :: y :: _ ) ->
- [ x, y ]
-
- ( 3, x :: y :: z :: _ ) ->
- [ x, y, z ]
-
- ( _, x :: y :: z :: w :: tl ) ->
- if ctr > 1000 then
- x :: y :: z :: w :: takeTailRec (n - 4) tl
- else
- x :: y :: z :: w :: takeFast (ctr + 1) (n - 4) tl
-
- _ ->
- list
-
-takeTailRec : Int -> List a -> List a
-takeTailRec n list =
- reverse (takeReverse n list [])
-
-
-takeReverse : Int -> List a -> List a -> List a
-takeReverse n list taken =
- if n <= 0 then
- taken
- else
- case list of
- [] ->
- taken
-
- x :: xs ->
- takeReverse (n - 1) xs (x :: taken)
-
-
-{-| Drop the first *n* members of a list.
-
- drop 2 [1,2,3,4] == [3,4]
--}
-drop : Int -> List a -> List a
-drop n list =
- if n <= 0 then
- list
-
- else
- case list of
- [] ->
- list
-
- x :: xs ->
- drop (n-1) xs
-
-
-{-| Create a list with only one element:
-
- singleton 1234 == [1234]
- singleton "hi" == ["hi"]
--}
-singleton : a -> List a
-singleton value =
- [value]
-
-
-{-| Create a list with *n* copies of a value:
-
- repeat 3 (0,0) == [(0,0),(0,0),(0,0)]
--}
-repeat : Int -> a -> List a
-repeat n value =
- repeatHelp [] n value
-
-
-repeatHelp : List a -> Int -> a -> List a
-repeatHelp result n value =
- if n <= 0 then
- result
-
- else
- repeatHelp (value :: result) (n-1) value
-
-
-{-| Create a list of numbers, every element increasing by one.
-You give the lowest and highest number that should be in the list.
-
- range 3 6 == [3, 4, 5, 6]
- range 3 3 == [3]
- range 6 3 == []
--}
-range : Int -> Int -> List Int
-range lo hi =
- rangeHelp lo hi []
-
-
-rangeHelp : Int -> Int -> List Int -> List Int
-rangeHelp lo hi list =
- if lo <= hi then
- rangeHelp lo (hi - 1) (hi :: list)
-
- else
- list
-
-
-{-| Sort values from lowest to highest
-
- sort [3,1,5] == [1,3,5]
--}
-sort : List comparable -> List comparable
-sort xs =
- sortBy identity xs
-
-
-{-| Sort values by a derived property.
-
- alice = { name="Alice", height=1.62 }
- bob = { name="Bob" , height=1.85 }
- chuck = { name="Chuck", height=1.76 }
-
- sortBy .name [chuck,alice,bob] == [alice,bob,chuck]
- sortBy .height [chuck,alice,bob] == [alice,chuck,bob]
-
- sortBy String.length ["mouse","cat"] == ["cat","mouse"]
--}
-sortBy : (a -> comparable) -> List a -> List a
-sortBy =
- Native.List.sortBy
-
-
-{-| Sort values with a custom comparison function.
-
- sortWith flippedComparison [1,2,3,4,5] == [5,4,3,2,1]
-
- flippedComparison a b =
- case compare a b of
- LT -> GT
- EQ -> EQ
- GT -> LT
-
-This is also the most general sort function, allowing you
-to define any other: `sort == sortWith compare`
--}
-sortWith : (a -> a -> Order) -> List a -> List a
-sortWith =
- Native.List.sortWith
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Maybe.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Maybe.elm
deleted file mode 100644
index 337a246..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Maybe.elm
+++ /dev/null
@@ -1,157 +0,0 @@
-module Maybe exposing
- ( Maybe(Just,Nothing)
- , andThen
- , map, map2, map3, map4, map5
- , withDefault
- )
-
-{-| This library fills a bunch of important niches in Elm. A `Maybe` can help
-you with optional arguments, error handling, and records with optional fields.
-
-# Definition
-@docs Maybe
-
-# Common Helpers
-@docs withDefault, map, map2, map3, map4, map5
-
-# Chaining Maybes
-@docs andThen
--}
-
-{-| Represent values that may or may not exist. It can be useful if you have a
-record field that is only filled in sometimes. Or if a function takes a value
-sometimes, but does not absolutely need it.
-
- -- A person, but maybe we do not know their age.
- type alias Person =
- { name : String
- , age : Maybe Int
- }
-
- tom = { name = "Tom", age = Just 42 }
- sue = { name = "Sue", age = Nothing }
--}
-type Maybe a
- = Just a
- | Nothing
-
-
-{-| Provide a default value, turning an optional value into a normal
-value. This comes in handy when paired with functions like
-[`Dict.get`](Dict#get) which gives back a `Maybe`.
-
- withDefault 100 (Just 42) -- 42
- withDefault 100 Nothing -- 100
-
- withDefault "unknown" (Dict.get "Tom" Dict.empty) -- "unknown"
-
--}
-withDefault : a -> Maybe a -> a
-withDefault default maybe =
- case maybe of
- Just value -> value
- Nothing -> default
-
-
-{-| Transform a `Maybe` value with a given function:
-
- map sqrt (Just 9) == Just 3
- map sqrt Nothing == Nothing
--}
-map : (a -> b) -> Maybe a -> Maybe b
-map f maybe =
- case maybe of
- Just value -> Just (f value)
- Nothing -> Nothing
-
-
-{-| Apply a function if all the arguments are `Just` a value.
-
- map2 (+) (Just 3) (Just 4) == Just 7
- map2 (+) (Just 3) Nothing == Nothing
- map2 (+) Nothing (Just 4) == Nothing
--}
-map2 : (a -> b -> value) -> Maybe a -> Maybe b -> Maybe value
-map2 func ma mb =
- case (ma,mb) of
- (Just a, Just b) ->
- Just (func a b)
-
- _ ->
- Nothing
-
-
-{-|-}
-map3 : (a -> b -> c -> value) -> Maybe a -> Maybe b -> Maybe c -> Maybe value
-map3 func ma mb mc =
- case (ma,mb,mc) of
- (Just a, Just b, Just c) ->
- Just (func a b c)
-
- _ ->
- Nothing
-
-
-{-|-}
-map4 : (a -> b -> c -> d -> value) -> Maybe a -> Maybe b -> Maybe c -> Maybe d -> Maybe value
-map4 func ma mb mc md =
- case (ma,mb,mc,md) of
- (Just a, Just b, Just c, Just d) ->
- Just (func a b c d)
-
- _ ->
- Nothing
-
-
-{-|-}
-map5 : (a -> b -> c -> d -> e -> value) -> Maybe a -> Maybe b -> Maybe c -> Maybe d -> Maybe e -> Maybe value
-map5 func ma mb mc md me =
- case (ma,mb,mc,md,me) of
- (Just a, Just b, Just c, Just d, Just e) ->
- Just (func a b c d e)
-
- _ ->
- Nothing
-
-
-{-| Chain together many computations that may fail. It is helpful to see its
-definition:
-
- andThen : (a -> Maybe b) -> Maybe a -> Maybe b
- andThen callback maybe =
- case maybe of
- Just value ->
- callback value
-
- Nothing ->
- Nothing
-
-This means we only continue with the callback if things are going well. For
-example, say you need to use (`head : List Int -> Maybe Int`) to get the
-first month from a `List` and then make sure it is between 1 and 12:
-
- toValidMonth : Int -> Maybe Int
- toValidMonth month =
- if month >= 1 && month <= 12 then
- Just month
- else
- Nothing
-
- getFirstMonth : List Int -> Maybe Int
- getFirstMonth months =
- head months
- |> andThen toValidMonth
-
-If `head` fails and results in `Nothing` (because the `List` was `empty`),
-this entire chain of operations will short-circuit and result in `Nothing`.
-If `toValidMonth` results in `Nothing`, again the chain of computations
-will result in `Nothing`.
--}
-andThen : (a -> Maybe b) -> Maybe a -> Maybe b
-andThen callback maybeValue =
- case maybeValue of
- Just value ->
- callback value
-
- Nothing ->
- Nothing
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Array.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Array.js
deleted file mode 100644
index 7ddd42d..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Array.js
+++ /dev/null
@@ -1,967 +0,0 @@
-//import Native.List //
-
-var _elm_lang$core$Native_Array = function() {
-
-// A RRB-Tree has two distinct data types.
-// Leaf -> "height" is always 0
-// "table" is an array of elements
-// Node -> "height" is always greater than 0
-// "table" is an array of child nodes
-// "lengths" is an array of accumulated lengths of the child nodes
-
-// M is the maximal table size. 32 seems fast. E is the allowed increase
-// of search steps when concatting to find an index. Lower values will
-// decrease balancing, but will increase search steps.
-var M = 32;
-var E = 2;
-
-// An empty array.
-var empty = {
- ctor: '_Array',
- height: 0,
- table: []
-};
-
-
-function get(i, array)
-{
- if (i < 0 || i >= length(array))
- {
- throw new Error(
- 'Index ' + i + ' is out of range. Check the length of ' +
- 'your array first or use getMaybe or getWithDefault.');
- }
- return unsafeGet(i, array);
-}
-
-
-function unsafeGet(i, array)
-{
- for (var x = array.height; x > 0; x--)
- {
- var slot = i >> (x * 5);
- while (array.lengths[slot] <= i)
- {
- slot++;
- }
- if (slot > 0)
- {
- i -= array.lengths[slot - 1];
- }
- array = array.table[slot];
- }
- return array.table[i];
-}
-
-
-// Sets the value at the index i. Only the nodes leading to i will get
-// copied and updated.
-function set(i, item, array)
-{
- if (i < 0 || length(array) <= i)
- {
- return array;
- }
- return unsafeSet(i, item, array);
-}
-
-
-function unsafeSet(i, item, array)
-{
- array = nodeCopy(array);
-
- if (array.height === 0)
- {
- array.table[i] = item;
- }
- else
- {
- var slot = getSlot(i, array);
- if (slot > 0)
- {
- i -= array.lengths[slot - 1];
- }
- array.table[slot] = unsafeSet(i, item, array.table[slot]);
- }
- return array;
-}
-
-
-function initialize(len, f)
-{
- if (len <= 0)
- {
- return empty;
- }
- var h = Math.floor( Math.log(len) / Math.log(M) );
- return initialize_(f, h, 0, len);
-}
-
-function initialize_(f, h, from, to)
-{
- if (h === 0)
- {
- var table = new Array((to - from) % (M + 1));
- for (var i = 0; i < table.length; i++)
- {
- table[i] = f(from + i);
- }
- return {
- ctor: '_Array',
- height: 0,
- table: table
- };
- }
-
- var step = Math.pow(M, h);
- var table = new Array(Math.ceil((to - from) / step));
- var lengths = new Array(table.length);
- for (var i = 0; i < table.length; i++)
- {
- table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
- lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);
- }
- return {
- ctor: '_Array',
- height: h,
- table: table,
- lengths: lengths
- };
-}
-
-function fromList(list)
-{
- if (list.ctor === '[]')
- {
- return empty;
- }
-
- // Allocate M sized blocks (table) and write list elements to it.
- var table = new Array(M);
- var nodes = [];
- var i = 0;
-
- while (list.ctor !== '[]')
- {
- table[i] = list._0;
- list = list._1;
- i++;
-
- // table is full, so we can push a leaf containing it into the
- // next node.
- if (i === M)
- {
- var leaf = {
- ctor: '_Array',
- height: 0,
- table: table
- };
- fromListPush(leaf, nodes);
- table = new Array(M);
- i = 0;
- }
- }
-
- // Maybe there is something left on the table.
- if (i > 0)
- {
- var leaf = {
- ctor: '_Array',
- height: 0,
- table: table.splice(0, i)
- };
- fromListPush(leaf, nodes);
- }
-
- // Go through all of the nodes and eventually push them into higher nodes.
- for (var h = 0; h < nodes.length - 1; h++)
- {
- if (nodes[h].table.length > 0)
- {
- fromListPush(nodes[h], nodes);
- }
- }
-
- var head = nodes[nodes.length - 1];
- if (head.height > 0 && head.table.length === 1)
- {
- return head.table[0];
- }
- else
- {
- return head;
- }
-}
-
-// Push a node into a higher node as a child.
-function fromListPush(toPush, nodes)
-{
- var h = toPush.height;
-
- // Maybe the node on this height does not exist.
- if (nodes.length === h)
- {
- var node = {
- ctor: '_Array',
- height: h + 1,
- table: [],
- lengths: []
- };
- nodes.push(node);
- }
-
- nodes[h].table.push(toPush);
- var len = length(toPush);
- if (nodes[h].lengths.length > 0)
- {
- len += nodes[h].lengths[nodes[h].lengths.length - 1];
- }
- nodes[h].lengths.push(len);
-
- if (nodes[h].table.length === M)
- {
- fromListPush(nodes[h], nodes);
- nodes[h] = {
- ctor: '_Array',
- height: h + 1,
- table: [],
- lengths: []
- };
- }
-}
-
-// Pushes an item via push_ to the bottom right of a tree.
-function push(item, a)
-{
- var pushed = push_(item, a);
- if (pushed !== null)
- {
- return pushed;
- }
-
- var newTree = create(item, a.height);
- return siblise(a, newTree);
-}
-
-// Recursively tries to push an item to the bottom-right most
-// tree possible. If there is no space left for the item,
-// null will be returned.
-function push_(item, a)
-{
- // Handle resursion stop at leaf level.
- if (a.height === 0)
- {
- if (a.table.length < M)
- {
- var newA = {
- ctor: '_Array',
- height: 0,
- table: a.table.slice()
- };
- newA.table.push(item);
- return newA;
- }
- else
- {
- return null;
- }
- }
-
- // Recursively push
- var pushed = push_(item, botRight(a));
-
- // There was space in the bottom right tree, so the slot will
- // be updated.
- if (pushed !== null)
- {
- var newA = nodeCopy(a);
- newA.table[newA.table.length - 1] = pushed;
- newA.lengths[newA.lengths.length - 1]++;
- return newA;
- }
-
- // When there was no space left, check if there is space left
- // for a new slot with a tree which contains only the item
- // at the bottom.
- if (a.table.length < M)
- {
- var newSlot = create(item, a.height - 1);
- var newA = nodeCopy(a);
- newA.table.push(newSlot);
- newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));
- return newA;
- }
- else
- {
- return null;
- }
-}
-
-// Converts an array into a list of elements.
-function toList(a)
-{
- return toList_(_elm_lang$core$Native_List.Nil, a);
-}
-
-function toList_(list, a)
-{
- for (var i = a.table.length - 1; i >= 0; i--)
- {
- list =
- a.height === 0
- ? _elm_lang$core$Native_List.Cons(a.table[i], list)
- : toList_(list, a.table[i]);
- }
- return list;
-}
-
-// Maps a function over the elements of an array.
-function map(f, a)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: new Array(a.table.length)
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths;
- }
- for (var i = 0; i < a.table.length; i++)
- {
- newA.table[i] =
- a.height === 0
- ? f(a.table[i])
- : map(f, a.table[i]);
- }
- return newA;
-}
-
-// Maps a function over the elements with their index as first argument.
-function indexedMap(f, a)
-{
- return indexedMap_(f, a, 0);
-}
-
-function indexedMap_(f, a, from)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: new Array(a.table.length)
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths;
- }
- for (var i = 0; i < a.table.length; i++)
- {
- newA.table[i] =
- a.height === 0
- ? A2(f, from + i, a.table[i])
- : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);
- }
- return newA;
-}
-
-function foldl(f, b, a)
-{
- if (a.height === 0)
- {
- for (var i = 0; i < a.table.length; i++)
- {
- b = A2(f, a.table[i], b);
- }
- }
- else
- {
- for (var i = 0; i < a.table.length; i++)
- {
- b = foldl(f, b, a.table[i]);
- }
- }
- return b;
-}
-
-function foldr(f, b, a)
-{
- if (a.height === 0)
- {
- for (var i = a.table.length; i--; )
- {
- b = A2(f, a.table[i], b);
- }
- }
- else
- {
- for (var i = a.table.length; i--; )
- {
- b = foldr(f, b, a.table[i]);
- }
- }
- return b;
-}
-
-// TODO: currently, it slices the right, then the left. This can be
-// optimized.
-function slice(from, to, a)
-{
- if (from < 0)
- {
- from += length(a);
- }
- if (to < 0)
- {
- to += length(a);
- }
- return sliceLeft(from, sliceRight(to, a));
-}
-
-function sliceRight(to, a)
-{
- if (to === length(a))
- {
- return a;
- }
-
- // Handle leaf level.
- if (a.height === 0)
- {
- var newA = { ctor:'_Array', height:0 };
- newA.table = a.table.slice(0, to);
- return newA;
- }
-
- // Slice the right recursively.
- var right = getSlot(to, a);
- var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);
-
- // Maybe the a node is not even needed, as sliced contains the whole slice.
- if (right === 0)
- {
- return sliced;
- }
-
- // Create new node.
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice(0, right),
- lengths: a.lengths.slice(0, right)
- };
- if (sliced.table.length > 0)
- {
- newA.table[right] = sliced;
- newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);
- }
- return newA;
-}
-
-function sliceLeft(from, a)
-{
- if (from === 0)
- {
- return a;
- }
-
- // Handle leaf level.
- if (a.height === 0)
- {
- var newA = { ctor:'_Array', height:0 };
- newA.table = a.table.slice(from, a.table.length + 1);
- return newA;
- }
-
- // Slice the left recursively.
- var left = getSlot(from, a);
- var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);
-
- // Maybe the a node is not even needed, as sliced contains the whole slice.
- if (left === a.table.length - 1)
- {
- return sliced;
- }
-
- // Create new node.
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice(left, a.table.length + 1),
- lengths: new Array(a.table.length - left)
- };
- newA.table[0] = sliced;
- var len = 0;
- for (var i = 0; i < newA.table.length; i++)
- {
- len += length(newA.table[i]);
- newA.lengths[i] = len;
- }
-
- return newA;
-}
-
-// Appends two trees.
-function append(a,b)
-{
- if (a.table.length === 0)
- {
- return b;
- }
- if (b.table.length === 0)
- {
- return a;
- }
-
- var c = append_(a, b);
-
- // Check if both nodes can be crunshed together.
- if (c[0].table.length + c[1].table.length <= M)
- {
- if (c[0].table.length === 0)
- {
- return c[1];
- }
- if (c[1].table.length === 0)
- {
- return c[0];
- }
-
- // Adjust .table and .lengths
- c[0].table = c[0].table.concat(c[1].table);
- if (c[0].height > 0)
- {
- var len = length(c[0]);
- for (var i = 0; i < c[1].lengths.length; i++)
- {
- c[1].lengths[i] += len;
- }
- c[0].lengths = c[0].lengths.concat(c[1].lengths);
- }
-
- return c[0];
- }
-
- if (c[0].height > 0)
- {
- var toRemove = calcToRemove(a, b);
- if (toRemove > E)
- {
- c = shuffle(c[0], c[1], toRemove);
- }
- }
-
- return siblise(c[0], c[1]);
-}
-
-// Returns an array of two nodes; right and left. One node _may_ be empty.
-function append_(a, b)
-{
- if (a.height === 0 && b.height === 0)
- {
- return [a, b];
- }
-
- if (a.height !== 1 || b.height !== 1)
- {
- if (a.height === b.height)
- {
- a = nodeCopy(a);
- b = nodeCopy(b);
- var appended = append_(botRight(a), botLeft(b));
-
- insertRight(a, appended[1]);
- insertLeft(b, appended[0]);
- }
- else if (a.height > b.height)
- {
- a = nodeCopy(a);
- var appended = append_(botRight(a), b);
-
- insertRight(a, appended[0]);
- b = parentise(appended[1], appended[1].height + 1);
- }
- else
- {
- b = nodeCopy(b);
- var appended = append_(a, botLeft(b));
-
- var left = appended[0].table.length === 0 ? 0 : 1;
- var right = left === 0 ? 1 : 0;
- insertLeft(b, appended[left]);
- a = parentise(appended[right], appended[right].height + 1);
- }
- }
-
- // Check if balancing is needed and return based on that.
- if (a.table.length === 0 || b.table.length === 0)
- {
- return [a, b];
- }
-
- var toRemove = calcToRemove(a, b);
- if (toRemove <= E)
- {
- return [a, b];
- }
- return shuffle(a, b, toRemove);
-}
-
-// Helperfunctions for append_. Replaces a child node at the side of the parent.
-function insertRight(parent, node)
-{
- var index = parent.table.length - 1;
- parent.table[index] = node;
- parent.lengths[index] = length(node);
- parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;
-}
-
-function insertLeft(parent, node)
-{
- if (node.table.length > 0)
- {
- parent.table[0] = node;
- parent.lengths[0] = length(node);
-
- var len = length(parent.table[0]);
- for (var i = 1; i < parent.lengths.length; i++)
- {
- len += length(parent.table[i]);
- parent.lengths[i] = len;
- }
- }
- else
- {
- parent.table.shift();
- for (var i = 1; i < parent.lengths.length; i++)
- {
- parent.lengths[i] = parent.lengths[i] - parent.lengths[0];
- }
- parent.lengths.shift();
- }
-}
-
-// Returns the extra search steps for E. Refer to the paper.
-function calcToRemove(a, b)
-{
- var subLengths = 0;
- for (var i = 0; i < a.table.length; i++)
- {
- subLengths += a.table[i].table.length;
- }
- for (var i = 0; i < b.table.length; i++)
- {
- subLengths += b.table[i].table.length;
- }
-
- var toRemove = a.table.length + b.table.length;
- return toRemove - (Math.floor((subLengths - 1) / M) + 1);
-}
-
-// get2, set2 and saveSlot are helpers for accessing elements over two arrays.
-function get2(a, b, index)
-{
- return index < a.length
- ? a[index]
- : b[index - a.length];
-}
-
-function set2(a, b, index, value)
-{
- if (index < a.length)
- {
- a[index] = value;
- }
- else
- {
- b[index - a.length] = value;
- }
-}
-
-function saveSlot(a, b, index, slot)
-{
- set2(a.table, b.table, index, slot);
-
- var l = (index === 0 || index === a.lengths.length)
- ? 0
- : get2(a.lengths, a.lengths, index - 1);
-
- set2(a.lengths, b.lengths, index, l + length(slot));
-}
-
-// Creates a node or leaf with a given length at their arrays for perfomance.
-// Is only used by shuffle.
-function createNode(h, length)
-{
- if (length < 0)
- {
- length = 0;
- }
- var a = {
- ctor: '_Array',
- height: h,
- table: new Array(length)
- };
- if (h > 0)
- {
- a.lengths = new Array(length);
- }
- return a;
-}
-
-// Returns an array of two balanced nodes.
-function shuffle(a, b, toRemove)
-{
- var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));
- var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));
-
- // Skip the slots with size M. More precise: copy the slot references
- // to the new node
- var read = 0;
- while (get2(a.table, b.table, read).table.length % M === 0)
- {
- set2(newA.table, newB.table, read, get2(a.table, b.table, read));
- set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));
- read++;
- }
-
- // Pulling items from left to right, caching in a slot before writing
- // it into the new nodes.
- var write = read;
- var slot = new createNode(a.height - 1, 0);
- var from = 0;
-
- // If the current slot is still containing data, then there will be at
- // least one more write, so we do not break this loop yet.
- while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)
- {
- // Find out the max possible items for copying.
- var source = get2(a.table, b.table, read);
- var to = Math.min(M - slot.table.length, source.table.length);
-
- // Copy and adjust size table.
- slot.table = slot.table.concat(source.table.slice(from, to));
- if (slot.height > 0)
- {
- var len = slot.lengths.length;
- for (var i = len; i < len + to - from; i++)
- {
- slot.lengths[i] = length(slot.table[i]);
- slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);
- }
- }
-
- from += to;
-
- // Only proceed to next slots[i] if the current one was
- // fully copied.
- if (source.table.length <= to)
- {
- read++; from = 0;
- }
-
- // Only create a new slot if the current one is filled up.
- if (slot.table.length === M)
- {
- saveSlot(newA, newB, write, slot);
- slot = createNode(a.height - 1, 0);
- write++;
- }
- }
-
- // Cleanup after the loop. Copy the last slot into the new nodes.
- if (slot.table.length > 0)
- {
- saveSlot(newA, newB, write, slot);
- write++;
- }
-
- // Shift the untouched slots to the left
- while (read < a.table.length + b.table.length )
- {
- saveSlot(newA, newB, write, get2(a.table, b.table, read));
- read++;
- write++;
- }
-
- return [newA, newB];
-}
-
-// Navigation functions
-function botRight(a)
-{
- return a.table[a.table.length - 1];
-}
-function botLeft(a)
-{
- return a.table[0];
-}
-
-// Copies a node for updating. Note that you should not use this if
-// only updating only one of "table" or "lengths" for performance reasons.
-function nodeCopy(a)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice()
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths.slice();
- }
- return newA;
-}
-
-// Returns how many items are in the tree.
-function length(array)
-{
- if (array.height === 0)
- {
- return array.table.length;
- }
- else
- {
- return array.lengths[array.lengths.length - 1];
- }
-}
-
-// Calculates in which slot of "table" the item probably is, then
-// find the exact slot via forward searching in "lengths". Returns the index.
-function getSlot(i, a)
-{
- var slot = i >> (5 * a.height);
- while (a.lengths[slot] <= i)
- {
- slot++;
- }
- return slot;
-}
-
-// Recursively creates a tree with a given height containing
-// only the given item.
-function create(item, h)
-{
- if (h === 0)
- {
- return {
- ctor: '_Array',
- height: 0,
- table: [item]
- };
- }
- return {
- ctor: '_Array',
- height: h,
- table: [create(item, h - 1)],
- lengths: [1]
- };
-}
-
-// Recursively creates a tree that contains the given tree.
-function parentise(tree, h)
-{
- if (h === tree.height)
- {
- return tree;
- }
-
- return {
- ctor: '_Array',
- height: h,
- table: [parentise(tree, h - 1)],
- lengths: [length(tree)]
- };
-}
-
-// Emphasizes blood brotherhood beneath two trees.
-function siblise(a, b)
-{
- return {
- ctor: '_Array',
- height: a.height + 1,
- table: [a, b],
- lengths: [length(a), length(a) + length(b)]
- };
-}
-
-function toJSArray(a)
-{
- var jsArray = new Array(length(a));
- toJSArray_(jsArray, 0, a);
- return jsArray;
-}
-
-function toJSArray_(jsArray, i, a)
-{
- for (var t = 0; t < a.table.length; t++)
- {
- if (a.height === 0)
- {
- jsArray[i + t] = a.table[t];
- }
- else
- {
- var inc = t === 0 ? 0 : a.lengths[t - 1];
- toJSArray_(jsArray, i + inc, a.table[t]);
- }
- }
-}
-
-function fromJSArray(jsArray)
-{
- if (jsArray.length === 0)
- {
- return empty;
- }
- var h = Math.floor(Math.log(jsArray.length) / Math.log(M));
- return fromJSArray_(jsArray, h, 0, jsArray.length);
-}
-
-function fromJSArray_(jsArray, h, from, to)
-{
- if (h === 0)
- {
- return {
- ctor: '_Array',
- height: 0,
- table: jsArray.slice(from, to)
- };
- }
-
- var step = Math.pow(M, h);
- var table = new Array(Math.ceil((to - from) / step));
- var lengths = new Array(table.length);
- for (var i = 0; i < table.length; i++)
- {
- table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
- lengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);
- }
- return {
- ctor: '_Array',
- height: h,
- table: table,
- lengths: lengths
- };
-}
-
-return {
- empty: empty,
- fromList: fromList,
- toList: toList,
- initialize: F2(initialize),
- append: F2(append),
- push: F2(push),
- slice: F3(slice),
- get: F2(get),
- set: F3(set),
- map: F2(map),
- indexedMap: F2(indexedMap),
- foldl: F3(foldl),
- foldr: F3(foldr),
- length: length,
-
- toJSArray: toJSArray,
- fromJSArray: fromJSArray
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Basics.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Basics.js
deleted file mode 100644
index 1d97bf3..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Basics.js
+++ /dev/null
@@ -1,141 +0,0 @@
-//import Native.Utils //
-
-var _elm_lang$core$Native_Basics = function() {
-
-function div(a, b)
-{
- return (a / b) | 0;
-}
-function rem(a, b)
-{
- return a % b;
-}
-function mod(a, b)
-{
- if (b === 0)
- {
- throw new Error('Cannot perform mod 0. Division by zero error.');
- }
- var r = a % b;
- var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));
-
- return m === b ? 0 : m;
-}
-function logBase(base, n)
-{
- return Math.log(n) / Math.log(base);
-}
-function negate(n)
-{
- return -n;
-}
-function abs(n)
-{
- return n < 0 ? -n : n;
-}
-
-function min(a, b)
-{
- return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b;
-}
-function max(a, b)
-{
- return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b;
-}
-function clamp(lo, hi, n)
-{
- return _elm_lang$core$Native_Utils.cmp(n, lo) < 0
- ? lo
- : _elm_lang$core$Native_Utils.cmp(n, hi) > 0
- ? hi
- : n;
-}
-
-var ord = ['LT', 'EQ', 'GT'];
-
-function compare(x, y)
-{
- return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] };
-}
-
-function xor(a, b)
-{
- return a !== b;
-}
-function not(b)
-{
- return !b;
-}
-function isInfinite(n)
-{
- return n === Infinity || n === -Infinity;
-}
-
-function truncate(n)
-{
- return n | 0;
-}
-
-function degrees(d)
-{
- return d * Math.PI / 180;
-}
-function turns(t)
-{
- return 2 * Math.PI * t;
-}
-function fromPolar(point)
-{
- var r = point._0;
- var t = point._1;
- return _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));
-}
-function toPolar(point)
-{
- var x = point._0;
- var y = point._1;
- return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));
-}
-
-return {
- div: F2(div),
- rem: F2(rem),
- mod: F2(mod),
-
- pi: Math.PI,
- e: Math.E,
- cos: Math.cos,
- sin: Math.sin,
- tan: Math.tan,
- acos: Math.acos,
- asin: Math.asin,
- atan: Math.atan,
- atan2: F2(Math.atan2),
-
- degrees: degrees,
- turns: turns,
- fromPolar: fromPolar,
- toPolar: toPolar,
-
- sqrt: Math.sqrt,
- logBase: F2(logBase),
- negate: negate,
- abs: abs,
- min: F2(min),
- max: F2(max),
- clamp: F3(clamp),
- compare: F2(compare),
-
- xor: F2(xor),
- not: not,
-
- truncate: truncate,
- ceiling: Math.ceil,
- floor: Math.floor,
- round: Math.round,
- toFloat: function(x) { return x; },
- isNaN: isNaN,
- isInfinite: isInfinite
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Bitwise.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Bitwise.js
deleted file mode 100644
index a597f82..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Bitwise.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var _elm_lang$core$Native_Bitwise = function() {
-
-return {
- and: F2(function and(a, b) { return a & b; }),
- or: F2(function or(a, b) { return a | b; }),
- xor: F2(function xor(a, b) { return a ^ b; }),
- complement: function complement(a) { return ~a; },
- shiftLeftBy: F2(function(offset, a) { return a << offset; }),
- shiftRightBy: F2(function(offset, a) { return a >> offset; }),
- shiftRightZfBy: F2(function(offset, a) { return a >>> offset; })
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Char.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Char.js
deleted file mode 100644
index 56c2957..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Char.js
+++ /dev/null
@@ -1,14 +0,0 @@
-//import Native.Utils //
-
-var _elm_lang$core$Native_Char = function() {
-
-return {
- fromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); },
- toCode: function(c) { return c.charCodeAt(0); },
- toUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); },
- toLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); },
- toLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); },
- toLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); }
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Date.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Date.js
deleted file mode 100644
index cb64193..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Date.js
+++ /dev/null
@@ -1,33 +0,0 @@
-//import Result //
-
-var _elm_lang$core$Native_Date = function() {
-
-function fromString(str)
-{
- var date = new Date(str);
- return isNaN(date.getTime())
- ? _elm_lang$core$Result$Err('Unable to parse \'' + str + '\' as a date. Dates must be in the ISO 8601 format.')
- : _elm_lang$core$Result$Ok(date);
-}
-
-var dayTable = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
-var monthTable =
- ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
-
-
-return {
- fromString: fromString,
- year: function(d) { return d.getFullYear(); },
- month: function(d) { return { ctor: monthTable[d.getMonth()] }; },
- day: function(d) { return d.getDate(); },
- hour: function(d) { return d.getHours(); },
- minute: function(d) { return d.getMinutes(); },
- second: function(d) { return d.getSeconds(); },
- millisecond: function(d) { return d.getMilliseconds(); },
- toTime: function(d) { return d.getTime(); },
- fromTime: function(t) { return new Date(t); },
- dayOfWeek: function(d) { return { ctor: dayTable[d.getDay()] }; }
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Debug.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Debug.js
deleted file mode 100644
index 15ce1dc..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Debug.js
+++ /dev/null
@@ -1,30 +0,0 @@
-//import Native.Utils //
-
-var _elm_lang$core$Native_Debug = function() {
-
-function log(tag, value)
-{
- var msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value);
- var process = process || {};
- if (process.stdout)
- {
- process.stdout.write(msg);
- }
- else
- {
- console.log(msg);
- }
- return value;
-}
-
-function crash(message)
-{
- throw new Error(message);
-}
-
-return {
- crash: crash,
- log: F2(log)
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Json.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Json.js
deleted file mode 100644
index 61df889..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Json.js
+++ /dev/null
@@ -1,575 +0,0 @@
-//import Maybe, Native.Array, Native.List, Native.Utils, Result //
-
-var _elm_lang$core$Native_Json = function() {
-
-
-// CORE DECODERS
-
-function succeed(msg)
-{
- return {
- ctor: '',
- tag: 'succeed',
- msg: msg
- };
-}
-
-function fail(msg)
-{
- return {
- ctor: '',
- tag: 'fail',
- msg: msg
- };
-}
-
-function decodePrimitive(tag)
-{
- return {
- ctor: '',
- tag: tag
- };
-}
-
-function decodeContainer(tag, decoder)
-{
- return {
- ctor: '',
- tag: tag,
- decoder: decoder
- };
-}
-
-function decodeNull(value)
-{
- return {
- ctor: '',
- tag: 'null',
- value: value
- };
-}
-
-function decodeField(field, decoder)
-{
- return {
- ctor: '',
- tag: 'field',
- field: field,
- decoder: decoder
- };
-}
-
-function decodeIndex(index, decoder)
-{
- return {
- ctor: '',
- tag: 'index',
- index: index,
- decoder: decoder
- };
-}
-
-function decodeKeyValuePairs(decoder)
-{
- return {
- ctor: '',
- tag: 'key-value',
- decoder: decoder
- };
-}
-
-function mapMany(f, decoders)
-{
- return {
- ctor: '',
- tag: 'map-many',
- func: f,
- decoders: decoders
- };
-}
-
-function andThen(callback, decoder)
-{
- return {
- ctor: '',
- tag: 'andThen',
- decoder: decoder,
- callback: callback
- };
-}
-
-function oneOf(decoders)
-{
- return {
- ctor: '',
- tag: 'oneOf',
- decoders: decoders
- };
-}
-
-
-// DECODING OBJECTS
-
-function map1(f, d1)
-{
- return mapMany(f, [d1]);
-}
-
-function map2(f, d1, d2)
-{
- return mapMany(f, [d1, d2]);
-}
-
-function map3(f, d1, d2, d3)
-{
- return mapMany(f, [d1, d2, d3]);
-}
-
-function map4(f, d1, d2, d3, d4)
-{
- return mapMany(f, [d1, d2, d3, d4]);
-}
-
-function map5(f, d1, d2, d3, d4, d5)
-{
- return mapMany(f, [d1, d2, d3, d4, d5]);
-}
-
-function map6(f, d1, d2, d3, d4, d5, d6)
-{
- return mapMany(f, [d1, d2, d3, d4, d5, d6]);
-}
-
-function map7(f, d1, d2, d3, d4, d5, d6, d7)
-{
- return mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
-}
-
-function map8(f, d1, d2, d3, d4, d5, d6, d7, d8)
-{
- return mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
-}
-
-
-// DECODE HELPERS
-
-function ok(value)
-{
- return { tag: 'ok', value: value };
-}
-
-function badPrimitive(type, value)
-{
- return { tag: 'primitive', type: type, value: value };
-}
-
-function badIndex(index, nestedProblems)
-{
- return { tag: 'index', index: index, rest: nestedProblems };
-}
-
-function badField(field, nestedProblems)
-{
- return { tag: 'field', field: field, rest: nestedProblems };
-}
-
-function badIndex(index, nestedProblems)
-{
- return { tag: 'index', index: index, rest: nestedProblems };
-}
-
-function badOneOf(problems)
-{
- return { tag: 'oneOf', problems: problems };
-}
-
-function bad(msg)
-{
- return { tag: 'fail', msg: msg };
-}
-
-function badToString(problem)
-{
- var context = '_';
- while (problem)
- {
- switch (problem.tag)
- {
- case 'primitive':
- return 'Expecting ' + problem.type
- + (context === '_' ? '' : ' at ' + context)
- + ' but instead got: ' + jsToString(problem.value);
-
- case 'index':
- context += '[' + problem.index + ']';
- problem = problem.rest;
- break;
-
- case 'field':
- context += '.' + problem.field;
- problem = problem.rest;
- break;
-
- case 'oneOf':
- var problems = problem.problems;
- for (var i = 0; i < problems.length; i++)
- {
- problems[i] = badToString(problems[i]);
- }
- return 'I ran into the following problems'
- + (context === '_' ? '' : ' at ' + context)
- + ':\n\n' + problems.join('\n');
-
- case 'fail':
- return 'I ran into a `fail` decoder'
- + (context === '_' ? '' : ' at ' + context)
- + ': ' + problem.msg;
- }
- }
-}
-
-function jsToString(value)
-{
- return value === undefined
- ? 'undefined'
- : JSON.stringify(value);
-}
-
-
-// DECODE
-
-function runOnString(decoder, string)
-{
- var json;
- try
- {
- json = JSON.parse(string);
- }
- catch (e)
- {
- return _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message);
- }
- return run(decoder, json);
-}
-
-function run(decoder, value)
-{
- var result = runHelp(decoder, value);
- return (result.tag === 'ok')
- ? _elm_lang$core$Result$Ok(result.value)
- : _elm_lang$core$Result$Err(badToString(result));
-}
-
-function runHelp(decoder, value)
-{
- switch (decoder.tag)
- {
- case 'bool':
- return (typeof value === 'boolean')
- ? ok(value)
- : badPrimitive('a Bool', value);
-
- case 'int':
- if (typeof value !== 'number') {
- return badPrimitive('an Int', value);
- }
-
- if (-2147483647 < value && value < 2147483647 && (value | 0) === value) {
- return ok(value);
- }
-
- if (isFinite(value) && !(value % 1)) {
- return ok(value);
- }
-
- return badPrimitive('an Int', value);
-
- case 'float':
- return (typeof value === 'number')
- ? ok(value)
- : badPrimitive('a Float', value);
-
- case 'string':
- return (typeof value === 'string')
- ? ok(value)
- : (value instanceof String)
- ? ok(value + '')
- : badPrimitive('a String', value);
-
- case 'null':
- return (value === null)
- ? ok(decoder.value)
- : badPrimitive('null', value);
-
- case 'value':
- return ok(value);
-
- case 'list':
- if (!(value instanceof Array))
- {
- return badPrimitive('a List', value);
- }
-
- var list = _elm_lang$core$Native_List.Nil;
- for (var i = value.length; i--; )
- {
- var result = runHelp(decoder.decoder, value[i]);
- if (result.tag !== 'ok')
- {
- return badIndex(i, result)
- }
- list = _elm_lang$core$Native_List.Cons(result.value, list);
- }
- return ok(list);
-
- case 'array':
- if (!(value instanceof Array))
- {
- return badPrimitive('an Array', value);
- }
-
- var len = value.length;
- var array = new Array(len);
- for (var i = len; i--; )
- {
- var result = runHelp(decoder.decoder, value[i]);
- if (result.tag !== 'ok')
- {
- return badIndex(i, result);
- }
- array[i] = result.value;
- }
- return ok(_elm_lang$core$Native_Array.fromJSArray(array));
-
- case 'maybe':
- var result = runHelp(decoder.decoder, value);
- return (result.tag === 'ok')
- ? ok(_elm_lang$core$Maybe$Just(result.value))
- : ok(_elm_lang$core$Maybe$Nothing);
-
- case 'field':
- var field = decoder.field;
- if (typeof value !== 'object' || value === null || !(field in value))
- {
- return badPrimitive('an object with a field named `' + field + '`', value);
- }
-
- var result = runHelp(decoder.decoder, value[field]);
- return (result.tag === 'ok') ? result : badField(field, result);
-
- case 'index':
- var index = decoder.index;
- if (!(value instanceof Array))
- {
- return badPrimitive('an array', value);
- }
- if (index >= value.length)
- {
- return badPrimitive('a longer array. Need index ' + index + ' but there are only ' + value.length + ' entries', value);
- }
-
- var result = runHelp(decoder.decoder, value[index]);
- return (result.tag === 'ok') ? result : badIndex(index, result);
-
- case 'key-value':
- if (typeof value !== 'object' || value === null || value instanceof Array)
- {
- return badPrimitive('an object', value);
- }
-
- var keyValuePairs = _elm_lang$core$Native_List.Nil;
- for (var key in value)
- {
- var result = runHelp(decoder.decoder, value[key]);
- if (result.tag !== 'ok')
- {
- return badField(key, result);
- }
- var pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value);
- keyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs);
- }
- return ok(keyValuePairs);
-
- case 'map-many':
- var answer = decoder.func;
- var decoders = decoder.decoders;
- for (var i = 0; i < decoders.length; i++)
- {
- var result = runHelp(decoders[i], value);
- if (result.tag !== 'ok')
- {
- return result;
- }
- answer = answer(result.value);
- }
- return ok(answer);
-
- case 'andThen':
- var result = runHelp(decoder.decoder, value);
- return (result.tag !== 'ok')
- ? result
- : runHelp(decoder.callback(result.value), value);
-
- case 'oneOf':
- var errors = [];
- var temp = decoder.decoders;
- while (temp.ctor !== '[]')
- {
- var result = runHelp(temp._0, value);
-
- if (result.tag === 'ok')
- {
- return result;
- }
-
- errors.push(result);
-
- temp = temp._1;
- }
- return badOneOf(errors);
-
- case 'fail':
- return bad(decoder.msg);
-
- case 'succeed':
- return ok(decoder.msg);
- }
-}
-
-
-// EQUALITY
-
-function equality(a, b)
-{
- if (a === b)
- {
- return true;
- }
-
- if (a.tag !== b.tag)
- {
- return false;
- }
-
- switch (a.tag)
- {
- case 'succeed':
- case 'fail':
- return a.msg === b.msg;
-
- case 'bool':
- case 'int':
- case 'float':
- case 'string':
- case 'value':
- return true;
-
- case 'null':
- return a.value === b.value;
-
- case 'list':
- case 'array':
- case 'maybe':
- case 'key-value':
- return equality(a.decoder, b.decoder);
-
- case 'field':
- return a.field === b.field && equality(a.decoder, b.decoder);
-
- case 'index':
- return a.index === b.index && equality(a.decoder, b.decoder);
-
- case 'map-many':
- if (a.func !== b.func)
- {
- return false;
- }
- return listEquality(a.decoders, b.decoders);
-
- case 'andThen':
- return a.callback === b.callback && equality(a.decoder, b.decoder);
-
- case 'oneOf':
- return listEquality(a.decoders, b.decoders);
- }
-}
-
-function listEquality(aDecoders, bDecoders)
-{
- var len = aDecoders.length;
- if (len !== bDecoders.length)
- {
- return false;
- }
- for (var i = 0; i < len; i++)
- {
- if (!equality(aDecoders[i], bDecoders[i]))
- {
- return false;
- }
- }
- return true;
-}
-
-
-// ENCODE
-
-function encode(indentLevel, value)
-{
- return JSON.stringify(value, null, indentLevel);
-}
-
-function identity(value)
-{
- return value;
-}
-
-function encodeObject(keyValuePairs)
-{
- var obj = {};
- while (keyValuePairs.ctor !== '[]')
- {
- var pair = keyValuePairs._0;
- obj[pair._0] = pair._1;
- keyValuePairs = keyValuePairs._1;
- }
- return obj;
-}
-
-return {
- encode: F2(encode),
- runOnString: F2(runOnString),
- run: F2(run),
-
- decodeNull: decodeNull,
- decodePrimitive: decodePrimitive,
- decodeContainer: F2(decodeContainer),
-
- decodeField: F2(decodeField),
- decodeIndex: F2(decodeIndex),
-
- map1: F2(map1),
- map2: F3(map2),
- map3: F4(map3),
- map4: F5(map4),
- map5: F6(map5),
- map6: F7(map6),
- map7: F8(map7),
- map8: F9(map8),
- decodeKeyValuePairs: decodeKeyValuePairs,
-
- andThen: F2(andThen),
- fail: fail,
- succeed: succeed,
- oneOf: oneOf,
-
- identity: identity,
- encodeNull: null,
- encodeArray: _elm_lang$core$Native_Array.toJSArray,
- encodeList: _elm_lang$core$Native_List.toArray,
- encodeObject: encodeObject,
-
- equality: equality
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/List.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/List.js
deleted file mode 100644
index ccefb9c..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/List.js
+++ /dev/null
@@ -1,137 +0,0 @@
-//import Native.Utils //
-
-var _elm_lang$core$Native_List = function() {
-
-var Nil = { ctor: '[]' };
-
-function Cons(hd, tl)
-{
- return { ctor: '::', _0: hd, _1: tl };
-}
-
-function fromArray(arr)
-{
- var out = Nil;
- for (var i = arr.length; i--; )
- {
- out = Cons(arr[i], out);
- }
- return out;
-}
-
-function toArray(xs)
-{
- var out = [];
- while (xs.ctor !== '[]')
- {
- out.push(xs._0);
- xs = xs._1;
- }
- return out;
-}
-
-function foldr(f, b, xs)
-{
- var arr = toArray(xs);
- var acc = b;
- for (var i = arr.length; i--; )
- {
- acc = A2(f, arr[i], acc);
- }
- return acc;
-}
-
-function map2(f, xs, ys)
-{
- var arr = [];
- while (xs.ctor !== '[]' && ys.ctor !== '[]')
- {
- arr.push(A2(f, xs._0, ys._0));
- xs = xs._1;
- ys = ys._1;
- }
- return fromArray(arr);
-}
-
-function map3(f, xs, ys, zs)
-{
- var arr = [];
- while (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')
- {
- arr.push(A3(f, xs._0, ys._0, zs._0));
- xs = xs._1;
- ys = ys._1;
- zs = zs._1;
- }
- return fromArray(arr);
-}
-
-function map4(f, ws, xs, ys, zs)
-{
- var arr = [];
- while ( ws.ctor !== '[]'
- && xs.ctor !== '[]'
- && ys.ctor !== '[]'
- && zs.ctor !== '[]')
- {
- arr.push(A4(f, ws._0, xs._0, ys._0, zs._0));
- ws = ws._1;
- xs = xs._1;
- ys = ys._1;
- zs = zs._1;
- }
- return fromArray(arr);
-}
-
-function map5(f, vs, ws, xs, ys, zs)
-{
- var arr = [];
- while ( vs.ctor !== '[]'
- && ws.ctor !== '[]'
- && xs.ctor !== '[]'
- && ys.ctor !== '[]'
- && zs.ctor !== '[]')
- {
- arr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));
- vs = vs._1;
- ws = ws._1;
- xs = xs._1;
- ys = ys._1;
- zs = zs._1;
- }
- return fromArray(arr);
-}
-
-function sortBy(f, xs)
-{
- return fromArray(toArray(xs).sort(function(a, b) {
- return _elm_lang$core$Native_Utils.cmp(f(a), f(b));
- }));
-}
-
-function sortWith(f, xs)
-{
- return fromArray(toArray(xs).sort(function(a, b) {
- var ord = f(a)(b).ctor;
- return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
- }));
-}
-
-return {
- Nil: Nil,
- Cons: Cons,
- cons: F2(Cons),
- toArray: toArray,
- fromArray: fromArray,
-
- foldr: F3(foldr),
-
- map2: F3(map2),
- map3: F4(map3),
- map4: F5(map4),
- map5: F6(map5),
- sortBy: F2(sortBy),
- sortWith: F2(sortWith)
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Platform.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Platform.js
deleted file mode 100644
index bd6da19..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Platform.js
+++ /dev/null
@@ -1,559 +0,0 @@
-//import //
-
-var _elm_lang$core$Native_Platform = function() {
-
-
-// PROGRAMS
-
-function program(impl)
-{
- return function(flagDecoder)
- {
- return function(object, moduleName)
- {
- object['worker'] = function worker(flags)
- {
- if (typeof flags !== 'undefined')
- {
- throw new Error(
- 'The `' + moduleName + '` module does not need flags.\n'
- + 'Call ' + moduleName + '.worker() with no arguments and you should be all set!'
- );
- }
-
- return initialize(
- impl.init,
- impl.update,
- impl.subscriptions,
- renderer
- );
- };
- };
- };
-}
-
-function programWithFlags(impl)
-{
- return function(flagDecoder)
- {
- return function(object, moduleName)
- {
- object['worker'] = function worker(flags)
- {
- if (typeof flagDecoder === 'undefined')
- {
- throw new Error(
- 'Are you trying to sneak a Never value into Elm? Trickster!\n'
- + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n'
- + 'Use `program` instead if you do not want flags.'
- );
- }
-
- var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);
- if (result.ctor === 'Err')
- {
- throw new Error(
- moduleName + '.worker(...) was called with an unexpected argument.\n'
- + 'I tried to convert it to an Elm value, but ran into this problem:\n\n'
- + result._0
- );
- }
-
- return initialize(
- impl.init(result._0),
- impl.update,
- impl.subscriptions,
- renderer
- );
- };
- };
- };
-}
-
-function renderer(enqueue, _)
-{
- return function(_) {};
-}
-
-
-// HTML TO PROGRAM
-
-function htmlToProgram(vnode)
-{
- var emptyBag = batch(_elm_lang$core$Native_List.Nil);
- var noChange = _elm_lang$core$Native_Utils.Tuple2(
- _elm_lang$core$Native_Utils.Tuple0,
- emptyBag
- );
-
- return _elm_lang$virtual_dom$VirtualDom$program({
- init: noChange,
- view: function(model) { return main; },
- update: F2(function(msg, model) { return noChange; }),
- subscriptions: function (model) { return emptyBag; }
- });
-}
-
-
-// INITIALIZE A PROGRAM
-
-function initialize(init, update, subscriptions, renderer)
-{
- // ambient state
- var managers = {};
- var updateView;
-
- // init and update state in main process
- var initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
- var model = init._0;
- updateView = renderer(enqueue, model);
- var cmds = init._1;
- var subs = subscriptions(model);
- dispatchEffects(managers, cmds, subs);
- callback(_elm_lang$core$Native_Scheduler.succeed(model));
- });
-
- function onMessage(msg, model)
- {
- return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
- var results = A2(update, msg, model);
- model = results._0;
- updateView(model);
- var cmds = results._1;
- var subs = subscriptions(model);
- dispatchEffects(managers, cmds, subs);
- callback(_elm_lang$core$Native_Scheduler.succeed(model));
- });
- }
-
- var mainProcess = spawnLoop(initApp, onMessage);
-
- function enqueue(msg)
- {
- _elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg);
- }
-
- var ports = setupEffects(managers, enqueue);
-
- return ports ? { ports: ports } : {};
-}
-
-
-// EFFECT MANAGERS
-
-var effectManagers = {};
-
-function setupEffects(managers, callback)
-{
- var ports;
-
- // setup all necessary effect managers
- for (var key in effectManagers)
- {
- var manager = effectManagers[key];
-
- if (manager.isForeign)
- {
- ports = ports || {};
- ports[key] = manager.tag === 'cmd'
- ? setupOutgoingPort(key)
- : setupIncomingPort(key, callback);
- }
-
- managers[key] = makeManager(manager, callback);
- }
-
- return ports;
-}
-
-function makeManager(info, callback)
-{
- var router = {
- main: callback,
- self: undefined
- };
-
- var tag = info.tag;
- var onEffects = info.onEffects;
- var onSelfMsg = info.onSelfMsg;
-
- function onMessage(msg, state)
- {
- if (msg.ctor === 'self')
- {
- return A3(onSelfMsg, router, msg._0, state);
- }
-
- var fx = msg._0;
- switch (tag)
- {
- case 'cmd':
- return A3(onEffects, router, fx.cmds, state);
-
- case 'sub':
- return A3(onEffects, router, fx.subs, state);
-
- case 'fx':
- return A4(onEffects, router, fx.cmds, fx.subs, state);
- }
- }
-
- var process = spawnLoop(info.init, onMessage);
- router.self = process;
- return process;
-}
-
-function sendToApp(router, msg)
-{
- return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
- {
- router.main(msg);
- callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));
- });
-}
-
-function sendToSelf(router, msg)
-{
- return A2(_elm_lang$core$Native_Scheduler.send, router.self, {
- ctor: 'self',
- _0: msg
- });
-}
-
-
-// HELPER for STATEFUL LOOPS
-
-function spawnLoop(init, onMessage)
-{
- var andThen = _elm_lang$core$Native_Scheduler.andThen;
-
- function loop(state)
- {
- var handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) {
- return onMessage(msg, state);
- });
- return A2(andThen, loop, handleMsg);
- }
-
- var task = A2(andThen, loop, init);
-
- return _elm_lang$core$Native_Scheduler.rawSpawn(task);
-}
-
-
-// BAGS
-
-function leaf(home)
-{
- return function(value)
- {
- return {
- type: 'leaf',
- home: home,
- value: value
- };
- };
-}
-
-function batch(list)
-{
- return {
- type: 'node',
- branches: list
- };
-}
-
-function map(tagger, bag)
-{
- return {
- type: 'map',
- tagger: tagger,
- tree: bag
- }
-}
-
-
-// PIPE BAGS INTO EFFECT MANAGERS
-
-function dispatchEffects(managers, cmdBag, subBag)
-{
- var effectsDict = {};
- gatherEffects(true, cmdBag, effectsDict, null);
- gatherEffects(false, subBag, effectsDict, null);
-
- for (var home in managers)
- {
- var fx = home in effectsDict
- ? effectsDict[home]
- : {
- cmds: _elm_lang$core$Native_List.Nil,
- subs: _elm_lang$core$Native_List.Nil
- };
-
- _elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx });
- }
-}
-
-function gatherEffects(isCmd, bag, effectsDict, taggers)
-{
- switch (bag.type)
- {
- case 'leaf':
- var home = bag.home;
- var effect = toEffect(isCmd, home, taggers, bag.value);
- effectsDict[home] = insert(isCmd, effect, effectsDict[home]);
- return;
-
- case 'node':
- var list = bag.branches;
- while (list.ctor !== '[]')
- {
- gatherEffects(isCmd, list._0, effectsDict, taggers);
- list = list._1;
- }
- return;
-
- case 'map':
- gatherEffects(isCmd, bag.tree, effectsDict, {
- tagger: bag.tagger,
- rest: taggers
- });
- return;
- }
-}
-
-function toEffect(isCmd, home, taggers, value)
-{
- function applyTaggers(x)
- {
- var temp = taggers;
- while (temp)
- {
- x = temp.tagger(x);
- temp = temp.rest;
- }
- return x;
- }
-
- var map = isCmd
- ? effectManagers[home].cmdMap
- : effectManagers[home].subMap;
-
- return A2(map, applyTaggers, value)
-}
-
-function insert(isCmd, newEffect, effects)
-{
- effects = effects || {
- cmds: _elm_lang$core$Native_List.Nil,
- subs: _elm_lang$core$Native_List.Nil
- };
- if (isCmd)
- {
- effects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds);
- return effects;
- }
- effects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs);
- return effects;
-}
-
-
-// PORTS
-
-function checkPortName(name)
-{
- if (name in effectManagers)
- {
- throw new Error('There can only be one port named `' + name + '`, but your program has multiple.');
- }
-}
-
-
-// OUTGOING PORTS
-
-function outgoingPort(name, converter)
-{
- checkPortName(name);
- effectManagers[name] = {
- tag: 'cmd',
- cmdMap: outgoingPortMap,
- converter: converter,
- isForeign: true
- };
- return leaf(name);
-}
-
-var outgoingPortMap = F2(function cmdMap(tagger, value) {
- return value;
-});
-
-function setupOutgoingPort(name)
-{
- var subs = [];
- var converter = effectManagers[name].converter;
-
- // CREATE MANAGER
-
- var init = _elm_lang$core$Native_Scheduler.succeed(null);
-
- function onEffects(router, cmdList, state)
- {
- while (cmdList.ctor !== '[]')
- {
- // grab a separate reference to subs in case unsubscribe is called
- var currentSubs = subs;
- var value = converter(cmdList._0);
- for (var i = 0; i < currentSubs.length; i++)
- {
- currentSubs[i](value);
- }
- cmdList = cmdList._1;
- }
- return init;
- }
-
- effectManagers[name].init = init;
- effectManagers[name].onEffects = F3(onEffects);
-
- // PUBLIC API
-
- function subscribe(callback)
- {
- subs.push(callback);
- }
-
- function unsubscribe(callback)
- {
- // copy subs into a new array in case unsubscribe is called within a
- // subscribed callback
- subs = subs.slice();
- var index = subs.indexOf(callback);
- if (index >= 0)
- {
- subs.splice(index, 1);
- }
- }
-
- return {
- subscribe: subscribe,
- unsubscribe: unsubscribe
- };
-}
-
-
-// INCOMING PORTS
-
-function incomingPort(name, converter)
-{
- checkPortName(name);
- effectManagers[name] = {
- tag: 'sub',
- subMap: incomingPortMap,
- converter: converter,
- isForeign: true
- };
- return leaf(name);
-}
-
-var incomingPortMap = F2(function subMap(tagger, finalTagger)
-{
- return function(value)
- {
- return tagger(finalTagger(value));
- };
-});
-
-function setupIncomingPort(name, callback)
-{
- var sentBeforeInit = [];
- var subs = _elm_lang$core$Native_List.Nil;
- var converter = effectManagers[name].converter;
- var currentOnEffects = preInitOnEffects;
- var currentSend = preInitSend;
-
- // CREATE MANAGER
-
- var init = _elm_lang$core$Native_Scheduler.succeed(null);
-
- function preInitOnEffects(router, subList, state)
- {
- var postInitResult = postInitOnEffects(router, subList, state);
-
- for(var i = 0; i < sentBeforeInit.length; i++)
- {
- postInitSend(sentBeforeInit[i]);
- }
-
- sentBeforeInit = null; // to release objects held in queue
- currentSend = postInitSend;
- currentOnEffects = postInitOnEffects;
- return postInitResult;
- }
-
- function postInitOnEffects(router, subList, state)
- {
- subs = subList;
- return init;
- }
-
- function onEffects(router, subList, state)
- {
- return currentOnEffects(router, subList, state);
- }
-
- effectManagers[name].init = init;
- effectManagers[name].onEffects = F3(onEffects);
-
- // PUBLIC API
-
- function preInitSend(value)
- {
- sentBeforeInit.push(value);
- }
-
- function postInitSend(value)
- {
- var temp = subs;
- while (temp.ctor !== '[]')
- {
- callback(temp._0(value));
- temp = temp._1;
- }
- }
-
- function send(incomingValue)
- {
- var result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue);
- if (result.ctor === 'Err')
- {
- throw new Error('Trying to send an unexpected type of value through port `' + name + '`:\n' + result._0);
- }
-
- currentSend(result._0);
- }
-
- return { send: send };
-}
-
-return {
- // routers
- sendToApp: F2(sendToApp),
- sendToSelf: F2(sendToSelf),
-
- // global setup
- effectManagers: effectManagers,
- outgoingPort: outgoingPort,
- incomingPort: incomingPort,
-
- htmlToProgram: htmlToProgram,
- program: program,
- programWithFlags: programWithFlags,
- initialize: initialize,
-
- // effect bags
- leaf: leaf,
- batch: batch,
- map: F2(map)
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Regex.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Regex.js
deleted file mode 100644
index d3cc0dd..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Regex.js
+++ /dev/null
@@ -1,119 +0,0 @@
-//import Maybe, Native.List //
-
-var _elm_lang$core$Native_Regex = function() {
-
-function escape(str)
-{
- return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
-}
-function caseInsensitive(re)
-{
- return new RegExp(re.source, 'gi');
-}
-function regex(raw)
-{
- return new RegExp(raw, 'g');
-}
-
-function contains(re, string)
-{
- return string.match(re) !== null;
-}
-
-function find(n, re, str)
-{
- n = n.ctor === 'All' ? Infinity : n._0;
- var out = [];
- var number = 0;
- var string = str;
- var lastIndex = re.lastIndex;
- var prevLastIndex = -1;
- var result;
- while (number++ < n && (result = re.exec(string)))
- {
- if (prevLastIndex === re.lastIndex) break;
- var i = result.length - 1;
- var subs = new Array(i);
- while (i > 0)
- {
- var submatch = result[i];
- subs[--i] = submatch === undefined
- ? _elm_lang$core$Maybe$Nothing
- : _elm_lang$core$Maybe$Just(submatch);
- }
- out.push({
- match: result[0],
- submatches: _elm_lang$core$Native_List.fromArray(subs),
- index: result.index,
- number: number
- });
- prevLastIndex = re.lastIndex;
- }
- re.lastIndex = lastIndex;
- return _elm_lang$core$Native_List.fromArray(out);
-}
-
-function replace(n, re, replacer, string)
-{
- n = n.ctor === 'All' ? Infinity : n._0;
- var count = 0;
- function jsReplacer(match)
- {
- if (count++ >= n)
- {
- return match;
- }
- var i = arguments.length - 3;
- var submatches = new Array(i);
- while (i > 0)
- {
- var submatch = arguments[i];
- submatches[--i] = submatch === undefined
- ? _elm_lang$core$Maybe$Nothing
- : _elm_lang$core$Maybe$Just(submatch);
- }
- return replacer({
- match: match,
- submatches: _elm_lang$core$Native_List.fromArray(submatches),
- index: arguments[arguments.length - 2],
- number: count
- });
- }
- return string.replace(re, jsReplacer);
-}
-
-function split(n, re, str)
-{
- n = n.ctor === 'All' ? Infinity : n._0;
- if (n === Infinity)
- {
- return _elm_lang$core$Native_List.fromArray(str.split(re));
- }
- var string = str;
- var result;
- var out = [];
- var start = re.lastIndex;
- var restoreLastIndex = re.lastIndex;
- while (n--)
- {
- if (!(result = re.exec(string))) break;
- out.push(string.slice(start, result.index));
- start = re.lastIndex;
- }
- out.push(string.slice(start));
- re.lastIndex = restoreLastIndex;
- return _elm_lang$core$Native_List.fromArray(out);
-}
-
-return {
- regex: regex,
- caseInsensitive: caseInsensitive,
- escape: escape,
-
- contains: F2(contains),
- find: F3(find),
- replace: F4(replace),
- split: F3(split)
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Scheduler.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Scheduler.js
deleted file mode 100644
index 00f8259..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Scheduler.js
+++ /dev/null
@@ -1,281 +0,0 @@
-//import Native.Utils //
-
-var _elm_lang$core$Native_Scheduler = function() {
-
-var MAX_STEPS = 10000;
-
-
-// TASKS
-
-function succeed(value)
-{
- return {
- ctor: '_Task_succeed',
- value: value
- };
-}
-
-function fail(error)
-{
- return {
- ctor: '_Task_fail',
- value: error
- };
-}
-
-function nativeBinding(callback)
-{
- return {
- ctor: '_Task_nativeBinding',
- callback: callback,
- cancel: null
- };
-}
-
-function andThen(callback, task)
-{
- return {
- ctor: '_Task_andThen',
- callback: callback,
- task: task
- };
-}
-
-function onError(callback, task)
-{
- return {
- ctor: '_Task_onError',
- callback: callback,
- task: task
- };
-}
-
-function receive(callback)
-{
- return {
- ctor: '_Task_receive',
- callback: callback
- };
-}
-
-
-// PROCESSES
-
-function rawSpawn(task)
-{
- var process = {
- ctor: '_Process',
- id: _elm_lang$core$Native_Utils.guid(),
- root: task,
- stack: null,
- mailbox: []
- };
-
- enqueue(process);
-
- return process;
-}
-
-function spawn(task)
-{
- return nativeBinding(function(callback) {
- var process = rawSpawn(task);
- callback(succeed(process));
- });
-}
-
-function rawSend(process, msg)
-{
- process.mailbox.push(msg);
- enqueue(process);
-}
-
-function send(process, msg)
-{
- return nativeBinding(function(callback) {
- rawSend(process, msg);
- callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
- });
-}
-
-function kill(process)
-{
- return nativeBinding(function(callback) {
- var root = process.root;
- if (root.ctor === '_Task_nativeBinding' && root.cancel)
- {
- root.cancel();
- }
-
- process.root = null;
-
- callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
- });
-}
-
-function sleep(time)
-{
- return nativeBinding(function(callback) {
- var id = setTimeout(function() {
- callback(succeed(_elm_lang$core$Native_Utils.Tuple0));
- }, time);
-
- return function() { clearTimeout(id); };
- });
-}
-
-
-// STEP PROCESSES
-
-function step(numSteps, process)
-{
- while (numSteps < MAX_STEPS)
- {
- var ctor = process.root.ctor;
-
- if (ctor === '_Task_succeed')
- {
- while (process.stack && process.stack.ctor === '_Task_onError')
- {
- process.stack = process.stack.rest;
- }
- if (process.stack === null)
- {
- break;
- }
- process.root = process.stack.callback(process.root.value);
- process.stack = process.stack.rest;
- ++numSteps;
- continue;
- }
-
- if (ctor === '_Task_fail')
- {
- while (process.stack && process.stack.ctor === '_Task_andThen')
- {
- process.stack = process.stack.rest;
- }
- if (process.stack === null)
- {
- break;
- }
- process.root = process.stack.callback(process.root.value);
- process.stack = process.stack.rest;
- ++numSteps;
- continue;
- }
-
- if (ctor === '_Task_andThen')
- {
- process.stack = {
- ctor: '_Task_andThen',
- callback: process.root.callback,
- rest: process.stack
- };
- process.root = process.root.task;
- ++numSteps;
- continue;
- }
-
- if (ctor === '_Task_onError')
- {
- process.stack = {
- ctor: '_Task_onError',
- callback: process.root.callback,
- rest: process.stack
- };
- process.root = process.root.task;
- ++numSteps;
- continue;
- }
-
- if (ctor === '_Task_nativeBinding')
- {
- process.root.cancel = process.root.callback(function(newRoot) {
- process.root = newRoot;
- enqueue(process);
- });
-
- break;
- }
-
- if (ctor === '_Task_receive')
- {
- var mailbox = process.mailbox;
- if (mailbox.length === 0)
- {
- break;
- }
-
- process.root = process.root.callback(mailbox.shift());
- ++numSteps;
- continue;
- }
-
- throw new Error(ctor);
- }
-
- if (numSteps < MAX_STEPS)
- {
- return numSteps + 1;
- }
- enqueue(process);
-
- return numSteps;
-}
-
-
-// WORK QUEUE
-
-var working = false;
-var workQueue = [];
-
-function enqueue(process)
-{
- workQueue.push(process);
-
- if (!working)
- {
- setTimeout(work, 0);
- working = true;
- }
-}
-
-function work()
-{
- var numSteps = 0;
- var process;
- while (numSteps < MAX_STEPS && (process = workQueue.shift()))
- {
- if (process.root)
- {
- numSteps = step(numSteps, process);
- }
- }
- if (!process)
- {
- working = false;
- return;
- }
- setTimeout(work, 0);
-}
-
-
-return {
- succeed: succeed,
- fail: fail,
- nativeBinding: nativeBinding,
- andThen: F2(andThen),
- onError: F2(onError),
- receive: receive,
-
- spawn: spawn,
- kill: kill,
- sleep: sleep,
- send: F2(send),
-
- rawSpawn: rawSpawn,
- rawSend: rawSend
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/String.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/String.js
deleted file mode 100644
index 3a21c76..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/String.js
+++ /dev/null
@@ -1,339 +0,0 @@
-//import Maybe, Native.List, Native.Utils, Result //
-
-var _elm_lang$core$Native_String = function() {
-
-function isEmpty(str)
-{
- return str.length === 0;
-}
-function cons(chr, str)
-{
- return chr + str;
-}
-function uncons(str)
-{
- var hd = str[0];
- if (hd)
- {
- return _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1)));
- }
- return _elm_lang$core$Maybe$Nothing;
-}
-function append(a, b)
-{
- return a + b;
-}
-function concat(strs)
-{
- return _elm_lang$core$Native_List.toArray(strs).join('');
-}
-function length(str)
-{
- return str.length;
-}
-function map(f, str)
-{
- var out = str.split('');
- for (var i = out.length; i--; )
- {
- out[i] = f(_elm_lang$core$Native_Utils.chr(out[i]));
- }
- return out.join('');
-}
-function filter(pred, str)
-{
- return str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join('');
-}
-function reverse(str)
-{
- return str.split('').reverse().join('');
-}
-function foldl(f, b, str)
-{
- var len = str.length;
- for (var i = 0; i < len; ++i)
- {
- b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);
- }
- return b;
-}
-function foldr(f, b, str)
-{
- for (var i = str.length; i--; )
- {
- b = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);
- }
- return b;
-}
-function split(sep, str)
-{
- return _elm_lang$core$Native_List.fromArray(str.split(sep));
-}
-function join(sep, strs)
-{
- return _elm_lang$core$Native_List.toArray(strs).join(sep);
-}
-function repeat(n, str)
-{
- var result = '';
- while (n > 0)
- {
- if (n & 1)
- {
- result += str;
- }
- n >>= 1, str += str;
- }
- return result;
-}
-function slice(start, end, str)
-{
- return str.slice(start, end);
-}
-function left(n, str)
-{
- return n < 1 ? '' : str.slice(0, n);
-}
-function right(n, str)
-{
- return n < 1 ? '' : str.slice(-n);
-}
-function dropLeft(n, str)
-{
- return n < 1 ? str : str.slice(n);
-}
-function dropRight(n, str)
-{
- return n < 1 ? str : str.slice(0, -n);
-}
-function pad(n, chr, str)
-{
- var half = (n - str.length) / 2;
- return repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);
-}
-function padRight(n, chr, str)
-{
- return str + repeat(n - str.length, chr);
-}
-function padLeft(n, chr, str)
-{
- return repeat(n - str.length, chr) + str;
-}
-
-function trim(str)
-{
- return str.trim();
-}
-function trimLeft(str)
-{
- return str.replace(/^\s+/, '');
-}
-function trimRight(str)
-{
- return str.replace(/\s+$/, '');
-}
-
-function words(str)
-{
- return _elm_lang$core$Native_List.fromArray(str.trim().split(/\s+/g));
-}
-function lines(str)
-{
- return _elm_lang$core$Native_List.fromArray(str.split(/\r\n|\r|\n/g));
-}
-
-function toUpper(str)
-{
- return str.toUpperCase();
-}
-function toLower(str)
-{
- return str.toLowerCase();
-}
-
-function any(pred, str)
-{
- for (var i = str.length; i--; )
- {
- if (pred(_elm_lang$core$Native_Utils.chr(str[i])))
- {
- return true;
- }
- }
- return false;
-}
-function all(pred, str)
-{
- for (var i = str.length; i--; )
- {
- if (!pred(_elm_lang$core$Native_Utils.chr(str[i])))
- {
- return false;
- }
- }
- return true;
-}
-
-function contains(sub, str)
-{
- return str.indexOf(sub) > -1;
-}
-function startsWith(sub, str)
-{
- return str.indexOf(sub) === 0;
-}
-function endsWith(sub, str)
-{
- return str.length >= sub.length &&
- str.lastIndexOf(sub) === str.length - sub.length;
-}
-function indexes(sub, str)
-{
- var subLen = sub.length;
-
- if (subLen < 1)
- {
- return _elm_lang$core$Native_List.Nil;
- }
-
- var i = 0;
- var is = [];
-
- while ((i = str.indexOf(sub, i)) > -1)
- {
- is.push(i);
- i = i + subLen;
- }
-
- return _elm_lang$core$Native_List.fromArray(is);
-}
-
-
-function toInt(s)
-{
- var len = s.length;
-
- // if empty
- if (len === 0)
- {
- return intErr(s);
- }
-
- // if hex
- var c = s[0];
- if (c === '0' && s[1] === 'x')
- {
- for (var i = 2; i < len; ++i)
- {
- var c = s[i];
- if (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'))
- {
- continue;
- }
- return intErr(s);
- }
- return _elm_lang$core$Result$Ok(parseInt(s, 16));
- }
-
- // is decimal
- if (c > '9' || (c < '0' && c !== '-' && c !== '+'))
- {
- return intErr(s);
- }
- for (var i = 1; i < len; ++i)
- {
- var c = s[i];
- if (c < '0' || '9' < c)
- {
- return intErr(s);
- }
- }
-
- return _elm_lang$core$Result$Ok(parseInt(s, 10));
-}
-
-function intErr(s)
-{
- return _elm_lang$core$Result$Err("could not convert string '" + s + "' to an Int");
-}
-
-
-function toFloat(s)
-{
- // check if it is a hex, octal, or binary number
- if (s.length === 0 || /[\sxbo]/.test(s))
- {
- return floatErr(s);
- }
- var n = +s;
- // faster isNaN check
- return n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s);
-}
-
-function floatErr(s)
-{
- return _elm_lang$core$Result$Err("could not convert string '" + s + "' to a Float");
-}
-
-
-function toList(str)
-{
- return _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr));
-}
-function fromList(chars)
-{
- return _elm_lang$core$Native_List.toArray(chars).join('');
-}
-
-return {
- isEmpty: isEmpty,
- cons: F2(cons),
- uncons: uncons,
- append: F2(append),
- concat: concat,
- length: length,
- map: F2(map),
- filter: F2(filter),
- reverse: reverse,
- foldl: F3(foldl),
- foldr: F3(foldr),
-
- split: F2(split),
- join: F2(join),
- repeat: F2(repeat),
-
- slice: F3(slice),
- left: F2(left),
- right: F2(right),
- dropLeft: F2(dropLeft),
- dropRight: F2(dropRight),
-
- pad: F3(pad),
- padLeft: F3(padLeft),
- padRight: F3(padRight),
-
- trim: trim,
- trimLeft: trimLeft,
- trimRight: trimRight,
-
- words: words,
- lines: lines,
-
- toUpper: toUpper,
- toLower: toLower,
-
- any: F2(any),
- all: F2(all),
-
- contains: F2(contains),
- startsWith: F2(startsWith),
- endsWith: F2(endsWith),
- indexes: F2(indexes),
-
- toInt: toInt,
- toFloat: toFloat,
- toList: toList,
- fromList: fromList
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Time.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Time.js
deleted file mode 100644
index 6b665ea..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Time.js
+++ /dev/null
@@ -1,27 +0,0 @@
-//import Native.Scheduler //
-
-var _elm_lang$core$Native_Time = function() {
-
-var now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
-{
- callback(_elm_lang$core$Native_Scheduler.succeed(Date.now()));
-});
-
-function setInterval_(interval, task)
-{
- return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
- {
- var id = setInterval(function() {
- _elm_lang$core$Native_Scheduler.rawSpawn(task);
- }, interval);
-
- return function() { clearInterval(id); };
- });
-}
-
-return {
- now: now,
- setInterval_: F2(setInterval_)
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Utils.js b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Utils.js
deleted file mode 100644
index 20aed5f..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Native/Utils.js
+++ /dev/null
@@ -1,488 +0,0 @@
-//import //
-
-var _elm_lang$core$Native_Utils = function() {
-
-// COMPARISONS
-
-function eq(x, y)
-{
- var stack = [];
- var isEqual = eqHelp(x, y, 0, stack);
- var pair;
- while (isEqual && (pair = stack.pop()))
- {
- isEqual = eqHelp(pair.x, pair.y, 0, stack);
- }
- return isEqual;
-}
-
-
-function eqHelp(x, y, depth, stack)
-{
- if (depth > 100)
- {
- stack.push({ x: x, y: y });
- return true;
- }
-
- if (x === y)
- {
- return true;
- }
-
- if (typeof x !== 'object')
- {
- if (typeof x === 'function')
- {
- throw new Error(
- 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.'
- + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#=='
- + ' which describes why it is this way and what the better version will look like.'
- );
- }
- return false;
- }
-
- if (x === null || y === null)
- {
- return false
- }
-
- if (x instanceof Date)
- {
- return x.getTime() === y.getTime();
- }
-
- if (!('ctor' in x))
- {
- for (var key in x)
- {
- if (!eqHelp(x[key], y[key], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
- }
-
- // convert Dicts and Sets to lists
- if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin')
- {
- x = _elm_lang$core$Dict$toList(x);
- y = _elm_lang$core$Dict$toList(y);
- }
- if (x.ctor === 'Set_elm_builtin')
- {
- x = _elm_lang$core$Set$toList(x);
- y = _elm_lang$core$Set$toList(y);
- }
-
- // check if lists are equal without recursion
- if (x.ctor === '::')
- {
- var a = x;
- var b = y;
- while (a.ctor === '::' && b.ctor === '::')
- {
- if (!eqHelp(a._0, b._0, depth + 1, stack))
- {
- return false;
- }
- a = a._1;
- b = b._1;
- }
- return a.ctor === b.ctor;
- }
-
- // check if Arrays are equal
- if (x.ctor === '_Array')
- {
- var xs = _elm_lang$core$Native_Array.toJSArray(x);
- var ys = _elm_lang$core$Native_Array.toJSArray(y);
- if (xs.length !== ys.length)
- {
- return false;
- }
- for (var i = 0; i < xs.length; i++)
- {
- if (!eqHelp(xs[i], ys[i], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
- }
-
- if (!eqHelp(x.ctor, y.ctor, depth + 1, stack))
- {
- return false;
- }
-
- for (var key in x)
- {
- if (!eqHelp(x[key], y[key], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
-}
-
-// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
-// the particular integer values assigned to LT, EQ, and GT.
-
-var LT = -1, EQ = 0, GT = 1;
-
-function cmp(x, y)
-{
- if (typeof x !== 'object')
- {
- return x === y ? EQ : x < y ? LT : GT;
- }
-
- if (x instanceof String)
- {
- var a = x.valueOf();
- var b = y.valueOf();
- return a === b ? EQ : a < b ? LT : GT;
- }
-
- if (x.ctor === '::' || x.ctor === '[]')
- {
- while (x.ctor === '::' && y.ctor === '::')
- {
- var ord = cmp(x._0, y._0);
- if (ord !== EQ)
- {
- return ord;
- }
- x = x._1;
- y = y._1;
- }
- return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT;
- }
-
- if (x.ctor.slice(0, 6) === '_Tuple')
- {
- var ord;
- var n = x.ctor.slice(6) - 0;
- var err = 'cannot compare tuples with more than 6 elements.';
- if (n === 0) return EQ;
- if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;
- if (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;
- if (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;
- if (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;
- if (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;
- if (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;
- if (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }
- return EQ;
- }
-
- throw new Error(
- 'Comparison error: comparison is only defined on ints, '
- + 'floats, times, chars, strings, lists of comparable values, '
- + 'and tuples of comparable values.'
- );
-}
-
-
-// COMMON VALUES
-
-var Tuple0 = {
- ctor: '_Tuple0'
-};
-
-function Tuple2(x, y)
-{
- return {
- ctor: '_Tuple2',
- _0: x,
- _1: y
- };
-}
-
-function chr(c)
-{
- return new String(c);
-}
-
-
-// GUID
-
-var count = 0;
-function guid(_)
-{
- return count++;
-}
-
-
-// RECORDS
-
-function update(oldRecord, updatedFields)
-{
- var newRecord = {};
-
- for (var key in oldRecord)
- {
- newRecord[key] = oldRecord[key];
- }
-
- for (var key in updatedFields)
- {
- newRecord[key] = updatedFields[key];
- }
-
- return newRecord;
-}
-
-
-//// LIST STUFF ////
-
-var Nil = { ctor: '[]' };
-
-function Cons(hd, tl)
-{
- return {
- ctor: '::',
- _0: hd,
- _1: tl
- };
-}
-
-function append(xs, ys)
-{
- // append Strings
- if (typeof xs === 'string')
- {
- return xs + ys;
- }
-
- // append Lists
- if (xs.ctor === '[]')
- {
- return ys;
- }
- var root = Cons(xs._0, Nil);
- var curr = root;
- xs = xs._1;
- while (xs.ctor !== '[]')
- {
- curr._1 = Cons(xs._0, Nil);
- xs = xs._1;
- curr = curr._1;
- }
- curr._1 = ys;
- return root;
-}
-
-
-// CRASHES
-
-function crash(moduleName, region)
-{
- return function(message) {
- throw new Error(
- 'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\n'
- + 'The message provided by the code author is:\n\n '
- + message
- );
- };
-}
-
-function crashCase(moduleName, region, value)
-{
- return function(message) {
- throw new Error(
- 'Ran into a `Debug.crash` in module `' + moduleName + '`\n\n'
- + 'This was caused by the `case` expression ' + regionToString(region) + '.\n'
- + 'One of the branches ended with a crash and the following value got through:\n\n ' + toString(value) + '\n\n'
- + 'The message provided by the code author is:\n\n '
- + message
- );
- };
-}
-
-function regionToString(region)
-{
- if (region.start.line == region.end.line)
- {
- return 'on line ' + region.start.line;
- }
- return 'between lines ' + region.start.line + ' and ' + region.end.line;
-}
-
-
-// TO STRING
-
-function toString(v)
-{
- var type = typeof v;
- if (type === 'function')
- {
- return '';
- }
-
- if (type === 'boolean')
- {
- return v ? 'True' : 'False';
- }
-
- if (type === 'number')
- {
- return v + '';
- }
-
- if (v instanceof String)
- {
- return '\'' + addSlashes(v, true) + '\'';
- }
-
- if (type === 'string')
- {
- return '"' + addSlashes(v, false) + '"';
- }
-
- if (v === null)
- {
- return 'null';
- }
-
- if (type === 'object' && 'ctor' in v)
- {
- var ctorStarter = v.ctor.substring(0, 5);
-
- if (ctorStarter === '_Tupl')
- {
- var output = [];
- for (var k in v)
- {
- if (k === 'ctor') continue;
- output.push(toString(v[k]));
- }
- return '(' + output.join(',') + ')';
- }
-
- if (ctorStarter === '_Task')
- {
- return ''
- }
-
- if (v.ctor === '_Array')
- {
- var list = _elm_lang$core$Array$toList(v);
- return 'Array.fromList ' + toString(list);
- }
-
- if (v.ctor === '')
- {
- return '';
- }
-
- if (v.ctor === '_Process')
- {
- return '';
- }
-
- if (v.ctor === '::')
- {
- var output = '[' + toString(v._0);
- v = v._1;
- while (v.ctor === '::')
- {
- output += ',' + toString(v._0);
- v = v._1;
- }
- return output + ']';
- }
-
- if (v.ctor === '[]')
- {
- return '[]';
- }
-
- if (v.ctor === 'Set_elm_builtin')
- {
- return 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v));
- }
-
- if (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin')
- {
- return 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v));
- }
-
- var output = '';
- for (var i in v)
- {
- if (i === 'ctor') continue;
- var str = toString(v[i]);
- var c0 = str[0];
- var parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
- output += ' ' + (parenless ? str : '(' + str + ')');
- }
- return v.ctor + output;
- }
-
- if (type === 'object')
- {
- if (v instanceof Date)
- {
- return '<' + v.toString() + '>';
- }
-
- if (v.elm_web_socket)
- {
- return '';
- }
-
- var output = [];
- for (var k in v)
- {
- output.push(k + ' = ' + toString(v[k]));
- }
- if (output.length === 0)
- {
- return '{}';
- }
- return '{ ' + output.join(', ') + ' }';
- }
-
- return '';
-}
-
-function addSlashes(str, isChar)
-{
- var s = str.replace(/\\/g, '\\\\')
- .replace(/\n/g, '\\n')
- .replace(/\t/g, '\\t')
- .replace(/\r/g, '\\r')
- .replace(/\v/g, '\\v')
- .replace(/\0/g, '\\0');
- if (isChar)
- {
- return s.replace(/\'/g, '\\\'');
- }
- else
- {
- return s.replace(/\"/g, '\\"');
- }
-}
-
-
-return {
- eq: eq,
- cmp: cmp,
- Tuple0: Tuple0,
- Tuple2: Tuple2,
- chr: chr,
- update: update,
- guid: guid,
-
- append: F2(append),
-
- crash: crash,
- crashCase: crashCase,
-
- toString: toString
-};
-
-}();
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform.elm
deleted file mode 100644
index 2a136cc..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform.elm
+++ /dev/null
@@ -1,145 +0,0 @@
-module Platform exposing
- ( Program, program, programWithFlags
- , Task, ProcessId
- , Router, sendToApp, sendToSelf
- )
-
-{-|
-
-# Programs
-@docs Program, program, programWithFlags
-
-# Platform Internals
-
-## Tasks and Processes
-@docs Task, ProcessId
-
-## Effect Manager Helpers
-
-An extremely tiny portion of library authors should ever write effect managers.
-Fundamentally, Elm needs maybe 10 of them total. I get that people are smart,
-curious, etc. but that is not a substitute for a legitimate reason to make an
-effect manager. Do you have an *organic need* this fills? Or are you just
-curious? Public discussions of your explorations should be framed accordingly.
-
-@docs Router, sendToApp, sendToSelf
--}
-
-import Basics exposing (Never)
-import Native.Platform
-import Native.Scheduler
-import Platform.Cmd exposing (Cmd)
-import Platform.Sub exposing (Sub)
-
-
-
--- PROGRAMS
-
-
-{-| A `Program` describes how to manage your Elm app.
-
-You can create [headless][] programs with the [`program`](#program) and
-[`programWithFlags`](#programWithFlags) functions. Similar functions exist in
-[`Html`][html] that let you specify a view.
-
-[headless]: https://en.wikipedia.org/wiki/Headless_software
-[html]: http://package.elm-lang.org/packages/elm-lang/html/latest/Html
-
-Honestly, it is totally normal if this seems crazy at first. The best way to
-understand is to work through [guide.elm-lang.org](http://guide.elm-lang.org/).
-It makes way more sense in context!
--}
-type Program flags model msg = Program
-
-
-{-| Create a [headless][] program. This is great if you want to use Elm as the
-“brain” for something else. You can still communicate with JS via
-ports and manage your model, you just do not have to specify a `view`.
-
-[headless]: https://en.wikipedia.org/wiki/Headless_software
-
-Initializing a headless program from JavaScript looks like this:
-
-```javascript
-var app = Elm.MyThing.worker();
-```
--}
-program
- : { init : (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- }
- -> Program Never model msg
-program =
- Native.Platform.program
-
-
-{-| Same as [`program`](#program), but you can provide flags. Initializing a
-headless program (with flags) from JavaScript looks like this:
-
-```javascript
-var app = Elm.MyThing.worker({ user: 'Tom', token: 1234 });
-```
-
-Whatever argument you provide to `worker` will get converted to an Elm value,
-allowing you to configure your Elm program however you want from JavaScript!
--}
-programWithFlags
- : { init : flags -> (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- }
- -> Program flags model msg
-programWithFlags =
- Native.Platform.programWithFlags
-
-
-
--- TASKS and PROCESSES
-
-{-| Head over to the documentation for the [`Task`](Task) module for more
-information on this. It is only defined here because it is a platform
-primitive.
--}
-type Task err ok = Task
-
-
-{-| Head over to the documentation for the [`Process`](Process) module for
-information on this. It is only defined here because it is a platform
-primitive.
--}
-type ProcessId = ProcessId
-
-
-
--- EFFECT MANAGER INTERNALS
-
-
-{-| An effect manager has access to a “router” that routes messages between
-the main app and your individual effect manager.
--}
-type Router appMsg selfMsg =
- Router
-
-
-{-| Send the router a message for the main loop of your app. This message will
-be handled by the overall `update` function, just like events from `Html`.
--}
-sendToApp : Router msg a -> msg -> Task x ()
-sendToApp =
- Native.Platform.sendToApp
-
-
-{-| Send the router a message for your effect manager. This message will
-be routed to the `onSelfMsg` function, where you can update the state of your
-effect manager as necessary.
-
-As an example, the effect manager for web sockets
--}
-sendToSelf : Router a msg -> msg -> Task x ()
-sendToSelf =
- Native.Platform.sendToSelf
-
-
-hack =
- Native.Scheduler.succeed
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Cmd.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Cmd.elm
deleted file mode 100644
index a4ae4ed..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Cmd.elm
+++ /dev/null
@@ -1,67 +0,0 @@
-module Platform.Cmd exposing
- ( Cmd
- , map
- , batch
- , none
- , (!)
- )
-
-{-|
-
-# Effects
-
-Elm has **managed effects**, meaning that things like HTTP requests or writing
-to disk are all treated as *data* in Elm. When this data is given to the Elm
-runtime system, it can do some “query optimization” before actually performing
-the effect. Perhaps unexpectedly, this managed effects idea is the heart of why
-Elm is so nice for testing, reuse, reproducibility, etc.
-
-There are two kinds of managed effects you will use in your programs: commands
-and subscriptions.
-
-@docs Cmd, map, batch, none, (!)
-
--}
-
-import Native.Platform
-
-
-{-| A command is a way of telling Elm, “Hey, I want you to do this thing!”
-So if you want to send an HTTP request, you would need to command Elm to do it.
-Or if you wanted to ask for geolocation, you would need to command Elm to go
-get it.
-
-Every `Cmd` specifies (1) which effects you need access to and (2) the type of
-messages that will come back into your application.
-
-**Note:** Do not worry if this seems confusing at first! As with every Elm user
-ever, commands will make more sense as you work through [the Elm Architecture
-Tutorial](http://guide.elm-lang.org/architecture/index.html) and see how they
-fit into a real application!
--}
-type Cmd msg = Cmd
-
-
-{-|-}
-map : (a -> msg) -> Cmd a -> Cmd msg
-map =
- Native.Platform.map
-
-
-{-|-}
-batch : List (Cmd msg) -> Cmd msg
-batch =
- Native.Platform.batch
-
-
-{-|-}
-none : Cmd msg
-none =
- batch []
-
-
-{-|-}
-(!) : model -> List (Cmd msg) -> (model, Cmd msg)
-(!) model commands =
- (model, batch commands)
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Sub.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Sub.elm
deleted file mode 100644
index 03f2f81..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Platform/Sub.elm
+++ /dev/null
@@ -1,52 +0,0 @@
-module Platform.Sub exposing
- ( Sub
- , map
- , batch
- , none
- )
-
-{-|
-
-@docs Sub, map, batch, none
--}
-
-import Native.Platform
-
-
-{-| A subscription is a way of telling Elm, “Hey, let me know if anything
-interesting happens over there!” So if you want to listen for messages on a web
-socket, you would tell Elm to create a subscription. If you want to get clock
-ticks, you would tell Elm to subscribe to that. The cool thing here is that
-this means *Elm* manages all the details of subscriptions instead of *you*.
-So if a web socket goes down, *you* do not need to manually reconnect with an
-exponential backoff strategy, *Elm* does this all for you behind the scenes!
-
-Every `Sub` specifies (1) which effects you need access to and (2) the type of
-messages that will come back into your application.
-
-**Note:** Do not worry if this seems confusing at first! As with every Elm user
-ever, subscriptions will make more sense as you work through [the Elm Architecture
-Tutorial](http://guide.elm-lang.org/architecture/index.html) and see how they fit
-into a real application!
--}
-type Sub msg = Sub
-
-
-{-|-}
-map : (a -> msg) -> Sub a -> Sub msg
-map =
- Native.Platform.map
-
-
-{-|-}
-batch : List (Sub msg) -> Sub msg
-batch =
- Native.Platform.batch
-
-
-{-|-}
-none : Sub msg
-none =
- batch []
-
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Process.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Process.elm
deleted file mode 100644
index 0ef59af..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Process.elm
+++ /dev/null
@@ -1,106 +0,0 @@
-module Process exposing
- ( Id
- , spawn
- , sleep
- , kill
- )
-
-{-|
-
-# Processes
-@docs Id, spawn, sleep, kill
-
-## Future Plans
-
-Right now, this library is pretty sparse. For example, there is no public API
-for processes to communicate with each other. This is a really important
-ability, but it is also something that is extraordinarily easy to get wrong!
-
-I think the trend will be towards an Erlang style of concurrency, where every
-process has an “event queue” that anyone can send messages to. I currently
-think the API will be extended to be more like this:
-
- type Id exit msg
-
- spawn : Task exit a -> Task x (Id exit Never)
-
- kill : Id exit msg -> Task x ()
-
- send : Id exit msg -> msg -> Task x ()
-
-A process `Id` will have two type variables to make sure all communication is
-valid. The `exit` type describes the messages that are produced if the process
-fails because of user code. So if processes are linked and trapping errors,
-they will need to handle this. The `msg` type just describes what kind of
-messages this process can be sent by strangers.
-
-We shall see though! This is just a draft that does not cover nearly everything
-it needs to, so the long-term vision for concurrency in Elm will be rolling out
-slowly as I get more data and experience.
-
-I ask that people bullish on compiling to node.js keep this in mind. I think we
-can do better than the hopelessly bad concurrency model of node.js, and I hope
-the Elm community will be supportive of being more ambitious, even if it takes
-longer. That’s kind of what Elm is all about.
--}
-
-import Basics exposing (Never)
-import Native.Scheduler
-import Platform
-import Task exposing (Task)
-import Time exposing (Time)
-
-
-{-| A light-weight process that runs concurrently. You can use `spawn` to
-get a bunch of different tasks running in different processes. The Elm runtime
-will interleave their progress. So if a task is taking too long, we will pause
-it at an `andThen` and switch over to other stuff.
-
-**Note:** We make a distinction between *concurrency* which means interleaving
-different sequences and *parallelism* which means running different
-sequences at the exact same time. For example, a
-[time-sharing system](https://en.wikipedia.org/wiki/Time-sharing) is definitely
-concurrent, but not necessarily parallel. So even though JS runs within a
-single OS-level thread, Elm can still run things concurrently.
--}
-type alias Id =
- Platform.ProcessId
-
-
-{-| Run a task in its own light-weight process. In the following example,
-`task1` and `task2` will be interleaved. If `task1` makes a long HTTP request
-or is just taking a long time, we can hop over to `task2` and do some work
-there.
-
- spawn task1
- |> Task.andThen (\_ -> spawn task2)
-
-**Note:** This creates a relatively restricted kind of `Process` because it
-cannot receive any messages. More flexibility for user-defined processes will
-come in a later release!
--}
-spawn : Task x a -> Task y Id
-spawn =
- Native.Scheduler.spawn
-
-
-{-| Block progress on the current process for a given amount of time. The
-JavaScript equivalent of this is [`setTimeout`][setTimeout] which lets you
-delay work until later.
-
-[setTimeout]: https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout
--}
-sleep : Time -> Task x ()
-sleep =
- Native.Scheduler.sleep
-
-
-{-| Sometimes you `spawn` a process, but later decide it would be a waste to
-have it keep running and doing stuff. The `kill` function will force a process
-to bail on whatever task it is running. So if there is an HTTP request in
-flight, it will also abort the request.
--}
-kill : Id -> Task x ()
-kill =
- Native.Scheduler.kill
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Random.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Random.elm
deleted file mode 100644
index d506433..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Random.elm
+++ /dev/null
@@ -1,532 +0,0 @@
-effect module Random where { command = MyCmd } exposing
- ( Generator, Seed
- , bool, int, float
- , list, pair
- , map, map2, map3, map4, map5
- , andThen
- , minInt, maxInt
- , generate
- , step, initialSeed
- )
-
-{-| This library helps you generate pseudo-random values.
-
-This library is all about building [`generators`](#Generator) for whatever
-type of values you need. There are a bunch of primitive generators like
-[`bool`](#bool) and [`int`](#int) that you can build up into fancier
-generators with functions like [`list`](#list) and [`map`](#map).
-
-It may be helpful to [read about JSON decoders][json] because they work very
-similarly.
-
-[json]: https://evancz.gitbooks.io/an-introduction-to-elm/content/interop/json.html
-
-> *Note:* This is an implementation of the Portable Combined Generator of
-L'Ecuyer for 32-bit computers. It is almost a direct translation from the
-[System.Random](http://hackage.haskell.org/package/random-1.0.1.1/docs/System-Random.html)
-module. It has a period of roughly 2.30584e18.
-
-# Generators
-@docs Generator
-
-# Primitive Generators
-@docs bool, int, float
-
-# Data Structure Generators
-@docs pair, list
-
-# Custom Generators
-@docs map, map2, map3, map4, map5, andThen
-
-# Generate Values
-@docs generate
-
-# Generate Values Manually
-@docs step, Seed, initialSeed
-
-# Constants
-@docs maxInt, minInt
-
--}
-
-import Basics exposing (..)
-import List exposing ((::))
-import Platform
-import Platform.Cmd exposing (Cmd)
-import Task exposing (Task)
-import Time
-import Tuple
-
-
-
--- PRIMITIVE GENERATORS
-
-
-{-| Create a generator that produces boolean values. The following example
-simulates a coin flip that may land heads or tails.
-
- type Flip = Heads | Tails
-
- coinFlip : Generator Flip
- coinFlip =
- map (\b -> if b then Heads else Tails) bool
--}
-bool : Generator Bool
-bool =
- map ((==) 1) (int 0 1)
-
-
-{-| Generate 32-bit integers in a given range.
-
- int 0 10 -- an integer between zero and ten
- int -5 5 -- an integer between -5 and 5
-
- int minInt maxInt -- an integer in the widest range feasible
-
-This function *can* produce values outside of the range [[`minInt`](#minInt),
-[`maxInt`](#maxInt)] but sufficient randomness is not guaranteed.
--}
-int : Int -> Int -> Generator Int
-int a b =
- Generator <| \(Seed seed) ->
- let
- (lo,hi) =
- if a < b then (a,b) else (b,a)
-
- k = hi - lo + 1
- -- 2^31 - 87
- base = 2147483561
- n = iLogBase base k
-
- f n acc state =
- case n of
- 0 -> (acc, state)
- _ ->
- let
- (x, nextState) = seed.next state
- in
- f (n - 1) (x + acc * base) nextState
-
- (v, nextState) =
- f n 1 seed.state
- in
- ( lo + v % k
- , Seed { seed | state = nextState }
- )
-
-
-iLogBase : Int -> Int -> Int
-iLogBase b i =
- if i < b then
- 1
- else
- 1 + iLogBase b (i // b)
-
-
-{-| The maximum value for randomly generated 32-bit ints: 2147483647 -}
-maxInt : Int
-maxInt =
- 2147483647
-
-
-{-| The minimum value for randomly generated 32-bit ints: -2147483648 -}
-minInt : Int
-minInt =
- -2147483648
-
-
-{-| Generate floats in a given range. The following example is a generator
-that produces decimals between 0 and 1.
-
- probability : Generator Float
- probability =
- float 0 1
--}
-float : Float -> Float -> Generator Float
-float a b =
- Generator <| \seed ->
- let
- (lo, hi) =
- if a < b then (a,b) else (b,a)
-
- (number, newSeed) =
- step (int minInt maxInt) seed
-
- negativeOneToOne =
- toFloat number / toFloat (maxInt - minInt)
-
- scaled =
- (lo+hi)/2 + ((hi-lo) * negativeOneToOne)
- in
- (scaled, newSeed)
-
-
-
--- DATA STRUCTURES
-
-
-{-| Create a pair of random values. A common use of this might be to generate
-a point in a certain 2D space. Imagine we have a collage that is 400 pixels
-wide and 200 pixels tall.
-
- randomPoint : Generator (Int,Int)
- randomPoint =
- pair (int -200 200) (int -100 100)
-
--}
-pair : Generator a -> Generator b -> Generator (a,b)
-pair genA genB =
- map2 (,) genA genB
-
-
-{-| Create a list of random values.
-
- floatList : Generator (List Float)
- floatList =
- list 10 (float 0 1)
-
- intList : Generator (List Int)
- intList =
- list 5 (int 0 100)
-
- intPairs : Generator (List (Int, Int))
- intPairs =
- list 10 <| pair (int 0 100) (int 0 100)
--}
-list : Int -> Generator a -> Generator (List a)
-list n (Generator generate) =
- Generator <| \seed ->
- listHelp [] n generate seed
-
-
-listHelp : List a -> Int -> (Seed -> (a,Seed)) -> Seed -> (List a, Seed)
-listHelp list n generate seed =
- if n < 1 then
- (List.reverse list, seed)
-
- else
- let
- (value, newSeed) =
- generate seed
- in
- listHelp (value :: list) (n-1) generate newSeed
-
-
-
--- CUSTOM GENERATORS
-
-
-{-| Transform the values produced by a generator. The following examples show
-how to generate booleans and letters based on a basic integer generator.
-
- bool : Generator Bool
- bool =
- map ((==) 1) (int 0 1)
-
- lowercaseLetter : Generator Char
- lowercaseLetter =
- map (\n -> Char.fromCode (n + 97)) (int 0 25)
-
- uppercaseLetter : Generator Char
- uppercaseLetter =
- map (\n -> Char.fromCode (n + 65)) (int 0 25)
-
--}
-map : (a -> b) -> Generator a -> Generator b
-map func (Generator genA) =
- Generator <| \seed0 ->
- let
- (a, seed1) = genA seed0
- in
- (func a, seed1)
-
-
-{-| Combine two generators.
-
-This function is used to define things like [`pair`](#pair) where you want to
-put two generators together.
-
- pair : Generator a -> Generator b -> Generator (a,b)
- pair genA genB =
- map2 (,) genA genB
-
--}
-map2 : (a -> b -> c) -> Generator a -> Generator b -> Generator c
-map2 func (Generator genA) (Generator genB) =
- Generator <| \seed0 ->
- let
- (a, seed1) = genA seed0
- (b, seed2) = genB seed1
- in
- (func a b, seed2)
-
-
-{-| Combine three generators. This could be used to produce random colors.
-
- import Color
-
- rgb : Generator Color.Color
- rgb =
- map3 Color.rgb (int 0 255) (int 0 255) (int 0 255)
-
- hsl : Generator Color.Color
- hsl =
- map3 Color.hsl (map degrees (int 0 360)) (float 0 1) (float 0 1)
--}
-map3 : (a -> b -> c -> d) -> Generator a -> Generator b -> Generator c -> Generator d
-map3 func (Generator genA) (Generator genB) (Generator genC) =
- Generator <| \seed0 ->
- let
- (a, seed1) = genA seed0
- (b, seed2) = genB seed1
- (c, seed3) = genC seed2
- in
- (func a b c, seed3)
-
-
-{-| Combine four generators.
--}
-map4 : (a -> b -> c -> d -> e) -> Generator a -> Generator b -> Generator c -> Generator d -> Generator e
-map4 func (Generator genA) (Generator genB) (Generator genC) (Generator genD) =
- Generator <| \seed0 ->
- let
- (a, seed1) = genA seed0
- (b, seed2) = genB seed1
- (c, seed3) = genC seed2
- (d, seed4) = genD seed3
- in
- (func a b c d, seed4)
-
-
-{-| Combine five generators.
--}
-map5 : (a -> b -> c -> d -> e -> f) -> Generator a -> Generator b -> Generator c -> Generator d -> Generator e -> Generator f
-map5 func (Generator genA) (Generator genB) (Generator genC) (Generator genD) (Generator genE) =
- Generator <| \seed0 ->
- let
- (a, seed1) = genA seed0
- (b, seed2) = genB seed1
- (c, seed3) = genC seed2
- (d, seed4) = genD seed3
- (e, seed5) = genE seed4
- in
- (func a b c d e, seed5)
-
-
-{-| Chain random operations, threading through the seed. In the following
-example, we will generate a random letter by putting together uppercase and
-lowercase letters.
-
- letter : Generator Char
- letter =
- bool
- |> andThen upperOrLower
-
- upperOrLower : Bool -> Generator Char
- upperOrLower b =
- if b then uppercaseLetter else lowercaseLetter
-
- -- bool : Generator Bool
- -- uppercaseLetter : Generator Char
- -- lowercaseLetter : Generator Char
--}
-andThen : (a -> Generator b) -> Generator a -> Generator b
-andThen callback (Generator generate) =
- Generator <| \seed ->
- let
- (result, newSeed) =
- generate seed
-
- (Generator genB) =
- callback result
- in
- genB newSeed
-
-
-
--- IMPLEMENTATION
-
-
-{-| A `Generator` is like a recipe for generating certain random values. So a
-`Generator Int` describes how to generate integers and a `Generator String`
-describes how to generate strings.
-
-To actually *run* a generator and produce the random values, you need to use
-functions like [`generate`](#generate) and [`initialSeed`](#initialSeed).
--}
-type Generator a =
- Generator (Seed -> (a, Seed))
-
-
-type State = State Int Int
-
-
-{-| A `Seed` is the source of randomness in this whole system. Whenever
-you want to use a generator, you need to pair it with a seed.
--}
-type Seed =
- Seed
- { state : State
- , next : State -> (Int, State)
- , split : State -> (State, State)
- , range : State -> (Int,Int)
- }
-
-
-{-| Generate a random value as specified by a given `Generator`.
-
-In the following example, we are trying to generate a number between 0 and 100
-with the `int 0 100` generator. Each time we call `step` we need to provide a
-seed. This will produce a random number and a *new* seed to use if we want to
-run other generators later.
-
-So here it is done right, where we get a new seed from each `step` call and
-thread that through.
-
- seed0 = initialSeed 31415
-
- -- step (int 0 100) seed0 ==> (42, seed1)
- -- step (int 0 100) seed1 ==> (31, seed2)
- -- step (int 0 100) seed2 ==> (99, seed3)
-
-Notice that we use different seeds on each line. This is important! If you use
-the same seed, you get the same results.
-
- -- step (int 0 100) seed0 ==> (42, seed1)
- -- step (int 0 100) seed0 ==> (42, seed1)
- -- step (int 0 100) seed0 ==> (42, seed1)
--}
-step : Generator a -> Seed -> (a, Seed)
-step (Generator generator) seed =
- generator seed
-
-
-{-| Create a “seed” of randomness which makes it possible to
-generate random values. If you use the same seed many times, it will result
-in the same thing every time! A good way to get an unexpected seed is to use
-the current time.
--}
-initialSeed : Int -> Seed
-initialSeed n =
- Seed
- { state = initState n
- , next = next
- , split = split
- , range = range
- }
-
-
-{-| Produce the initial generator state. Distinct arguments should be likely
-to produce distinct generator states.
--}
-initState : Int -> State
-initState seed =
- let
- s = max seed -seed
- q = s // (magicNum6-1)
- s1 = s % (magicNum6-1)
- s2 = q % (magicNum7-1)
- in
- State (s1+1) (s2+1)
-
-
-magicNum0 = 40014
-magicNum1 = 53668
-magicNum2 = 12211
-magicNum3 = 52774
-magicNum4 = 40692
-magicNum5 = 3791
-magicNum6 = 2147483563
-magicNum7 = 2147483399
-magicNum8 = 2147483562
-
-
-next : State -> (Int, State)
-next (State state1 state2) =
- -- Div always rounds down and so random numbers are biased
- -- ideally we would use division that rounds towards zero so
- -- that in the negative case it rounds up and in the positive case
- -- it rounds down. Thus half the time it rounds up and half the time it
- -- rounds down
- let
- k1 = state1 // magicNum1
- rawState1 = magicNum0 * (state1 - k1 * magicNum1) - k1 * magicNum2
- newState1 = if rawState1 < 0 then rawState1 + magicNum6 else rawState1
- k2 = state2 // magicNum3
- rawState2 = magicNum4 * (state2 - k2 * magicNum3) - k2 * magicNum5
- newState2 = if rawState2 < 0 then rawState2 + magicNum7 else rawState2
- z = newState1 - newState2
- newZ = if z < 1 then z + magicNum8 else z
- in
- (newZ, State newState1 newState2)
-
-
-split : State -> (State, State)
-split (State s1 s2 as std) =
- let
- new_s1 =
- if s1 == magicNum6-1 then 1 else s1 + 1
-
- new_s2 =
- if s2 == 1 then magicNum7-1 else s2 - 1
-
- (State t1 t2) =
- Tuple.second (next std)
- in
- (State new_s1 t2, State t1 new_s2)
-
-
-range : State -> (Int,Int)
-range _ =
- (0, magicNum8)
-
-
-
--- MANAGER
-
-
-{-| Create a command that will generate random values.
-
-Read more about how to use this in your programs in [The Elm Architecture
-tutorial][arch] which has a section specifically [about random values][rand].
-
-[arch]: https://evancz.gitbooks.io/an-introduction-to-elm/content/architecture/index.html
-[rand]: https://evancz.gitbooks.io/an-introduction-to-elm/content/architecture/effects/random.html
--}
-generate : (a -> msg) -> Generator a -> Cmd msg
-generate tagger generator =
- command (Generate (map tagger generator))
-
-
-type MyCmd msg = Generate (Generator msg)
-
-
-cmdMap : (a -> b) -> MyCmd a -> MyCmd b
-cmdMap func (Generate generator) =
- Generate (map func generator)
-
-
-init : Task Never Seed
-init =
- Time.now
- |> Task.andThen (\t -> Task.succeed (initialSeed (round t)))
-
-
-onEffects : Platform.Router msg Never -> List (MyCmd msg) -> Seed -> Task Never Seed
-onEffects router commands seed =
- case commands of
- [] ->
- Task.succeed seed
-
- Generate generator :: rest ->
- let
- (value, newSeed) =
- step generator seed
- in
- Platform.sendToApp router value
- |> Task.andThen (\_ -> onEffects router rest newSeed)
-
-
-onSelfMsg : Platform.Router msg Never -> Never -> Seed -> Task Never Seed
-onSelfMsg _ _ seed =
- Task.succeed seed
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Regex.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Regex.elm
deleted file mode 100644
index 2d58ecf..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Regex.elm
+++ /dev/null
@@ -1,148 +0,0 @@
-module Regex exposing
- ( Regex
- , regex, escape, caseInsensitive
- , HowMany(..), Match
- , contains, find, replace, split
- )
-
-{-| A library for working with regular expressions. It uses [the
-same kind of regular expressions accepted by JavaScript](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions).
-
-# Create
-@docs Regex, regex, escape, caseInsensitive
-
-# Helpful Data Structures
-
-These data structures are needed to help define functions like [`find`](#find)
-and [`replace`](#replace).
-
-@docs HowMany, Match
-
-# Use
-@docs contains, find, replace, split
-
--}
-
-import Maybe exposing (Maybe)
-import Native.Regex
-
-
-{-| A regular expression, describing a certain set of strings.
--}
-type Regex = Regex
-
-
-{-| Escape strings to be regular expressions, making all special characters
-safe. So `regex (escape "^a+")` will match exactly `"^a+"` instead of a series
-of `a`’s that start at the beginning of the line.
--}
-escape : String -> String
-escape =
- Native.Regex.escape
-
-
-{-| Create a Regex that matches patterns [as specified in JavaScript](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Writing_a_Regular_Expression_Pattern).
-
-Be careful to escape backslashes properly! For example, `"\w"` is escaping the
-letter `w` which is probably not what you want. You probably want `"\\w"`
-instead, which escapes the backslash.
--}
-regex : String -> Regex
-regex =
- Native.Regex.regex
-
-
-
-{-| Make a regex case insensitive -}
-caseInsensitive : Regex -> Regex
-caseInsensitive =
- Native.Regex.caseInsensitive
-
-
-{-| Check to see if a Regex is contained in a string.
-
- contains (regex "123") "12345" == True
- contains (regex "b+") "aabbcc" == True
-
- contains (regex "789") "12345" == False
- contains (regex "z+") "aabbcc" == False
--}
-contains : Regex -> String -> Bool
-contains =
- Native.Regex.contains
-
-
-{-| A `Match` represents all of the details about a particular match in a string.
-Here are details on each field:
-
- * `match` — the full string of the match.
- * `submatches` — a regex might have [subpatterns, surrounded by
- parentheses](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches).
- If there are N subpatterns, there will be N elements in the `submatches` list.
- Each submatch in this list is a `Maybe` because not all subpatterns may trigger.
- For example, `(regex "(a+)|(b+)")` will either match many `a`’s or
- many `b`’s, but never both.
- * `index` — the index of the match in the original string.
- * `number` — if you find many matches, you can think of each one
- as being labeled with a `number` starting at one. So the first time you
- find a match, that is match `number` one. Second time is match `number` two.
- This is useful when paired with `replace All` if replacement is dependent on how
- many times a pattern has appeared before.
--}
-type alias Match =
- { match : String
- , submatches : List (Maybe String)
- , index : Int
- , number : Int
- }
-
-
-{-| `HowMany` is used to specify how many matches you want to make. So
-`replace All` would replace every match, but `replace (AtMost 2)` would
-replace at most two matches (i.e. zero, one, two, but never three or more).
--}
-type HowMany = All | AtMost Int
-
-
-{-| Find matches in a string:
-
- findTwoCommas = find (AtMost 2) (regex ",")
-
- -- map .index (findTwoCommas "a,b,c,d,e") == [1,3]
- -- map .index (findTwoCommas "a b c d e") == []
-
- places = find All (regex "[oi]n a (\\w+)") "I am on a boat in a lake."
-
- -- map .match places == ["on a boat", "in a lake"]
- -- map .submatches places == [ [Just "boat"], [Just "lake"] ]
--}
-find : HowMany -> Regex -> String -> List Match
-find =
- Native.Regex.find
-
-
-{-| Replace matches. The function from `Match` to `String` lets
-you use the details of a specific match when making replacements.
-
- devowel = replace All (regex "[aeiou]") (\_ -> "")
-
- -- devowel "The quick brown fox" == "Th qck brwn fx"
-
- reverseWords = replace All (regex "\\w+") (\{match} -> String.reverse match)
-
- -- reverseWords "deliver mined parts" == "reviled denim strap"
--}
-replace : HowMany -> Regex -> (Match -> String) -> String -> String
-replace =
- Native.Regex.replace
-
-
-{-| Split a string, using the regex as the separator.
-
- split (AtMost 1) (regex ",") "tom,99,90,85" == ["tom","99,90,85"]
-
- split All (regex ",") "a,b,c,d" == ["a","b","c","d"]
--}
-split : HowMany -> Regex -> String -> List String
-split =
- Native.Regex.split
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Result.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Result.elm
deleted file mode 100644
index 61c678c..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Result.elm
+++ /dev/null
@@ -1,210 +0,0 @@
-module Result exposing
- ( Result(..)
- , withDefault
- , map, map2, map3, map4, map5
- , andThen
- , toMaybe, fromMaybe, mapError
- )
-
-{-| A `Result` is the result of a computation that may fail. This is a great
-way to manage errors in Elm.
-
-# Type and Constructors
-@docs Result
-
-# Mapping
-@docs map, map2, map3, map4, map5
-
-# Chaining
-@docs andThen
-
-# Handling Errors
-@docs withDefault, toMaybe, fromMaybe, mapError
--}
-
-import Maybe exposing ( Maybe(Just, Nothing) )
-
-
-{-| A `Result` is either `Ok` meaning the computation succeeded, or it is an
-`Err` meaning that there was some failure.
--}
-type Result error value
- = Ok value
- | Err error
-
-
-{-| If the result is `Ok` return the value, but if the result is an `Err` then
-return a given default value. The following examples try to parse integers.
-
- Result.withDefault 0 (String.toInt "123") == 123
- Result.withDefault 0 (String.toInt "abc") == 0
--}
-withDefault : a -> Result x a -> a
-withDefault def result =
- case result of
- Ok a ->
- a
-
- Err _ ->
- def
-
-
-{-| Apply a function to a result. If the result is `Ok`, it will be converted.
-If the result is an `Err`, the same error value will propagate through.
-
- map sqrt (Ok 4.0) == Ok 2.0
- map sqrt (Err "bad input") == Err "bad input"
--}
-map : (a -> value) -> Result x a -> Result x value
-map func ra =
- case ra of
- Ok a -> Ok (func a)
- Err e -> Err e
-
-
-{-| Apply a function to two results, if both results are `Ok`. If not,
-the first argument which is an `Err` will propagate through.
-
- map2 (+) (String.toInt "1") (String.toInt "2") == Ok 3
- map2 (+) (String.toInt "1") (String.toInt "y") == Err "could not convert string 'y' to an Int"
- map2 (+) (String.toInt "x") (String.toInt "y") == Err "could not convert string 'x' to an Int"
--}
-map2 : (a -> b -> value) -> Result x a -> Result x b -> Result x value
-map2 func ra rb =
- case (ra,rb) of
- (Ok a, Ok b) -> Ok (func a b)
- (Err x, _) -> Err x
- (_, Err x) -> Err x
-
-
-{-|-}
-map3 : (a -> b -> c -> value) -> Result x a -> Result x b -> Result x c -> Result x value
-map3 func ra rb rc =
- case (ra,rb,rc) of
- (Ok a, Ok b, Ok c) -> Ok (func a b c)
- (Err x, _, _) -> Err x
- (_, Err x, _) -> Err x
- (_, _, Err x) -> Err x
-
-
-{-|-}
-map4 : (a -> b -> c -> d -> value) -> Result x a -> Result x b -> Result x c -> Result x d -> Result x value
-map4 func ra rb rc rd =
- case (ra,rb,rc,rd) of
- (Ok a, Ok b, Ok c, Ok d) -> Ok (func a b c d)
- (Err x, _, _, _) -> Err x
- (_, Err x, _, _) -> Err x
- (_, _, Err x, _) -> Err x
- (_, _, _, Err x) -> Err x
-
-
-{-|-}
-map5 : (a -> b -> c -> d -> e -> value) -> Result x a -> Result x b -> Result x c -> Result x d -> Result x e -> Result x value
-map5 func ra rb rc rd re =
- case (ra,rb,rc,rd,re) of
- (Ok a, Ok b, Ok c, Ok d, Ok e) -> Ok (func a b c d e)
- (Err x, _, _, _, _) -> Err x
- (_, Err x, _, _, _) -> Err x
- (_, _, Err x, _, _) -> Err x
- (_, _, _, Err x, _) -> Err x
- (_, _, _, _, Err x) -> Err x
-
-
-{-| Chain together a sequence of computations that may fail. It is helpful
-to see its definition:
-
- andThen : (a -> Result e b) -> Result e a -> Result e b
- andThen callback result =
- case result of
- Ok value -> callback value
- Err msg -> Err msg
-
-This means we only continue with the callback if things are going well. For
-example, say you need to use (`toInt : String -> Result String Int`) to parse
-a month and make sure it is between 1 and 12:
-
- toValidMonth : Int -> Result String Int
- toValidMonth month =
- if month >= 1 && month <= 12
- then Ok month
- else Err "months must be between 1 and 12"
-
- toMonth : String -> Result String Int
- toMonth rawString =
- toInt rawString
- |> andThen toValidMonth
-
- -- toMonth "4" == Ok 4
- -- toMonth "9" == Ok 9
- -- toMonth "a" == Err "cannot parse to an Int"
- -- toMonth "0" == Err "months must be between 1 and 12"
-
-This allows us to come out of a chain of operations with quite a specific error
-message. It is often best to create a custom type that explicitly represents
-the exact ways your computation may fail. This way it is easy to handle in your
-code.
--}
-andThen : (a -> Result x b) -> Result x a -> Result x b
-andThen callback result =
- case result of
- Ok value ->
- callback value
-
- Err msg ->
- Err msg
-
-
-{-| Transform an `Err` value. For example, say the errors we get have too much
-information:
-
- parseInt : String -> Result ParseError Int
-
- type alias ParseError =
- { message : String
- , code : Int
- , position : (Int,Int)
- }
-
- mapError .message (parseInt "123") == Ok 123
- mapError .message (parseInt "abc") == Err "char 'a' is not a number"
--}
-mapError : (x -> y) -> Result x a -> Result y a
-mapError f result =
- case result of
- Ok v ->
- Ok v
-
- Err e ->
- Err (f e)
-
-
-{-| Convert to a simpler `Maybe` if the actual error message is not needed or
-you need to interact with some code that primarily uses maybes.
-
- parseInt : String -> Result ParseError Int
-
- maybeParseInt : String -> Maybe Int
- maybeParseInt string =
- toMaybe (parseInt string)
--}
-toMaybe : Result x a -> Maybe a
-toMaybe result =
- case result of
- Ok v -> Just v
- Err _ -> Nothing
-
-
-{-| Convert from a simple `Maybe` to interact with some code that primarily
-uses `Results`.
-
- parseInt : String -> Maybe Int
-
- resultParseInt : String -> Result String Int
- resultParseInt string =
- fromMaybe ("error parsing string: " ++ toString string) (parseInt string)
--}
-fromMaybe : x -> Maybe a -> Result x a
-fromMaybe err maybe =
- case maybe of
- Just v -> Ok v
- Nothing -> Err err
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Set.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Set.elm
deleted file mode 100644
index 9b1914a..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Set.elm
+++ /dev/null
@@ -1,168 +0,0 @@
-module Set exposing
- ( Set
- , empty, singleton, insert, remove
- , isEmpty, member, size
- , foldl, foldr, map
- , filter, partition
- , union, intersect, diff
- , toList, fromList
- )
-
-{-| A set of unique values. The values can be any comparable type. This
-includes `Int`, `Float`, `Time`, `Char`, `String`, and tuples or lists
-of comparable types.
-
-Insert, remove, and query operations all take *O(log n)* time.
-
-# Sets
-@docs Set
-
-# Build
-@docs empty, singleton, insert, remove
-
-# Query
-@docs isEmpty, member, size
-
-# Combine
-@docs union, intersect, diff
-
-# Lists
-@docs toList, fromList
-
-# Transform
-@docs map, foldl, foldr, filter, partition
-
--}
-
-import Basics exposing ((<|))
-import Dict as Dict
-import List as List
-
-
-{-| Represents a set of unique values. So `(Set Int)` is a set of integers and
-`(Set String)` is a set of strings.
--}
-type Set t =
- Set_elm_builtin (Dict.Dict t ())
-
-
-{-| Create an empty set.
--}
-empty : Set a
-empty =
- Set_elm_builtin Dict.empty
-
-
-{-| Create a set with one value.
--}
-singleton : comparable -> Set comparable
-singleton k =
- Set_elm_builtin <| Dict.singleton k ()
-
-
-{-| Insert a value into a set.
--}
-insert : comparable -> Set comparable -> Set comparable
-insert k (Set_elm_builtin d) =
- Set_elm_builtin <| Dict.insert k () d
-
-
-{-| Remove a value from a set. If the value is not found, no changes are made.
--}
-remove : comparable -> Set comparable -> Set comparable
-remove k (Set_elm_builtin d) =
- Set_elm_builtin <| Dict.remove k d
-
-
-{-| Determine if a set is empty.
--}
-isEmpty : Set a -> Bool
-isEmpty (Set_elm_builtin d) =
- Dict.isEmpty d
-
-
-{-| Determine if a value is in a set.
--}
-member : comparable -> Set comparable -> Bool
-member k (Set_elm_builtin d) =
- Dict.member k d
-
-
-{-| Determine the number of elements in a set.
--}
-size : Set a -> Int
-size (Set_elm_builtin d) =
- Dict.size d
-
-
-{-| Get the union of two sets. Keep all values.
--}
-union : Set comparable -> Set comparable -> Set comparable
-union (Set_elm_builtin d1) (Set_elm_builtin d2) =
- Set_elm_builtin <| Dict.union d1 d2
-
-
-{-| Get the intersection of two sets. Keeps values that appear in both sets.
--}
-intersect : Set comparable -> Set comparable -> Set comparable
-intersect (Set_elm_builtin d1) (Set_elm_builtin d2) =
- Set_elm_builtin <| Dict.intersect d1 d2
-
-
-{-| Get the difference between the first set and the second. Keeps values
-that do not appear in the second set.
--}
-diff : Set comparable -> Set comparable -> Set comparable
-diff (Set_elm_builtin d1) (Set_elm_builtin d2) =
- Set_elm_builtin <| Dict.diff d1 d2
-
-
-{-| Convert a set into a list, sorted from lowest to highest.
--}
-toList : Set comparable -> List comparable
-toList (Set_elm_builtin d) =
- Dict.keys d
-
-
-{-| Convert a list into a set, removing any duplicates.
--}
-fromList : List comparable -> Set comparable
-fromList xs = List.foldl insert empty xs
-
-
-{-| Fold over the values in a set, in order from lowest to highest.
--}
-foldl : (comparable -> b -> b) -> b -> Set comparable -> b
-foldl f b (Set_elm_builtin d) =
- Dict.foldl (\k _ b -> f k b) b d
-
-
-{-| Fold over the values in a set, in order from highest to lowest.
--}
-foldr : (comparable -> b -> b) -> b -> Set comparable -> b
-foldr f b (Set_elm_builtin d) =
- Dict.foldr (\k _ b -> f k b) b d
-
-
-{-| Map a function onto a set, creating a new set with no duplicates.
--}
-map : (comparable -> comparable2) -> Set comparable -> Set comparable2
-map f s = fromList (List.map f (toList s))
-
-
-{-| Create a new set consisting only of elements which satisfy a predicate.
--}
-filter : (comparable -> Bool) -> Set comparable -> Set comparable
-filter p (Set_elm_builtin d) =
- Set_elm_builtin <| Dict.filter (\k _ -> p k) d
-
-
-{-| Create two new sets; the first consisting of elements which satisfy a
-predicate, the second consisting of elements which do not.
--}
-partition : (comparable -> Bool) -> Set comparable -> (Set comparable, Set comparable)
-partition p (Set_elm_builtin d) =
- let
- (p1, p2) = Dict.partition (\k _ -> p k) d
- in
- (Set_elm_builtin p1, Set_elm_builtin p2)
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/String.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/String.elm
deleted file mode 100644
index a648e8d..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/String.elm
+++ /dev/null
@@ -1,464 +0,0 @@
-module String exposing
- ( isEmpty, length, reverse, repeat
- , cons, uncons, fromChar, append, concat, split, join, words, lines
- , slice, left, right, dropLeft, dropRight
- , contains, startsWith, endsWith, indexes, indices
- , toInt, toFloat, toList, fromList
- , toUpper, toLower, pad, padLeft, padRight, trim, trimLeft, trimRight
- , map, filter, foldl, foldr, any, all
- )
-
-{-| A built-in representation for efficient string manipulation. String literals
-are enclosed in `"double quotes"`. Strings are *not* lists of characters.
-
-# Basics
-@docs isEmpty, length, reverse, repeat
-
-# Building and Splitting
-@docs cons, uncons, fromChar, append, concat, split, join, words, lines
-
-# Get Substrings
-@docs slice, left, right, dropLeft, dropRight
-
-# Check for Substrings
-@docs contains, startsWith, endsWith, indexes, indices
-
-# Conversions
-@docs toInt, toFloat, toList, fromList
-
-# Formatting
-Cosmetic operations such as padding with extra characters or trimming whitespace.
-
-@docs toUpper, toLower,
- pad, padLeft, padRight,
- trim, trimLeft, trimRight
-
-# Higher-Order Functions
-@docs map, filter, foldl, foldr, any, all
--}
-
-import Native.String
-import Char
-import Maybe exposing (Maybe)
-import Result exposing (Result)
-
-
-{-| Determine if a string is empty.
-
- isEmpty "" == True
- isEmpty "the world" == False
--}
-isEmpty : String -> Bool
-isEmpty =
- Native.String.isEmpty
-
-
-{-| Add a character to the beginning of a string.
-
- cons 'T' "he truth is out there" == "The truth is out there"
--}
-cons : Char -> String -> String
-cons =
- Native.String.cons
-
-
-{-| Create a string from a given character.
-
- fromChar 'a' == "a"
--}
-fromChar : Char -> String
-fromChar char =
- cons char ""
-
-
-{-| Split a non-empty string into its head and tail. This lets you
-pattern match on strings exactly as you would with lists.
-
- uncons "abc" == Just ('a',"bc")
- uncons "" == Nothing
--}
-uncons : String -> Maybe (Char, String)
-uncons =
- Native.String.uncons
-
-
-{-| Append two strings. You can also use [the `(++)` operator](Basics#++)
-to do this.
-
- append "butter" "fly" == "butterfly"
--}
-append : String -> String -> String
-append =
- Native.String.append
-
-
-{-| Concatenate many strings into one.
-
- concat ["never","the","less"] == "nevertheless"
--}
-concat : List String -> String
-concat =
- Native.String.concat
-
-
-{-| Get the length of a string.
-
- length "innumerable" == 11
- length "" == 0
-
--}
-length : String -> Int
-length =
- Native.String.length
-
-
-{-| Transform every character in a string
-
- map (\c -> if c == '/' then '.' else c) "a/b/c" == "a.b.c"
--}
-map : (Char -> Char) -> String -> String
-map =
- Native.String.map
-
-
-{-| Keep only the characters that satisfy the predicate.
-
- filter isDigit "R2-D2" == "22"
--}
-filter : (Char -> Bool) -> String -> String
-filter =
- Native.String.filter
-
-
-{-| Reverse a string.
-
- reverse "stressed" == "desserts"
--}
-reverse : String -> String
-reverse =
- Native.String.reverse
-
-
-{-| Reduce a string from the left.
-
- foldl cons "" "time" == "emit"
--}
-foldl : (Char -> b -> b) -> b -> String -> b
-foldl =
- Native.String.foldl
-
-
-{-| Reduce a string from the right.
-
- foldr cons "" "time" == "time"
--}
-foldr : (Char -> b -> b) -> b -> String -> b
-foldr =
- Native.String.foldr
-
-
-{-| Split a string using a given separator.
-
- split "," "cat,dog,cow" == ["cat","dog","cow"]
- split "/" "home/evan/Desktop/" == ["home","evan","Desktop", ""]
-
-Use [`Regex.split`](Regex#split) if you need something more flexible.
--}
-split : String -> String -> List String
-split =
- Native.String.split
-
-
-{-| Put many strings together with a given separator.
-
- join "a" ["H","w","ii","n"] == "Hawaiian"
- join " " ["cat","dog","cow"] == "cat dog cow"
- join "/" ["home","evan","Desktop"] == "home/evan/Desktop"
--}
-join : String -> List String -> String
-join =
- Native.String.join
-
-
-{-| Repeat a string *n* times.
-
- repeat 3 "ha" == "hahaha"
--}
-repeat : Int -> String -> String
-repeat =
- Native.String.repeat
-
-
-{-| Take a substring given a start and end index. Negative indexes
-are taken starting from the *end* of the list.
-
- slice 7 9 "snakes on a plane!" == "on"
- slice 0 6 "snakes on a plane!" == "snakes"
- slice 0 -7 "snakes on a plane!" == "snakes on a"
- slice -6 -1 "snakes on a plane!" == "plane"
--}
-slice : Int -> Int -> String -> String
-slice =
- Native.String.slice
-
-
-{-| Take *n* characters from the left side of a string.
-
- left 2 "Mulder" == "Mu"
--}
-left : Int -> String -> String
-left =
- Native.String.left
-
-
-{-| Take *n* characters from the right side of a string.
-
- right 2 "Scully" == "ly"
--}
-right : Int -> String -> String
-right =
- Native.String.right
-
-
-{-| Drop *n* characters from the left side of a string.
-
- dropLeft 2 "The Lone Gunmen" == "e Lone Gunmen"
--}
-dropLeft : Int -> String -> String
-dropLeft =
- Native.String.dropLeft
-
-
-{-| Drop *n* characters from the right side of a string.
-
- dropRight 2 "Cigarette Smoking Man" == "Cigarette Smoking M"
--}
-dropRight : Int -> String -> String
-dropRight =
- Native.String.dropRight
-
-
-{-| Pad a string on both sides until it has a given length.
-
- pad 5 ' ' "1" == " 1 "
- pad 5 ' ' "11" == " 11 "
- pad 5 ' ' "121" == " 121 "
--}
-pad : Int -> Char -> String -> String
-pad =
- Native.String.pad
-
-
-{-| Pad a string on the left until it has a given length.
-
- padLeft 5 '.' "1" == "....1"
- padLeft 5 '.' "11" == "...11"
- padLeft 5 '.' "121" == "..121"
--}
-padLeft : Int -> Char -> String -> String
-padLeft =
- Native.String.padLeft
-
-
-{-| Pad a string on the right until it has a given length.
-
- padRight 5 '.' "1" == "1...."
- padRight 5 '.' "11" == "11..."
- padRight 5 '.' "121" == "121.."
--}
-padRight : Int -> Char -> String -> String
-padRight =
- Native.String.padRight
-
-
-{-| Get rid of whitespace on both sides of a string.
-
- trim " hats \n" == "hats"
--}
-trim : String -> String
-trim =
- Native.String.trim
-
-
-{-| Get rid of whitespace on the left of a string.
-
- trimLeft " hats \n" == "hats \n"
--}
-trimLeft : String -> String
-trimLeft =
- Native.String.trimLeft
-
-
-{-| Get rid of whitespace on the right of a string.
-
- trimRight " hats \n" == " hats"
--}
-trimRight : String -> String
-trimRight =
- Native.String.trimRight
-
-
-{-| Break a string into words, splitting on chunks of whitespace.
-
- words "How are \t you? \n Good?" == ["How","are","you?","Good?"]
--}
-words : String -> List String
-words =
- Native.String.words
-
-
-{-| Break a string into lines, splitting on newlines.
-
- lines "How are you?\nGood?" == ["How are you?", "Good?"]
--}
-lines : String -> List String
-lines =
- Native.String.lines
-
-
-{-| Convert a string to all upper case. Useful for case-insensitive comparisons
-and VIRTUAL YELLING.
-
- toUpper "skinner" == "SKINNER"
--}
-toUpper : String -> String
-toUpper =
- Native.String.toUpper
-
-
-{-| Convert a string to all lower case. Useful for case-insensitive comparisons.
-
- toLower "X-FILES" == "x-files"
--}
-toLower : String -> String
-toLower =
- Native.String.toLower
-
-
-{-| Determine whether *any* characters satisfy a predicate.
-
- any isDigit "90210" == True
- any isDigit "R2-D2" == True
- any isDigit "heart" == False
--}
-any : (Char -> Bool) -> String -> Bool
-any =
- Native.String.any
-
-
-{-| Determine whether *all* characters satisfy a predicate.
-
- all isDigit "90210" == True
- all isDigit "R2-D2" == False
- all isDigit "heart" == False
--}
-all : (Char -> Bool) -> String -> Bool
-all =
- Native.String.all
-
-
-{-| See if the second string contains the first one.
-
- contains "the" "theory" == True
- contains "hat" "theory" == False
- contains "THE" "theory" == False
-
-Use [`Regex.contains`](Regex#contains) if you need something more flexible.
--}
-contains : String -> String -> Bool
-contains =
- Native.String.contains
-
-
-{-| See if the second string starts with the first one.
-
- startsWith "the" "theory" == True
- startsWith "ory" "theory" == False
--}
-startsWith : String -> String -> Bool
-startsWith =
- Native.String.startsWith
-
-
-{-| See if the second string ends with the first one.
-
- endsWith "the" "theory" == False
- endsWith "ory" "theory" == True
--}
-endsWith : String -> String -> Bool
-endsWith =
- Native.String.endsWith
-
-
-{-| Get all of the indexes for a substring in another string.
-
- indexes "i" "Mississippi" == [1,4,7,10]
- indexes "ss" "Mississippi" == [2,5]
- indexes "needle" "haystack" == []
--}
-indexes : String -> String -> List Int
-indexes =
- Native.String.indexes
-
-
-{-| Alias for `indexes`. -}
-indices : String -> String -> List Int
-indices =
- Native.String.indexes
-
-
-{-| Try to convert a string into an int, failing on improperly formatted strings.
-
- String.toInt "123" == Ok 123
- String.toInt "-42" == Ok -42
- String.toInt "3.1" == Err "could not convert string '3.1' to an Int"
- String.toInt "31a" == Err "could not convert string '31a' to an Int"
-
-If you are extracting a number from some raw user input, you will typically
-want to use [`Result.withDefault`](Result#withDefault) to handle bad data:
-
- Result.withDefault 0 (String.toInt "42") == 42
- Result.withDefault 0 (String.toInt "ab") == 0
--}
-toInt : String -> Result String Int
-toInt =
- Native.String.toInt
-
-
-{-| Try to convert a string into a float, failing on improperly formatted strings.
-
- String.toFloat "123" == Ok 123.0
- String.toFloat "-42" == Ok -42.0
- String.toFloat "3.1" == Ok 3.1
- String.toFloat "31a" == Err "could not convert string '31a' to a Float"
-
-If you are extracting a number from some raw user input, you will typically
-want to use [`Result.withDefault`](Result#withDefault) to handle bad data:
-
- Result.withDefault 0 (String.toFloat "42.5") == 42.5
- Result.withDefault 0 (String.toFloat "cats") == 0
--}
-toFloat : String -> Result String Float
-toFloat =
- Native.String.toFloat
-
-
-{-| Convert a string to a list of characters.
-
- toList "abc" == ['a','b','c']
--}
-toList : String -> List Char
-toList =
- Native.String.toList
-
-
-{-| Convert a list of characters into a String. Can be useful if you
-want to create a string primarily by consing, perhaps for decoding
-something.
-
- fromList ['a','b','c'] == "abc"
--}
-fromList : List Char -> String
-fromList =
- Native.String.fromList
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Task.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Task.elm
deleted file mode 100644
index 94fde9e..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Task.elm
+++ /dev/null
@@ -1,277 +0,0 @@
-effect module Task where { command = MyCmd } exposing
- ( Task
- , succeed, fail
- , map, map2, map3, map4, map5
- , sequence
- , andThen
- , onError, mapError
- , perform, attempt
- )
-
-{-| Tasks make it easy to describe asynchronous operations that may fail, like
-HTTP requests or writing to a database. For more information, see the [Elm
-documentation on Tasks](http://guide.elm-lang.org/error_handling/task.html).
-
-# Basics
-@docs Task, succeed, fail
-
-# Mapping
-@docs map, map2, map3, map4, map5
-
-# Chaining
-@docs andThen, sequence
-
-# Errors
-@docs onError, mapError
-
-# Commands
-@docs perform, attempt
-
--}
-
-import Basics exposing (Never, (|>), (<<))
-import List exposing ((::))
-import Maybe exposing (Maybe(Just,Nothing))
-import Native.Scheduler
-import Platform
-import Platform.Cmd exposing (Cmd)
-import Result exposing (Result(Ok,Err))
-
-
-
-{-| Represents asynchronous effects that may fail. It is useful for stuff like
-HTTP.
-
-For example, maybe we have a task with the type (`Task String User`). This means
-that when we perform the task, it will either fail with a `String` message or
-succeed with a `User`. So this could represent a task that is asking a server
-for a certain user.
--}
-type alias Task err ok =
- Platform.Task err ok
-
-
-
--- BASICS
-
-
-{-| A task that succeeds immediately when run.
-
- succeed 42 -- results in 42
--}
-succeed : a -> Task x a
-succeed =
- Native.Scheduler.succeed
-
-
-{-| A task that fails immediately when run.
-
- fail "file not found" : Task String a
--}
-fail : x -> Task x a
-fail =
- Native.Scheduler.fail
-
-
-
--- MAPPING
-
-
-{-| Transform a task.
-
- map sqrt (succeed 9) -- succeed 3
--}
-map : (a -> b) -> Task x a -> Task x b
-map func taskA =
- taskA
- |> andThen (\a -> succeed (func a))
-
-
-{-| Put the results of two tasks together. If either task fails, the whole
-thing fails. It also runs in order so the first task will be completely
-finished before the second task starts.
-
- map2 (+) (succeed 9) (succeed 3) -- succeed 12
--}
-map2 : (a -> b -> result) -> Task x a -> Task x b -> Task x result
-map2 func taskA taskB =
- taskA
- |> andThen (\a -> taskB
- |> andThen (\b -> succeed (func a b)))
-
-
-{-|-}
-map3 : (a -> b -> c -> result) -> Task x a -> Task x b -> Task x c -> Task x result
-map3 func taskA taskB taskC =
- taskA
- |> andThen (\a -> taskB
- |> andThen (\b -> taskC
- |> andThen (\c -> succeed (func a b c))))
-
-
-{-|-}
-map4 : (a -> b -> c -> d -> result) -> Task x a -> Task x b -> Task x c -> Task x d -> Task x result
-map4 func taskA taskB taskC taskD =
- taskA
- |> andThen (\a -> taskB
- |> andThen (\b -> taskC
- |> andThen (\c -> taskD
- |> andThen (\d -> succeed (func a b c d)))))
-
-
-{-|-}
-map5 : (a -> b -> c -> d -> e -> result) -> Task x a -> Task x b -> Task x c -> Task x d -> Task x e -> Task x result
-map5 func taskA taskB taskC taskD taskE =
- taskA
- |> andThen (\a -> taskB
- |> andThen (\b -> taskC
- |> andThen (\c -> taskD
- |> andThen (\d -> taskE
- |> andThen (\e -> succeed (func a b c d e))))))
-
-
-{-| Start with a list of tasks, and turn them into a single task that returns a
-list. The tasks will be run in order one-by-one and if any task fails the whole
-sequence fails.
-
- sequence [ succeed 1, succeed 2 ] -- succeed [ 1, 2 ]
-
-This can be useful if you need to make a bunch of HTTP requests one-by-one.
--}
-sequence : List (Task x a) -> Task x (List a)
-sequence tasks =
- case tasks of
- [] ->
- succeed []
-
- task :: remainingTasks ->
- map2 (::) task (sequence remainingTasks)
-
-
-
--- CHAINING
-
-
-{-| Chain together a task and a callback. The first task will run, and if it is
-successful, you give the result to the callback resulting in another task. This
-task then gets run.
-
- succeed 2
- |> andThen (\n -> succeed (n + 2))
- -- succeed 4
-
-This is useful for chaining tasks together. Maybe you need to get a user from
-your servers *and then* lookup their picture once you know their name.
--}
-andThen : (a -> Task x b) -> Task x a -> Task x b
-andThen =
- Native.Scheduler.andThen
-
-
--- ERRORS
-
-{-| Recover from a failure in a task. If the given task fails, we use the
-callback to recover.
-
- fail "file not found"
- |> onError (\msg -> succeed 42)
- -- succeed 42
-
- succeed 9
- |> onError (\msg -> succeed 42)
- -- succeed 9
--}
-onError : (x -> Task y a) -> Task x a -> Task y a
-onError =
- Native.Scheduler.onError
-
-
-{-| Transform the error value. This can be useful if you need a bunch of error
-types to match up.
-
- type Error = Http Http.Error | WebGL WebGL.Error
-
- getResources : Task Error Resource
- getResources =
- sequence [ mapError Http serverTask, mapError WebGL textureTask ]
--}
-mapError : (x -> y) -> Task x a -> Task y a
-mapError convert task =
- task
- |> onError (fail << convert)
-
-
-
--- COMMANDS
-
-
-type MyCmd msg =
- Perform (Task Never msg)
-
-
-{-| The only way to *do* things in Elm is to give commands to the Elm runtime.
-So we describe some complex behavior with a `Task` and then command the runtime
-to `perform` that task. For example, getting the current time looks like this:
-
- import Task
- import Time exposing (Time)
-
- type Msg = Click | NewTime Time
-
- update : Msg -> Model -> ( Model, Cmd Msg )
- update msg model =
- case msg of
- Click ->
- ( model, Task.perform NewTime Time.now )
-
- NewTime time ->
- ...
--}
-perform : (a -> msg) -> Task Never a -> Cmd msg
-perform toMessage task =
- command (Perform (map toMessage task))
-
-
-{-| Command the Elm runtime to attempt a task that might fail!
--}
-attempt : (Result x a -> msg) -> Task x a -> Cmd msg
-attempt resultToMessage task =
- command (Perform (
- task
- |> andThen (succeed << resultToMessage << Ok)
- |> onError (succeed << resultToMessage << Err)
- ))
-
-
-cmdMap : (a -> b) -> MyCmd a -> MyCmd b
-cmdMap tagger (Perform task) =
- Perform (map tagger task)
-
-
-
--- MANAGER
-
-
-init : Task Never ()
-init =
- succeed ()
-
-
-onEffects : Platform.Router msg Never -> List (MyCmd msg) -> () -> Task Never ()
-onEffects router commands state =
- map
- (\_ -> ())
- (sequence (List.map (spawnCmd router) commands))
-
-
-onSelfMsg : Platform.Router msg Never -> Never -> () -> Task Never ()
-onSelfMsg _ _ _ =
- succeed ()
-
-
-spawnCmd : Platform.Router msg Never -> MyCmd msg -> Task x ()
-spawnCmd router (Perform task) =
- Native.Scheduler.spawn (
- task
- |> andThen (Platform.sendToApp router)
- )
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Time.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Time.elm
deleted file mode 100644
index b50cdfe..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Time.elm
+++ /dev/null
@@ -1,243 +0,0 @@
-effect module Time where { subscription = MySub } exposing
- ( Time
- , now, every
- , millisecond, second, minute, hour
- , inMilliseconds, inSeconds, inMinutes, inHours
- )
-
-{-| Library for working with time.
-
-# Time
-@docs Time, now, every
-
-# Units
-@docs millisecond, second, minute, hour,
- inMilliseconds, inSeconds, inMinutes, inHours
-
--}
-
-
-import Basics exposing (..)
-import Dict
-import List exposing ((::))
-import Maybe exposing (Maybe(..))
-import Native.Scheduler
-import Native.Time
-import Platform
-import Platform.Sub exposing (Sub)
-import Task exposing (Task)
-
-
-
--- TIMES
-
-
-{-| Type alias to make it clearer when you are working with time values.
-Using the `Time` helpers like `second` and `inSeconds` instead of raw numbers
-is very highly recommended.
--}
-type alias Time = Float
-
-
-{-| Get the `Time` at the moment when this task is run.
--}
-now : Task x Time
-now =
- Native.Time.now
-
-
-{-| Subscribe to the current time. First you provide an interval describing how
-frequently you want updates. Second, you give a tagger that turns a time into a
-message for your `update` function. So if you want to hear about the current
-time every second, you would say something like this:
-
- type Msg = Tick Time | ...
-
- subscriptions model =
- every second Tick
-
-Check out the [Elm Architecture Tutorial][arch] for more info on how
-subscriptions work.
-
-[arch]: https://github.com/evancz/elm-architecture-tutorial/
-
-**Note:** this function is not for animation! You need to use something based
-on `requestAnimationFrame` to get smooth animations. This is based on
-`setInterval` which is better for recurring tasks like “check on something
-every 30 seconds”.
--}
-every : Time -> (Time -> msg) -> Sub msg
-every interval tagger =
- subscription (Every interval tagger)
-
-
-
--- UNITS
-
-
-{-| Units of time, making it easier to specify things like a half-second
-`(500 * millisecond)` without remembering Elm’s underlying units of time.
--}
-millisecond : Time
-millisecond =
- 1
-
-
-{-|-}
-second : Time
-second =
- 1000 * millisecond
-
-
-{-|-}
-minute : Time
-minute =
- 60 * second
-
-
-{-|-}
-hour : Time
-hour =
- 60 * minute
-
-
-{-|-}
-inMilliseconds : Time -> Float
-inMilliseconds t =
- t
-
-
-{-|-}
-inSeconds : Time -> Float
-inSeconds t =
- t / second
-
-
-{-|-}
-inMinutes : Time -> Float
-inMinutes t =
- t / minute
-
-
-{-|-}
-inHours : Time -> Float
-inHours t =
- t / hour
-
-
-
--- SUBSCRIPTIONS
-
-
-type MySub msg =
- Every Time (Time -> msg)
-
-
-subMap : (a -> b) -> MySub a -> MySub b
-subMap f (Every interval tagger) =
- Every interval (f << tagger)
-
-
-
--- EFFECT MANAGER
-
-
-type alias State msg =
- { taggers : Taggers msg
- , processes : Processes
- }
-
-
-type alias Processes =
- Dict.Dict Time Platform.ProcessId
-
-
-type alias Taggers msg =
- Dict.Dict Time (List (Time -> msg))
-
-
-init : Task Never (State msg)
-init =
- Task.succeed (State Dict.empty Dict.empty)
-
-
-onEffects : Platform.Router msg Time -> List (MySub msg) -> State msg -> Task Never (State msg)
-onEffects router subs {processes} =
- let
- newTaggers =
- List.foldl addMySub Dict.empty subs
-
- leftStep interval taggers (spawnList, existingDict, killTask) =
- (interval :: spawnList, existingDict, killTask)
-
- bothStep interval taggers id (spawnList, existingDict, killTask) =
- (spawnList, Dict.insert interval id existingDict, killTask)
-
- rightStep _ id (spawnList, existingDict, killTask) =
- ( spawnList
- , existingDict
- , Native.Scheduler.kill id
- |> Task.andThen (\_ -> killTask)
- )
-
- (spawnList, existingDict, killTask) =
- Dict.merge
- leftStep
- bothStep
- rightStep
- newTaggers
- processes
- ([], Dict.empty, Task.succeed ())
- in
- killTask
- |> Task.andThen (\_ -> spawnHelp router spawnList existingDict)
- |> Task.andThen (\newProcesses -> Task.succeed (State newTaggers newProcesses))
-
-
-addMySub : MySub msg -> Taggers msg -> Taggers msg
-addMySub (Every interval tagger) state =
- case Dict.get interval state of
- Nothing ->
- Dict.insert interval [tagger] state
-
- Just taggers ->
- Dict.insert interval (tagger :: taggers) state
-
-
-spawnHelp : Platform.Router msg Time -> List Time -> Processes -> Task.Task x Processes
-spawnHelp router intervals processes =
- case intervals of
- [] ->
- Task.succeed processes
-
- interval :: rest ->
- let
- spawnTimer =
- Native.Scheduler.spawn (setInterval interval (Platform.sendToSelf router interval))
-
- spawnRest id =
- spawnHelp router rest (Dict.insert interval id processes)
- in
- spawnTimer
- |> Task.andThen spawnRest
-
-
-onSelfMsg : Platform.Router msg Time -> Time -> State msg -> Task Never (State msg)
-onSelfMsg router interval state =
- case Dict.get interval state.taggers of
- Nothing ->
- Task.succeed state
-
- Just taggers ->
- let
- tellTaggers time =
- Task.sequence (List.map (\tagger -> Platform.sendToApp router (tagger time)) taggers)
- in
- now
- |> Task.andThen tellTaggers
- |> Task.andThen (\_ -> Task.succeed state)
-
-
-setInterval : Time -> Task Never () -> Task x Never
-setInterval =
- Native.Time.setInterval_
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Tuple.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Tuple.elm
deleted file mode 100644
index ab4c401..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/src/Tuple.elm
+++ /dev/null
@@ -1,61 +0,0 @@
-module Tuple exposing
- ( first, second
- , mapFirst, mapSecond
- )
-
-{-| Some helpers for working with 2-tuples.
-
-**Note:** For larger chunks of data, it is best to switch to using records. So
-instead of representing a 3D point as `(3,4,5)` and wondering why there are no
-helper functions, represent it as `{ x = 3, y = 4, z = 5 }` and use all the
-built-in syntax for records.
-
-@docs first, second, mapFirst, mapSecond
-
--}
-
-
-
-{-| Extract the first value from a tuple.
-
- first (3, 4) == 3
- first ("john", "doe") == "john"
--}
-first : (a1, a2) -> a1
-first (x,_) =
- x
-
-
-{-| Extract the second value from a tuple.
-
- second (3, 4) == 4
- second ("john", "doe") == "doe"
--}
-second : (a1, a2) -> a2
-second (_,y) =
- y
-
-
-{-| Transform the first value in a tuple.
-
- import String
-
- mapFirst String.reverse ("stressed", 16) == ("desserts", 16)
- mapFirst String.length ("stressed", 16) == (8, 16)
--}
-mapFirst : (a -> b) -> (a, a2) -> (b, a2)
-mapFirst func (x,y) =
- (func x, y)
-
-
-{-| Transform the second value in a tuple.
-
- import String
-
- mapSecond sqrt ("stressed", 16) == ("stressed", 4)
- mapSecond (\x -> x + 1) ("stressed", 16) == ("stressed", 17)
--}
-mapSecond : (a -> b) -> (a1, a) -> (a1, b)
-mapSecond func (x,y) =
- (x, func y)
-
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Main.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Main.elm
deleted file mode 100644
index 0fb81c9..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Main.elm
+++ /dev/null
@@ -1,50 +0,0 @@
-port module Main exposing (..)
-
-import Basics exposing (..)
-import Task exposing (..)
-import Test exposing (..)
-import Platform.Cmd exposing (Cmd)
-import Json.Decode exposing (Value)
-import Test.Runner.Node exposing (run, TestProgram)
-import Test.Array as Array
-import Test.Basics as Basics
-import Test.Bitwise as Bitwise
-import Test.Char as Char
-import Test.CodeGen as CodeGen
-import Test.Dict as Dict
-import Test.Maybe as Maybe
-import Test.Equality as Equality
-import Test.Json as Json
-import Test.List as List
-import Test.Result as Result
-import Test.Set as Set
-import Test.String as String
-import Test.Regex as Regex
-
-
-tests : Test
-tests =
- describe "Elm Standard Library Tests"
- [ Array.tests
- , Basics.tests
- , Bitwise.tests
- , Char.tests
- , CodeGen.tests
- , Dict.tests
- , Equality.tests
- , Json.tests
- , List.tests
- , Result.tests
- , Set.tests
- , String.tests
- , Regex.tests
- , Maybe.tests
- ]
-
-
-main : TestProgram
-main =
- run emit tests
-
-
-port emit : ( String, Value ) -> Cmd msg
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Array.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Array.elm
deleted file mode 100644
index e32b49d..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Array.elm
+++ /dev/null
@@ -1,120 +0,0 @@
-module Test.Array exposing (tests)
-
-import Array
-import Basics exposing (..)
-import List
-import List exposing ((::))
-import Maybe exposing (..)
-import Native.Array
-import Test exposing (..)
-import Expect
-
-
-mergeSplit : Int -> Array.Array a -> Array.Array a
-mergeSplit n arr =
- let
- left =
- Array.slice 0 n arr
-
- right =
- Array.slice n (Array.length arr) arr
- in
- Array.append left right
-
-
-holeArray : Array.Array Int
-holeArray =
- List.foldl mergeSplit (Array.fromList (List.range 0 100)) (List.range 0 100)
-
-
-mapArray : Array.Array a -> Array.Array a
-mapArray array =
- Array.indexedMap
- (\i el ->
- case (Array.get i array) of
- Just x ->
- x
-
- Nothing ->
- el
- )
- array
-
-
-tests : Test
-tests =
- let
- creationTests =
- describe "Creation"
- [ test "empty" <| \() -> Expect.equal Array.empty (Array.fromList [])
- , test "initialize" <| \() -> Expect.equal (Array.initialize 4 identity) (Array.fromList [ 0, 1, 2, 3 ])
- , test "initialize 2" <| \() -> Expect.equal (Array.initialize 4 (\n -> n * n)) (Array.fromList [ 0, 1, 4, 9 ])
- , test "initialize 3" <| \() -> Expect.equal (Array.initialize 4 (always 0)) (Array.fromList [ 0, 0, 0, 0 ])
- , test "initialize Empty" <| \() -> Expect.equal (Array.initialize 0 identity) Array.empty
- , test "initialize 4" <| \() -> Expect.equal (Array.initialize 2 (always 0)) (Array.fromList [ 0, 0 ])
- , test "initialize negative" <| \() -> Expect.equal (Array.initialize -1 identity) Array.empty
- , test "repeat" <| \() -> Expect.equal (Array.repeat 5 40) (Array.fromList [ 40, 40, 40, 40, 40 ])
- , test "repeat 2" <| \() -> Expect.equal (Array.repeat 5 0) (Array.fromList [ 0, 0, 0, 0, 0 ])
- , test "repeat 3" <| \() -> Expect.equal (Array.repeat 3 "cat") (Array.fromList [ "cat", "cat", "cat" ])
- , test "fromList" <| \() -> Expect.equal (Array.fromList []) Array.empty
- ]
-
- basicsTests =
- describe "Basics"
- [ test "length" <| \() -> Expect.equal 3 (Array.length (Array.fromList [ 1, 2, 3 ]))
- , test "length - Long" <| \() -> Expect.equal 10000 (Array.length (Array.repeat 10000 0))
- , test "push" <| \() -> Expect.equal (Array.fromList [ 1, 2, 3 ]) (Array.push 3 (Array.fromList [ 1, 2 ]))
- , test "append" <| \() -> Expect.equal [ 42, 42, 81, 81, 81 ] (Array.toList (Array.append (Array.repeat 2 42) (Array.repeat 3 81)))
- , test "appendEmpty 1" <| \() -> Expect.equal (List.range 1 33) (Array.toList (Array.append Array.empty (Array.fromList <| List.range 1 33)))
- , test "appendEmpty 2" <| \() -> Expect.equal (List.range 1 33) (Array.toList (Array.append (Array.fromList <| List.range 1 33) Array.empty))
- , test "appendSmall 1" <| \() -> Expect.equal (List.range 1 33) (Array.toList (Array.append (Array.fromList <| List.range 1 30) (Array.fromList <| List.range 31 33)))
- , test "appendSmall 2" <| \() -> Expect.equal (List.range 1 33) (Array.toList (Array.append (Array.fromList <| List.range 1 3) (Array.fromList <| List.range 4 33)))
- , test "appendAndSlice" <| \() -> Expect.equal (List.range 0 100) (Array.toList holeArray)
- ]
-
- getAndSetTests =
- describe "Get and Set"
- [ test "get" <| \() -> Expect.equal (Just 2) (Array.get 1 (Array.fromList [ 3, 2, 1 ]))
- , test "get 2" <| \() -> Expect.equal Nothing (Array.get 5 (Array.fromList [ 3, 2, 1 ]))
- , test "get 3" <| \() -> Expect.equal Nothing (Array.get -1 (Array.fromList [ 3, 2, 1 ]))
- , test "set" <| \() -> Expect.equal (Array.fromList [ 1, 7, 3 ]) (Array.set 1 7 (Array.fromList [ 1, 2, 3 ]))
- ]
-
- takingArraysApartTests =
- describe "Taking Arrays Apart"
- [ test "toList" <| \() -> Expect.equal [ 3, 5, 8 ] (Array.toList (Array.fromList [ 3, 5, 8 ]))
- , test "toIndexedList" <| \() -> Expect.equal [ ( 0, "cat" ), ( 1, "dog" ) ] (Array.toIndexedList (Array.fromList [ "cat", "dog" ]))
- , test "slice 1" <| \() -> Expect.equal (Array.fromList [ 0, 1, 2 ]) (Array.slice 0 3 (Array.fromList [ 0, 1, 2, 3, 4 ]))
- , test "slice 2" <| \() -> Expect.equal (Array.fromList [ 1, 2, 3 ]) (Array.slice 1 4 (Array.fromList [ 0, 1, 2, 3, 4 ]))
- , test "slice 3" <| \() -> Expect.equal (Array.fromList [ 1, 2, 3 ]) (Array.slice 1 -1 (Array.fromList [ 0, 1, 2, 3, 4 ]))
- , test "slice 4" <| \() -> Expect.equal (Array.fromList [ 2 ]) (Array.slice -3 -2 (Array.fromList [ 0, 1, 2, 3, 4 ]))
- , test "slice 5" <| \() -> Expect.equal 63 (Array.length <| Array.slice 65 (65 + 63) <| Array.fromList (List.range 1 200))
- ]
-
- mappingAndFoldingTests =
- describe "Mapping and Folding"
- [ test "map" <| \() -> Expect.equal (Array.fromList [ 1, 2, 3 ]) (Array.map sqrt (Array.fromList [ 1, 4, 9 ]))
- , test "indexedMap 1" <| \() -> Expect.equal (Array.fromList [ 0, 5, 10 ]) (Array.indexedMap (*) (Array.fromList [ 5, 5, 5 ]))
- , test "indexedMap 2" <| \() -> Expect.equal (List.range 0 99) (Array.toList (Array.indexedMap always (Array.repeat 100 0)))
- , test "large indexed map" <| \() -> Expect.equal (List.range 0 <| 32768 - 1) (Array.toList <| mapArray <| Array.initialize 32768 identity)
- , test "foldl 1" <| \() -> Expect.equal [ 3, 2, 1 ] (Array.foldl (::) [] (Array.fromList [ 1, 2, 3 ]))
- , test "foldl 2" <| \() -> Expect.equal 33 (Array.foldl (+) 0 (Array.repeat 33 1))
- , test "foldr 1" <| \() -> Expect.equal 15 (Array.foldr (+) 0 (Array.repeat 3 5))
- , test "foldr 2" <| \() -> Expect.equal [ 1, 2, 3 ] (Array.foldr (::) [] (Array.fromList [ 1, 2, 3 ]))
- , test "foldr 3" <| \() -> Expect.equal 53 (Array.foldr (-) 54 (Array.fromList [ 10, 11 ]))
- , test "filter" <| \() -> Expect.equal (Array.fromList [ 2, 4, 6 ]) (Array.filter (\x -> x % 2 == 0) (Array.fromList <| List.range 1 6))
- ]
-
- nativeTests =
- describe "Conversion to JS Arrays"
- [ test "jsArrays" <| \() -> Expect.equal (Array.fromList <| List.range 1 1100) (Native.Array.fromJSArray (Native.Array.toJSArray (Array.fromList <| List.range 1 1100)))
- ]
- in
- describe "Array"
- [ creationTests
- , basicsTests
- , getAndSetTests
- , takingArraysApartTests
- , mappingAndFoldingTests
- , nativeTests
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Basics.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Basics.elm
deleted file mode 100644
index 56742cb..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Basics.elm
+++ /dev/null
@@ -1,220 +0,0 @@
-module Test.Basics exposing (tests)
-
-import Array
-import Tuple exposing (first, second)
-import Basics exposing (..)
-import Date
-import Set
-import Dict
-import Test exposing (..)
-import Expect
-import List
-import String
-
-
-tests : Test
-tests =
- let
- comparison =
- describe "Comparison"
- [ test "max" <| \() -> Expect.equal 42 (max 32 42)
- , test "min" <| \() -> Expect.equal 42 (min 91 42)
- , test "clamp low" <| \() -> Expect.equal 10 (clamp 10 20 5)
- , test "clamp mid" <| \() -> Expect.equal 15 (clamp 10 20 15)
- , test "clamp high" <| \() -> Expect.equal 20 (clamp 10 20 25)
- , test "5 < 6" <| \() -> Expect.equal True (5 < 6)
- , test "6 < 5" <| \() -> Expect.equal False (6 < 5)
- , test "6 < 6" <| \() -> Expect.equal False (6 < 6)
- , test "5 > 6" <| \() -> Expect.equal False (5 > 6)
- , test "6 > 5" <| \() -> Expect.equal True (6 > 5)
- , test "6 > 6" <| \() -> Expect.equal False (6 > 6)
- , test "5 <= 6" <| \() -> Expect.equal True (5 <= 6)
- , test "6 <= 5" <| \() -> Expect.equal False (6 <= 5)
- , test "6 <= 6" <| \() -> Expect.equal True (6 <= 6)
- , test "compare \"A\" \"B\"" <| \() -> Expect.equal LT (compare "A" "B")
- , test "compare 'f' 'f'" <| \() -> Expect.equal EQ (compare 'f' 'f')
- , test "compare (1, 2, 3, 4, 5, 6) (0, 1, 2, 3, 4, 5)" <| \() -> Expect.equal GT (compare ( 1, 2, 3, 4, 5, 6 ) ( 0, 1, 2, 3, 4, 5 ))
- , test "compare ['a'] ['b']" <| \() -> Expect.equal LT (compare [ 'a' ] [ 'b' ])
- , test "array equality" <| \() -> Expect.equal (Array.fromList [ 1, 1, 1, 1 ]) (Array.repeat 4 1)
- , test "set equality" <| \() -> Expect.equal (Set.fromList [ 1, 2 ]) (Set.fromList [ 2, 1 ])
- , test "dict equality" <| \() -> Expect.equal (Dict.fromList [ ( 1, 1 ), ( 2, 2 ) ]) (Dict.fromList [ ( 2, 2 ), ( 1, 1 ) ])
- , test "char equality" <| \() -> Expect.notEqual '0' '饑'
- , test "date equality" <| \() -> Expect.equal (Date.fromString "2/7/1992") (Date.fromString "2/7/1992")
- , test "date equality" <| \() -> Expect.notEqual (Date.fromString "11/16/1995") (Date.fromString "2/7/1992")
- ]
-
- toStringTests =
- describe "toString Tests"
- [ test "toString Int" <| \() -> Expect.equal "42" (toString 42)
- , test "toString Float" <| \() -> Expect.equal "42.52" (toString 42.52)
- , test "toString Char" <| \() -> Expect.equal "'c'" (toString 'c')
- , test "toString Char single quote" <| \() -> Expect.equal "'\\''" (toString '\'')
- , test "toString Char double quote" <| \() -> Expect.equal "'\"'" (toString '"')
- , test "toString String single quote" <| \() -> Expect.equal "\"not 'escaped'\"" (toString "not 'escaped'")
- , test "toString String double quote" <| \() -> Expect.equal "\"are \\\"escaped\\\"\"" (toString "are \"escaped\"")
- , test "toString record" <| \() -> Expect.equal "{ field = [0] }" (toString { field = [ 0 ] })
- -- TODO
- --, test "toString record, special case" <| \() -> Expect.equal "{ ctor = [0] }" (toString { ctor = [ 0 ] })
- ]
-
- trigTests =
- describe "Trigonometry Tests"
- [ test "radians 0" <| \() -> Expect.equal 0 (radians 0)
- , test "radians positive" <| \() -> Expect.equal 5 (radians 5)
- , test "radians negative" <| \() -> Expect.equal -5 (radians -5)
- , test "degrees 0" <| \() -> Expect.equal 0 (degrees 0)
- , test "degrees 90" <| \() -> Expect.lessThan 0.01 (abs (1.57 - degrees 90))
- -- This should test to enough precision to know if anything's breaking
- , test "degrees -145" <| \() -> Expect.lessThan 0.01 (abs (-2.53 - degrees -145))
- -- This should test to enough precision to know if anything's breaking
- , test "turns 0" <| \() -> Expect.equal 0 (turns 0)
- , test "turns 8" <| \() -> Expect.lessThan 0.01 (abs (50.26 - turns 8))
- -- This should test to enough precision to know if anything's breaking
- , test "turns -133" <| \() -> Expect.lessThan 0.01 (abs (-835.66 - turns -133))
- -- This should test to enough precision to know if anything's breaking
- , test "fromPolar (0, 0)" <| \() -> Expect.equal ( 0, 0 ) (fromPolar ( 0, 0 ))
- , test "fromPolar (1, 0)" <| \() -> Expect.equal ( 1, 0 ) (fromPolar ( 1, 0 ))
- , test "fromPolar (0, 1)" <| \() -> Expect.equal ( 0, 0 ) (fromPolar ( 0, 1 ))
- , test "fromPolar (1, 1)" <|
- \() ->
- Expect.equal True
- (let
- ( x, y ) =
- fromPolar ( 1, 1 )
- in
- 0.54 - x < 0.01 && 0.84 - y < 0.01
- )
- , test "toPolar (0, 0)" <| \() -> Expect.equal ( 0, 0 ) (toPolar ( 0, 0 ))
- , test "toPolar (1, 0)" <| \() -> Expect.equal ( 1, 0 ) (toPolar ( 1, 0 ))
- , test "toPolar (0, 1)" <|
- \() ->
- Expect.equal True
- (let
- ( r, theta ) =
- toPolar ( 0, 1 )
- in
- r == 1 && abs (1.57 - theta) < 0.01
- )
- , test "toPolar (1, 1)" <|
- \() ->
- Expect.equal True
- (let
- ( r, theta ) =
- toPolar ( 1, 1 )
- in
- abs (1.41 - r) < 0.01 && abs (0.78 - theta) < 0.01
- )
- , test "cos" <| \() -> Expect.equal 1 (cos 0)
- , test "sin" <| \() -> Expect.equal 0 (sin 0)
- , test "tan" <| \() -> Expect.lessThan 0.01 (abs (12.67 - tan 17.2))
- , test "acos" <| \() -> Expect.lessThan 0.01 (abs (3.14 - acos -1))
- , test "asin" <| \() -> Expect.lessThan 0.01 (abs (0.3 - asin 0.3))
- , test "atan" <| \() -> Expect.lessThan 0.01 (abs (1.57 - atan 4567.8))
- , test "atan2" <| \() -> Expect.lessThan 0.01 (abs (1.55 - atan2 36 0.65))
- , test "pi" <| \() -> Expect.lessThan 0.01 (abs (3.14 - pi))
- ]
-
- basicMathTests =
- describe "Basic Math Tests"
- [ test "add float" <| \() -> Expect.equal 159 (155.6 + 3.4)
- , test "add int" <| \() -> Expect.equal 17 ((round 10) + (round 7))
- , test "subtract float" <| \() -> Expect.equal -6.3 (1 - 7.3)
- , test "subtract int" <| \() -> Expect.equal 1130 ((round 9432) - (round 8302))
- , test "multiply float" <| \() -> Expect.equal 432 (96 * 4.5)
- , test "multiply int" <| \() -> Expect.equal 90 ((round 10) * (round 9))
- , test "divide float" <| \() -> Expect.equal 13.175 (527 / 40)
- , test "divide int" <| \() -> Expect.equal 23 (70 // 3)
- , test "2 |> rem 7" <| \() -> Expect.equal 1 (2 |> rem 7)
- , test "4 |> rem -1" <| \() -> Expect.equal -1 (4 |> rem -1)
- , test "7 % 2" <| \() -> Expect.equal 1 (7 % 2)
- , test "-1 % 4" <| \() -> Expect.equal 3 (-1 % 4)
- , test "3^2" <| \() -> Expect.equal 9 (3 ^ 2)
- , test "sqrt" <| \() -> Expect.equal 9 (sqrt 81)
- , test "negate 42" <| \() -> Expect.equal -42 (negate 42)
- , test "negate -42" <| \() -> Expect.equal 42 (negate -42)
- , test "negate 0" <| \() -> Expect.equal 0 (negate 0)
- , test "abs -25" <| \() -> Expect.equal 25 (abs -25)
- , test "abs 76" <| \() -> Expect.equal 76 (abs 76)
- , test "logBase 10 100" <| \() -> Expect.equal 2 (logBase 10 100)
- , test "logBase 2 256" <| \() -> Expect.equal 8 (logBase 2 256)
- , test "e" <| \() -> Expect.lessThan 0.01 (abs (2.72 - e))
- ]
-
- booleanTests =
- describe "Boolean Tests"
- [ test "False && False" <| \() -> Expect.equal False (False && False)
- , test "False && True" <| \() -> Expect.equal False (False && True)
- , test "True && False" <| \() -> Expect.equal False (True && False)
- , test "True && True" <| \() -> Expect.equal True (True && True)
- , test "False || False" <| \() -> Expect.equal False (False || False)
- , test "False || True" <| \() -> Expect.equal True (False || True)
- , test "True || False" <| \() -> Expect.equal True (True || False)
- , test "True || True" <| \() -> Expect.equal True (True || True)
- , test "xor False False" <| \() -> Expect.equal False (xor False False)
- , test "xor False True" <| \() -> Expect.equal True (xor False True)
- , test "xor True False" <| \() -> Expect.equal True (xor True False)
- , test "xor True True" <| \() -> Expect.equal False (xor True True)
- , test "not True" <| \() -> Expect.equal False (not True)
- , test "not False" <| \() -> Expect.equal True (not False)
- ]
-
- conversionTests =
- describe "Conversion Tests"
- [ test "round 0.6" <| \() -> Expect.equal 1 (round 0.6)
- , test "round 0.4" <| \() -> Expect.equal 0 (round 0.4)
- , test "round 0.5" <| \() -> Expect.equal 1 (round 0.5)
- , test "truncate -2367.9267" <| \() -> Expect.equal -2367 (truncate -2367.9267)
- , test "floor -2367.9267" <| \() -> Expect.equal -2368 (floor -2367.9267)
- , test "ceiling 37.2" <| \() -> Expect.equal 38 (ceiling 37.2)
- , test "toFloat 25" <| \() -> Expect.equal 25 (toFloat 25)
- ]
-
- miscTests =
- describe "Miscellaneous Tests"
- [ test "isNaN (0/0)" <| \() -> Expect.equal True (isNaN (0 / 0))
- , test "isNaN (sqrt -1)" <| \() -> Expect.equal True (isNaN (sqrt -1))
- , test "isNaN (1/0)" <| \() -> Expect.equal False (isNaN (1 / 0))
- , test "isNaN 1" <| \() -> Expect.equal False (isNaN 1)
- , test "isInfinite (0/0)" <| \() -> Expect.equal False (isInfinite (0 / 0))
- , test "isInfinite (sqrt -1)" <| \() -> Expect.equal False (isInfinite (sqrt -1))
- , test "isInfinite (1/0)" <| \() -> Expect.equal True (isInfinite (1 / 0))
- , test "isInfinite 1" <| \() -> Expect.equal False (isInfinite 1)
- , test "\"hello\" ++ \"world\"" <| \() -> Expect.equal "helloworld" ("hello" ++ "world")
- , test "[1, 1, 2] ++ [3, 5, 8]" <| \() -> Expect.equal [ 1, 1, 2, 3, 5, 8 ] ([ 1, 1, 2 ] ++ [ 3, 5, 8 ])
- , test "first (1, 2)" <| \() -> Expect.equal 1 (first ( 1, 2 ))
- , test "second (1, 2)" <| \() -> Expect.equal 2 (second ( 1, 2 ))
- ]
-
- higherOrderTests =
- describe "Higher Order Helpers"
- [ test "identity 'c'" <| \() -> Expect.equal 'c' (identity 'c')
- , test "always 42 ()" <| \() -> Expect.equal 42 (always 42 ())
- , test "<|" <| \() -> Expect.equal 9 (identity <| 3 + 6)
- , test "|>" <| \() -> Expect.equal 9 (3 + 6 |> identity)
- , test "<<" <| \() -> Expect.equal True (not << xor True <| True)
- , test "<<" <| \() -> Expect.equal True (not << xor True <| True)
- , describe ">>"
- [ test "with xor" <|
- \() ->
- (True |> xor True >> not)
- |> Expect.equal True
- , test "with a record accessor" <|
- \() ->
- [ { foo = "NaS", bar = "baz" } ]
- |> List.map (.foo >> String.reverse)
- |> Expect.equal [ "SaN" ]
- ]
- , test "flip" <| \() -> Expect.equal 10 ((flip (//)) 2 20)
- , test "curry" <| \() -> Expect.equal 1 ((curry (\( a, b ) -> a + b)) -5 6)
- , test "uncurry" <| \() -> Expect.equal 1 ((uncurry (+)) ( -5, 6 ))
- ]
- in
- describe "Basics"
- [ comparison
- , toStringTests
- , trigTests
- , basicMathTests
- , booleanTests
- , miscTests
- , higherOrderTests
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Bitwise.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Bitwise.elm
deleted file mode 100644
index 844ebba..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Bitwise.elm
+++ /dev/null
@@ -1,51 +0,0 @@
-module Test.Bitwise exposing (tests)
-
-import Basics exposing (..)
-import Bitwise
-import Test exposing (..)
-import Expect
-
-
-tests : Test
-tests =
- describe "Bitwise"
- [ describe "and"
- [ test "and with 32 bit integers" <| \() -> Expect.equal 1 (Bitwise.and 5 3)
- , test "and with 0 as first argument" <| \() -> Expect.equal 0 (Bitwise.and 0 1450)
- , test "and with 0 as second argument" <| \() -> Expect.equal 0 (Bitwise.and 274 0)
- , test "and with -1 as first argument" <| \() -> Expect.equal 2671 (Bitwise.and -1 2671)
- , test "and with -1 as second argument" <| \() -> Expect.equal 96 (Bitwise.and 96 -1)
- ]
- , describe "or"
- [ test "or with 32 bit integers" <| \() -> Expect.equal 15 (Bitwise.or 9 14)
- , test "or with 0 as first argument" <| \() -> Expect.equal 843 (Bitwise.or 0 843)
- , test "or with 0 as second argument" <| \() -> Expect.equal 19 (Bitwise.or 19 0)
- , test "or with -1 as first argument" <| \() -> Expect.equal -1 (Bitwise.or -1 2360)
- , test "or with -1 as second argument" <| \() -> Expect.equal -1 (Bitwise.or 3 -1)
- ]
- , describe "xor"
- [ test "xor with 32 bit integers" <| \() -> Expect.equal 604 (Bitwise.xor 580 24)
- , test "xor with 0 as first argument" <| \() -> Expect.equal 56 (Bitwise.xor 0 56)
- , test "xor with 0 as second argument" <| \() -> Expect.equal -268 (Bitwise.xor -268 0)
- , test "xor with -1 as first argument" <| \() -> Expect.equal -25 (Bitwise.xor -1 24)
- , test "xor with -1 as second argument" <| \() -> Expect.equal 25601 (Bitwise.xor -25602 -1)
- ]
- , describe "complement"
- [ test "complement a positive" <| \() -> Expect.equal -9 (Bitwise.complement 8)
- , test "complement a negative" <| \() -> Expect.equal 278 (Bitwise.complement -279)
- ]
- , describe "shiftLeftBy"
- [ test "8 |> shiftLeftBy 1 == 16" <| \() -> Expect.equal 16 (8 |> Bitwise.shiftLeftBy 1)
- , test "8 |> shiftLeftby 2 == 32" <| \() -> Expect.equal 32 (8 |> Bitwise.shiftLeftBy 2)
- ]
- , describe "shiftRightBy"
- [ test "32 |> shiftRight 1 == 16" <| \() -> Expect.equal 16 (32 |> Bitwise.shiftRightBy 1)
- , test "32 |> shiftRight 2 == 8" <| \() -> Expect.equal 8 (32 |> Bitwise.shiftRightBy 2)
- , test "-32 |> shiftRight 1 == -16" <| \() -> Expect.equal -16 (-32 |> Bitwise.shiftRightBy 1)
- ]
- , describe "shiftRightZfBy"
- [ test "32 |> shiftRightZfBy 1 == 16" <| \() -> Expect.equal 16 (32 |> Bitwise.shiftRightZfBy 1)
- , test "32 |> shiftRightZfBy 2 == 8" <| \() -> Expect.equal 8 (32 |> Bitwise.shiftRightZfBy 2)
- , test "-32 |> shiftRightZfBy 1 == 2147483632" <| \() -> Expect.equal 2147483632 (-32 |> Bitwise.shiftRightZfBy 1)
- ]
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Char.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Char.elm
deleted file mode 100644
index 598aae3..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Char.elm
+++ /dev/null
@@ -1,113 +0,0 @@
-module Test.Char exposing (tests)
-
-import Basics exposing (..)
-import Char exposing (..)
-import List
-import Test exposing (..)
-import Expect
-
-
-lower =
- [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ]
-
-
-upper =
- [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ]
-
-
-dec =
- [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
-
-
-oct =
- List.take 8 dec
-
-
-hexLower =
- List.take 6 lower
-
-
-hexUpper =
- List.take 6 upper
-
-
-hex =
- List.append hexLower hexUpper |> List.append dec
-
-
-lowerCodes =
- List.range 97 (97 + List.length lower - 1)
-
-
-upperCodes =
- List.range 65 (65 + List.length upper - 1)
-
-
-decCodes =
- List.range 48 (48 + List.length dec - 1)
-
-
-oneOf : List a -> a -> Bool
-oneOf =
- flip List.member
-
-
-tests : Test
-tests =
- describe "Char"
- [ describe "toCode"
- [ test "a-z" <| \() -> Expect.equal (lowerCodes) (List.map toCode lower)
- , test "A-Z" <| \() -> Expect.equal (upperCodes) (List.map toCode upper)
- , test "0-9" <| \() -> Expect.equal (decCodes) (List.map toCode dec)
- ]
- , describe "fromCode"
- [ test "a-z" <| \() -> Expect.equal (lower) (List.map fromCode lowerCodes)
- , test "A-Z" <| \() -> Expect.equal (upper) (List.map fromCode upperCodes)
- , test "0-9" <| \() -> Expect.equal (dec) (List.map fromCode decCodes)
- ]
- , describe "toLocaleLower"
- [ test "a-z" <| \() -> Expect.equal (lower) (List.map toLocaleLower lower)
- , test "A-Z" <| \() -> Expect.equal (lower) (List.map toLocaleLower upper)
- , test "0-9" <| \() -> Expect.equal (dec) (List.map toLocaleLower dec)
- ]
- , describe "toLocaleUpper"
- [ test "a-z" <| \() -> Expect.equal (upper) (List.map toLocaleUpper lower)
- , test "A-Z" <| \() -> Expect.equal (upper) (List.map toLocaleUpper upper)
- , test "0-9" <| \() -> Expect.equal (dec) (List.map toLocaleUpper dec)
- ]
- , describe "toLower"
- [ test "a-z" <| \() -> Expect.equal (lower) (List.map toLower lower)
- , test "A-Z" <| \() -> Expect.equal (lower) (List.map toLower upper)
- , test "0-9" <| \() -> Expect.equal (dec) (List.map toLower dec)
- ]
- , describe "toUpper"
- [ test "a-z" <| \() -> Expect.equal (upper) (List.map toUpper lower)
- , test "A-Z" <| \() -> Expect.equal (upper) (List.map toUpper upper)
- , test "0-9" <| \() -> Expect.equal (dec) (List.map toUpper dec)
- ]
- , describe "isLower"
- [ test "a-z" <| \() -> Expect.equal (True) (List.all isLower lower)
- , test "A-Z" <| \() -> Expect.equal (False) (List.any isLower upper)
- , test "0-9" <| \() -> Expect.equal (False) (List.any isLower dec)
- ]
- , describe "isUpper"
- [ test "a-z" <| \() -> Expect.equal (False) (List.any isUpper lower)
- , test "A-Z" <| \() -> Expect.equal (True) (List.all isUpper upper)
- , test "0-9" <| \() -> Expect.equal (False) (List.any isUpper dec)
- ]
- , describe "isDigit"
- [ test "a-z" <| \() -> Expect.equal (False) (List.any isDigit lower)
- , test "A-Z" <| \() -> Expect.equal (False) (List.any isDigit upper)
- , test "0-9" <| \() -> Expect.equal (True) (List.all isDigit dec)
- ]
- , describe "isHexDigit"
- [ test "a-z" <| \() -> Expect.equal (List.map (oneOf hex) lower) (List.map isHexDigit lower)
- , test "A-Z" <| \() -> Expect.equal (List.map (oneOf hex) upper) (List.map isHexDigit upper)
- , test "0-9" <| \() -> Expect.equal (True) (List.all isHexDigit dec)
- ]
- , describe "isOctDigit"
- [ test "a-z" <| \() -> Expect.equal (False) (List.any isOctDigit lower)
- , test "A-Z" <| \() -> Expect.equal (False) (List.any isOctDigit upper)
- , test "0-9" <| \() -> Expect.equal (List.map (oneOf oct) dec) (List.map isOctDigit dec)
- ]
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/CodeGen.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/CodeGen.elm
deleted file mode 100644
index 4a89c63..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/CodeGen.elm
+++ /dev/null
@@ -1,109 +0,0 @@
-module Test.CodeGen exposing (tests)
-
-import Basics exposing (..)
-import Test exposing (..)
-import Expect
-import Maybe
-import Maybe exposing (..)
-
-
-type Wrapper a
- = Wrapper a
-
-
-caseUnderscore : Maybe number -> number
-caseUnderscore m_ =
- case m_ of
- Just x ->
- x
-
- Nothing ->
- 0
-
-
-patternUnderscore : number
-patternUnderscore =
- case Just 42 of
- Just x_ ->
- x_
-
- Nothing ->
- 0
-
-
-letQualified : number
-letQualified =
- let
- (Wrapper x) =
- Wrapper 42
- in
- x
-
-
-caseQualified : number
-caseQualified =
- case Just 42 of
- Maybe.Just x ->
- x
-
- Nothing ->
- 0
-
-
-caseScope : String
-caseScope =
- case "Not this one!" of
- string ->
- case "Hi" of
- string ->
- string
-
-
-tests : Test
-tests =
- let
- -- We don't strictly speaking need annotations in this let-expression,
- -- but having these here exercises the parser to avoid regressions like
- -- https://github.com/elm-lang/elm-compiler/issues/1535
- underscores : Test
- underscores =
- describe "Underscores"
- [ test "case" <| \() -> Expect.equal 42 (caseUnderscore (Just 42))
- , test "pattern" <| \() -> Expect.equal 42 patternUnderscore
- ]
-
- qualifiedPatterns : Test
- qualifiedPatterns =
- describe "Qualified Patterns"
- [ test "let" <| \() -> Expect.equal 42 letQualified
- , test "case" <| \() -> Expect.equal 42 caseQualified
- ]
-
- scope : Test
- scope =
- describe "Scoping"
- [ test "case" <| \() -> Expect.equal "Hi" caseScope ]
-
- hex : Test
- hex =
- describe "Hex"
- [ test "0xFFFFFFFF" <|
- \() ->
- 0xFFFFFFFF
- |> Expect.equal 4294967295
- , test "0xD066F00D" <|
- \() ->
- 0xD066F00D
- |> Expect.equal 3496407053
- , test "0x00" <|
- \() ->
- 0x00
- |> Expect.equal 0
- ]
- in
- describe "CodeGen"
- [ underscores
- , qualifiedPatterns
- , scope
- , hex
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Dict.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Dict.elm
deleted file mode 100644
index 372b2c9..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Dict.elm
+++ /dev/null
@@ -1,107 +0,0 @@
-module Test.Dict exposing (tests)
-
-import Basics exposing (..)
-import Dict
-import List
-import Maybe exposing (..)
-import Test exposing (..)
-import Expect
-
-
-animals : Dict.Dict String String
-animals =
- Dict.fromList [ ( "Tom", "cat" ), ( "Jerry", "mouse" ) ]
-
-
-tests : Test
-tests =
- let
- buildTests =
- describe "build Tests"
- [ test "empty" <| \() -> Expect.equal (Dict.fromList []) (Dict.empty)
- , test "singleton" <| \() -> Expect.equal (Dict.fromList [ ( "k", "v" ) ]) (Dict.singleton "k" "v")
- , test "insert" <| \() -> Expect.equal (Dict.fromList [ ( "k", "v" ) ]) (Dict.insert "k" "v" Dict.empty)
- , test "insert replace" <| \() -> Expect.equal (Dict.fromList [ ( "k", "vv" ) ]) (Dict.insert "k" "vv" (Dict.singleton "k" "v"))
- , test "update" <| \() -> Expect.equal (Dict.fromList [ ( "k", "vv" ) ]) (Dict.update "k" (\v -> Just "vv") (Dict.singleton "k" "v"))
- , test "update Nothing" <| \() -> Expect.equal Dict.empty (Dict.update "k" (\v -> Nothing) (Dict.singleton "k" "v"))
- , test "remove" <| \() -> Expect.equal Dict.empty (Dict.remove "k" (Dict.singleton "k" "v"))
- , test "remove not found" <| \() -> Expect.equal (Dict.singleton "k" "v") (Dict.remove "kk" (Dict.singleton "k" "v"))
- ]
-
- queryTests =
- describe "query Tests"
- [ test "member 1" <| \() -> Expect.equal True (Dict.member "Tom" animals)
- , test "member 2" <| \() -> Expect.equal False (Dict.member "Spike" animals)
- , test "get 1" <| \() -> Expect.equal (Just "cat") (Dict.get "Tom" animals)
- , test "get 2" <| \() -> Expect.equal Nothing (Dict.get "Spike" animals)
- , test "size of empty dictionary" <| \() -> Expect.equal 0 (Dict.size Dict.empty)
- , test "size of example dictionary" <| \() -> Expect.equal 2 (Dict.size animals)
- ]
-
- combineTests =
- describe "combine Tests"
- [ test "union" <| \() -> Expect.equal animals (Dict.union (Dict.singleton "Jerry" "mouse") (Dict.singleton "Tom" "cat"))
- , test "union collison" <| \() -> Expect.equal (Dict.singleton "Tom" "cat") (Dict.union (Dict.singleton "Tom" "cat") (Dict.singleton "Tom" "mouse"))
- , test "intersect" <| \() -> Expect.equal (Dict.singleton "Tom" "cat") (Dict.intersect animals (Dict.singleton "Tom" "cat"))
- , test "diff" <| \() -> Expect.equal (Dict.singleton "Jerry" "mouse") (Dict.diff animals (Dict.singleton "Tom" "cat"))
- ]
-
- transformTests =
- describe "transform Tests"
- [ test "filter" <| \() -> Expect.equal (Dict.singleton "Tom" "cat") (Dict.filter (\k v -> k == "Tom") animals)
- , test "partition" <| \() -> Expect.equal ( Dict.singleton "Tom" "cat", Dict.singleton "Jerry" "mouse" ) (Dict.partition (\k v -> k == "Tom") animals)
- ]
-
- mergeTests =
- let
- insertBoth key leftVal rightVal dict =
- Dict.insert key (leftVal ++ rightVal) dict
-
- s1 =
- Dict.empty |> Dict.insert "u1" [ 1 ]
-
- s2 =
- Dict.empty |> Dict.insert "u2" [ 2 ]
-
- s23 =
- Dict.empty |> Dict.insert "u2" [ 3 ]
-
- b1 =
- List.map (\i -> ( i, [ i ] )) (List.range 1 10) |> Dict.fromList
-
- b2 =
- List.map (\i -> ( i, [ i ] )) (List.range 5 15) |> Dict.fromList
-
- bExpected =
- [ ( 1, [ 1 ] ), ( 2, [ 2 ] ), ( 3, [ 3 ] ), ( 4, [ 4 ] ), ( 5, [ 5, 5 ] ), ( 6, [ 6, 6 ] ), ( 7, [ 7, 7 ] ), ( 8, [ 8, 8 ] ), ( 9, [ 9, 9 ] ), ( 10, [ 10, 10 ] ), ( 11, [ 11 ] ), ( 12, [ 12 ] ), ( 13, [ 13 ] ), ( 14, [ 14 ] ), ( 15, [ 15 ] ) ]
- in
- describe "merge Tests"
- [ test "merge empties" <|
- \() ->
- Expect.equal (Dict.empty)
- (Dict.merge Dict.insert insertBoth Dict.insert Dict.empty Dict.empty Dict.empty)
- , test "merge singletons in order" <|
- \() ->
- Expect.equal [ ( "u1", [ 1 ] ), ( "u2", [ 2 ] ) ]
- ((Dict.merge Dict.insert insertBoth Dict.insert s1 s2 Dict.empty) |> Dict.toList)
- , test "merge singletons out of order" <|
- \() ->
- Expect.equal [ ( "u1", [ 1 ] ), ( "u2", [ 2 ] ) ]
- ((Dict.merge Dict.insert insertBoth Dict.insert s2 s1 Dict.empty) |> Dict.toList)
- , test "merge with duplicate key" <|
- \() ->
- Expect.equal [ ( "u2", [ 2, 3 ] ) ]
- ((Dict.merge Dict.insert insertBoth Dict.insert s2 s23 Dict.empty) |> Dict.toList)
- , test "partially overlapping" <|
- \() ->
- Expect.equal bExpected
- ((Dict.merge Dict.insert insertBoth Dict.insert b1 b2 Dict.empty) |> Dict.toList)
- ]
- in
- describe "Dict Tests"
- [ buildTests
- , queryTests
- , combineTests
- , transformTests
- , mergeTests
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Equality.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Equality.elm
deleted file mode 100644
index 1737477..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Equality.elm
+++ /dev/null
@@ -1,34 +0,0 @@
-module Test.Equality exposing (tests)
-
-import Basics exposing (..)
-import Maybe exposing (..)
-import Test exposing (..)
-import Expect
-
-
-type Different
- = A String
- | B (List Int)
-
-
-tests : Test
-tests =
- let
- diffTests =
- describe "ADT equality"
- [ test "As eq" <| \() -> Expect.equal True (A "a" == A "a")
- , test "Bs eq" <| \() -> Expect.equal True (B [ 1 ] == B [ 1 ])
- , test "A left neq" <| \() -> Expect.equal True (A "a" /= B [ 1 ])
- , test "A left neq" <| \() -> Expect.equal True (B [ 1 ] /= A "a")
- ]
-
- recordTests =
- describe "Record equality"
- [ test "empty same" <| \() -> Expect.equal True ({} == {})
- , test "ctor same" <| \() -> Expect.equal True ({ field = Just 3 } == { field = Just 3 })
- , test "ctor same, special case" <| \() -> Expect.equal True ({ ctor = Just 3 } == { ctor = Just 3 })
- , test "ctor diff" <| \() -> Expect.equal True ({ field = Just 3 } /= { field = Nothing })
- , test "ctor diff, special case" <| \() -> Expect.equal True ({ ctor = Just 3 } /= { ctor = Nothing })
- ]
- in
- describe "Equality Tests" [ diffTests, recordTests ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Json.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Json.elm
deleted file mode 100644
index 614a1dd..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Json.elm
+++ /dev/null
@@ -1,84 +0,0 @@
-module Test.Json exposing (tests)
-
-import Basics exposing (..)
-import Result exposing (..)
-import Json.Decode as Json
-import String
-import Test exposing (..)
-import Expect
-
-
-tests : Test
-tests =
- describe "Json decode"
- [ intTests
- , customTests
- ]
-
-
-intTests : Test
-intTests =
- let
- testInt val str =
- case Json.decodeString Json.int str of
- Ok _ ->
- Expect.equal val True
-
- Err _ ->
- Expect.equal val False
- in
- describe "Json decode int"
- [ test "whole int" <| \() -> testInt True "4"
- , test "-whole int" <| \() -> testInt True "-4"
- , test "whole float" <| \() -> testInt True "4.0"
- , test "-whole float" <| \() -> testInt True "-4.0"
- , test "large int" <| \() -> testInt True "1801439850948"
- , test "-large int" <| \() -> testInt True "-1801439850948"
- , test "float" <| \() -> testInt False "4.2"
- , test "-float" <| \() -> testInt False "-4.2"
- , test "Infinity" <| \() -> testInt False "Infinity"
- , test "-Infinity" <| \() -> testInt False "-Infinity"
- , test "NaN" <| \() -> testInt False "NaN"
- , test "-NaN" <| \() -> testInt False "-NaN"
- , test "true" <| \() -> testInt False "true"
- , test "false" <| \() -> testInt False "false"
- , test "string" <| \() -> testInt False "\"string\""
- , test "object" <| \() -> testInt False "{}"
- , test "null" <| \() -> testInt False "null"
- , test "undefined" <| \() -> testInt False "undefined"
- , test "Decoder expects object finds array, was crashing runtime." <|
- \() ->
- Expect.equal
- (Err "Expecting an object but instead got: []")
- (Json.decodeString (Json.dict Json.float) "[]")
- ]
-
-
-customTests : Test
-customTests =
- let
- jsonString =
- """{ "foo": "bar" }"""
-
- customErrorMessage =
- "I want to see this message!"
-
- myDecoder =
- Json.field "foo" Json.string |> Json.andThen (\_ -> Json.fail customErrorMessage)
-
- assertion =
- case Json.decodeString myDecoder jsonString of
- Ok _ ->
- Expect.fail "expected `customDecoder` to produce a value of type Err, but got Ok"
-
- Err message ->
- if String.contains customErrorMessage message then
- Expect.pass
- else
- Expect.fail <|
- "expected `customDecoder` to preserve user's error message '"
- ++ customErrorMessage
- ++ "', but instead got: "
- ++ message
- in
- test "customDecoder preserves user error messages" <| \() -> assertion
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/List.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/List.elm
deleted file mode 100644
index ed26f0f..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/List.elm
+++ /dev/null
@@ -1,160 +0,0 @@
-module Test.List exposing (tests)
-
-import Test exposing (..)
-import Expect
-import Basics exposing (..)
-import Maybe exposing (Maybe(Nothing, Just))
-import List exposing (..)
-
-
-tests : Test
-tests =
- describe "List Tests"
- [ testListOfN 0
- , testListOfN 1
- , testListOfN 2
- , testListOfN 5000
- ]
-
-
-testListOfN : Int -> Test
-testListOfN n =
- let
- xs =
- List.range 1 n
-
- xsOpp =
- List.range -n -1
-
- xsNeg =
- foldl (::) [] xsOpp
-
- -- assume foldl and (::) work
- zs =
- List.range 0 n
-
- sumSeq k =
- k * (k + 1) // 2
-
- xsSum =
- sumSeq n
-
- mid =
- n // 2
- in
- describe (toString n ++ " elements")
- [ describe "foldl"
- [ test "order" <| \() -> Expect.equal (n) (foldl (\x acc -> x) 0 xs)
- , test "total" <| \() -> Expect.equal (xsSum) (foldl (+) 0 xs)
- ]
- , describe "foldr"
- [ test "order" <| \() -> Expect.equal (min 1 n) (foldr (\x acc -> x) 0 xs)
- , test "total" <| \() -> Expect.equal (xsSum) (foldl (+) 0 xs)
- ]
- , describe "map"
- [ test "identity" <| \() -> Expect.equal (xs) (map identity xs)
- , test "linear" <| \() -> Expect.equal (List.range 2 (n + 1)) (map ((+) 1) xs)
- ]
- , test "isEmpty" <| \() -> Expect.equal (n == 0) (isEmpty xs)
- , test "length" <| \() -> Expect.equal (n) (length xs)
- , test "reverse" <| \() -> Expect.equal (xsOpp) (reverse xsNeg)
- , describe "member"
- [ test "positive" <| \() -> Expect.equal (True) (member n zs)
- , test "negative" <| \() -> Expect.equal (False) (member (n + 1) xs)
- ]
- , test "head" <|
- \() ->
- if n == 0 then
- Expect.equal (Nothing) (head xs)
- else
- Expect.equal (Just 1) (head xs)
- , describe "List.filter"
- [ test "none" <| \() -> Expect.equal ([]) (List.filter (\x -> x > n) xs)
- , test "one" <| \() -> Expect.equal ([ n ]) (List.filter (\z -> z == n) zs)
- , test "all" <| \() -> Expect.equal (xs) (List.filter (\x -> x <= n) xs)
- ]
- , describe "take"
- [ test "none" <| \() -> Expect.equal ([]) (take 0 xs)
- , test "some" <| \() -> Expect.equal (List.range 0 (n - 1)) (take n zs)
- , test "all" <| \() -> Expect.equal (xs) (take n xs)
- , test "all+" <| \() -> Expect.equal (xs) (take (n + 1) xs)
- ]
- , describe "drop"
- [ test "none" <| \() -> Expect.equal (xs) (drop 0 xs)
- , test "some" <| \() -> Expect.equal ([ n ]) (drop n zs)
- , test "all" <| \() -> Expect.equal ([]) (drop n xs)
- , test "all+" <| \() -> Expect.equal ([]) (drop (n + 1) xs)
- ]
- , test "repeat" <| \() -> Expect.equal (map (\x -> -1) xs) (repeat n -1)
- , test "append" <| \() -> Expect.equal (xsSum * 2) (append xs xs |> foldl (+) 0)
- , test "(::)" <| \() -> Expect.equal (append [ -1 ] xs) (-1 :: xs)
- , test "List.concat" <| \() -> Expect.equal (append xs (append zs xs)) (List.concat [ xs, zs, xs ])
- , test "intersperse" <|
- \() ->
- Expect.equal
- ( min -(n - 1) 0, xsSum )
- (intersperse -1 xs |> foldl (\x ( c1, c2 ) -> ( c2, c1 + x )) ( 0, 0 ))
- , describe "partition"
- [ test "left" <| \() -> Expect.equal ( xs, [] ) (partition (\x -> x > 0) xs)
- , test "right" <| \() -> Expect.equal ( [], xs ) (partition (\x -> x < 0) xs)
- , test "split" <| \() -> Expect.equal ( List.range (mid + 1) n, List.range 1 mid ) (partition (\x -> x > mid) xs)
- ]
- , describe "map2"
- [ test "same length" <| \() -> Expect.equal (map ((*) 2) xs) (map2 (+) xs xs)
- , test "long first" <| \() -> Expect.equal (map (\x -> x * 2 - 1) xs) (map2 (+) zs xs)
- , test "short first" <| \() -> Expect.equal (map (\x -> x * 2 - 1) xs) (map2 (+) xs zs)
- ]
- , test "unzip" <| \() -> Expect.equal ( xsNeg, xs ) (map (\x -> ( -x, x )) xs |> unzip)
- , describe "filterMap"
- [ test "none" <| \() -> Expect.equal ([]) (filterMap (\x -> Nothing) xs)
- , test "all" <| \() -> Expect.equal (xsNeg) (filterMap (\x -> Just -x) xs)
- , let
- halve x =
- if x % 2 == 0 then
- Just (x // 2)
- else
- Nothing
- in
- test "some" <| \() -> Expect.equal (List.range 1 mid) (filterMap halve xs)
- ]
- , describe "concatMap"
- [ test "none" <| \() -> Expect.equal ([]) (concatMap (\x -> []) xs)
- , test "all" <| \() -> Expect.equal (xsNeg) (concatMap (\x -> [ -x ]) xs)
- ]
- , test "indexedMap" <| \() -> Expect.equal (map2 (,) zs xsNeg) (indexedMap (\i x -> ( i, -x )) xs)
- , test "sum" <| \() -> Expect.equal (xsSum) (sum xs)
- , test "product" <| \() -> Expect.equal (0) (product zs)
- , test "maximum" <|
- \() ->
- if n == 0 then
- Expect.equal (Nothing) (maximum xs)
- else
- Expect.equal (Just n) (maximum xs)
- , test "minimum" <|
- \() ->
- if n == 0 then
- Expect.equal (Nothing) (minimum xs)
- else
- Expect.equal (Just 1) (minimum xs)
- , describe "all"
- [ test "false" <| \() -> Expect.equal (False) (all (\z -> z < n) zs)
- , test "true" <| \() -> Expect.equal (True) (all (\x -> x <= n) xs)
- ]
- , describe "any"
- [ test "false" <| \() -> Expect.equal (False) (any (\x -> x > n) xs)
- , test "true" <| \() -> Expect.equal (True) (any (\z -> z >= n) zs)
- ]
- , describe "sort"
- [ test "sorted" <| \() -> Expect.equal (xs) (sort xs)
- , test "unsorted" <| \() -> Expect.equal (xsOpp) (sort xsNeg)
- ]
- , describe "sortBy"
- [ test "sorted" <| \() -> Expect.equal (xsNeg) (sortBy negate xsNeg)
- , test "unsorted" <| \() -> Expect.equal (xsNeg) (sortBy negate xsOpp)
- ]
- , describe "sortWith"
- [ test "sorted" <| \() -> Expect.equal (xsNeg) (sortWith (flip compare) xsNeg)
- , test "unsorted" <| \() -> Expect.equal (xsNeg) (sortWith (flip compare) xsOpp)
- ]
- , test "scanl" <| \() -> Expect.equal (0 :: map sumSeq xs) (scanl (+) 0 xs)
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Maybe.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Maybe.elm
deleted file mode 100644
index dfa8e5e..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Maybe.elm
+++ /dev/null
@@ -1,169 +0,0 @@
-module Test.Maybe exposing (tests)
-
-import Basics exposing (..)
-import Maybe exposing (..)
-import Test exposing (..)
-import Expect
-
-tests : Test
-tests =
- describe "Maybe Tests"
-
- [ describe "Common Helpers Tests"
-
- [ describe "withDefault Tests"
- [ test "no default used" <|
- \() -> Expect.equal 0 (Maybe.withDefault 5 (Just 0))
- , test "default used" <|
- \() -> Expect.equal 5 (Maybe.withDefault 5 (Nothing))
- ]
-
- , describe "map Tests"
- ( let f = (\n -> n + 1) in
- [ test "on Just" <|
- \() ->
- Expect.equal
- (Just 1)
- (Maybe.map f (Just 0))
- , test "on Nothing" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map f Nothing)
- ]
- )
-
- , describe "map2 Tests"
- ( let f = (+) in
- [ test "on (Just, Just)" <|
- \() ->
- Expect.equal
- (Just 1)
- (Maybe.map2 f (Just 0) (Just 1))
- , test "on (Just, Nothing)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map2 f (Just 0) Nothing)
- , test "on (Nothing, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map2 f Nothing (Just 0))
- ]
- )
-
- , describe "map3 Tests"
- ( let f = (\a b c -> a + b + c) in
- [ test "on (Just, Just, Just)" <|
- \() ->
- Expect.equal
- (Just 3)
- (Maybe.map3 f (Just 1) (Just 1) (Just 1))
- , test "on (Just, Just, Nothing)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map3 f (Just 1) (Just 1) Nothing)
- , test "on (Just, Nothing, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map3 f (Just 1) Nothing (Just 1))
- , test "on (Nothing, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map3 f Nothing (Just 1) (Just 1))
- ]
- )
-
- , describe "map4 Tests"
- ( let f = (\a b c d -> a + b + c + d) in
- [ test "on (Just, Just, Just, Just)" <|
- \() ->
- Expect.equal
- (Just 4)
- (Maybe.map4 f (Just 1) (Just 1) (Just 1) (Just 1))
- , test "on (Just, Just, Just, Nothing)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map4 f (Just 1) (Just 1) (Just 1) Nothing)
- , test "on (Just, Just, Nothing, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map4 f (Just 1) (Just 1) Nothing (Just 1))
- , test "on (Just, Nothing, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map4 f (Just 1) Nothing (Just 1) (Just 1))
- , test "on (Nothing, Just, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map4 f Nothing (Just 1) (Just 1) (Just 1))
- ]
- )
-
- , describe "map5 Tests"
- ( let f = (\a b c d e -> a + b + c + d + e) in
- [ test "on (Just, Just, Just, Just, Just)" <|
- \() ->
- Expect.equal
- (Just 5)
- (Maybe.map5 f (Just 1) (Just 1) (Just 1) (Just 1) (Just 1))
- , test "on (Just, Just, Just, Just, Nothing)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map5 f (Just 1) (Just 1) (Just 1) (Just 1) Nothing)
- , test "on (Just, Just, Just, Nothing, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map5 f (Just 1) (Just 1) (Just 1) Nothing (Just 1))
- , test "on (Just, Just, Nothing, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map5 f (Just 1) (Just 1) Nothing (Just 1) (Just 1))
- , test "on (Just, Nothing, Just, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map5 f (Just 1) Nothing (Just 1) (Just 1) (Just 1))
- , test "on (Nothing, Just, Just, Just, Just)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.map5 f Nothing (Just 1) (Just 1) (Just 1) (Just 1))
- ]
- )
-
- ]
-
- , describe "Chaining Maybes Tests"
-
- [ describe "andThen Tests"
- [ test "succeeding chain" <|
- \() ->
- Expect.equal
- (Just 1)
- (Maybe.andThen (\a -> Just a) (Just 1))
- , test "failing chain (original Maybe failed)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.andThen (\a -> Just a) Nothing)
- , test "failing chain (chained function failed)" <|
- \() ->
- Expect.equal
- Nothing
- (Maybe.andThen (\a -> Nothing) (Just 1))
- ]
- ]
-
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Regex.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Regex.elm
deleted file mode 100644
index 478d44b..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Regex.elm
+++ /dev/null
@@ -1,57 +0,0 @@
-module Test.Regex exposing (tests)
-
-import Basics exposing (..)
-import Regex exposing (..)
-import Test exposing (..)
-import Expect
-
-
-tests : Test
-tests =
- let
- simpleTests =
- describe "Simple Stuff"
- [ test "split All" <| \() -> Expect.equal [ "a", "b" ] (split All (regex ",") "a,b")
- , test "split" <| \() -> Expect.equal [ "a", "b,c" ] (split (AtMost 1) (regex ",") "a,b,c")
- , test "split idempotent" <|
- \() ->
- let
- findComma =
- regex ","
- in
- Expect.equal
- (split (AtMost 1) findComma "a,b,c,d,e")
- (split (AtMost 1) findComma "a,b,c,d,e")
- , test "find All" <|
- \() ->
- Expect.equal
- ([ Match "a" [] 0 1, Match "b" [] 1 2 ])
- (find All (regex ".") "ab")
- , test "find All" <|
- \() ->
- Expect.equal
- ([ Match "" [] 0 1 ])
- (find All (regex ".*") "")
- , test "replace AtMost 0" <|
- \() ->
- Expect.equal "The quick brown fox"
- (replace (AtMost 0) (regex "[aeiou]") (\_ -> "") "The quick brown fox")
- , test "replace AtMost 1" <|
- \() ->
- Expect.equal "Th quick brown fox"
- (replace (AtMost 1) (regex "[aeiou]") (\_ -> "") "The quick brown fox")
- , test "replace AtMost 2" <|
- \() ->
- Expect.equal "Th qick brown fox"
- (replace (AtMost 2) (regex "[aeiou]") (\_ -> "") "The quick brown fox")
- , test "replace All" <|
- \() ->
- Expect.equal "Th qck brwn fx"
- (replace All (regex "[aeiou]") (\_ -> "") "The quick brown fox")
- , test "replace using index" <|
- \() ->
- Expect.equal "a1b3c"
- (replace All (regex ",") (\match -> toString match.index) "a,b,c")
- ]
- in
- describe "Regex" [ simpleTests ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Result.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Result.elm
deleted file mode 100644
index 6679e7e..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Result.elm
+++ /dev/null
@@ -1,70 +0,0 @@
-module Test.Result exposing (tests)
-
-import Basics exposing (..)
-import Result
-import Result exposing (Result(..))
-import String
-import Test exposing (..)
-import Expect
-
-
-isEven n =
- if n % 2 == 0 then
- Ok n
- else
- Err "number is odd"
-
-
-add3 a b c =
- a + b + c
-
-
-add4 a b c d =
- a + b + c + d
-
-
-add5 a b c d e =
- a + b + c + d + e
-
-
-tests : Test
-tests =
- let
- mapTests =
- describe "map Tests"
- [ test "map Ok" <| \() -> Expect.equal (Ok 3) (Result.map ((+) 1) (Ok 2))
- , test "map Err" <| \() -> Expect.equal (Err "error") (Result.map ((+) 1) (Err "error"))
- ]
-
- mapNTests =
- describe "mapN Tests"
- [ test "map2 Ok" <| \() -> Expect.equal (Ok 3) (Result.map2 (+) (Ok 1) (Ok 2))
- , test "map2 Err" <| \() -> Expect.equal (Err "x") (Result.map2 (+) (Ok 1) (Err "x"))
- , test "map3 Ok" <| \() -> Expect.equal (Ok 6) (Result.map3 add3 (Ok 1) (Ok 2) (Ok 3))
- , test "map3 Err" <| \() -> Expect.equal (Err "x") (Result.map3 add3 (Ok 1) (Ok 2) (Err "x"))
- , test "map4 Ok" <| \() -> Expect.equal (Ok 10) (Result.map4 add4 (Ok 1) (Ok 2) (Ok 3) (Ok 4))
- , test "map4 Err" <| \() -> Expect.equal (Err "x") (Result.map4 add4 (Ok 1) (Ok 2) (Ok 3) (Err "x"))
- , test "map5 Ok" <| \() -> Expect.equal (Ok 15) (Result.map5 add5 (Ok 1) (Ok 2) (Ok 3) (Ok 4) (Ok 5))
- , test "map5 Err" <| \() -> Expect.equal (Err "x") (Result.map5 add5 (Ok 1) (Ok 2) (Ok 3) (Ok 4) (Err "x"))
- ]
-
- andThenTests =
- describe "andThen Tests"
- [ test "andThen Ok" <| \() -> Expect.equal (Ok 42) ((String.toInt "42") |> Result.andThen isEven)
- , test "andThen first Err" <|
- \() ->
- Expect.equal
- (Err "could not convert string '4.2' to an Int")
- (String.toInt "4.2" |> Result.andThen isEven)
- , test "andThen second Err" <|
- \() ->
- Expect.equal
- (Err "number is odd")
- (String.toInt "41" |> Result.andThen isEven)
- ]
- in
- describe "Result Tests"
- [ mapTests
- , mapNTests
- , andThenTests
- ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Set.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Set.elm
deleted file mode 100644
index e98caaa..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/Set.elm
+++ /dev/null
@@ -1,52 +0,0 @@
-module Test.Set exposing (tests)
-
-import Basics exposing (..)
-import Set
-import Set exposing (Set)
-import List
-import Test exposing (..)
-import Expect
-
-
-set : Set Int
-set =
- Set.fromList <| List.range 1 100
-
-
-setPart1 : Set Int
-setPart1 =
- Set.fromList <| List.range 1 50
-
-
-setPart2 : Set Int
-setPart2 =
- Set.fromList <| List.range 51 100
-
-
-pred : Int -> Bool
-pred x =
- x <= 50
-
-
-tests : Test
-tests =
- let
- queryTests =
- describe "query Tests"
- [ test "size of set of 100 elements" <|
- \() -> Expect.equal 100 (Set.size set)
- ]
-
- filterTests =
- describe "filter Tests"
- [ test "Simple filter" <|
- \() -> Expect.equal setPart1 <| Set.filter pred set
- ]
-
- partitionTests =
- describe "partition Tests"
- [ test "Simple partition" <|
- \() -> Expect.equal ( setPart1, setPart2 ) <| Set.partition pred set
- ]
- in
- describe "Set Tests" [ queryTests, partitionTests, filterTests ]
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/String.elm b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/String.elm
deleted file mode 100644
index f682775..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/Test/String.elm
+++ /dev/null
@@ -1,110 +0,0 @@
-module Test.String exposing (tests)
-
-import Basics exposing (..)
-import List
-import Maybe exposing (..)
-import Result exposing (Result(..))
-import String
-import Test exposing (..)
-import Expect
-
-
-tests : Test
-tests =
- let
- simpleTests =
- describe "Simple Stuff"
- [ test "is empty" <| \() -> Expect.equal True (String.isEmpty "")
- , test "is not empty" <| \() -> Expect.equal True (not (String.isEmpty ("the world")))
- , test "length" <| \() -> Expect.equal 11 (String.length "innumerable")
- , test "endsWith" <| \() -> Expect.equal True <| String.endsWith "ship" "spaceship"
- , test "reverse" <| \() -> Expect.equal "desserts" (String.reverse "stressed")
- , test "repeat" <| \() -> Expect.equal "hahaha" (String.repeat 3 "ha")
- , test "indexes" <| \() -> Expect.equal [ 0, 2 ] (String.indexes "a" "aha")
- , test "empty indexes" <| \() -> Expect.equal [] (String.indexes "" "aha")
- ]
-
- combiningTests =
- describe "Combining Strings"
- [ test "uncons non-empty" <| \() -> Expect.equal (Just ( 'a', "bc" )) (String.uncons "abc")
- , test "uncons empty" <| \() -> Expect.equal Nothing (String.uncons "")
- , test "append 1" <| \() -> Expect.equal "butterfly" (String.append "butter" "fly")
- , test "append 2" <| \() -> Expect.equal "butter" (String.append "butter" "")
- , test "append 3" <| \() -> Expect.equal "butter" (String.append "" "butter")
- , test "concat" <| \() -> Expect.equal "nevertheless" (String.concat [ "never", "the", "less" ])
- , test "split commas" <| \() -> Expect.equal [ "cat", "dog", "cow" ] (String.split "," "cat,dog,cow")
- , test "split slashes" <| \() -> Expect.equal [ "home", "steve", "Desktop", "" ] (String.split "/" "home/steve/Desktop/")
- , test "join spaces" <| \() -> Expect.equal "cat dog cow" (String.join " " [ "cat", "dog", "cow" ])
- , test "join slashes" <| \() -> Expect.equal "home/steve/Desktop" (String.join "/" [ "home", "steve", "Desktop" ])
- , test "slice 1" <| \() -> Expect.equal "c" (String.slice 2 3 "abcd")
- , test "slice 2" <| \() -> Expect.equal "abc" (String.slice 0 3 "abcd")
- , test "slice 3" <| \() -> Expect.equal "abc" (String.slice 0 -1 "abcd")
- , test "slice 4" <| \() -> Expect.equal "cd" (String.slice -2 4 "abcd")
- ]
-
- intTests =
- describe "String.toInt"
- [ goodInt "1234" 1234
- , goodInt "+1234" 1234
- , goodInt "-1234" -1234
- , badInt "1.34"
- , badInt "1e31"
- , badInt "123a"
- , goodInt "0123" 123
- , goodInt "0x001A" 26
- , goodInt "0x001a" 26
- , goodInt "0xBEEF" 48879
- , badInt "0x12.0"
- , badInt "0x12an"
- ]
-
- floatTests =
- describe "String.toFloat"
- [ goodFloat "123" 123
- , goodFloat "3.14" 3.14
- , goodFloat "+3.14" 3.14
- , goodFloat "-3.14" -3.14
- , goodFloat "0.12" 0.12
- , goodFloat ".12" 0.12
- , goodFloat "1e-42" 1e-42
- , goodFloat "6.022e23" 6.022e23
- , goodFloat "6.022E23" 6.022e23
- , goodFloat "6.022e+23" 6.022e23
- , badFloat "6.022e"
- , badFloat "6.022n"
- , badFloat "6.022.31"
- ]
- in
- describe "String" [ simpleTests, combiningTests, intTests, floatTests ]
-
-
-
--- NUMBER HELPERS
-
-
-goodInt : String -> Int -> Test
-goodInt str int =
- test str <| \_ ->
- Expect.equal (Ok int) (String.toInt str)
-
-
-badInt : String -> Test
-badInt str =
- test str <| \_ ->
- Expect.equal
- (Err ("could not convert string '" ++ str ++ "' to an Int"))
- (String.toInt str)
-
-
-goodFloat : String -> Float -> Test
-goodFloat str float =
- test str <| \_ ->
- Expect.equal (Ok float) (String.toFloat str)
-
-
-badFloat : String -> Test
-badFloat str =
- test str <| \_ ->
- Expect.equal
- (Err ("could not convert string '" ++ str ++ "' to a Float"))
- (String.toFloat str)
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/elm-package.json b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/elm-package.json
deleted file mode 100644
index e27cfa4..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/elm-package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "version": "1.1.1",
- "summary": "Tests for Elm's standard libraries",
- "repository": "http://github.com/elm-lang/core.git",
- "license": "BSD3",
- "source-directories": [
- ".",
- "../src"
- ],
- "exposed-modules": [ ],
- "native-modules": true,
- "dependencies": {
- "elm-community/elm-test": "3.1.0 <= v < 4.0.0",
- "rtfeldman/node-test-runner": "3.0.0 <= v < 4.0.0"
- },
- "elm-version": "0.18.0 <= v < 0.19.0"
-}
diff --git a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/run-tests.sh b/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/run-tests.sh
deleted file mode 100644
index 9e2f9bc..0000000
--- a/server/elm-stuff/packages/elm-lang/core/5.1.1/tests/run-tests.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-cd "$(dirname "$0")"
-set -e
-
-
-elm-package install -y
-
-VERSION_DIR="$(ls elm-stuff/packages/elm-lang/core/)"
-CORE_PACKAGE_DIR="elm-stuff/packages/elm-lang/core/$VERSION_DIR"
-CORE_GIT_DIR="$(dirname $PWD)"
-
-echo "Linking $CORE_PACKAGE_DIR to $CORE_GIT_DIR"
-rm -rf $CORE_PACKAGE_DIR
-ln -s $CORE_GIT_DIR $CORE_PACKAGE_DIR
-
-elm-make --yes --output test.js Main.elm
-
-elm-test Main.elm
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/.gitignore b/server/elm-stuff/packages/elm-lang/html/2.0.0/.gitignore
deleted file mode 100644
index e185314..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-elm-stuff
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/LICENSE b/server/elm-stuff/packages/elm-lang/html/2.0.0/LICENSE
deleted file mode 100644
index e0419a4..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2014-present, Evan Czaplicki
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of Evan Czaplicki nor the names of other
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/README.md b/server/elm-stuff/packages/elm-lang/html/2.0.0/README.md
deleted file mode 100644
index baed9a7..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# HTML for Elm
-
-The core HTML library for Elm. It is backed by [elm-lang/virtual-dom](http://package.elm-lang.org/packages/elm-lang/virtual-dom/latest/) which handles the dirty details of rendering things quickly.
-
-The best way to learn how to use this library is to read [guide.elm-lang.org](http://guide.elm-lang.org/), particularly the section on [The Elm Architecture](http://guide.elm-lang.org/architecture/index.html).
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/elm-package.json b/server/elm-stuff/packages/elm-lang/html/2.0.0/elm-package.json
deleted file mode 100644
index 952aed5..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/elm-package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "version": "2.0.0",
- "summary": "Fast HTML, rendered with virtual DOM diffing",
- "repository": "https://github.com/elm-lang/html.git",
- "license": "BSD3",
- "source-directories": [
- "src"
- ],
- "exposed-modules": [
- "Html",
- "Html.Attributes",
- "Html.Events",
- "Html.Keyed",
- "Html.Lazy"
- ],
- "dependencies": {
- "elm-lang/core": "5.0.0 <= v < 6.0.0",
- "elm-lang/virtual-dom": "2.0.0 <= v < 3.0.0"
- },
- "elm-version": "0.18.0 <= v < 0.19.0"
-}
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/properties-vs-attributes.md b/server/elm-stuff/packages/elm-lang/html/2.0.0/properties-vs-attributes.md
deleted file mode 100644
index 41f7565..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/properties-vs-attributes.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Properties vs. Attributes
-
-When you are working with HTML, you can have DOM nodes like ``. And you can add *attributes* to those DOM nodes, like ``.
-
-When you are creating DOM nodes in JavaScript, there are two ways to add attributes like this:
-
- 1. **Attributes** — You can use the `setAttribute` function. So adding a class attribute would look like this: `domNode.setAttribute('class', 'user-info')`.
-
- 2. **Properties** — JavaScript often exposes an alternate way to set these attributes. Another way to add a class attribute would be like this: `domNode.className = 'user-info'`
-
-Notice that the attribute is called `class` but the property is called `className`. This is because `class` is a reserved word in JavaScript. Point is, **attributes and properties do not always match up.**
-
-It is actually a bit crazier than that though. **Sometimes an attribute exists, but there is no corresponding property.** For example, as of this writing the `webkit-playsinline` can be added with `setAttribute`, but there is no corresponding property. And with SVG, you cannot use properties at all, you must to use `setAttributeNS` for everything.
-
-With all the corner cases here, it makes sense to have access to both approaches.
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html.elm b/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html.elm
deleted file mode 100644
index b872a3b..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html.elm
+++ /dev/null
@@ -1,923 +0,0 @@
-module Html exposing
- ( Html, Attribute
- , text, node, map
- , beginnerProgram, program, programWithFlags
- , h1, h2, h3, h4, h5, h6
- , div, p, hr, pre, blockquote
- , span, a, code, em, strong, i, b, u, sub, sup, br
- , ol, ul, li, dl, dt, dd
- , img, iframe, canvas, math
- , form, input, textarea, button, select, option
- , section, nav, article, aside, header, footer, address, main_, body
- , figure, figcaption
- , table, caption, colgroup, col, tbody, thead, tfoot, tr, td, th
- , fieldset, legend, label, datalist, optgroup, keygen, output, progress, meter
- , audio, video, source, track
- , embed, object, param
- , ins, del
- , small, cite, dfn, abbr, time, var, samp, kbd, s, q
- , mark, ruby, rt, rp, bdi, bdo, wbr
- , details, summary, menuitem, menu
- )
-
-{-| This file is organized roughly in order of popularity. The tags which you'd
-expect to use frequently will be closer to the top.
-
-# Primitives
-@docs Html, Attribute, text, node, map
-
-# Programs
-@docs beginnerProgram, program, programWithFlags
-
-# Tags
-
-## Headers
-@docs h1, h2, h3, h4, h5, h6
-
-## Grouping Content
-@docs div, p, hr, pre, blockquote
-
-## Text
-@docs span, a, code, em, strong, i, b, u, sub, sup, br
-
-## Lists
-@docs ol, ul, li, dl, dt, dd
-
-## Emdedded Content
-@docs img, iframe, canvas, math
-
-## Inputs
-@docs form, input, textarea, button, select, option
-
-## Sections
-@docs section, nav, article, aside, header, footer, address, main_, body
-
-## Figures
-@docs figure, figcaption
-
-## Tables
-@docs table, caption, colgroup, col, tbody, thead, tfoot, tr, td, th
-
-
-## Less Common Elements
-
-### Less Common Inputs
-@docs fieldset, legend, label, datalist, optgroup, keygen, output, progress, meter
-
-### Audio and Video
-@docs audio, video, source, track
-
-### Embedded Objects
-@docs embed, object, param
-
-### Text Edits
-@docs ins, del
-
-### Semantic Text
-@docs small, cite, dfn, abbr, time, var, samp, kbd, s, q
-
-### Less Common Text Tags
-@docs mark, ruby, rt, rp, bdi, bdo, wbr
-
-## Interactive Elements
-@docs details, summary, menuitem, menu
-
--}
-
-import VirtualDom
-
-
-
--- CORE TYPES
-
-
-{-| The core building block used to build up HTML. Here we create an `Html`
-value with no attributes and one child:
-
- hello : Html msg
- hello =
- div [] [ text "Hello!" ]
--}
-type alias Html msg = VirtualDom.Node msg
-
-
-{-| Set attributes on your `Html`. Learn more in the
-[`Html.Attributes`](Html-Attributes) module.
--}
-type alias Attribute msg = VirtualDom.Property msg
-
-
-
--- PRIMITIVES
-
-
-{-| General way to create HTML nodes. It is used to define all of the helper
-functions in this library.
-
- div : List (Attribute msg) -> List (Html msg) -> Html msg
- div attributes children =
- node "div" attributes children
-
-You can use this to create custom nodes if you need to create something that
-is not covered by the helper functions in this library.
--}
-node : String -> List (Attribute msg) -> List (Html msg) -> Html msg
-node =
- VirtualDom.node
-
-
-{-| Just put plain text in the DOM. It will escape the string so that it appears
-exactly as you specify.
-
- text "Hello World!"
--}
-text : String -> Html msg
-text =
- VirtualDom.text
-
-
-
--- NESTING VIEWS
-
-
-{-| Transform the messages produced by some `Html`. In the following example,
-we have `viewButton` that produces `()` messages, and we transform those values
-into `Msg` values in `view`.
-
- type Msg = Left | Right
-
- view : model -> Html Msg
- view model =
- div []
- [ map (\_ -> Left) (viewButton "Left")
- , map (\_ -> Right) (viewButton "Right")
- ]
-
- viewButton : String -> Html ()
- viewButton name =
- button [ onClick () ] [ text name ]
-
-This should not come in handy too often. Definitely read [this][reuse] before
-deciding if this is what you want.
-
-[reuse]: https://guide.elm-lang.org/reuse/
--}
-map : (a -> msg) -> Html a -> Html msg
-map =
- VirtualDom.map
-
-
-
--- CREATING PROGRAMS
-
-
-{-| Create a [`Program`][program] that describes how your whole app works.
-
-Read about [The Elm Architecture][tea] to learn how to use this. Just do it.
-The additional context is very worthwhile! (Honestly, it is best to just read
-that guide from front to back instead of muddling around and reading it
-piecemeal.)
-
-[program]: http://package.elm-lang.org/packages/elm-lang/core/latest/Platform#Program
-[tea]: https://guide.elm-lang.org/architecture/
--}
-beginnerProgram
- : { model : model
- , view : model -> Html msg
- , update : msg -> model -> model
- }
- -> Program Never model msg
-beginnerProgram {model, view, update} =
- program
- { init = model ! []
- , update = \msg model -> update msg model ! []
- , view = view
- , subscriptions = \_ -> Sub.none
- }
-
-
-{-| Create a [`Program`][program] that describes how your whole app works.
-
-Read about [The Elm Architecture][tea] to learn how to use this. Just do it.
-Commands and subscriptions make way more sense when you work up to them
-gradually and see them in context with examples.
-
-[program]: http://package.elm-lang.org/packages/elm-lang/core/latest/Platform#Program
-[tea]: https://guide.elm-lang.org/architecture/
--}
-program
- : { init : (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- , view : model -> Html msg
- }
- -> Program Never model msg
-program =
- VirtualDom.program
-
-
-{-| Create a [`Program`][program] that describes how your whole app works.
-
-It works just like `program` but you can provide “flags” from
-JavaScript to configure your application. Read more about that [here][].
-
-[program]: http://package.elm-lang.org/packages/elm-lang/core/latest/Platform#Program
-[here]: https://guide.elm-lang.org/interop/javascript.html
--}
-programWithFlags
- : { init : flags -> (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- , view : model -> Html msg
- }
- -> Program flags model msg
-programWithFlags =
- VirtualDom.programWithFlags
-
-
-
--- SECTIONS
-
-
-{-| Represents the content of an HTML document. There is only one `body`
-element in a document.
--}
-body : List (Attribute msg) -> List (Html msg) -> Html msg
-body =
- node "body"
-
-
-{-| Defines a section in a document.
--}
-section : List (Attribute msg) -> List (Html msg) -> Html msg
-section =
- node "section"
-
-
-{-| Defines a section that contains only navigation links.
--}
-nav : List (Attribute msg) -> List (Html msg) -> Html msg
-nav =
- node "nav"
-
-
-{-| Defines self-contained content that could exist independently of the rest
-of the content.
--}
-article : List (Attribute msg) -> List (Html msg) -> Html msg
-article =
- node "article"
-
-
-{-| Defines some content loosely related to the page content. If it is removed,
-the remaining content still makes sense.
--}
-aside : List (Attribute msg) -> List (Html msg) -> Html msg
-aside =
- node "aside"
-
-
-{-|-}
-h1 : List (Attribute msg) -> List (Html msg) -> Html msg
-h1 =
- node "h1"
-
-
-{-|-}
-h2 : List (Attribute msg) -> List (Html msg) -> Html msg
-h2 =
- node "h2"
-
-
-{-|-}
-h3 : List (Attribute msg) -> List (Html msg) -> Html msg
-h3 =
- node "h3"
-
-
-{-|-}
-h4 : List (Attribute msg) -> List (Html msg) -> Html msg
-h4 =
- node "h4"
-
-
-{-|-}
-h5 : List (Attribute msg) -> List (Html msg) -> Html msg
-h5 =
- node "h5"
-
-
-{-|-}
-h6 : List (Attribute msg) -> List (Html msg) -> Html msg
-h6 =
- node "h6"
-
-
-{-| Defines the header of a page or section. It often contains a logo, the
-title of the web site, and a navigational table of content.
--}
-header : List (Attribute msg) -> List (Html msg) -> Html msg
-header =
- node "header"
-
-
-{-| Defines the footer for a page or section. It often contains a copyright
-notice, some links to legal information, or addresses to give feedback.
--}
-footer : List (Attribute msg) -> List (Html msg) -> Html msg
-footer =
- node "footer"
-
-
-{-| Defines a section containing contact information. -}
-address : List (Attribute msg) -> List (Html msg) -> Html msg
-address =
- node "address"
-
-
-{-| Defines the main or important content in the document. There is only one
-`main` element in the document.
--}
-main_ : List (Attribute msg) -> List (Html msg) -> Html msg
-main_ =
- node "main"
-
-
--- GROUPING CONTENT
-
-{-| Defines a portion that should be displayed as a paragraph. -}
-p : List (Attribute msg) -> List (Html msg) -> Html msg
-p =
- node "p"
-
-
-{-| Represents a thematic break between paragraphs of a section or article or
-any longer content.
--}
-hr : List (Attribute msg) -> List (Html msg) -> Html msg
-hr =
- node "hr"
-
-
-{-| Indicates that its content is preformatted and that this format must be
-preserved.
--}
-pre : List (Attribute msg) -> List (Html msg) -> Html msg
-pre =
- node "pre"
-
-
-{-| Represents a content that is quoted from another source. -}
-blockquote : List (Attribute msg) -> List (Html msg) -> Html msg
-blockquote =
- node "blockquote"
-
-
-{-| Defines an ordered list of items. -}
-ol : List (Attribute msg) -> List (Html msg) -> Html msg
-ol =
- node "ol"
-
-
-{-| Defines an unordered list of items. -}
-ul : List (Attribute msg) -> List (Html msg) -> Html msg
-ul =
- node "ul"
-
-
-{-| Defines a item of an enumeration list. -}
-li : List (Attribute msg) -> List (Html msg) -> Html msg
-li =
- node "li"
-
-
-{-| Defines a definition list, that is, a list of terms and their associated
-definitions.
--}
-dl : List (Attribute msg) -> List (Html msg) -> Html msg
-dl =
- node "dl"
-
-
-{-| Represents a term defined by the next `dd`. -}
-dt : List (Attribute msg) -> List (Html msg) -> Html msg
-dt =
- node "dt"
-
-
-{-| Represents the definition of the terms immediately listed before it. -}
-dd : List (Attribute msg) -> List (Html msg) -> Html msg
-dd =
- node "dd"
-
-
-{-| Represents a figure illustrated as part of the document. -}
-figure : List (Attribute msg) -> List (Html msg) -> Html msg
-figure =
- node "figure"
-
-
-{-| Represents the legend of a figure. -}
-figcaption : List (Attribute msg) -> List (Html msg) -> Html msg
-figcaption =
- node "figcaption"
-
-
-{-| Represents a generic container with no special meaning. -}
-div : List (Attribute msg) -> List (Html msg) -> Html msg
-div =
- node "div"
-
-
--- TEXT LEVEL SEMANTIC
-
-{-| Represents a hyperlink, linking to another resource. -}
-a : List (Attribute msg) -> List (Html msg) -> Html msg
-a =
- node "a"
-
-
-{-| Represents emphasized text, like a stress accent. -}
-em : List (Attribute msg) -> List (Html msg) -> Html msg
-em =
- node "em"
-
-
-{-| Represents especially important text. -}
-strong : List (Attribute msg) -> List (Html msg) -> Html msg
-strong =
- node "strong"
-
-
-{-| Represents a side comment, that is, text like a disclaimer or a
-copyright, which is not essential to the comprehension of the document.
--}
-small : List (Attribute msg) -> List (Html msg) -> Html msg
-small =
- node "small"
-
-
-{-| Represents content that is no longer accurate or relevant. -}
-s : List (Attribute msg) -> List (Html msg) -> Html msg
-s =
- node "s"
-
-
-{-| Represents the title of a work. -}
-cite : List (Attribute msg) -> List (Html msg) -> Html msg
-cite =
- node "cite"
-
-
-{-| Represents an inline quotation. -}
-q : List (Attribute msg) -> List (Html msg) -> Html msg
-q =
- node "q"
-
-
-{-| Represents a term whose definition is contained in its nearest ancestor
-content.
--}
-dfn : List (Attribute msg) -> List (Html msg) -> Html msg
-dfn =
- node "dfn"
-
-
-{-| Represents an abbreviation or an acronym; the expansion of the
-abbreviation can be represented in the title attribute.
--}
-abbr : List (Attribute msg) -> List (Html msg) -> Html msg
-abbr =
- node "abbr"
-
-
-{-| Represents a date and time value; the machine-readable equivalent can be
-represented in the datetime attribute.
--}
-time : List (Attribute msg) -> List (Html msg) -> Html msg
-time =
- node "time"
-
-
-{-| Represents computer code. -}
-code : List (Attribute msg) -> List (Html msg) -> Html msg
-code =
- node "code"
-
-
-{-| Represents a variable. Specific cases where it should be used include an
-actual mathematical expression or programming context, an identifier
-representing a constant, a symbol identifying a physical quantity, a function
-parameter, or a mere placeholder in prose.
--}
-var : List (Attribute msg) -> List (Html msg) -> Html msg
-var =
- node "var"
-
-
-{-| Represents the output of a program or a computer. -}
-samp : List (Attribute msg) -> List (Html msg) -> Html msg
-samp =
- node "samp"
-
-
-{-| Represents user input, often from the keyboard, but not necessarily; it
-may represent other input, like transcribed voice commands.
--}
-kbd : List (Attribute msg) -> List (Html msg) -> Html msg
-kbd =
- node "kbd"
-
-
-{-| Represent a subscript. -}
-sub : List (Attribute msg) -> List (Html msg) -> Html msg
-sub =
- node "sub"
-
-
-{-| Represent a superscript. -}
-sup : List (Attribute msg) -> List (Html msg) -> Html msg
-sup =
- node "sup"
-
-
-{-| Represents some text in an alternate voice or mood, or at least of
-different quality, such as a taxonomic designation, a technical term, an
-idiomatic phrase, a thought, or a ship name.
--}
-i : List (Attribute msg) -> List (Html msg) -> Html msg
-i =
- node "i"
-
-
-{-| Represents a text which to which attention is drawn for utilitarian
-purposes. It doesn't convey extra importance and doesn't imply an alternate
-voice.
--}
-b : List (Attribute msg) -> List (Html msg) -> Html msg
-b =
- node "b"
-
-
-{-| Represents a non-textual annoatation for which the conventional
-presentation is underlining, such labeling the text as being misspelt or
-labeling a proper name in Chinese text.
--}
-u : List (Attribute msg) -> List (Html msg) -> Html msg
-u =
- node "u"
-
-
-{-| Represents text highlighted for reference purposes, that is for its
-relevance in another context.
--}
-mark : List (Attribute msg) -> List (Html msg) -> Html msg
-mark =
- node "mark"
-
-
-{-| Represents content to be marked with ruby annotations, short runs of text
-presented alongside the text. This is often used in conjunction with East Asian
-language where the annotations act as a guide for pronunciation, like the
-Japanese furigana.
--}
-ruby : List (Attribute msg) -> List (Html msg) -> Html msg
-ruby =
- node "ruby"
-
-
-{-| Represents the text of a ruby annotation. -}
-rt : List (Attribute msg) -> List (Html msg) -> Html msg
-rt =
- node "rt"
-
-
-{-| Represents parenthesis around a ruby annotation, used to display the
-annotation in an alternate way by browsers not supporting the standard display
-for annotations.
--}
-rp : List (Attribute msg) -> List (Html msg) -> Html msg
-rp =
- node "rp"
-
-
-{-| Represents text that must be isolated from its surrounding for
-bidirectional text formatting. It allows embedding a span of text with a
-different, or unknown, directionality.
--}
-bdi : List (Attribute msg) -> List (Html msg) -> Html msg
-bdi =
- node "bdi"
-
-
-{-| Represents the directionality of its children, in order to explicitly
-override the Unicode bidirectional algorithm.
--}
-bdo : List (Attribute msg) -> List (Html msg) -> Html msg
-bdo =
- node "bdo"
-
-
-{-| Represents text with no specific meaning. This has to be used when no other
-text-semantic element conveys an adequate meaning, which, in this case, is
-often brought by global attributes like `class`, `lang`, or `dir`.
--}
-span : List (Attribute msg) -> List (Html msg) -> Html msg
-span =
- node "span"
-
-
-{-| Represents a line break. -}
-br : List (Attribute msg) -> List (Html msg) -> Html msg
-br =
- node "br"
-
-
-{-| Represents a line break opportunity, that is a suggested point for
-wrapping text in order to improve readability of text split on several lines.
--}
-wbr : List (Attribute msg) -> List (Html msg) -> Html msg
-wbr =
- node "wbr"
-
-
--- EDITS
-
-{-| Defines an addition to the document. -}
-ins : List (Attribute msg) -> List (Html msg) -> Html msg
-ins =
- node "ins"
-
-
-{-| Defines a removal from the document. -}
-del : List (Attribute msg) -> List (Html msg) -> Html msg
-del =
- node "del"
-
-
--- EMBEDDED CONTENT
-
-{-| Represents an image. -}
-img : List (Attribute msg) -> List (Html msg) -> Html msg
-img =
- node "img"
-
-
-{-| Embedded an HTML document. -}
-iframe : List (Attribute msg) -> List (Html msg) -> Html msg
-iframe =
- node "iframe"
-
-
-{-| Represents a integration point for an external, often non-HTML,
-application or interactive content.
--}
-embed : List (Attribute msg) -> List (Html msg) -> Html msg
-embed =
- node "embed"
-
-
-{-| Represents an external resource, which is treated as an image, an HTML
-sub-document, or an external resource to be processed by a plug-in.
--}
-object : List (Attribute msg) -> List (Html msg) -> Html msg
-object =
- node "object"
-
-
-{-| Defines parameters for use by plug-ins invoked by `object` elements. -}
-param : List (Attribute msg) -> List (Html msg) -> Html msg
-param =
- node "param"
-
-
-{-| Represents a video, the associated audio and captions, and controls. -}
-video : List (Attribute msg) -> List (Html msg) -> Html msg
-video =
- node "video"
-
-
-{-| Represents a sound or audio stream. -}
-audio : List (Attribute msg) -> List (Html msg) -> Html msg
-audio =
- node "audio"
-
-
-{-| Allows authors to specify alternative media resources for media elements
-like `video` or `audio`.
--}
-source : List (Attribute msg) -> List (Html msg) -> Html msg
-source =
- node "source"
-
-
-{-| Allows authors to specify timed text track for media elements like `video`
-or `audio`.
--}
-track : List (Attribute msg) -> List (Html msg) -> Html msg
-track =
- node "track"
-
-
-{-| Represents a bitmap area for graphics rendering. -}
-canvas : List (Attribute msg) -> List (Html msg) -> Html msg
-canvas =
- node "canvas"
-
-
-{-| Defines a mathematical formula. -}
-math : List (Attribute msg) -> List (Html msg) -> Html msg
-math =
- node "math"
-
-
--- TABULAR DATA
-
-{-| Represents data with more than one dimension. -}
-table : List (Attribute msg) -> List (Html msg) -> Html msg
-table =
- node "table"
-
-
-{-| Represents the title of a table. -}
-caption : List (Attribute msg) -> List (Html msg) -> Html msg
-caption =
- node "caption"
-
-
-{-| Represents a set of one or more columns of a table. -}
-colgroup : List (Attribute msg) -> List (Html msg) -> Html msg
-colgroup =
- node "colgroup"
-
-
-{-| Represents a column of a table. -}
-col : List (Attribute msg) -> List (Html msg) -> Html msg
-col =
- node "col"
-
-
-{-| Represents the block of rows that describes the concrete data of a table.
--}
-tbody : List (Attribute msg) -> List (Html msg) -> Html msg
-tbody =
- node "tbody"
-
-
-{-| Represents the block of rows that describes the column labels of a table.
--}
-thead : List (Attribute msg) -> List (Html msg) -> Html msg
-thead =
- node "thead"
-
-
-{-| Represents the block of rows that describes the column summaries of a table.
--}
-tfoot : List (Attribute msg) -> List (Html msg) -> Html msg
-tfoot =
- node "tfoot"
-
-
-{-| Represents a row of cells in a table. -}
-tr : List (Attribute msg) -> List (Html msg) -> Html msg
-tr =
- node "tr"
-
-
-{-| Represents a data cell in a table. -}
-td : List (Attribute msg) -> List (Html msg) -> Html msg
-td =
- node "td"
-
-
-{-| Represents a header cell in a table. -}
-th : List (Attribute msg) -> List (Html msg) -> Html msg
-th =
- node "th"
-
-
--- FORMS
-
-{-| Represents a form, consisting of controls, that can be submitted to a
-server for processing.
--}
-form : List (Attribute msg) -> List (Html msg) -> Html msg
-form =
- node "form"
-
-
-{-| Represents a set of controls. -}
-fieldset : List (Attribute msg) -> List (Html msg) -> Html msg
-fieldset =
- node "fieldset"
-
-
-{-| Represents the caption for a `fieldset`. -}
-legend : List (Attribute msg) -> List (Html msg) -> Html msg
-legend =
- node "legend"
-
-
-{-| Represents the caption of a form control. -}
-label : List (Attribute msg) -> List (Html msg) -> Html msg
-label =
- node "label"
-
-
-{-| Represents a typed data field allowing the user to edit the data. -}
-input : List (Attribute msg) -> List (Html msg) -> Html msg
-input =
- node "input"
-
-
-{-| Represents a button. -}
-button : List (Attribute msg) -> List (Html msg) -> Html msg
-button =
- node "button"
-
-
-{-| Represents a control allowing selection among a set of options. -}
-select : List (Attribute msg) -> List (Html msg) -> Html msg
-select =
- node "select"
-
-
-{-| Represents a set of predefined options for other controls. -}
-datalist : List (Attribute msg) -> List (Html msg) -> Html msg
-datalist =
- node "datalist"
-
-
-{-| Represents a set of options, logically grouped. -}
-optgroup : List (Attribute msg) -> List (Html msg) -> Html msg
-optgroup =
- node "optgroup"
-
-
-{-| Represents an option in a `select` element or a suggestion of a `datalist`
-element.
--}
-option : List (Attribute msg) -> List (Html msg) -> Html msg
-option =
- node "option"
-
-
-{-| Represents a multiline text edit control. -}
-textarea : List (Attribute msg) -> List (Html msg) -> Html msg
-textarea =
- node "textarea"
-
-
-{-| Represents a key-pair generator control. -}
-keygen : List (Attribute msg) -> List (Html msg) -> Html msg
-keygen =
- node "keygen"
-
-
-{-| Represents the result of a calculation. -}
-output : List (Attribute msg) -> List (Html msg) -> Html msg
-output =
- node "output"
-
-
-{-| Represents the completion progress of a task. -}
-progress : List (Attribute msg) -> List (Html msg) -> Html msg
-progress =
- node "progress"
-
-
-{-| Represents a scalar measurement (or a fractional value), within a known
-range.
--}
-meter : List (Attribute msg) -> List (Html msg) -> Html msg
-meter =
- node "meter"
-
-
--- INTERACTIVE ELEMENTS
-
-{-| Represents a widget from which the user can obtain additional information
-or controls.
--}
-details : List (Attribute msg) -> List (Html msg) -> Html msg
-details =
- node "details"
-
-
-{-| Represents a summary, caption, or legend for a given `details`. -}
-summary : List (Attribute msg) -> List (Html msg) -> Html msg
-summary =
- node "summary"
-
-
-{-| Represents a command that the user can invoke. -}
-menuitem : List (Attribute msg) -> List (Html msg) -> Html msg
-menuitem =
- node "menuitem"
-
-
-{-| Represents a list of commands. -}
-menu : List (Attribute msg) -> List (Html msg) -> Html msg
-menu =
- node "menu"
-
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Attributes.elm b/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Attributes.elm
deleted file mode 100644
index 4cdba44..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Attributes.elm
+++ /dev/null
@@ -1,1009 +0,0 @@
-module Html.Attributes exposing
- ( style, property, attribute, map
- , class, classList, id, title, hidden
- , type_, value, defaultValue, checked, placeholder, selected
- , accept, acceptCharset, action, autocomplete, autofocus
- , disabled, enctype, formaction, list, maxlength, minlength, method, multiple
- , name, novalidate, pattern, readonly, required, size, for, form
- , max, min, step
- , cols, rows, wrap
- , href, target, download, downloadAs, hreflang, media, ping, rel
- , ismap, usemap, shape, coords
- , src, height, width, alt
- , autoplay, controls, loop, preload, poster, default, kind, srclang
- , sandbox, seamless, srcdoc
- , reversed, start
- , align, colspan, rowspan, headers, scope
- , async, charset, content, defer, httpEquiv, language, scoped
- , accesskey, contenteditable, contextmenu, dir, draggable, dropzone
- , itemprop, lang, spellcheck, tabindex
- , challenge, keytype
- , cite, datetime, pubdate, manifest
- )
-
-{-| Helper functions for HTML attributes. They are organized roughly by
-category. Each attribute is labeled with the HTML tags it can be used with, so
-just search the page for `video` if you want video stuff.
-
-If you cannot find what you are looking for, go to the [Custom
-Attributes](#custom-attributes) section to learn how to create new helpers.
-
-# Primitives
-@docs style, property, attribute, map
-
-# Super Common Attributes
-@docs class, classList, id, title, hidden
-
-# Inputs
-@docs type_, value, defaultValue, checked, placeholder, selected
-
-## Input Helpers
-@docs accept, acceptCharset, action, autocomplete, autofocus,
- disabled, enctype, formaction, list, maxlength, minlength, method, multiple,
- name, novalidate, pattern, readonly, required, size, for, form
-
-## Input Ranges
-@docs max, min, step
-
-## Input Text Areas
-@docs cols, rows, wrap
-
-
-# Links and Areas
-@docs href, target, download, downloadAs, hreflang, media, ping, rel
-
-## Maps
-@docs ismap, usemap, shape, coords
-
-
-# Embedded Content
-@docs src, height, width, alt
-
-## Audio and Video
-@docs autoplay, controls, loop, preload, poster, default, kind, srclang
-
-## iframes
-@docs sandbox, seamless, srcdoc
-
-# Ordered Lists
-@docs reversed, start
-
-# Tables
-@docs align, colspan, rowspan, headers, scope
-
-# Header Stuff
-@docs async, charset, content, defer, httpEquiv, language, scoped
-
-# Less Common Global Attributes
-Attributes that can be attached to any HTML tag but are less commonly used.
-@docs accesskey, contenteditable, contextmenu, dir, draggable, dropzone,
- itemprop, lang, spellcheck, tabindex
-
-# Key Generation
-@docs challenge, keytype
-
-# Miscellaneous
-@docs cite, datetime, pubdate, manifest
-
--}
-
-import Html exposing (Attribute)
-import Json.Encode as Json
-import VirtualDom
-
-
--- This library does not include low, high, or optimum because the idea of a
--- `meter` is just too crazy.
-
-
-
--- PRIMITIVES
-
-
-{-| Specify a list of styles.
-
- myStyle : Attribute msg
- myStyle =
- style
- [ ("backgroundColor", "red")
- , ("height", "90px")
- , ("width", "100%")
- ]
-
- greeting : Html msg
- greeting =
- div [ myStyle ] [ text "Hello!" ]
-
-There is no `Html.Styles` module because best practices for working with HTML
-suggest that this should primarily be specified in CSS files. So the general
-recommendation is to use this function lightly.
--}
-style : List (String, String) -> Attribute msg
-style =
- VirtualDom.style
-
-
-{-| This function makes it easier to build a space-separated class attribute.
-Each class can easily be added and removed depending on the boolean value it
-is paired with. For example, maybe we want a way to view notices:
-
- viewNotice : Notice -> Html msg
- viewNotice notice =
- div
- [ classList
- [ ("notice", True)
- , ("notice-important", notice.isImportant)
- , ("notice-seen", notice.isSeen)
- ]
- ]
- [ text notice.content ]
--}
-classList : List (String, Bool) -> Attribute msg
-classList list =
- list
- |> List.filter Tuple.second
- |> List.map Tuple.first
- |> String.join " "
- |> class
-
-
-
--- CUSTOM ATTRIBUTES
-
-
-{-| Create *properties*, like saying `domNode.className = 'greeting'` in
-JavaScript.
-
- import Json.Encode as Encode
-
- class : String -> Attribute msg
- class name =
- property "className" (Encode.string name)
-
-Read more about the difference between properties and attributes [here][].
-
-[here]: https://github.com/elm-lang/html/blob/master/properties-vs-attributes.md
--}
-property : String -> Json.Value -> Attribute msg
-property =
- VirtualDom.property
-
-
-stringProperty : String -> String -> Attribute msg
-stringProperty name string =
- property name (Json.string string)
-
-
-boolProperty : String -> Bool -> Attribute msg
-boolProperty name bool =
- property name (Json.bool bool)
-
-
-{-| Create *attributes*, like saying `domNode.setAttribute('class', 'greeting')`
-in JavaScript.
-
- class : String -> Attribute msg
- class name =
- attribute "class" name
-
-Read more about the difference between properties and attributes [here][].
-
-[here]: https://github.com/elm-lang/html/blob/master/properties-vs-attributes.md
--}
-attribute : String -> String -> Attribute msg
-attribute =
- VirtualDom.attribute
-
-
-{-| Transform the messages produced by an `Attribute`.
--}
-map : (a -> msg) -> Attribute a -> Attribute msg
-map =
- VirtualDom.mapProperty
-
-
-
--- GLOBAL ATTRIBUTES
-
-
-{-| Often used with CSS to style elements with common properties. -}
-class : String -> Attribute msg
-class name =
- stringProperty "className" name
-
-
-{-| Indicates the relevance of an element. -}
-hidden : Bool -> Attribute msg
-hidden bool =
- boolProperty "hidden" bool
-
-
-{-| Often used with CSS to style a specific element. The value of this
-attribute must be unique.
--}
-id : String -> Attribute msg
-id name =
- stringProperty "id" name
-
-
-{-| Text to be displayed in a tooltip when hovering over the element. -}
-title : String -> Attribute msg
-title name =
- stringProperty "title" name
-
-
-
--- LESS COMMON GLOBAL ATTRIBUTES
-
-
-{-| Defines a keyboard shortcut to activate or add focus to the element. -}
-accesskey : Char -> Attribute msg
-accesskey char =
- stringProperty "accessKey" (String.fromChar char)
-
-
-{-| Indicates whether the element's content is editable. -}
-contenteditable : Bool -> Attribute msg
-contenteditable bool =
- boolProperty "contentEditable" bool
-
-
-{-| Defines the ID of a `menu` element which will serve as the element's
-context menu.
--}
-contextmenu : String -> Attribute msg
-contextmenu value =
- attribute "contextmenu" value
-
-
-{-| Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl
-(Right-To-Left).
--}
-dir : String -> Attribute msg
-dir value =
- stringProperty "dir" value
-
-
-{-| Defines whether the element can be dragged. -}
-draggable : String -> Attribute msg
-draggable value =
- attribute "draggable" value
-
-
-{-| Indicates that the element accept the dropping of content on it. -}
-dropzone : String -> Attribute msg
-dropzone value =
- stringProperty "dropzone" value
-
-
-{-|-}
-itemprop : String -> Attribute msg
-itemprop value =
- attribute "itemprop" value
-
-
-{-| Defines the language used in the element. -}
-lang : String -> Attribute msg
-lang value =
- stringProperty "lang" value
-
-
-{-| Indicates whether spell checking is allowed for the element. -}
-spellcheck : Bool -> Attribute msg
-spellcheck bool =
- boolProperty "spellcheck" bool
-
-
-{-| Overrides the browser's default tab order and follows the one specified
-instead.
--}
-tabindex : Int -> Attribute msg
-tabindex n =
- attribute "tabIndex" (toString n)
-
-
-
--- HEADER STUFF
-
-
-{-| Indicates that the `script` should be executed asynchronously. -}
-async : Bool -> Attribute msg
-async bool =
- boolProperty "async" bool
-
-
-{-| Declares the character encoding of the page or script. Common values include:
-
- * UTF-8 - Character encoding for Unicode
- * ISO-8859-1 - Character encoding for the Latin alphabet
-
-For `meta` and `script`.
--}
-charset : String -> Attribute msg
-charset value =
- attribute "charset" value
-
-
-{-| A value associated with http-equiv or name depending on the context. For
-`meta`.
--}
-content : String -> Attribute msg
-content value =
- stringProperty "content" value
-
-
-{-| Indicates that a `script` should be executed after the page has been
-parsed.
--}
-defer : Bool -> Attribute msg
-defer bool =
- boolProperty "defer" bool
-
-
-{-| This attribute is an indicator that is paired with the `content` attribute,
-indicating what that content means. `httpEquiv` can take on three different
-values: content-type, default-style, or refresh. For `meta`.
--}
-httpEquiv : String -> Attribute msg
-httpEquiv value =
- stringProperty "httpEquiv" value
-
-
-{-| Defines the script language used in a `script`. -}
-language : String -> Attribute msg
-language value =
- stringProperty "language" value
-
-
-{-| Indicates that a `style` should only apply to its parent and all of the
-parents children.
--}
-scoped : Bool -> Attribute msg
-scoped bool =
- boolProperty "scoped" bool
-
-
-
--- EMBEDDED CONTENT
-
-
-{-| The URL of the embeddable content. For `audio`, `embed`, `iframe`, `img`,
-`input`, `script`, `source`, `track`, and `video`.
--}
-src : String -> Attribute msg
-src value =
- stringProperty "src" value
-
-
-{-| Declare the height of a `canvas`, `embed`, `iframe`, `img`, `input`,
-`object`, or `video`.
--}
-height : Int -> Attribute msg
-height value =
- attribute "height" (toString value)
-
-
-{-| Declare the width of a `canvas`, `embed`, `iframe`, `img`, `input`,
-`object`, or `video`.
--}
-width : Int -> Attribute msg
-width value =
- attribute "width" (toString value)
-
-
-{-| Alternative text in case an image can't be displayed. Works with `img`,
-`area`, and `input`.
--}
-alt : String -> Attribute msg
-alt value =
- stringProperty "alt" value
-
-
-
--- AUDIO and VIDEO
-
-
-{-| The `audio` or `video` should play as soon as possible. -}
-autoplay : Bool -> Attribute msg
-autoplay bool =
- boolProperty "autoplay" bool
-
-
-{-| Indicates whether the browser should show playback controls for the `audio`
-or `video`.
--}
-controls : Bool -> Attribute msg
-controls bool =
- boolProperty "controls" bool
-
-
-{-| Indicates whether the `audio` or `video` should start playing from the
-start when it's finished.
--}
-loop : Bool -> Attribute msg
-loop bool =
- boolProperty "loop" bool
-
-
-{-| Control how much of an `audio` or `video` resource should be preloaded. -}
-preload : String -> Attribute msg
-preload value =
- stringProperty "preload" value
-
-
-{-| A URL indicating a poster frame to show until the user plays or seeks the
-`video`.
--}
-poster : String -> Attribute msg
-poster value =
- stringProperty "poster" value
-
-
-{-| Indicates that the `track` should be enabled unless the user's preferences
-indicate something different.
--}
-default : Bool -> Attribute msg
-default bool =
- boolProperty "default" bool
-
-
-{-| Specifies the kind of text `track`. -}
-kind : String -> Attribute msg
-kind value =
- stringProperty "kind" value
-
-
-{-- TODO: maybe reintroduce once there's a better way to disambiguate imports
-{-| Specifies a user-readable title of the text `track`. -}
-label : String -> Attribute msg
-label value =
- stringProperty "label" value
---}
-
-{-| A two letter language code indicating the language of the `track` text data.
--}
-srclang : String -> Attribute msg
-srclang value =
- stringProperty "srclang" value
-
-
-
--- IFRAMES
-
-
-{-| A space separated list of security restrictions you'd like to lift for an
-`iframe`.
--}
-sandbox : String -> Attribute msg
-sandbox value =
- stringProperty "sandbox" value
-
-
-{-| Make an `iframe` look like part of the containing document. -}
-seamless : Bool -> Attribute msg
-seamless bool =
- boolProperty "seamless" bool
-
-
-{-| An HTML document that will be displayed as the body of an `iframe`. It will
-override the content of the `src` attribute if it has been specified.
--}
-srcdoc : String -> Attribute msg
-srcdoc value =
- stringProperty "srcdoc" value
-
-
-
--- INPUT
-
-
-{-| Defines the type of a `button`, `input`, `embed`, `object`, `script`,
-`source`, `style`, or `menu`.
--}
-type_ : String -> Attribute msg
-type_ value =
- stringProperty "type" value
-
-
-{-| Defines a default value which will be displayed in a `button`, `option`,
-`input`, `li`, `meter`, `progress`, or `param`.
--}
-value : String -> Attribute msg
-value value =
- stringProperty "value" value
-
-
-{-| Defines an initial value which will be displayed in an `input` when that
-`input` is added to the DOM. Unlike `value`, altering `defaultValue` after the
-`input` element has been added to the DOM has no effect.
--}
-defaultValue : String -> Attribute msg
-defaultValue value =
- stringProperty "defaultValue" value
-
-
-{-| Indicates whether an `input` of type checkbox is checked. -}
-checked : Bool -> Attribute msg
-checked bool =
- boolProperty "checked" bool
-
-
-{-| Provides a hint to the user of what can be entered into an `input` or
-`textarea`.
--}
-placeholder : String -> Attribute msg
-placeholder value =
- stringProperty "placeholder" value
-
-
-{-| Defines which `option` will be selected on page load. -}
-selected : Bool -> Attribute msg
-selected bool =
- boolProperty "selected" bool
-
-
-
--- INPUT HELPERS
-
-
-{-| List of types the server accepts, typically a file type.
-For `form` and `input`.
--}
-accept : String -> Attribute msg
-accept value =
- stringProperty "accept" value
-
-
-{-| List of supported charsets in a `form`.
--}
-acceptCharset : String -> Attribute msg
-acceptCharset value =
- stringProperty "acceptCharset" value
-
-
-{-| The URI of a program that processes the information submitted via a `form`.
--}
-action : String -> Attribute msg
-action value =
- stringProperty "action" value
-
-
-{-| Indicates whether a `form` or an `input` can have their values automatically
-completed by the browser.
--}
-autocomplete : Bool -> Attribute msg
-autocomplete bool =
- stringProperty "autocomplete" (if bool then "on" else "off")
-
-
-{-| The element should be automatically focused after the page loaded.
-For `button`, `input`, `keygen`, `select`, and `textarea`.
--}
-autofocus : Bool -> Attribute msg
-autofocus bool =
- boolProperty "autofocus" bool
-
-
-{-| Indicates whether the user can interact with a `button`, `fieldset`,
-`input`, `keygen`, `optgroup`, `option`, `select` or `textarea`.
--}
-disabled : Bool -> Attribute msg
-disabled bool =
- boolProperty "disabled" bool
-
-
-{-| How `form` data should be encoded when submitted with the POST method.
-Options include: application/x-www-form-urlencoded, multipart/form-data, and
-text/plain.
--}
-enctype : String -> Attribute msg
-enctype value =
- stringProperty "enctype" value
-
-
-{-| Indicates the action of an `input` or `button`. This overrides the action
-defined in the surrounding `form`.
--}
-formaction : String -> Attribute msg
-formaction value =
- attribute "formAction" value
-
-
-{-| Associates an `input` with a `datalist` tag. The datalist gives some
-pre-defined options to suggest to the user as they interact with an input.
-The value of the list attribute must match the id of a `datalist` node.
-For `input`.
--}
-list : String -> Attribute msg
-list value =
- attribute "list" value
-
-
-{-| Defines the minimum number of characters allowed in an `input` or
-`textarea`.
--}
-minlength : Int -> Attribute msg
-minlength n =
- attribute "minLength" (toString n)
-
-
-{-| Defines the maximum number of characters allowed in an `input` or
-`textarea`.
--}
-maxlength : Int -> Attribute msg
-maxlength n =
- attribute "maxlength" (toString n)
-
-
-{-| Defines which HTTP method to use when submitting a `form`. Can be GET
-(default) or POST.
--}
-method : String -> Attribute msg
-method value =
- stringProperty "method" value
-
-
-{-| Indicates whether multiple values can be entered in an `input` of type
-email or file. Can also indicate that you can `select` many options.
--}
-multiple : Bool -> Attribute msg
-multiple bool =
- boolProperty "multiple" bool
-
-
-{-| Name of the element. For example used by the server to identify the fields
-in form submits. For `button`, `form`, `fieldset`, `iframe`, `input`, `keygen`,
-`object`, `output`, `select`, `textarea`, `map`, `meta`, and `param`.
--}
-name : String -> Attribute msg
-name value =
- stringProperty "name" value
-
-
-{-| This attribute indicates that a `form` shouldn't be validated when
-submitted.
--}
-novalidate : Bool -> Attribute msg
-novalidate bool =
- boolProperty "noValidate" bool
-
-
-{-| Defines a regular expression which an `input`'s value will be validated
-against.
--}
-pattern : String -> Attribute msg
-pattern value =
- stringProperty "pattern" value
-
-
-{-| Indicates whether an `input` or `textarea` can be edited. -}
-readonly : Bool -> Attribute msg
-readonly bool =
- boolProperty "readOnly" bool
-
-
-{-| Indicates whether this element is required to fill out or not.
-For `input`, `select`, and `textarea`.
--}
-required : Bool -> Attribute msg
-required bool =
- boolProperty "required" bool
-
-
-{-| For `input` specifies the width of an input in characters.
-
-For `select` specifies the number of visible options in a drop-down list.
--}
-size : Int -> Attribute msg
-size n =
- attribute "size" (toString n)
-
-
-{-| The element ID described by this `label` or the element IDs that are used
-for an `output`.
--}
-for : String -> Attribute msg
-for value =
- stringProperty "htmlFor" value
-
-
-{-| Indicates the element ID of the `form` that owns this particular `button`,
-`fieldset`, `input`, `keygen`, `label`, `meter`, `object`, `output`,
-`progress`, `select`, or `textarea`.
--}
-form : String -> Attribute msg
-form value =
- attribute "form" value
-
-
-
--- RANGES
-
-
-{-| Indicates the maximum value allowed. When using an input of type number or
-date, the max value must be a number or date. For `input`, `meter`, and `progress`.
--}
-max : String -> Attribute msg
-max value =
- stringProperty "max" value
-
-
-{-| Indicates the minimum value allowed. When using an input of type number or
-date, the min value must be a number or date. For `input` and `meter`.
--}
-min : String -> Attribute msg
-min value =
- stringProperty "min" value
-
-
-{-| Add a step size to an `input`. Use `step "any"` to allow any floating-point
-number to be used in the input.
--}
-step : String -> Attribute msg
-step n =
- stringProperty "step" n
-
-
---------------------------
-
-
-{-| Defines the number of columns in a `textarea`. -}
-cols : Int -> Attribute msg
-cols n =
- attribute "cols" (toString n)
-
-
-{-| Defines the number of rows in a `textarea`. -}
-rows : Int -> Attribute msg
-rows n =
- attribute "rows" (toString n)
-
-
-{-| Indicates whether the text should be wrapped in a `textarea`. Possible
-values are "hard" and "soft".
--}
-wrap : String -> Attribute msg
-wrap value =
- stringProperty "wrap" value
-
-
-
--- MAPS
-
-
-{-| When an `img` is a descendent of an `a` tag, the `ismap` attribute
-indicates that the click location should be added to the parent `a`'s href as
-a query string.
--}
-ismap : Bool -> Attribute msg
-ismap value =
- boolProperty "isMap" value
-
-
-{-| Specify the hash name reference of a `map` that should be used for an `img`
-or `object`. A hash name reference is a hash symbol followed by the element's name or id.
-E.g. `"#planet-map"`.
--}
-usemap : String -> Attribute msg
-usemap value =
- stringProperty "useMap" value
-
-
-{-| Declare the shape of the clickable area in an `a` or `area`. Valid values
-include: default, rect, circle, poly. This attribute can be paired with
-`coords` to create more particular shapes.
--}
-shape : String -> Attribute msg
-shape value =
- stringProperty "shape" value
-
-
-{-| A set of values specifying the coordinates of the hot-spot region in an
-`area`. Needs to be paired with a `shape` attribute to be meaningful.
--}
-coords : String -> Attribute msg
-coords value =
- stringProperty "coords" value
-
-
-
--- KEY GEN
-
-
-{-| A challenge string that is submitted along with the public key in a `keygen`.
--}
-challenge : String -> Attribute msg
-challenge value =
- attribute "challenge" value
-
-
-{-| Specifies the type of key generated by a `keygen`. Possible values are:
-rsa, dsa, and ec.
--}
-keytype : String -> Attribute msg
-keytype value =
- stringProperty "keytype" value
-
-
-
--- REAL STUFF
-
-
-{-| Specifies the horizontal alignment of a `caption`, `col`, `colgroup`,
-`hr`, `iframe`, `img`, `table`, `tbody`, `td`, `tfoot`, `th`, `thead`, or
-`tr`.
--}
-align : String -> Attribute msg
-align value =
- stringProperty "align" value
-
-
-{-| Contains a URI which points to the source of the quote or change in a
-`blockquote`, `del`, `ins`, or `q`.
--}
-cite : String -> Attribute msg
-cite value =
- stringProperty "cite" value
-
-
-
-
--- LINKS AND AREAS
-
-
-{-| The URL of a linked resource, such as `a`, `area`, `base`, or `link`. -}
-href : String -> Attribute msg
-href value =
- stringProperty "href" value
-
-
-{-| Specify where the results of clicking an `a`, `area`, `base`, or `form`
-should appear. Possible special values include:
-
- * _blank — a new window or tab
- * _self — the same frame (this is default)
- * _parent — the parent frame
- * _top — the full body of the window
-
-You can also give the name of any `frame` you have created.
--}
-target : String -> Attribute msg
-target value =
- stringProperty "target" value
-
-
-{-| Indicates that clicking an `a` and `area` will download the resource
-directly.
--}
-download : Bool -> Attribute msg
-download bool =
- boolProperty "download" bool
-
-
-{-| Indicates that clicking an `a` and `area` will download the resource
-directly, and that the downloaded resource with have the given filename.
--}
-downloadAs : String -> Attribute msg
-downloadAs value =
- stringProperty "download" value
-
-
-{-| Two-letter language code of the linked resource of an `a`, `area`, or `link`.
--}
-hreflang : String -> Attribute msg
-hreflang value =
- stringProperty "hreflang" value
-
-
-{-| Specifies a hint of the target media of a `a`, `area`, `link`, `source`,
-or `style`.
--}
-media : String -> Attribute msg
-media value =
- attribute "media" value
-
-
-{-| Specify a URL to send a short POST request to when the user clicks on an
-`a` or `area`. Useful for monitoring and tracking.
--}
-ping : String -> Attribute msg
-ping value =
- stringProperty "ping" value
-
-
-{-| Specifies the relationship of the target object to the link object.
-For `a`, `area`, `link`.
--}
-rel : String -> Attribute msg
-rel value =
- attribute "rel" value
-
-
-
--- CRAZY STUFF
-
-
-{-| Indicates the date and time associated with the element.
-For `del`, `ins`, `time`.
--}
-datetime : String -> Attribute msg
-datetime value =
- attribute "datetime" value
-
-
-{-| Indicates whether this date and time is the date of the nearest `article`
-ancestor element. For `time`.
--}
-pubdate : String -> Attribute msg
-pubdate value =
- attribute "pubdate" value
-
-
-
--- ORDERED LISTS
-
-
-{-| Indicates whether an ordered list `ol` should be displayed in a descending
-order instead of a ascending.
--}
-reversed : Bool -> Attribute msg
-reversed bool =
- boolProperty "reversed" bool
-
-
-{-| Defines the first number of an ordered list if you want it to be something
-besides 1.
--}
-start : Int -> Attribute msg
-start n =
- stringProperty "start" (toString n)
-
-
-
--- TABLES
-
-
-{-| The colspan attribute defines the number of columns a cell should span.
-For `td` and `th`.
--}
-colspan : Int -> Attribute msg
-colspan n =
- attribute "colspan" (toString n)
-
-
-{-| A space separated list of element IDs indicating which `th` elements are
-headers for this cell. For `td` and `th`.
--}
-headers : String -> Attribute msg
-headers value =
- stringProperty "headers" value
-
-
-{-| Defines the number of rows a table cell should span over.
-For `td` and `th`.
--}
-rowspan : Int -> Attribute msg
-rowspan n =
- attribute "rowspan" (toString n)
-
-
-{-| Specifies the scope of a header cell `th`. Possible values are: col, row,
-colgroup, rowgroup.
--}
-scope : String -> Attribute msg
-scope value =
- stringProperty "scope" value
-
-
-{-| Specifies the URL of the cache manifest for an `html` tag. -}
-manifest : String -> Attribute msg
-manifest value =
- attribute "manifest" value
-
-
-{-- TODO: maybe reintroduce once there's a better way to disambiguate imports
-{-| The number of columns a `col` or `colgroup` should span. -}
-span : Int -> Attribute msg
-span n =
- stringProperty "span" (toString n)
---}
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Events.elm b/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Events.elm
deleted file mode 100644
index ff5c1fe..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Events.elm
+++ /dev/null
@@ -1,269 +0,0 @@
-module Html.Events exposing
- ( onClick, onDoubleClick
- , onMouseDown, onMouseUp
- , onMouseEnter, onMouseLeave
- , onMouseOver, onMouseOut
- , onInput, onCheck, onSubmit
- , onBlur, onFocus
- , on, onWithOptions, Options, defaultOptions
- , targetValue, targetChecked, keyCode
- )
-
-{-|
-It is often helpful to create an [Union Type][] so you can have many different kinds
-of events as seen in the [TodoMVC][] example.
-
-[Union Type]: http://elm-lang.org/learn/Union-Types.elm
-[TodoMVC]: https://github.com/evancz/elm-todomvc/blob/master/Todo.elm
-
-# Mouse Helpers
-@docs onClick, onDoubleClick,
- onMouseDown, onMouseUp,
- onMouseEnter, onMouseLeave,
- onMouseOver, onMouseOut
-
-# Form Helpers
-@docs onInput, onCheck, onSubmit
-
-# Focus Helpers
-@docs onBlur, onFocus
-
-# Custom Event Handlers
-@docs on, onWithOptions, Options, defaultOptions
-
-# Custom Decoders
-@docs targetValue, targetChecked, keyCode
--}
-
-import Html exposing (Attribute)
-import Json.Decode as Json
-import VirtualDom
-
-
-
--- MOUSE EVENTS
-
-
-{-|-}
-onClick : msg -> Attribute msg
-onClick msg =
- on "click" (Json.succeed msg)
-
-
-{-|-}
-onDoubleClick : msg -> Attribute msg
-onDoubleClick msg =
- on "dblclick" (Json.succeed msg)
-
-
-{-|-}
-onMouseDown : msg -> Attribute msg
-onMouseDown msg =
- on "mousedown" (Json.succeed msg)
-
-
-{-|-}
-onMouseUp : msg -> Attribute msg
-onMouseUp msg =
- on "mouseup" (Json.succeed msg)
-
-
-{-|-}
-onMouseEnter : msg -> Attribute msg
-onMouseEnter msg =
- on "mouseenter" (Json.succeed msg)
-
-
-{-|-}
-onMouseLeave : msg -> Attribute msg
-onMouseLeave msg =
- on "mouseleave" (Json.succeed msg)
-
-
-{-|-}
-onMouseOver : msg -> Attribute msg
-onMouseOver msg =
- on "mouseover" (Json.succeed msg)
-
-
-{-|-}
-onMouseOut : msg -> Attribute msg
-onMouseOut msg =
- on "mouseout" (Json.succeed msg)
-
-
-
--- FORM EVENTS
-
-
-{-| Capture [input](https://developer.mozilla.org/en-US/docs/Web/Events/input)
-events for things like text fields or text areas.
-
-It grabs the **string** value at `event.target.value`, so it will not work if
-you need some other type of information. For example, if you want to track
-inputs on a range slider, make a custom handler with [`on`](#on).
-
-For more details on how `onInput` works, check out [targetValue](#targetValue).
--}
-onInput : (String -> msg) -> Attribute msg
-onInput tagger =
- on "input" (Json.map tagger targetValue)
-
-
-{-| Capture [change](https://developer.mozilla.org/en-US/docs/Web/Events/change)
-events on checkboxes. It will grab the boolean value from `event.target.checked`
-on any input event.
-
-Check out [targetChecked](#targetChecked) for more details on how this works.
--}
-onCheck : (Bool -> msg) -> Attribute msg
-onCheck tagger =
- on "change" (Json.map tagger targetChecked)
-
-
-{-| Capture a [submit](https://developer.mozilla.org/en-US/docs/Web/Events/submit)
-event with [`preventDefault`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)
-in order to prevent the form from changing the page’s location. If you need
-different behavior, use `onWithOptions` to create a customized version of
-`onSubmit`.
--}
-onSubmit : msg -> Attribute msg
-onSubmit msg =
- onWithOptions "submit" onSubmitOptions (Json.succeed msg)
-
-
-onSubmitOptions : Options
-onSubmitOptions =
- { defaultOptions | preventDefault = True }
-
-
--- FOCUS EVENTS
-
-
-{-|-}
-onBlur : msg -> Attribute msg
-onBlur msg =
- on "blur" (Json.succeed msg)
-
-
-{-|-}
-onFocus : msg -> Attribute msg
-onFocus msg =
- on "focus" (Json.succeed msg)
-
-
-
--- CUSTOM EVENTS
-
-
-{-| Create a custom event listener. Normally this will not be necessary, but
-you have the power! Here is how `onClick` is defined for example:
-
- import Json.Decode as Json
-
- onClick : msg -> Attribute msg
- onClick message =
- on "click" (Json.succeed message)
-
-The first argument is the event name in the same format as with JavaScript's
-[`addEventListener`][aEL] function.
-
-The second argument is a JSON decoder. Read more about these [here][decoder].
-When an event occurs, the decoder tries to turn the event object into an Elm
-value. If successful, the value is routed to your `update` function. In the
-case of `onClick` we always just succeed with the given `message`.
-
-If this is confusing, work through the [Elm Architecture Tutorial][tutorial].
-It really does help!
-
-[aEL]: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
-[decoder]: http://package.elm-lang.org/packages/elm-lang/core/latest/Json-Decode
-[tutorial]: https://github.com/evancz/elm-architecture-tutorial/
--}
-on : String -> Json.Decoder msg -> Attribute msg
-on =
- VirtualDom.on
-
-
-{-| Same as `on` but you can set a few options.
--}
-onWithOptions : String -> Options -> Json.Decoder msg -> Attribute msg
-onWithOptions =
- VirtualDom.onWithOptions
-
-
-{-| Options for an event listener. If `stopPropagation` is true, it means the
-event stops traveling through the DOM so it will not trigger any other event
-listeners. If `preventDefault` is true, any built-in browser behavior related
-to the event is prevented. For example, this is used with touch events when you
-want to treat them as gestures of your own, not as scrolls.
--}
-type alias Options =
- { stopPropagation : Bool
- , preventDefault : Bool
- }
-
-
-{-| Everything is `False` by default.
-
- defaultOptions =
- { stopPropagation = False
- , preventDefault = False
- }
--}
-defaultOptions : Options
-defaultOptions =
- VirtualDom.defaultOptions
-
-
-
--- COMMON DECODERS
-
-
-{-| A `Json.Decoder` for grabbing `event.target.value`. We use this to define
-`onInput` as follows:
-
- import Json.Decode as Json
-
- onInput : (String -> msg) -> Attribute msg
- onInput tagger =
- on "input" (Json.map tagger targetValue)
-
-You probably will never need this, but hopefully it gives some insights into
-how to make custom event handlers.
--}
-targetValue : Json.Decoder String
-targetValue =
- Json.at ["target", "value"] Json.string
-
-
-{-| A `Json.Decoder` for grabbing `event.target.checked`. We use this to define
-`onCheck` as follows:
-
- import Json.Decode as Json
-
- onCheck : (Bool -> msg) -> Attribute msg
- onCheck tagger =
- on "input" (Json.map tagger targetChecked)
--}
-targetChecked : Json.Decoder Bool
-targetChecked =
- Json.at ["target", "checked"] Json.bool
-
-
-{-| A `Json.Decoder` for grabbing `event.keyCode`. This helps you define
-keyboard listeners like this:
-
- import Json.Decode as Json
-
- onKeyUp : (Int -> msg) -> Attribute msg
- onKeyUp tagger =
- on "keyup" (Json.map tagger keyCode)
-
-**Note:** It looks like the spec is moving away from `event.keyCode` and
-towards `event.key`. Once this is supported in more browsers, we may add
-helpers here for `onKeyUp`, `onKeyDown`, `onKeyPress`, etc.
--}
-keyCode : Json.Decoder Int
-keyCode =
- Json.field "keyCode" Json.int
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Keyed.elm b/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Keyed.elm
deleted file mode 100644
index debd710..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Keyed.elm
+++ /dev/null
@@ -1,48 +0,0 @@
-module Html.Keyed exposing
- ( node
- , ol
- , ul
- )
-{-| A keyed node helps optimize cases where children are getting added, moved,
-removed, etc. Common examples include:
-
- - The user can delete items from a list.
- - The user can create new items in a list.
- - You can sort a list based on name or date or whatever.
-
-When you use a keyed node, every child is paired with a string identifier. This
-makes it possible for the underlying diffing algorithm to reuse nodes more
-efficiently.
-
-# Keyed Nodes
-@docs node
-
-# Commonly Keyed Nodes
-@docs ol, ul
--}
-
-
-import Html exposing (Attribute, Html)
-import VirtualDom
-
-
-{-| Works just like `Html.node`, but you add a unique identifier to each child
-node. You want this when you have a list of nodes that is changing: adding
-nodes, removing nodes, etc. In these cases, the unique identifiers help make
-the DOM modifications more efficient.
--}
-node : String -> List (Attribute msg) -> List ( String, Html msg ) -> Html msg
-node =
- VirtualDom.keyedNode
-
-
-{-|-}
-ol : List (Attribute msg) -> List ( String, Html msg ) -> Html msg
-ol =
- node "ol"
-
-
-{-|-}
-ul : List (Attribute msg) -> List ( String, Html msg ) -> Html msg
-ul =
- node "ul"
diff --git a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Lazy.elm b/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Lazy.elm
deleted file mode 100644
index f027ffc..0000000
--- a/server/elm-stuff/packages/elm-lang/html/2.0.0/src/Html/Lazy.elm
+++ /dev/null
@@ -1,48 +0,0 @@
-module Html.Lazy exposing
- ( lazy, lazy2, lazy3
- )
-
-{-| Since all Elm functions are pure we have a guarantee that the same input
-will always result in the same output. This module gives us tools to be lazy
-about building `Html` that utilize this fact.
-
-Rather than immediately applying functions to their arguments, the `lazy`
-functions just bundle the function and arguments up for later. When diffing
-the old and new virtual DOM, it checks to see if all the arguments are equal.
-If so, it skips calling the function!
-
-This is a really cheap test and often makes things a lot faster, but definitely
-benchmark to be sure!
-
-@docs lazy, lazy2, lazy3
--}
-
-import Html exposing (Html)
-import VirtualDom
-
-
-{-| A performance optimization that delays the building of virtual DOM nodes.
-
-Calling `(view model)` will definitely build some virtual DOM, perhaps a lot of
-it. Calling `(lazy view model)` delays the call until later. During diffing, we
-can check to see if `model` is referentially equal to the previous value used,
-and if so, we just stop. No need to build up the tree structure and diff it,
-we know if the input to `view` is the same, the output must be the same!
--}
-lazy : (a -> Html msg) -> a -> Html msg
-lazy =
- VirtualDom.lazy
-
-
-{-| Same as `lazy` but checks on two arguments.
--}
-lazy2 : (a -> b -> Html msg) -> a -> b -> Html msg
-lazy2 =
- VirtualDom.lazy2
-
-
-{-| Same as `lazy` but checks on three arguments.
--}
-lazy3 : (a -> b -> c -> Html msg) -> a -> b -> c -> Html msg
-lazy3 =
- VirtualDom.lazy3
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.gitignore b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.gitignore
deleted file mode 100644
index f6a4e83..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-node_modules
-elm-stuff
-tests/build
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.travis.yml b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.travis.yml
deleted file mode 100644
index d16a59a..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-sudo: false
-language: none
-install:
- - npm install --global elm@0.16.0
- - npm install
-
-script:
- - ./tests/run-tests.sh
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/LICENSE b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/LICENSE
deleted file mode 100644
index 0edfd04..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2016-present, Evan Czaplicki
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * Neither the name of Evan Czaplicki nor the names of other
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/README.md b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/README.md
deleted file mode 100644
index 0ff727c..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Virtual DOM for Elm
-
-A virtual DOM implementation that backs Elm's core libraries for [HTML](http://package.elm-lang.org/packages/elm-lang/html/latest/) and [SVG](http://package.elm-lang.org/packages/elm-lang/svg/latest/). You should almost certainly use those higher-level libraries directly.
-
-It is pretty fast! You can read about that [here](http://elm-lang.org/blog/blazing-fast-html-round-two).
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/elm-package.json b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/elm-package.json
deleted file mode 100644
index 353986f..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/elm-package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "version": "2.0.4",
- "summary": "Core virtual DOM implementation, basis for HTML and SVG libraries",
- "repository": "https://github.com/elm-lang/virtual-dom.git",
- "license": "BSD3",
- "source-directories": [
- "src"
- ],
- "exposed-modules": [
- "VirtualDom"
- ],
- "native-modules": true,
- "dependencies": {
- "elm-lang/core": "5.0.0 <= v < 6.0.0"
- },
- "elm-version": "0.18.0 <= v < 0.19.0"
-}
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/Debug.js b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/Debug.js
deleted file mode 100644
index 729f171..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/Debug.js
+++ /dev/null
@@ -1,280 +0,0 @@
-var _elm_lang$virtual_dom$Native_Debug = function() {
-
-
-// IMPORT / EXPORT
-
-function unsafeCoerce(value)
-{
- return value;
-}
-
-var upload = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
-{
- var element = document.createElement('input');
- element.setAttribute('type', 'file');
- element.setAttribute('accept', 'text/json');
- element.style.display = 'none';
- element.addEventListener('change', function(event)
- {
- var fileReader = new FileReader();
- fileReader.onload = function(e)
- {
- callback(_elm_lang$core$Native_Scheduler.succeed(e.target.result));
- };
- fileReader.readAsText(event.target.files[0]);
- document.body.removeChild(element);
- });
- document.body.appendChild(element);
- element.click();
-});
-
-function download(historyLength, json)
-{
- return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
- {
- var fileName = 'history-' + historyLength + '.txt';
- var jsonString = JSON.stringify(json);
- var mime = 'text/plain;charset=utf-8';
- var done = _elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0);
-
- // for IE10+
- if (navigator.msSaveBlob)
- {
- navigator.msSaveBlob(new Blob([jsonString], {type: mime}), fileName);
- return callback(done);
- }
-
- // for HTML5
- var element = document.createElement('a');
- element.setAttribute('href', 'data:' + mime + ',' + encodeURIComponent(jsonString));
- element.setAttribute('download', fileName);
- element.style.display = 'none';
- document.body.appendChild(element);
- element.click();
- document.body.removeChild(element);
- callback(done);
- });
-}
-
-
-// POPOUT
-
-function messageToString(value)
-{
- switch (typeof value)
- {
- case 'boolean':
- return value ? 'True' : 'False';
- case 'number':
- return value + '';
- case 'string':
- return '"' + addSlashes(value, false) + '"';
- }
- if (value instanceof String)
- {
- return '\'' + addSlashes(value, true) + '\'';
- }
- if (typeof value !== 'object' || value === null || !('ctor' in value))
- {
- return '…';
- }
-
- var ctorStarter = value.ctor.substring(0, 5);
- if (ctorStarter === '_Tupl' || ctorStarter === '_Task')
- {
- return '…'
- }
- if (['_Array', '', '_Process', '::', '[]', 'Set_elm_builtin', 'RBNode_elm_builtin', 'RBEmpty_elm_builtin'].indexOf(value.ctor) >= 0)
- {
- return '…';
- }
-
- var keys = Object.keys(value);
- switch (keys.length)
- {
- case 1:
- return value.ctor;
- case 2:
- return value.ctor + ' ' + messageToString(value._0);
- default:
- return value.ctor + ' … ' + messageToString(value[keys[keys.length - 1]]);
- }
-}
-
-
-function primitive(str)
-{
- return { ctor: 'Primitive', _0: str };
-}
-
-
-function init(value)
-{
- var type = typeof value;
-
- if (type === 'boolean')
- {
- return {
- ctor: 'Constructor',
- _0: _elm_lang$core$Maybe$Just(value ? 'True' : 'False'),
- _1: true,
- _2: _elm_lang$core$Native_List.Nil
- };
- }
-
- if (type === 'number')
- {
- return primitive(value + '');
- }
-
- if (type === 'string')
- {
- return { ctor: 'S', _0: '"' + addSlashes(value, false) + '"' };
- }
-
- if (value instanceof String)
- {
- return { ctor: 'S', _0: "'" + addSlashes(value, true) + "'" };
- }
-
- if (value instanceof Date)
- {
- return primitive('<' + value.toString() + '>');
- }
-
- if (value === null)
- {
- return primitive('XXX');
- }
-
- if (type === 'object' && 'ctor' in value)
- {
- var ctor = value.ctor;
-
- if (ctor === '::' || ctor === '[]')
- {
- return {
- ctor: 'Sequence',
- _0: {ctor: 'ListSeq'},
- _1: true,
- _2: A2(_elm_lang$core$List$map, init, value)
- };
- }
-
- if (ctor === 'Set_elm_builtin')
- {
- return {
- ctor: 'Sequence',
- _0: {ctor: 'SetSeq'},
- _1: true,
- _2: A3(_elm_lang$core$Set$foldr, initCons, _elm_lang$core$Native_List.Nil, value)
- };
- }
-
- if (ctor === 'RBNode_elm_builtin' || ctor == 'RBEmpty_elm_builtin')
- {
- return {
- ctor: 'Dictionary',
- _0: true,
- _1: A3(_elm_lang$core$Dict$foldr, initKeyValueCons, _elm_lang$core$Native_List.Nil, value)
- };
- }
-
- if (ctor === '_Array')
- {
- return {
- ctor: 'Sequence',
- _0: {ctor: 'ArraySeq'},
- _1: true,
- _2: A3(_elm_lang$core$Array$foldr, initCons, _elm_lang$core$Native_List.Nil, value)
- };
- }
-
- var ctorStarter = value.ctor.substring(0, 5);
- if (ctorStarter === '_Task')
- {
- return primitive('');
- }
-
- if (ctor === '')
- {
- return primitive(ctor);
- }
-
- if (ctor === '_Process')
- {
- return primitive('');
- }
-
- var list = _elm_lang$core$Native_List.Nil;
- for (var i in value)
- {
- if (i === 'ctor') continue;
- list = _elm_lang$core$Native_List.Cons(init(value[i]), list);
- }
- return {
- ctor: 'Constructor',
- _0: ctorStarter === '_Tupl' ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(ctor),
- _1: true,
- _2: _elm_lang$core$List$reverse(list)
- };
- }
-
- if (type === 'object')
- {
- var dict = _elm_lang$core$Dict$empty;
- for (var i in value)
- {
- dict = A3(_elm_lang$core$Dict$insert, i, init(value[i]), dict);
- }
- return { ctor: 'Record', _0: true, _1: dict };
- }
-
- return primitive('XXX');
-}
-
-var initCons = F2(initConsHelp);
-
-function initConsHelp(value, list)
-{
- return _elm_lang$core$Native_List.Cons(init(value), list);
-}
-
-var initKeyValueCons = F3(initKeyValueConsHelp);
-
-function initKeyValueConsHelp(key, value, list)
-{
- return _elm_lang$core$Native_List.Cons(
- _elm_lang$core$Native_Utils.Tuple2(init(key), init(value)),
- list
- );
-}
-
-function addSlashes(str, isChar)
-{
- var s = str.replace(/\\/g, '\\\\')
- .replace(/\n/g, '\\n')
- .replace(/\t/g, '\\t')
- .replace(/\r/g, '\\r')
- .replace(/\v/g, '\\v')
- .replace(/\0/g, '\\0');
- if (isChar)
- {
- return s.replace(/\'/g, '\\\'');
- }
- else
- {
- return s.replace(/\"/g, '\\"');
- }
-}
-
-
-return {
- upload: upload,
- download: F2(download),
- unsafeCoerce: unsafeCoerce,
- messageToString: messageToString,
- init: init
-}
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/VirtualDom.js b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/VirtualDom.js
deleted file mode 100644
index 98d4750..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/Native/VirtualDom.js
+++ /dev/null
@@ -1,1881 +0,0 @@
-var _elm_lang$virtual_dom$VirtualDom_Debug$wrap;
-var _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags;
-
-var _elm_lang$virtual_dom$Native_VirtualDom = function() {
-
-var STYLE_KEY = 'STYLE';
-var EVENT_KEY = 'EVENT';
-var ATTR_KEY = 'ATTR';
-var ATTR_NS_KEY = 'ATTR_NS';
-
-var localDoc = typeof document !== 'undefined' ? document : {};
-
-
-//////////// VIRTUAL DOM NODES ////////////
-
-
-function text(string)
-{
- return {
- type: 'text',
- text: string
- };
-}
-
-
-function node(tag)
-{
- return F2(function(factList, kidList) {
- return nodeHelp(tag, factList, kidList);
- });
-}
-
-
-function nodeHelp(tag, factList, kidList)
-{
- var organized = organizeFacts(factList);
- var namespace = organized.namespace;
- var facts = organized.facts;
-
- var children = [];
- var descendantsCount = 0;
- while (kidList.ctor !== '[]')
- {
- var kid = kidList._0;
- descendantsCount += (kid.descendantsCount || 0);
- children.push(kid);
- kidList = kidList._1;
- }
- descendantsCount += children.length;
-
- return {
- type: 'node',
- tag: tag,
- facts: facts,
- children: children,
- namespace: namespace,
- descendantsCount: descendantsCount
- };
-}
-
-
-function keyedNode(tag, factList, kidList)
-{
- var organized = organizeFacts(factList);
- var namespace = organized.namespace;
- var facts = organized.facts;
-
- var children = [];
- var descendantsCount = 0;
- while (kidList.ctor !== '[]')
- {
- var kid = kidList._0;
- descendantsCount += (kid._1.descendantsCount || 0);
- children.push(kid);
- kidList = kidList._1;
- }
- descendantsCount += children.length;
-
- return {
- type: 'keyed-node',
- tag: tag,
- facts: facts,
- children: children,
- namespace: namespace,
- descendantsCount: descendantsCount
- };
-}
-
-
-function custom(factList, model, impl)
-{
- var facts = organizeFacts(factList).facts;
-
- return {
- type: 'custom',
- facts: facts,
- model: model,
- impl: impl
- };
-}
-
-
-function map(tagger, node)
-{
- return {
- type: 'tagger',
- tagger: tagger,
- node: node,
- descendantsCount: 1 + (node.descendantsCount || 0)
- };
-}
-
-
-function thunk(func, args, thunk)
-{
- return {
- type: 'thunk',
- func: func,
- args: args,
- thunk: thunk,
- node: undefined
- };
-}
-
-function lazy(fn, a)
-{
- return thunk(fn, [a], function() {
- return fn(a);
- });
-}
-
-function lazy2(fn, a, b)
-{
- return thunk(fn, [a,b], function() {
- return A2(fn, a, b);
- });
-}
-
-function lazy3(fn, a, b, c)
-{
- return thunk(fn, [a,b,c], function() {
- return A3(fn, a, b, c);
- });
-}
-
-
-
-// FACTS
-
-
-function organizeFacts(factList)
-{
- var namespace, facts = {};
-
- while (factList.ctor !== '[]')
- {
- var entry = factList._0;
- var key = entry.key;
-
- if (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY)
- {
- var subFacts = facts[key] || {};
- subFacts[entry.realKey] = entry.value;
- facts[key] = subFacts;
- }
- else if (key === STYLE_KEY)
- {
- var styles = facts[key] || {};
- var styleList = entry.value;
- while (styleList.ctor !== '[]')
- {
- var style = styleList._0;
- styles[style._0] = style._1;
- styleList = styleList._1;
- }
- facts[key] = styles;
- }
- else if (key === 'namespace')
- {
- namespace = entry.value;
- }
- else if (key === 'className')
- {
- var classes = facts[key];
- facts[key] = typeof classes === 'undefined'
- ? entry.value
- : classes + ' ' + entry.value;
- }
- else
- {
- facts[key] = entry.value;
- }
- factList = factList._1;
- }
-
- return {
- facts: facts,
- namespace: namespace
- };
-}
-
-
-
-//////////// PROPERTIES AND ATTRIBUTES ////////////
-
-
-function style(value)
-{
- return {
- key: STYLE_KEY,
- value: value
- };
-}
-
-
-function property(key, value)
-{
- return {
- key: key,
- value: value
- };
-}
-
-
-function attribute(key, value)
-{
- return {
- key: ATTR_KEY,
- realKey: key,
- value: value
- };
-}
-
-
-function attributeNS(namespace, key, value)
-{
- return {
- key: ATTR_NS_KEY,
- realKey: key,
- value: {
- value: value,
- namespace: namespace
- }
- };
-}
-
-
-function on(name, options, decoder)
-{
- return {
- key: EVENT_KEY,
- realKey: name,
- value: {
- options: options,
- decoder: decoder
- }
- };
-}
-
-
-function equalEvents(a, b)
-{
- if (a.options !== b.options)
- {
- if (a.options.stopPropagation !== b.options.stopPropagation || a.options.preventDefault !== b.options.preventDefault)
- {
- return false;
- }
- }
- return _elm_lang$core$Native_Json.equality(a.decoder, b.decoder);
-}
-
-
-function mapProperty(func, property)
-{
- if (property.key !== EVENT_KEY)
- {
- return property;
- }
- return on(
- property.realKey,
- property.value.options,
- A2(_elm_lang$core$Json_Decode$map, func, property.value.decoder)
- );
-}
-
-
-//////////// RENDER ////////////
-
-
-function render(vNode, eventNode)
-{
- switch (vNode.type)
- {
- case 'thunk':
- if (!vNode.node)
- {
- vNode.node = vNode.thunk();
- }
- return render(vNode.node, eventNode);
-
- case 'tagger':
- var subNode = vNode.node;
- var tagger = vNode.tagger;
-
- while (subNode.type === 'tagger')
- {
- typeof tagger !== 'object'
- ? tagger = [tagger, subNode.tagger]
- : tagger.push(subNode.tagger);
-
- subNode = subNode.node;
- }
-
- var subEventRoot = { tagger: tagger, parent: eventNode };
- var domNode = render(subNode, subEventRoot);
- domNode.elm_event_node_ref = subEventRoot;
- return domNode;
-
- case 'text':
- return localDoc.createTextNode(vNode.text);
-
- case 'node':
- var domNode = vNode.namespace
- ? localDoc.createElementNS(vNode.namespace, vNode.tag)
- : localDoc.createElement(vNode.tag);
-
- applyFacts(domNode, eventNode, vNode.facts);
-
- var children = vNode.children;
-
- for (var i = 0; i < children.length; i++)
- {
- domNode.appendChild(render(children[i], eventNode));
- }
-
- return domNode;
-
- case 'keyed-node':
- var domNode = vNode.namespace
- ? localDoc.createElementNS(vNode.namespace, vNode.tag)
- : localDoc.createElement(vNode.tag);
-
- applyFacts(domNode, eventNode, vNode.facts);
-
- var children = vNode.children;
-
- for (var i = 0; i < children.length; i++)
- {
- domNode.appendChild(render(children[i]._1, eventNode));
- }
-
- return domNode;
-
- case 'custom':
- var domNode = vNode.impl.render(vNode.model);
- applyFacts(domNode, eventNode, vNode.facts);
- return domNode;
- }
-}
-
-
-
-//////////// APPLY FACTS ////////////
-
-
-function applyFacts(domNode, eventNode, facts)
-{
- for (var key in facts)
- {
- var value = facts[key];
-
- switch (key)
- {
- case STYLE_KEY:
- applyStyles(domNode, value);
- break;
-
- case EVENT_KEY:
- applyEvents(domNode, eventNode, value);
- break;
-
- case ATTR_KEY:
- applyAttrs(domNode, value);
- break;
-
- case ATTR_NS_KEY:
- applyAttrsNS(domNode, value);
- break;
-
- case 'value':
- if (domNode[key] !== value)
- {
- domNode[key] = value;
- }
- break;
-
- default:
- domNode[key] = value;
- break;
- }
- }
-}
-
-function applyStyles(domNode, styles)
-{
- var domNodeStyle = domNode.style;
-
- for (var key in styles)
- {
- domNodeStyle[key] = styles[key];
- }
-}
-
-function applyEvents(domNode, eventNode, events)
-{
- var allHandlers = domNode.elm_handlers || {};
-
- for (var key in events)
- {
- var handler = allHandlers[key];
- var value = events[key];
-
- if (typeof value === 'undefined')
- {
- domNode.removeEventListener(key, handler);
- allHandlers[key] = undefined;
- }
- else if (typeof handler === 'undefined')
- {
- var handler = makeEventHandler(eventNode, value);
- domNode.addEventListener(key, handler);
- allHandlers[key] = handler;
- }
- else
- {
- handler.info = value;
- }
- }
-
- domNode.elm_handlers = allHandlers;
-}
-
-function makeEventHandler(eventNode, info)
-{
- function eventHandler(event)
- {
- var info = eventHandler.info;
-
- var value = A2(_elm_lang$core$Native_Json.run, info.decoder, event);
-
- if (value.ctor === 'Ok')
- {
- var options = info.options;
- if (options.stopPropagation)
- {
- event.stopPropagation();
- }
- if (options.preventDefault)
- {
- event.preventDefault();
- }
-
- var message = value._0;
-
- var currentEventNode = eventNode;
- while (currentEventNode)
- {
- var tagger = currentEventNode.tagger;
- if (typeof tagger === 'function')
- {
- message = tagger(message);
- }
- else
- {
- for (var i = tagger.length; i--; )
- {
- message = tagger[i](message);
- }
- }
- currentEventNode = currentEventNode.parent;
- }
- }
- };
-
- eventHandler.info = info;
-
- return eventHandler;
-}
-
-function applyAttrs(domNode, attrs)
-{
- for (var key in attrs)
- {
- var value = attrs[key];
- if (typeof value === 'undefined')
- {
- domNode.removeAttribute(key);
- }
- else
- {
- domNode.setAttribute(key, value);
- }
- }
-}
-
-function applyAttrsNS(domNode, nsAttrs)
-{
- for (var key in nsAttrs)
- {
- var pair = nsAttrs[key];
- var namespace = pair.namespace;
- var value = pair.value;
-
- if (typeof value === 'undefined')
- {
- domNode.removeAttributeNS(namespace, key);
- }
- else
- {
- domNode.setAttributeNS(namespace, key, value);
- }
- }
-}
-
-
-
-//////////// DIFF ////////////
-
-
-function diff(a, b)
-{
- var patches = [];
- diffHelp(a, b, patches, 0);
- return patches;
-}
-
-
-function makePatch(type, index, data)
-{
- return {
- index: index,
- type: type,
- data: data,
- domNode: undefined,
- eventNode: undefined
- };
-}
-
-
-function diffHelp(a, b, patches, index)
-{
- if (a === b)
- {
- return;
- }
-
- var aType = a.type;
- var bType = b.type;
-
- // Bail if you run into different types of nodes. Implies that the
- // structure has changed significantly and it's not worth a diff.
- if (aType !== bType)
- {
- patches.push(makePatch('p-redraw', index, b));
- return;
- }
-
- // Now we know that both nodes are the same type.
- switch (bType)
- {
- case 'thunk':
- var aArgs = a.args;
- var bArgs = b.args;
- var i = aArgs.length;
- var same = a.func === b.func && i === bArgs.length;
- while (same && i--)
- {
- same = aArgs[i] === bArgs[i];
- }
- if (same)
- {
- b.node = a.node;
- return;
- }
- b.node = b.thunk();
- var subPatches = [];
- diffHelp(a.node, b.node, subPatches, 0);
- if (subPatches.length > 0)
- {
- patches.push(makePatch('p-thunk', index, subPatches));
- }
- return;
-
- case 'tagger':
- // gather nested taggers
- var aTaggers = a.tagger;
- var bTaggers = b.tagger;
- var nesting = false;
-
- var aSubNode = a.node;
- while (aSubNode.type === 'tagger')
- {
- nesting = true;
-
- typeof aTaggers !== 'object'
- ? aTaggers = [aTaggers, aSubNode.tagger]
- : aTaggers.push(aSubNode.tagger);
-
- aSubNode = aSubNode.node;
- }
-
- var bSubNode = b.node;
- while (bSubNode.type === 'tagger')
- {
- nesting = true;
-
- typeof bTaggers !== 'object'
- ? bTaggers = [bTaggers, bSubNode.tagger]
- : bTaggers.push(bSubNode.tagger);
-
- bSubNode = bSubNode.node;
- }
-
- // Just bail if different numbers of taggers. This implies the
- // structure of the virtual DOM has changed.
- if (nesting && aTaggers.length !== bTaggers.length)
- {
- patches.push(makePatch('p-redraw', index, b));
- return;
- }
-
- // check if taggers are "the same"
- if (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers)
- {
- patches.push(makePatch('p-tagger', index, bTaggers));
- }
-
- // diff everything below the taggers
- diffHelp(aSubNode, bSubNode, patches, index + 1);
- return;
-
- case 'text':
- if (a.text !== b.text)
- {
- patches.push(makePatch('p-text', index, b.text));
- return;
- }
-
- return;
-
- case 'node':
- // Bail if obvious indicators have changed. Implies more serious
- // structural changes such that it's not worth it to diff.
- if (a.tag !== b.tag || a.namespace !== b.namespace)
- {
- patches.push(makePatch('p-redraw', index, b));
- return;
- }
-
- var factsDiff = diffFacts(a.facts, b.facts);
-
- if (typeof factsDiff !== 'undefined')
- {
- patches.push(makePatch('p-facts', index, factsDiff));
- }
-
- diffChildren(a, b, patches, index);
- return;
-
- case 'keyed-node':
- // Bail if obvious indicators have changed. Implies more serious
- // structural changes such that it's not worth it to diff.
- if (a.tag !== b.tag || a.namespace !== b.namespace)
- {
- patches.push(makePatch('p-redraw', index, b));
- return;
- }
-
- var factsDiff = diffFacts(a.facts, b.facts);
-
- if (typeof factsDiff !== 'undefined')
- {
- patches.push(makePatch('p-facts', index, factsDiff));
- }
-
- diffKeyedChildren(a, b, patches, index);
- return;
-
- case 'custom':
- if (a.impl !== b.impl)
- {
- patches.push(makePatch('p-redraw', index, b));
- return;
- }
-
- var factsDiff = diffFacts(a.facts, b.facts);
- if (typeof factsDiff !== 'undefined')
- {
- patches.push(makePatch('p-facts', index, factsDiff));
- }
-
- var patch = b.impl.diff(a,b);
- if (patch)
- {
- patches.push(makePatch('p-custom', index, patch));
- return;
- }
-
- return;
- }
-}
-
-
-// assumes the incoming arrays are the same length
-function pairwiseRefEqual(as, bs)
-{
- for (var i = 0; i < as.length; i++)
- {
- if (as[i] !== bs[i])
- {
- return false;
- }
- }
-
- return true;
-}
-
-
-// TODO Instead of creating a new diff object, it's possible to just test if
-// there *is* a diff. During the actual patch, do the diff again and make the
-// modifications directly. This way, there's no new allocations. Worth it?
-function diffFacts(a, b, category)
-{
- var diff;
-
- // look for changes and removals
- for (var aKey in a)
- {
- if (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY)
- {
- var subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey);
- if (subDiff)
- {
- diff = diff || {};
- diff[aKey] = subDiff;
- }
- continue;
- }
-
- // remove if not in the new facts
- if (!(aKey in b))
- {
- diff = diff || {};
- diff[aKey] =
- (typeof category === 'undefined')
- ? (typeof a[aKey] === 'string' ? '' : null)
- :
- (category === STYLE_KEY)
- ? ''
- :
- (category === EVENT_KEY || category === ATTR_KEY)
- ? undefined
- :
- { namespace: a[aKey].namespace, value: undefined };
-
- continue;
- }
-
- var aValue = a[aKey];
- var bValue = b[aKey];
-
- // reference equal, so don't worry about it
- if (aValue === bValue && aKey !== 'value'
- || category === EVENT_KEY && equalEvents(aValue, bValue))
- {
- continue;
- }
-
- diff = diff || {};
- diff[aKey] = bValue;
- }
-
- // add new stuff
- for (var bKey in b)
- {
- if (!(bKey in a))
- {
- diff = diff || {};
- diff[bKey] = b[bKey];
- }
- }
-
- return diff;
-}
-
-
-function diffChildren(aParent, bParent, patches, rootIndex)
-{
- var aChildren = aParent.children;
- var bChildren = bParent.children;
-
- var aLen = aChildren.length;
- var bLen = bChildren.length;
-
- // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
-
- if (aLen > bLen)
- {
- patches.push(makePatch('p-remove-last', rootIndex, aLen - bLen));
- }
- else if (aLen < bLen)
- {
- patches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen)));
- }
-
- // PAIRWISE DIFF EVERYTHING ELSE
-
- var index = rootIndex;
- var minLen = aLen < bLen ? aLen : bLen;
- for (var i = 0; i < minLen; i++)
- {
- index++;
- var aChild = aChildren[i];
- diffHelp(aChild, bChildren[i], patches, index);
- index += aChild.descendantsCount || 0;
- }
-}
-
-
-
-//////////// KEYED DIFF ////////////
-
-
-function diffKeyedChildren(aParent, bParent, patches, rootIndex)
-{
- var localPatches = [];
-
- var changes = {}; // Dict String Entry
- var inserts = []; // Array { index : Int, entry : Entry }
- // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
-
- var aChildren = aParent.children;
- var bChildren = bParent.children;
- var aLen = aChildren.length;
- var bLen = bChildren.length;
- var aIndex = 0;
- var bIndex = 0;
-
- var index = rootIndex;
-
- while (aIndex < aLen && bIndex < bLen)
- {
- var a = aChildren[aIndex];
- var b = bChildren[bIndex];
-
- var aKey = a._0;
- var bKey = b._0;
- var aNode = a._1;
- var bNode = b._1;
-
- // check if keys match
-
- if (aKey === bKey)
- {
- index++;
- diffHelp(aNode, bNode, localPatches, index);
- index += aNode.descendantsCount || 0;
-
- aIndex++;
- bIndex++;
- continue;
- }
-
- // look ahead 1 to detect insertions and removals.
-
- var aLookAhead = aIndex + 1 < aLen;
- var bLookAhead = bIndex + 1 < bLen;
-
- if (aLookAhead)
- {
- var aNext = aChildren[aIndex + 1];
- var aNextKey = aNext._0;
- var aNextNode = aNext._1;
- var oldMatch = bKey === aNextKey;
- }
-
- if (bLookAhead)
- {
- var bNext = bChildren[bIndex + 1];
- var bNextKey = bNext._0;
- var bNextNode = bNext._1;
- var newMatch = aKey === bNextKey;
- }
-
-
- // swap a and b
- if (aLookAhead && bLookAhead && newMatch && oldMatch)
- {
- index++;
- diffHelp(aNode, bNextNode, localPatches, index);
- insertNode(changes, localPatches, aKey, bNode, bIndex, inserts);
- index += aNode.descendantsCount || 0;
-
- index++;
- removeNode(changes, localPatches, aKey, aNextNode, index);
- index += aNextNode.descendantsCount || 0;
-
- aIndex += 2;
- bIndex += 2;
- continue;
- }
-
- // insert b
- if (bLookAhead && newMatch)
- {
- index++;
- insertNode(changes, localPatches, bKey, bNode, bIndex, inserts);
- diffHelp(aNode, bNextNode, localPatches, index);
- index += aNode.descendantsCount || 0;
-
- aIndex += 1;
- bIndex += 2;
- continue;
- }
-
- // remove a
- if (aLookAhead && oldMatch)
- {
- index++;
- removeNode(changes, localPatches, aKey, aNode, index);
- index += aNode.descendantsCount || 0;
-
- index++;
- diffHelp(aNextNode, bNode, localPatches, index);
- index += aNextNode.descendantsCount || 0;
-
- aIndex += 2;
- bIndex += 1;
- continue;
- }
-
- // remove a, insert b
- if (aLookAhead && bLookAhead && aNextKey === bNextKey)
- {
- index++;
- removeNode(changes, localPatches, aKey, aNode, index);
- insertNode(changes, localPatches, bKey, bNode, bIndex, inserts);
- index += aNode.descendantsCount || 0;
-
- index++;
- diffHelp(aNextNode, bNextNode, localPatches, index);
- index += aNextNode.descendantsCount || 0;
-
- aIndex += 2;
- bIndex += 2;
- continue;
- }
-
- break;
- }
-
- // eat up any remaining nodes with removeNode and insertNode
-
- while (aIndex < aLen)
- {
- index++;
- var a = aChildren[aIndex];
- var aNode = a._1;
- removeNode(changes, localPatches, a._0, aNode, index);
- index += aNode.descendantsCount || 0;
- aIndex++;
- }
-
- var endInserts;
- while (bIndex < bLen)
- {
- endInserts = endInserts || [];
- var b = bChildren[bIndex];
- insertNode(changes, localPatches, b._0, b._1, undefined, endInserts);
- bIndex++;
- }
-
- if (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined')
- {
- patches.push(makePatch('p-reorder', rootIndex, {
- patches: localPatches,
- inserts: inserts,
- endInserts: endInserts
- }));
- }
-}
-
-
-
-//////////// CHANGES FROM KEYED DIFF ////////////
-
-
-var POSTFIX = '_elmW6BL';
-
-
-function insertNode(changes, localPatches, key, vnode, bIndex, inserts)
-{
- var entry = changes[key];
-
- // never seen this key before
- if (typeof entry === 'undefined')
- {
- entry = {
- tag: 'insert',
- vnode: vnode,
- index: bIndex,
- data: undefined
- };
-
- inserts.push({ index: bIndex, entry: entry });
- changes[key] = entry;
-
- return;
- }
-
- // this key was removed earlier, a match!
- if (entry.tag === 'remove')
- {
- inserts.push({ index: bIndex, entry: entry });
-
- entry.tag = 'move';
- var subPatches = [];
- diffHelp(entry.vnode, vnode, subPatches, entry.index);
- entry.index = bIndex;
- entry.data.data = {
- patches: subPatches,
- entry: entry
- };
-
- return;
- }
-
- // this key has already been inserted or moved, a duplicate!
- insertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts);
-}
-
-
-function removeNode(changes, localPatches, key, vnode, index)
-{
- var entry = changes[key];
-
- // never seen this key before
- if (typeof entry === 'undefined')
- {
- var patch = makePatch('p-remove', index, undefined);
- localPatches.push(patch);
-
- changes[key] = {
- tag: 'remove',
- vnode: vnode,
- index: index,
- data: patch
- };
-
- return;
- }
-
- // this key was inserted earlier, a match!
- if (entry.tag === 'insert')
- {
- entry.tag = 'move';
- var subPatches = [];
- diffHelp(vnode, entry.vnode, subPatches, index);
-
- var patch = makePatch('p-remove', index, {
- patches: subPatches,
- entry: entry
- });
- localPatches.push(patch);
-
- return;
- }
-
- // this key has already been removed or moved, a duplicate!
- removeNode(changes, localPatches, key + POSTFIX, vnode, index);
-}
-
-
-
-//////////// ADD DOM NODES ////////////
-//
-// Each DOM node has an "index" assigned in order of traversal. It is important
-// to minimize our crawl over the actual DOM, so these indexes (along with the
-// descendantsCount of virtual nodes) let us skip touching entire subtrees of
-// the DOM if we know there are no patches there.
-
-
-function addDomNodes(domNode, vNode, patches, eventNode)
-{
- addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode);
-}
-
-
-// assumes `patches` is non-empty and indexes increase monotonically.
-function addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
-{
- var patch = patches[i];
- var index = patch.index;
-
- while (index === low)
- {
- var patchType = patch.type;
-
- if (patchType === 'p-thunk')
- {
- addDomNodes(domNode, vNode.node, patch.data, eventNode);
- }
- else if (patchType === 'p-reorder')
- {
- patch.domNode = domNode;
- patch.eventNode = eventNode;
-
- var subPatches = patch.data.patches;
- if (subPatches.length > 0)
- {
- addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
- }
- }
- else if (patchType === 'p-remove')
- {
- patch.domNode = domNode;
- patch.eventNode = eventNode;
-
- var data = patch.data;
- if (typeof data !== 'undefined')
- {
- data.entry.data = domNode;
- var subPatches = data.patches;
- if (subPatches.length > 0)
- {
- addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
- }
- }
- }
- else
- {
- patch.domNode = domNode;
- patch.eventNode = eventNode;
- }
-
- i++;
-
- if (!(patch = patches[i]) || (index = patch.index) > high)
- {
- return i;
- }
- }
-
- switch (vNode.type)
- {
- case 'tagger':
- var subNode = vNode.node;
-
- while (subNode.type === "tagger")
- {
- subNode = subNode.node;
- }
-
- return addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
-
- case 'node':
- var vChildren = vNode.children;
- var childNodes = domNode.childNodes;
- for (var j = 0; j < vChildren.length; j++)
- {
- low++;
- var vChild = vChildren[j];
- var nextLow = low + (vChild.descendantsCount || 0);
- if (low <= index && index <= nextLow)
- {
- i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);
- if (!(patch = patches[i]) || (index = patch.index) > high)
- {
- return i;
- }
- }
- low = nextLow;
- }
- return i;
-
- case 'keyed-node':
- var vChildren = vNode.children;
- var childNodes = domNode.childNodes;
- for (var j = 0; j < vChildren.length; j++)
- {
- low++;
- var vChild = vChildren[j]._1;
- var nextLow = low + (vChild.descendantsCount || 0);
- if (low <= index && index <= nextLow)
- {
- i = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);
- if (!(patch = patches[i]) || (index = patch.index) > high)
- {
- return i;
- }
- }
- low = nextLow;
- }
- return i;
-
- case 'text':
- case 'thunk':
- throw new Error('should never traverse `text` or `thunk` nodes like this');
- }
-}
-
-
-
-//////////// APPLY PATCHES ////////////
-
-
-function applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
-{
- if (patches.length === 0)
- {
- return rootDomNode;
- }
-
- addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
- return applyPatchesHelp(rootDomNode, patches);
-}
-
-function applyPatchesHelp(rootDomNode, patches)
-{
- for (var i = 0; i < patches.length; i++)
- {
- var patch = patches[i];
- var localDomNode = patch.domNode
- var newNode = applyPatch(localDomNode, patch);
- if (localDomNode === rootDomNode)
- {
- rootDomNode = newNode;
- }
- }
- return rootDomNode;
-}
-
-function applyPatch(domNode, patch)
-{
- switch (patch.type)
- {
- case 'p-redraw':
- return applyPatchRedraw(domNode, patch.data, patch.eventNode);
-
- case 'p-facts':
- applyFacts(domNode, patch.eventNode, patch.data);
- return domNode;
-
- case 'p-text':
- domNode.replaceData(0, domNode.length, patch.data);
- return domNode;
-
- case 'p-thunk':
- return applyPatchesHelp(domNode, patch.data);
-
- case 'p-tagger':
- if (typeof domNode.elm_event_node_ref !== 'undefined')
- {
- domNode.elm_event_node_ref.tagger = patch.data;
- }
- else
- {
- domNode.elm_event_node_ref = { tagger: patch.data, parent: patch.eventNode };
- }
- return domNode;
-
- case 'p-remove-last':
- var i = patch.data;
- while (i--)
- {
- domNode.removeChild(domNode.lastChild);
- }
- return domNode;
-
- case 'p-append':
- var newNodes = patch.data;
- for (var i = 0; i < newNodes.length; i++)
- {
- domNode.appendChild(render(newNodes[i], patch.eventNode));
- }
- return domNode;
-
- case 'p-remove':
- var data = patch.data;
- if (typeof data === 'undefined')
- {
- domNode.parentNode.removeChild(domNode);
- return domNode;
- }
- var entry = data.entry;
- if (typeof entry.index !== 'undefined')
- {
- domNode.parentNode.removeChild(domNode);
- }
- entry.data = applyPatchesHelp(domNode, data.patches);
- return domNode;
-
- case 'p-reorder':
- return applyPatchReorder(domNode, patch);
-
- case 'p-custom':
- var impl = patch.data;
- return impl.applyPatch(domNode, impl.data);
-
- default:
- throw new Error('Ran into an unknown patch!');
- }
-}
-
-
-function applyPatchRedraw(domNode, vNode, eventNode)
-{
- var parentNode = domNode.parentNode;
- var newNode = render(vNode, eventNode);
-
- if (typeof newNode.elm_event_node_ref === 'undefined')
- {
- newNode.elm_event_node_ref = domNode.elm_event_node_ref;
- }
-
- if (parentNode && newNode !== domNode)
- {
- parentNode.replaceChild(newNode, domNode);
- }
- return newNode;
-}
-
-
-function applyPatchReorder(domNode, patch)
-{
- var data = patch.data;
-
- // remove end inserts
- var frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch);
-
- // removals
- domNode = applyPatchesHelp(domNode, data.patches);
-
- // inserts
- var inserts = data.inserts;
- for (var i = 0; i < inserts.length; i++)
- {
- var insert = inserts[i];
- var entry = insert.entry;
- var node = entry.tag === 'move'
- ? entry.data
- : render(entry.vnode, patch.eventNode);
- domNode.insertBefore(node, domNode.childNodes[insert.index]);
- }
-
- // add end inserts
- if (typeof frag !== 'undefined')
- {
- domNode.appendChild(frag);
- }
-
- return domNode;
-}
-
-
-function applyPatchReorderEndInsertsHelp(endInserts, patch)
-{
- if (typeof endInserts === 'undefined')
- {
- return;
- }
-
- var frag = localDoc.createDocumentFragment();
- for (var i = 0; i < endInserts.length; i++)
- {
- var insert = endInserts[i];
- var entry = insert.entry;
- frag.appendChild(entry.tag === 'move'
- ? entry.data
- : render(entry.vnode, patch.eventNode)
- );
- }
- return frag;
-}
-
-
-// PROGRAMS
-
-var program = makeProgram(checkNoFlags);
-var programWithFlags = makeProgram(checkYesFlags);
-
-function makeProgram(flagChecker)
-{
- return F2(function(debugWrap, impl)
- {
- return function(flagDecoder)
- {
- return function(object, moduleName, debugMetadata)
- {
- var checker = flagChecker(flagDecoder, moduleName);
- if (typeof debugMetadata === 'undefined')
- {
- normalSetup(impl, object, moduleName, checker);
- }
- else
- {
- debugSetup(A2(debugWrap, debugMetadata, impl), object, moduleName, checker);
- }
- };
- };
- });
-}
-
-function staticProgram(vNode)
-{
- var nothing = _elm_lang$core$Native_Utils.Tuple2(
- _elm_lang$core$Native_Utils.Tuple0,
- _elm_lang$core$Platform_Cmd$none
- );
- return A2(program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, {
- init: nothing,
- view: function() { return vNode; },
- update: F2(function() { return nothing; }),
- subscriptions: function() { return _elm_lang$core$Platform_Sub$none; }
- })();
-}
-
-
-// FLAG CHECKERS
-
-function checkNoFlags(flagDecoder, moduleName)
-{
- return function(init, flags, domNode)
- {
- if (typeof flags === 'undefined')
- {
- return init;
- }
-
- var errorMessage =
- 'The `' + moduleName + '` module does not need flags.\n'
- + 'Initialize it with no arguments and you should be all set!';
-
- crash(errorMessage, domNode);
- };
-}
-
-function checkYesFlags(flagDecoder, moduleName)
-{
- return function(init, flags, domNode)
- {
- if (typeof flagDecoder === 'undefined')
- {
- var errorMessage =
- 'Are you trying to sneak a Never value into Elm? Trickster!\n'
- + 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\n'
- + 'Use `program` instead if you do not want flags.'
-
- crash(errorMessage, domNode);
- }
-
- var result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);
- if (result.ctor === 'Ok')
- {
- return init(result._0);
- }
-
- var errorMessage =
- 'Trying to initialize the `' + moduleName + '` module with an unexpected flag.\n'
- + 'I tried to convert it to an Elm value, but ran into this problem:\n\n'
- + result._0;
-
- crash(errorMessage, domNode);
- };
-}
-
-function crash(errorMessage, domNode)
-{
- if (domNode)
- {
- domNode.innerHTML =
- '
'
- + '
Oops! Something went wrong when starting your Elm program.
'
- + '
' + errorMessage + '
'
- + '
';
- }
-
- throw new Error(errorMessage);
-}
-
-
-// NORMAL SETUP
-
-function normalSetup(impl, object, moduleName, flagChecker)
-{
- object['embed'] = function embed(node, flags)
- {
- while (node.lastChild)
- {
- node.removeChild(node.lastChild);
- }
-
- return _elm_lang$core$Native_Platform.initialize(
- flagChecker(impl.init, flags, node),
- impl.update,
- impl.subscriptions,
- normalRenderer(node, impl.view)
- );
- };
-
- object['fullscreen'] = function fullscreen(flags)
- {
- return _elm_lang$core$Native_Platform.initialize(
- flagChecker(impl.init, flags, document.body),
- impl.update,
- impl.subscriptions,
- normalRenderer(document.body, impl.view)
- );
- };
-}
-
-function normalRenderer(parentNode, view)
-{
- return function(tagger, initialModel)
- {
- var eventNode = { tagger: tagger, parent: undefined };
- var initialVirtualNode = view(initialModel);
- var domNode = render(initialVirtualNode, eventNode);
- parentNode.appendChild(domNode);
- return makeStepper(domNode, view, initialVirtualNode, eventNode);
- };
-}
-
-
-// STEPPER
-
-var rAF =
- typeof requestAnimationFrame !== 'undefined'
- ? requestAnimationFrame
- : function(callback) { setTimeout(callback, 1000 / 60); };
-
-function makeStepper(domNode, view, initialVirtualNode, eventNode)
-{
- var state = 'NO_REQUEST';
- var currNode = initialVirtualNode;
- var nextModel;
-
- function updateIfNeeded()
- {
- switch (state)
- {
- case 'NO_REQUEST':
- throw new Error(
- 'Unexpected draw callback.\n' +
- 'Please report this to .'
- );
-
- case 'PENDING_REQUEST':
- rAF(updateIfNeeded);
- state = 'EXTRA_REQUEST';
-
- var nextNode = view(nextModel);
- var patches = diff(currNode, nextNode);
- domNode = applyPatches(domNode, currNode, patches, eventNode);
- currNode = nextNode;
-
- return;
-
- case 'EXTRA_REQUEST':
- state = 'NO_REQUEST';
- return;
- }
- }
-
- return function stepper(model)
- {
- if (state === 'NO_REQUEST')
- {
- rAF(updateIfNeeded);
- }
- state = 'PENDING_REQUEST';
- nextModel = model;
- };
-}
-
-
-// DEBUG SETUP
-
-function debugSetup(impl, object, moduleName, flagChecker)
-{
- object['fullscreen'] = function fullscreen(flags)
- {
- var popoutRef = { doc: undefined };
- return _elm_lang$core$Native_Platform.initialize(
- flagChecker(impl.init, flags, document.body),
- impl.update(scrollTask(popoutRef)),
- impl.subscriptions,
- debugRenderer(moduleName, document.body, popoutRef, impl.view, impl.viewIn, impl.viewOut)
- );
- };
-
- object['embed'] = function fullscreen(node, flags)
- {
- var popoutRef = { doc: undefined };
- return _elm_lang$core$Native_Platform.initialize(
- flagChecker(impl.init, flags, node),
- impl.update(scrollTask(popoutRef)),
- impl.subscriptions,
- debugRenderer(moduleName, node, popoutRef, impl.view, impl.viewIn, impl.viewOut)
- );
- };
-}
-
-function scrollTask(popoutRef)
-{
- return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)
- {
- var doc = popoutRef.doc;
- if (doc)
- {
- var msgs = doc.getElementsByClassName('debugger-sidebar-messages')[0];
- if (msgs)
- {
- msgs.scrollTop = msgs.scrollHeight;
- }
- }
- callback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));
- });
-}
-
-
-function debugRenderer(moduleName, parentNode, popoutRef, view, viewIn, viewOut)
-{
- return function(tagger, initialModel)
- {
- var appEventNode = { tagger: tagger, parent: undefined };
- var eventNode = { tagger: tagger, parent: undefined };
-
- // make normal stepper
- var appVirtualNode = view(initialModel);
- var appNode = render(appVirtualNode, appEventNode);
- parentNode.appendChild(appNode);
- var appStepper = makeStepper(appNode, view, appVirtualNode, appEventNode);
-
- // make overlay stepper
- var overVirtualNode = viewIn(initialModel)._1;
- var overNode = render(overVirtualNode, eventNode);
- parentNode.appendChild(overNode);
- var wrappedViewIn = wrapViewIn(appEventNode, overNode, viewIn);
- var overStepper = makeStepper(overNode, wrappedViewIn, overVirtualNode, eventNode);
-
- // make debugger stepper
- var debugStepper = makeDebugStepper(initialModel, viewOut, eventNode, parentNode, moduleName, popoutRef);
-
- return function stepper(model)
- {
- appStepper(model);
- overStepper(model);
- debugStepper(model);
- }
- };
-}
-
-function makeDebugStepper(initialModel, view, eventNode, parentNode, moduleName, popoutRef)
-{
- var curr;
- var domNode;
-
- return function stepper(model)
- {
- if (!model.isDebuggerOpen)
- {
- return;
- }
-
- if (!popoutRef.doc)
- {
- curr = view(model);
- domNode = openDebugWindow(moduleName, popoutRef, curr, eventNode);
- return;
- }
-
- // switch to document of popout
- localDoc = popoutRef.doc;
-
- var next = view(model);
- var patches = diff(curr, next);
- domNode = applyPatches(domNode, curr, patches, eventNode);
- curr = next;
-
- // switch back to normal document
- localDoc = document;
- };
-}
-
-function openDebugWindow(moduleName, popoutRef, virtualNode, eventNode)
-{
- var w = 900;
- var h = 360;
- var x = screen.width - w;
- var y = screen.height - h;
- var debugWindow = window.open('', '', 'width=' + w + ',height=' + h + ',left=' + x + ',top=' + y);
-
- // switch to window document
- localDoc = debugWindow.document;
-
- popoutRef.doc = localDoc;
- localDoc.title = 'Debugger - ' + moduleName;
- localDoc.body.style.margin = '0';
- localDoc.body.style.padding = '0';
- var domNode = render(virtualNode, eventNode);
- localDoc.body.appendChild(domNode);
-
- localDoc.addEventListener('keydown', function(event) {
- if (event.metaKey && event.which === 82)
- {
- window.location.reload();
- }
- if (event.which === 38)
- {
- eventNode.tagger({ ctor: 'Up' });
- event.preventDefault();
- }
- if (event.which === 40)
- {
- eventNode.tagger({ ctor: 'Down' });
- event.preventDefault();
- }
- });
-
- function close()
- {
- popoutRef.doc = undefined;
- debugWindow.close();
- }
- window.addEventListener('unload', close);
- debugWindow.addEventListener('unload', function() {
- popoutRef.doc = undefined;
- window.removeEventListener('unload', close);
- eventNode.tagger({ ctor: 'Close' });
- });
-
- // switch back to the normal document
- localDoc = document;
-
- return domNode;
-}
-
-
-// BLOCK EVENTS
-
-function wrapViewIn(appEventNode, overlayNode, viewIn)
-{
- var ignorer = makeIgnorer(overlayNode);
- var blocking = 'Normal';
- var overflow;
-
- var normalTagger = appEventNode.tagger;
- var blockTagger = function() {};
-
- return function(model)
- {
- var tuple = viewIn(model);
- var newBlocking = tuple._0.ctor;
- appEventNode.tagger = newBlocking === 'Normal' ? normalTagger : blockTagger;
- if (blocking !== newBlocking)
- {
- traverse('removeEventListener', ignorer, blocking);
- traverse('addEventListener', ignorer, newBlocking);
-
- if (blocking === 'Normal')
- {
- overflow = document.body.style.overflow;
- document.body.style.overflow = 'hidden';
- }
-
- if (newBlocking === 'Normal')
- {
- document.body.style.overflow = overflow;
- }
-
- blocking = newBlocking;
- }
- return tuple._1;
- }
-}
-
-function traverse(verbEventListener, ignorer, blocking)
-{
- switch(blocking)
- {
- case 'Normal':
- return;
-
- case 'Pause':
- return traverseHelp(verbEventListener, ignorer, mostEvents);
-
- case 'Message':
- return traverseHelp(verbEventListener, ignorer, allEvents);
- }
-}
-
-function traverseHelp(verbEventListener, handler, eventNames)
-{
- for (var i = 0; i < eventNames.length; i++)
- {
- document.body[verbEventListener](eventNames[i], handler, true);
- }
-}
-
-function makeIgnorer(overlayNode)
-{
- return function(event)
- {
- if (event.type === 'keydown' && event.metaKey && event.which === 82)
- {
- return;
- }
-
- var isScroll = event.type === 'scroll' || event.type === 'wheel';
-
- var node = event.target;
- while (node !== null)
- {
- if (node.className === 'elm-overlay-message-details' && isScroll)
- {
- return;
- }
-
- if (node === overlayNode && !isScroll)
- {
- return;
- }
- node = node.parentNode;
- }
-
- event.stopPropagation();
- event.preventDefault();
- }
-}
-
-var mostEvents = [
- 'click', 'dblclick', 'mousemove',
- 'mouseup', 'mousedown', 'mouseenter', 'mouseleave',
- 'touchstart', 'touchend', 'touchcancel', 'touchmove',
- 'pointerdown', 'pointerup', 'pointerover', 'pointerout',
- 'pointerenter', 'pointerleave', 'pointermove', 'pointercancel',
- 'dragstart', 'drag', 'dragend', 'dragenter', 'dragover', 'dragleave', 'drop',
- 'keyup', 'keydown', 'keypress',
- 'input', 'change',
- 'focus', 'blur'
-];
-
-var allEvents = mostEvents.concat('wheel', 'scroll');
-
-
-return {
- node: node,
- text: text,
- custom: custom,
- map: F2(map),
-
- on: F3(on),
- style: style,
- property: F2(property),
- attribute: F2(attribute),
- attributeNS: F3(attributeNS),
- mapProperty: F2(mapProperty),
-
- lazy: F2(lazy),
- lazy2: F3(lazy2),
- lazy3: F4(lazy3),
- keyedNode: F3(keyedNode),
-
- program: program,
- programWithFlags: programWithFlags,
- staticProgram: staticProgram
-};
-
-}();
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom.elm
deleted file mode 100644
index ac28926..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom.elm
+++ /dev/null
@@ -1,331 +0,0 @@
-module VirtualDom exposing
- ( Node
- , text, node
- , Property, property, attribute, attributeNS, mapProperty
- , style
- , on, onWithOptions, Options, defaultOptions
- , map
- , lazy, lazy2, lazy3
- , keyedNode
- , program, programWithFlags
- )
-
-{-| API to the core diffing algorithm. Can serve as a foundation for libraries
-that expose more helper functions for HTML or SVG.
-
-# Create
-@docs Node, text, node
-
-# Declare Properties and Attributes
-@docs Property, property, attribute, attributeNS, mapProperty
-
-# Styles
-@docs style
-
-# Events
-@docs on, onWithOptions, Options, defaultOptions
-
-# Routing Messages
-@docs map
-
-# Optimizations
-@docs lazy, lazy2, lazy3, keyedNode
-
-# Programs
-@docs program, programWithFlags
-
--}
-
-import Json.Decode as Json
-import Native.VirtualDom
-import VirtualDom.Debug as Debug
-
-
-{-| An immutable chunk of data representing a DOM node. This can be HTML or SVG.
--}
-type Node msg = Node
-
-
-{-| Create a DOM node with a tag name, a list of HTML properties that can
-include styles and event listeners, a list of CSS properties like `color`, and
-a list of child nodes.
-
- import Json.Encode as Json
-
- hello : Node msg
- hello =
- node "div" [] [ text "Hello!" ]
-
- greeting : Node msg
- greeting =
- node "div"
- [ property "id" (Json.string "greeting") ]
- [ text "Hello!" ]
--}
-node : String -> List (Property msg) -> List (Node msg) -> Node msg
-node =
- Native.VirtualDom.node
-
-
-{-| Just put plain text in the DOM. It will escape the string so that it appears
-exactly as you specify.
-
- text "Hello World!"
--}
-text : String -> Node msg
-text =
- Native.VirtualDom.text
-
-
-{-| This function is useful when nesting components with [the Elm
-Architecture](https://github.com/evancz/elm-architecture-tutorial/). It lets
-you transform the messages produced by a subtree.
-
-Say you have a node named `button` that produces `()` values when it is
-clicked. To get your model updating properly, you will probably want to tag
-this `()` value like this:
-
- type Msg = Click | ...
-
- update msg model =
- case msg of
- Click ->
- ...
-
- view model =
- map (\_ -> Click) button
-
-So now all the events produced by `button` will be transformed to be of type
-`Msg` so they can be handled by your update function!
--}
-map : (a -> msg) -> Node a -> Node msg
-map =
- Native.VirtualDom.map
-
-
-
--- PROPERTIES
-
-
-{-| When using HTML and JS, there are two ways to specify parts of a DOM node.
-
- 1. Attributes — You can set things in HTML itself. So the `class`
- in `` is called an *attribute*.
-
- 2. Properties — You can also set things in JS. So the `className`
- in `div.className = 'greeting'` is called a *property*.
-
-So the `class` attribute corresponds to the `className` property. At first
-glance, perhaps this distinction is defensible, but it gets much crazier.
-*There is not always a one-to-one mapping between attributes and properties!*
-Yes, that is a true fact. Sometimes an attribute exists, but there is no
-corresponding property. Sometimes changing an attribute does not change the
-underlying property. For example, as of this writing, the `webkit-playsinline`
-attribute can be used in HTML, but there is no corresponding property!
--}
-type Property msg = Property
-
-
-{-| Create arbitrary *properties*.
-
- import JavaScript.Encode as Json
-
- greeting : Html
- greeting =
- node "div" [ property "className" (Json.string "greeting") ] [
- text "Hello!"
- ]
-
-Notice that you must give the *property* name, so we use `className` as it
-would be in JavaScript, not `class` as it would appear in HTML.
--}
-property : String -> Json.Value -> Property msg
-property =
- Native.VirtualDom.property
-
-
-{-| Create arbitrary HTML *attributes*. Maps onto JavaScript’s `setAttribute`
-function under the hood.
-
- greeting : Html
- greeting =
- node "div" [ attribute "class" "greeting" ] [
- text "Hello!"
- ]
-
-Notice that you must give the *attribute* name, so we use `class` as it would
-be in HTML, not `className` as it would appear in JS.
--}
-attribute : String -> String -> Property msg
-attribute =
- Native.VirtualDom.attribute
-
-
-{-| Would you believe that there is another way to do this?! This corresponds
-to JavaScript's `setAttributeNS` function under the hood. It is doing pretty
-much the same thing as `attribute` but you are able to have "namespaced"
-attributes. This is used in some SVG stuff at least.
--}
-attributeNS : String -> String -> String -> Property msg
-attributeNS =
- Native.VirtualDom.attributeNS
-
-
-{-| Transform the messages produced by a `Property`.
--}
-mapProperty : (a -> b) -> Property a -> Property b
-mapProperty =
- Native.VirtualDom.mapProperty
-
-
-{-| Specify a list of styles.
-
- myStyle : Property msg
- myStyle =
- style
- [ ("backgroundColor", "red")
- , ("height", "90px")
- , ("width", "100%")
- ]
-
- greeting : Node msg
- greeting =
- node "div" [ myStyle ] [ text "Hello!" ]
-
--}
-style : List (String, String) -> Property msg
-style =
- Native.VirtualDom.style
-
-
-
--- EVENTS
-
-
-{-| Create a custom event listener.
-
- import Json.Decode as Json
-
- onClick : msg -> Property msg
- onClick msg =
- on "click" (Json.succeed msg)
-
-You first specify the name of the event in the same format as with JavaScript’s
-`addEventListener`. Next you give a JSON decoder, which lets you pull
-information out of the event object. If the decoder succeeds, it will produce
-a message and route it to your `update` function.
--}
-on : String -> Json.Decoder msg -> Property msg
-on eventName decoder =
- onWithOptions eventName defaultOptions decoder
-
-
-{-| Same as `on` but you can set a few options.
--}
-onWithOptions : String -> Options -> Json.Decoder msg -> Property msg
-onWithOptions =
- Native.VirtualDom.on
-
-
-{-| Options for an event listener. If `stopPropagation` is true, it means the
-event stops traveling through the DOM so it will not trigger any other event
-listeners. If `preventDefault` is true, any built-in browser behavior related
-to the event is prevented. For example, this is used with touch events when you
-want to treat them as gestures of your own, not as scrolls.
--}
-type alias Options =
- { stopPropagation : Bool
- , preventDefault : Bool
- }
-
-
-{-| Everything is `False` by default.
-
- defaultOptions =
- { stopPropagation = False
- , preventDefault = False
- }
--}
-defaultOptions : Options
-defaultOptions =
- { stopPropagation = False
- , preventDefault = False
- }
-
-
-
--- OPTIMIZATION
-
-
-{-| A performance optimization that delays the building of virtual DOM nodes.
-
-Calling `(view model)` will definitely build some virtual DOM, perhaps a lot of
-it. Calling `(lazy view model)` delays the call until later. During diffing, we
-can check to see if `model` is referentially equal to the previous value used,
-and if so, we just stop. No need to build up the tree structure and diff it,
-we know if the input to `view` is the same, the output must be the same!
--}
-lazy : (a -> Node msg) -> a -> Node msg
-lazy =
- Native.VirtualDom.lazy
-
-
-{-| Same as `lazy` but checks on two arguments.
--}
-lazy2 : (a -> b -> Node msg) -> a -> b -> Node msg
-lazy2 =
- Native.VirtualDom.lazy2
-
-
-{-| Same as `lazy` but checks on three arguments.
--}
-lazy3 : (a -> b -> c -> Node msg) -> a -> b -> c -> Node msg
-lazy3 =
- Native.VirtualDom.lazy3
-
-
-{-| Works just like `node`, but you add a unique identifier to each child
-node. You want this when you have a list of nodes that is changing: adding
-nodes, removing nodes, etc. In these cases, the unique identifiers help make
-the DOM modifications more efficient.
--}
-keyedNode : String -> List (Property msg) -> List ( String, Node msg ) -> Node msg
-keyedNode =
- Native.VirtualDom.keyedNode
-
-
-
--- PROGRAMS
-
-
-{-| Check out the docs for [`Html.App.program`][prog].
-It works exactly the same way.
-
-[prog]: http://package.elm-lang.org/packages/elm-lang/html/latest/Html-App#program
--}
-program
- : { init : (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- , view : model -> Node msg
- }
- -> Program Never model msg
-program impl =
- Native.VirtualDom.program Debug.wrap impl
-
-
-{-| Check out the docs for [`Html.App.programWithFlags`][prog].
-It works exactly the same way.
-
-[prog]: http://package.elm-lang.org/packages/elm-lang/html/latest/Html-App#programWithFlags
--}
-programWithFlags
- : { init : flags -> (model, Cmd msg)
- , update : msg -> model -> (model, Cmd msg)
- , subscriptions : model -> Sub msg
- , view : model -> Node msg
- }
- -> Program flags model msg
-programWithFlags impl =
- Native.VirtualDom.programWithFlags Debug.wrapWithFlags impl
-
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Debug.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Debug.elm
deleted file mode 100644
index ba7afe5..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Debug.elm
+++ /dev/null
@@ -1,567 +0,0 @@
-module VirtualDom.Debug exposing (wrap, wrapWithFlags)
-
-import Json.Decode as Decode
-import Json.Encode as Encode
-import Task exposing (Task)
-import Native.Debug
-import Native.VirtualDom
-import VirtualDom.Expando as Expando exposing (Expando)
-import VirtualDom.Helpers as VDom exposing (Node)
-import VirtualDom.History as History exposing (History)
-import VirtualDom.Metadata as Metadata exposing (Metadata)
-import VirtualDom.Overlay as Overlay
-import VirtualDom.Report as Report
-
-
-
--- WRAP PROGRAMS
-
-
-wrap metadata { init, update, subscriptions, view } =
- { init = wrapInit metadata init
- , view = wrapView view
- , update = wrapUpdate update
- , viewIn = viewIn
- , viewOut = viewOut
- , subscriptions = wrapSubs subscriptions
- }
-
-
-wrapWithFlags metadata { init, update, subscriptions, view } =
- { init = \flags -> wrapInit metadata (init flags)
- , view = wrapView view
- , update = wrapUpdate update
- , viewIn = viewIn
- , viewOut = viewOut
- , subscriptions = wrapSubs subscriptions
- }
-
-
-
--- MODEL
-
-
-type alias Model model msg =
- { history : History model msg
- , state : State model
- , expando : Expando
- , metadata : Result Metadata.Error Metadata
- , overlay : Overlay.State
- , isDebuggerOpen : Bool
- }
-
-
-type State model
- = Running model
- | Paused Int model model
-
-
-wrapInit : Encode.Value -> ( model, Cmd msg ) -> ( Model model msg, Cmd (Msg msg) )
-wrapInit metadata ( userModel, userCommands ) =
- { history = History.empty userModel
- , state = Running userModel
- , expando = Expando.init userModel
- , metadata = Metadata.decode metadata
- , overlay = Overlay.none
- , isDebuggerOpen = False
- }
- ! [ Cmd.map UserMsg userCommands ]
-
-
-
--- UPDATE
-
-
-type Msg msg
- = NoOp
- | UserMsg msg
- | ExpandoMsg Expando.Msg
- | Resume
- | Jump Int
- | Open
- | Close
- | Up
- | Down
- | Import
- | Export
- | Upload String
- | OverlayMsg Overlay.Msg
-
-
-type alias UserUpdate model msg =
- msg -> model -> ( model, Cmd msg )
-
-
-wrapUpdate
- : UserUpdate model msg
- -> Task Never ()
- -> Msg msg
- -> Model model msg
- -> (Model model msg, Cmd (Msg msg))
-wrapUpdate userUpdate scrollTask msg model =
- case msg of
- NoOp ->
- model ! []
-
- UserMsg userMsg ->
- updateUserMsg userUpdate scrollTask userMsg model
-
- ExpandoMsg eMsg ->
- { model
- | expando = Expando.update eMsg model.expando
- }
- ! []
-
- Resume ->
- case model.state of
- Running _ ->
- model ! []
-
- Paused _ _ userModel ->
- { model
- | state = Running userModel
- , expando = Expando.merge userModel model.expando
- }
- ! [ runIf model.isDebuggerOpen scrollTask ]
-
- Jump index ->
- let
- (indexModel, indexMsg) =
- History.get userUpdate index model.history
- in
- { model
- | state = Paused index indexModel (getLatestModel model.state)
- , expando = Expando.merge indexModel model.expando
- }
- ! []
-
- Open ->
- { model | isDebuggerOpen = True } ! []
-
- Close ->
- { model | isDebuggerOpen = False } ! []
-
- Up ->
- let
- index =
- case model.state of
- Paused index _ _ ->
- index
-
- Running _ ->
- History.size model.history
- in
- if index > 0 then
- wrapUpdate userUpdate scrollTask (Jump (index - 1)) model
- else
- model ! []
-
- Down ->
- case model.state of
- Running _ ->
- model ! []
-
- Paused index _ userModel ->
- if index == History.size model.history - 1 then
- wrapUpdate userUpdate scrollTask Resume model
- else
- wrapUpdate userUpdate scrollTask (Jump (index + 1)) model
-
- Import ->
- withGoodMetadata model <| \_ ->
- model ! [ upload ]
-
- Export ->
- withGoodMetadata model <| \metadata ->
- model ! [ download metadata model.history ]
-
- Upload jsonString ->
- withGoodMetadata model <| \metadata ->
- case Overlay.assessImport metadata jsonString of
- Err newOverlay ->
- { model | overlay = newOverlay } ! []
-
- Ok rawHistory ->
- loadNewHistory rawHistory userUpdate model
-
- OverlayMsg overlayMsg ->
- case Overlay.close overlayMsg model.overlay of
- Nothing ->
- { model | overlay = Overlay.none } ! []
-
- Just rawHistory ->
- loadNewHistory rawHistory userUpdate model
-
-
-
--- COMMANDS
-
-
-upload : Cmd (Msg msg)
-upload =
- Task.perform Upload Native.Debug.upload
-
-
-download : Metadata -> History model msg -> Cmd (Msg msg)
-download metadata history =
- let
- historyLength =
- History.size history
-
- json =
- Encode.object
- [ ("metadata", Metadata.encode metadata)
- , ("history", History.encode history)
- ]
- in
- Task.perform (\_ -> NoOp) (Native.Debug.download historyLength json)
-
-
-
--- UPDATE OVERLAY
-
-
-withGoodMetadata
- : Model model msg
- -> (Metadata -> (Model model msg, Cmd (Msg msg)))
- -> (Model model msg, Cmd (Msg msg))
-withGoodMetadata model func =
- case model.metadata of
- Ok metadata ->
- func metadata
-
- Err error ->
- { model | overlay = Overlay.badMetadata error } ! []
-
-
-loadNewHistory
- : Encode.Value
- -> UserUpdate model msg
- -> Model model msg
- -> ( Model model msg, Cmd (Msg msg) )
-loadNewHistory rawHistory userUpdate model =
- let
- initialUserModel =
- History.initialModel model.history
-
- pureUserUpdate msg userModel =
- Tuple.first (userUpdate msg userModel)
-
- decoder =
- History.decoder initialUserModel pureUserUpdate
- in
- case Decode.decodeValue decoder rawHistory of
- Err _ ->
- { model | overlay = Overlay.corruptImport } ! []
-
- Ok (latestUserModel, newHistory) ->
- { model
- | history = newHistory
- , state = Running latestUserModel
- , expando = Expando.init latestUserModel
- , overlay = Overlay.none
- }
- ! []
-
-
-
--- UPDATE - USER MESSAGES
-
-
-updateUserMsg
- : UserUpdate model msg
- -> Task Never ()
- -> msg
- -> Model model msg
- -> (Model model msg, Cmd (Msg msg))
-updateUserMsg userUpdate scrollTask userMsg ({ history, state, expando } as model) =
- let
- userModel =
- getLatestModel state
-
- newHistory =
- History.add userMsg userModel history
-
- (newUserModel, userCmds) =
- userUpdate userMsg userModel
-
- commands =
- Cmd.map UserMsg userCmds
- in
- case state of
- Running _ ->
- { model
- | history = newHistory
- , state = Running newUserModel
- , expando = Expando.merge newUserModel expando
- }
- ! [ commands, runIf model.isDebuggerOpen scrollTask ]
-
- Paused index indexModel _ ->
- { model
- | history = newHistory
- , state = Paused index indexModel newUserModel
- }
- ! [ commands ]
-
-
-runIf : Bool -> Task Never () -> Cmd (Msg msg)
-runIf bool task =
- if bool then
- Task.perform (always NoOp) task
- else
- Cmd.none
-
-
-getLatestModel : State model -> model
-getLatestModel state =
- case state of
- Running model ->
- model
-
- Paused _ _ model ->
- model
-
-
-
--- SUBSCRIPTIONS
-
-
-wrapSubs : (model -> Sub msg) -> Model model msg -> Sub (Msg msg)
-wrapSubs userSubscriptions {state} =
- getLatestModel state
- |> userSubscriptions
- |> Sub.map UserMsg
-
-
-
--- VIEW
-
-
-wrapView : (model -> Node msg) -> Model model msg -> Node (Msg msg)
-wrapView userView { state } =
- let
- currentModel =
- case state of
- Running model ->
- model
-
- Paused _ oldModel _ ->
- oldModel
- in
- VDom.map UserMsg (userView currentModel)
-
-
-
--- SMALL DEBUG VIEW
-
-
-viewIn : Model model msg -> ( Overlay.Block, Node (Msg msg) )
-viewIn { history, state, overlay, isDebuggerOpen } =
- let
- isPaused =
- case state of
- Running _ ->
- False
-
- Paused _ _ _ ->
- True
- in
- Overlay.view overlayConfig isPaused isDebuggerOpen (History.size history) overlay
-
-
-overlayConfig : Overlay.Config (Msg msg)
-overlayConfig =
- { resume = Resume
- , open = Open
- , importHistory = Import
- , exportHistory = Export
- , wrap = OverlayMsg
- }
-
-
-
--- BIG DEBUG VIEW
-
-
-viewOut : Model model msg -> Node (Msg msg)
-viewOut { history, state, expando } =
- VDom.div
- [ VDom.id "debugger" ]
- [ styles
- , viewSidebar state history
- , VDom.map ExpandoMsg <|
- VDom.div [ VDom.id "values" ] [ Expando.view Nothing expando ]
- ]
-
-
-viewSidebar : State model -> History model msg -> Node (Msg msg)
-viewSidebar state history =
- let
- maybeIndex =
- case state of
- Running _ ->
- Nothing
-
- Paused index _ _ ->
- Just index
- in
- VDom.div [ VDom.class "debugger-sidebar" ]
- [ VDom.map Jump (History.view maybeIndex history)
- , playButton maybeIndex
- ]
-
-
-playButton : Maybe Int -> Node (Msg msg)
-playButton maybeIndex =
- VDom.div [ VDom.class "debugger-sidebar-controls" ]
- [ viewResumeButton maybeIndex
- , VDom.div [ VDom.class "debugger-sidebar-controls-import-export" ]
- [ button Import "Import"
- , VDom.text " / "
- , button Export "Export"
- ]
- ]
-
-
-button msg label =
- VDom.span
- [ VDom.onClick msg
- , VDom.style [("cursor","pointer")]
- ]
- [ VDom.text label ]
-
-
-viewResumeButton maybeIndex =
- case maybeIndex of
- Nothing ->
- VDom.text ""
-
- Just _ ->
- resumeButton
-
-
-resumeButton =
- VDom.div
- [ VDom.onClick Resume
- , VDom.class "debugger-sidebar-controls-resume"
- ]
- [ VDom.text "Resume"
- ]
-
-
-
--- STYLE
-
-
-styles : Node msg
-styles =
- VDom.node "style" [] [ VDom.text """
-
-html {
- overflow: hidden;
- height: 100%;
-}
-
-body {
- height: 100%;
- overflow: auto;
-}
-
-#debugger {
- width: 100%
- height: 100%;
- font-family: monospace;
-}
-
-#values {
- display: block;
- float: left;
- height: 100%;
- width: calc(100% - 30ch);
- margin: 0;
- overflow: auto;
- cursor: default;
-}
-
-.debugger-sidebar {
- display: block;
- float: left;
- width: 30ch;
- height: 100%;
- color: white;
- background-color: rgb(61, 61, 61);
-}
-
-.debugger-sidebar-controls {
- width: 100%;
- text-align: center;
- background-color: rgb(50, 50, 50);
-}
-
-.debugger-sidebar-controls-import-export {
- width: 100%;
- height: 24px;
- line-height: 24px;
- font-size: 12px;
-}
-
-.debugger-sidebar-controls-resume {
- width: 100%;
- height: 30px;
- line-height: 30px;
- cursor: pointer;
-}
-
-.debugger-sidebar-controls-resume:hover {
- background-color: rgb(41, 41, 41);
-}
-
-.debugger-sidebar-messages {
- width: 100%;
- overflow-y: auto;
- height: calc(100% - 24px);
-}
-
-.debugger-sidebar-messages-paused {
- width: 100%;
- overflow-y: auto;
- height: calc(100% - 54px);
-}
-
-.messages-entry {
- cursor: pointer;
- width: 100%;
-}
-
-.messages-entry:hover {
- background-color: rgb(41, 41, 41);
-}
-
-.messages-entry-selected, .messages-entry-selected:hover {
- background-color: rgb(10, 10, 10);
-}
-
-.messages-entry-content {
- width: calc(100% - 7ch);
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 1ch;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- display: inline-block;
-}
-
-.messages-entry-index {
- color: #666;
- width: 5ch;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-right: 1ch;
- text-align: right;
- display: block;
- float: right;
-}
-
-""" ]
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Expando.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Expando.elm
deleted file mode 100644
index 88b5857..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Expando.elm
+++ /dev/null
@@ -1,659 +0,0 @@
-module VirtualDom.Expando exposing
- ( Expando
- , init
- , merge
- , Msg, update
- , view
- )
-
-
-import Dict exposing (Dict)
-import Json.Decode as Json
-import Native.Debug
-import VirtualDom.Helpers as VDom exposing (Node, text, div, span, class, onClick)
-
-
-
--- MODEL
-
-
-type Expando
- = S String
- | Primitive String
- | Sequence SeqType Bool (List Expando)
- | Dictionary Bool (List (Expando, Expando))
- | Record Bool (Dict String Expando)
- | Constructor (Maybe String) Bool (List Expando)
-
-
-type SeqType = ListSeq | SetSeq | ArraySeq
-
-
-seqTypeToString : Int -> SeqType -> String
-seqTypeToString n seqType =
- case seqType of
- ListSeq ->
- "List(" ++ toString n ++ ")"
-
- SetSeq ->
- "Set(" ++ toString n ++ ")"
-
- ArraySeq ->
- "Array(" ++ toString n ++ ")"
-
-
-
--- INITIALIZE
-
-
-init : a -> Expando
-init value =
- initHelp True (Native.Debug.init value)
-
-
-initHelp : Bool -> Expando -> Expando
-initHelp isOuter expando =
- case expando of
- S _ ->
- expando
-
- Primitive _ ->
- expando
-
- Sequence seqType isClosed items ->
- if isOuter then
- Sequence seqType False (List.map (initHelp False) items)
- else if List.length items <= 8 then
- Sequence seqType False items
- else
- expando
-
- Dictionary isClosed keyValuePairs ->
- if isOuter then
- Dictionary False (List.map (\(k,v) -> (k, initHelp False v)) keyValuePairs)
- else if List.length keyValuePairs <= 8 then
- Dictionary False keyValuePairs
- else
- expando
-
- Record isClosed entries ->
- if isOuter then
- Record False (Dict.map (\_ v -> initHelp False v) entries)
- else if Dict.size entries <= 4 then
- Record False entries
- else
- expando
-
- Constructor maybeName isClosed args ->
- if isOuter then
- Constructor maybeName False (List.map (initHelp False) args)
- else if List.length args <= 4 then
- Constructor maybeName False args
- else
- expando
-
-
-
--- PRESERVE OLD EXPANDO STATE (open/closed)
-
-
-merge : a -> Expando -> Expando
-merge value expando =
- mergeHelp expando (Native.Debug.init value)
-
-
-mergeHelp : Expando -> Expando -> Expando
-mergeHelp old new =
- case ( old, new ) of
- ( _, S _ ) ->
- new
-
- ( _, Primitive _ ) ->
- new
-
- ( Sequence _ isClosed oldValues, Sequence seqType _ newValues ) ->
- Sequence seqType isClosed (mergeListHelp oldValues newValues)
-
- ( Dictionary isClosed _, Dictionary _ keyValuePairs ) ->
- Dictionary isClosed keyValuePairs
-
- ( Record isClosed oldDict, Record _ newDict ) ->
- Record isClosed <| Dict.map (mergeDictHelp oldDict) newDict
-
- ( Constructor _ isClosed oldValues, Constructor maybeName _ newValues ) ->
- Constructor maybeName isClosed (mergeListHelp oldValues newValues)
-
- _ ->
- new
-
-
-mergeListHelp : List Expando -> List Expando -> List Expando
-mergeListHelp olds news =
- case (olds, news) of
- ( [], _ ) ->
- news
-
- ( _, [] ) ->
- news
-
- ( x :: xs, y :: ys ) ->
- mergeHelp x y :: mergeListHelp xs ys
-
-
-mergeDictHelp : Dict String Expando -> String -> Expando -> Expando
-mergeDictHelp oldDict key value =
- case Dict.get key oldDict of
- Nothing ->
- value
-
- Just oldValue ->
- mergeHelp oldValue value
-
-
-
--- UPDATE
-
-
-type Msg
- = Toggle
- | Index Redirect Int Msg
- | Field String Msg
-
-
-type Redirect = None | Key | Value
-
-
-update : Msg -> Expando -> Expando
-update msg value =
- case value of
- S _ ->
- Debug.crash "No messages for primitives"
-
- Primitive _ ->
- Debug.crash "No messages for primitives"
-
- Sequence seqType isClosed valueList ->
- case msg of
- Toggle ->
- Sequence seqType (not isClosed) valueList
-
- Index None index subMsg ->
- Sequence seqType isClosed <|
- updateIndex index (update subMsg) valueList
-
- Index _ _ _ ->
- Debug.crash "No redirected indexes on sequences"
-
- Field _ _ ->
- Debug.crash "No field on sequences"
-
- Dictionary isClosed keyValuePairs ->
- case msg of
- Toggle ->
- Dictionary (not isClosed) keyValuePairs
-
- Index redirect index subMsg ->
- case redirect of
- None ->
- Debug.crash "must have redirect for dictionaries"
-
- Key ->
- Dictionary isClosed <|
- updateIndex index (\(k,v) -> (update subMsg k, v)) keyValuePairs
-
- Value ->
- Dictionary isClosed <|
- updateIndex index (\(k,v) -> (k, update subMsg v)) keyValuePairs
-
- Field _ _ ->
- Debug.crash "no field for dictionaries"
-
- Record isClosed valueDict ->
- case msg of
- Toggle ->
- Record (not isClosed) valueDict
-
- Index _ _ _ ->
- Debug.crash "No index for records"
-
- Field field subMsg ->
- Record isClosed (Dict.update field (updateField subMsg) valueDict)
-
- Constructor maybeName isClosed valueList ->
- case msg of
- Toggle ->
- Constructor maybeName (not isClosed) valueList
-
- Index None index subMsg ->
- Constructor maybeName isClosed <|
- updateIndex index (update subMsg) valueList
-
- Index _ _ _ ->
- Debug.crash "No redirected indexes on sequences"
-
- Field _ _ ->
- Debug.crash "No field for constructors"
-
-
-updateIndex : Int -> (a -> a) -> List a -> List a
-updateIndex n func list =
- case list of
- [] ->
- []
-
- x :: xs ->
- if n <= 0 then
- func x :: xs
- else
- x :: updateIndex (n-1) func xs
-
-
-updateField : Msg -> Maybe Expando -> Maybe Expando
-updateField msg maybeExpando =
- case maybeExpando of
- Nothing ->
- Debug.crash "key does not exist"
-
- Just expando ->
- Just (update msg expando)
-
-
-
--- VIEW
-
-
-view : Maybe String -> Expando -> Node Msg
-view maybeKey expando =
- case expando of
- S stringRep ->
- div [ leftPad maybeKey ] (lineStarter maybeKey Nothing [span [red] [text stringRep]])
-
- Primitive stringRep ->
- div [ leftPad maybeKey ] (lineStarter maybeKey Nothing [span [blue] [text stringRep]])
-
- Sequence seqType isClosed valueList ->
- viewSequence maybeKey seqType isClosed valueList
-
- Dictionary isClosed keyValuePairs ->
- viewDictionary maybeKey isClosed keyValuePairs
-
- Record isClosed valueDict ->
- viewRecord maybeKey isClosed valueDict
-
- Constructor maybeName isClosed valueList ->
- viewConstructor maybeKey maybeName isClosed valueList
-
-
-
--- VIEW SEQUENCE
-
-
-viewSequence : Maybe String -> SeqType -> Bool -> List Expando -> Node Msg
-viewSequence maybeKey seqType isClosed valueList =
- let
- starter =
- seqTypeToString (List.length valueList) seqType
- in
- div [ leftPad maybeKey ]
- [ div [ onClick Toggle ] (lineStarter maybeKey (Just isClosed) [text starter])
- , if isClosed then text "" else viewSequenceOpen valueList
- ]
-
-
-viewSequenceOpen : List Expando -> Node Msg
-viewSequenceOpen values =
- div [] (List.indexedMap viewConstructorEntry values)
-
-
-
--- VIEW DICTIONARY
-
-
-viewDictionary : Maybe String -> Bool -> List (Expando, Expando) -> Node Msg
-viewDictionary maybeKey isClosed keyValuePairs =
- let
- starter =
- "Dict(" ++ toString (List.length keyValuePairs) ++ ")"
- in
- div [ leftPad maybeKey ]
- [ div [ onClick Toggle ] (lineStarter maybeKey (Just isClosed) [text starter])
- , if isClosed then text "" else viewDictionaryOpen keyValuePairs
- ]
-
-
-viewDictionaryOpen : List (Expando, Expando) -> Node Msg
-viewDictionaryOpen keyValuePairs =
- div [] (List.indexedMap viewDictionaryEntry keyValuePairs)
-
-
-viewDictionaryEntry : Int -> (Expando, Expando) -> Node Msg
-viewDictionaryEntry index (key, value) =
- case key of
- S stringRep ->
- VDom.map (Index Value index) (view (Just stringRep) value)
-
- Primitive stringRep ->
- VDom.map (Index Value index) (view (Just stringRep) value)
-
- _ ->
- div []
- [ VDom.map (Index Key index) (view (Just "key") key)
- , VDom.map (Index Value index) (view (Just "value") value)
- ]
-
-
-
--- VIEW RECORD
-
-
-viewRecord : Maybe String -> Bool -> Dict String Expando -> Node Msg
-viewRecord maybeKey isClosed record =
- let
- (start, middle, end) =
- if isClosed then
- ( Tuple.second (viewTinyRecord record), text "", text "" )
- else
- ( [ text "{" ], viewRecordOpen record, div [leftPad (Just ())] [text "}"] )
- in
- div [ leftPad maybeKey ]
- [ div [ onClick Toggle ] (lineStarter maybeKey (Just isClosed) start)
- , middle
- , end
- ]
-
-
-viewRecordOpen : Dict String Expando -> Node Msg
-viewRecordOpen record =
- div [] (List.map viewRecordEntry (Dict.toList record))
-
-
-viewRecordEntry : (String, Expando) -> Node Msg
-viewRecordEntry (field, value) =
- VDom.map (Field field) (view (Just field) value)
-
-
-
--- VIEW CONSTRUCTOR
-
-
-viewConstructor : Maybe String -> Maybe String -> Bool -> List Expando -> Node Msg
-viewConstructor maybeKey maybeName isClosed valueList =
- let
- tinyArgs =
- List.map (Tuple.second << viewExtraTiny) valueList
-
- description =
- case (maybeName, tinyArgs) of
- (Nothing, []) ->
- [ text "()" ]
-
- (Nothing, x :: xs) ->
- text "( "
- :: span [] x
- :: List.foldr (\args rest -> text ", " :: span [] args :: rest) [text " )"] xs
-
- (Just name, []) ->
- [ text name ]
-
- (Just name, x :: xs) ->
- text (name ++ " ")
- :: span [] x
- :: List.foldr (\args rest -> text " " :: span [] args :: rest) [] xs
-
- (maybeIsClosed, openHtml) =
- case valueList of
- [] ->
- ( Nothing, div [] [] )
-
- [entry] ->
- case entry of
- S _ ->
- ( Nothing, div [] [] )
-
- Primitive _ ->
- ( Nothing, div [] [] )
-
- Sequence _ _ subValueList ->
- ( Just isClosed
- , if isClosed then div [] [] else VDom.map (Index None 0) (viewSequenceOpen subValueList)
- )
-
- Dictionary _ keyValuePairs ->
- ( Just isClosed
- , if isClosed then div [] [] else VDom.map (Index None 0) (viewDictionaryOpen keyValuePairs)
- )
-
- Record _ record ->
- ( Just isClosed
- , if isClosed then div [] [] else VDom.map (Index None 0) (viewRecordOpen record)
- )
-
- Constructor _ _ subValueList ->
- ( Just isClosed
- , if isClosed then div [] [] else VDom.map (Index None 0) (viewConstructorOpen subValueList)
- )
-
- _ ->
- ( Just isClosed
- , if isClosed then div [] [] else viewConstructorOpen valueList
- )
- in
- div [ leftPad maybeKey ]
- [ div [ onClick Toggle ] (lineStarter maybeKey maybeIsClosed description)
- , openHtml
- ]
-
-
-viewConstructorOpen : List Expando -> Node Msg
-viewConstructorOpen valueList =
- div [] (List.indexedMap viewConstructorEntry valueList)
-
-
-viewConstructorEntry : Int -> Expando -> Node Msg
-viewConstructorEntry index value =
- VDom.map (Index None index) (view (Just (toString index)) value)
-
-
-
--- VIEW TINY
-
-
-viewTiny : Expando -> ( Int, List (Node msg) )
-viewTiny value =
- case value of
- S stringRep ->
- let
- str =
- elideMiddle stringRep
- in
- ( String.length str
- , [ span [red] [text str] ]
- )
-
- Primitive stringRep ->
- ( String.length stringRep
- , [ span [blue] [text stringRep] ]
- )
-
- Sequence seqType _ valueList ->
- viewTinyHelp <|
- seqTypeToString (List.length valueList) seqType
-
- Dictionary _ keyValuePairs ->
- viewTinyHelp <|
- "Dict(" ++ toString (List.length keyValuePairs) ++ ")"
-
- Record _ record ->
- viewTinyRecord record
-
- Constructor maybeName _ [] ->
- viewTinyHelp <|
- Maybe.withDefault "Unit" maybeName
-
- Constructor maybeName _ valueList ->
- viewTinyHelp <|
- case maybeName of
- Nothing ->
- "Tuple(" ++ toString (List.length valueList) ++ ")"
-
- Just name ->
- name ++ " …"
-
-
-viewTinyHelp : String -> ( Int, List (Node msg) )
-viewTinyHelp str =
- ( String.length str, [text str] )
-
-
-elideMiddle : String -> String
-elideMiddle str =
- if String.length str <= 18 then
- str
-
- else
- String.left 8 str ++ "..." ++ String.right 8 str
-
-
-
--- VIEW TINY RECORDS
-
-
-viewTinyRecord : Dict String Expando -> ( Int, List (Node msg) )
-viewTinyRecord record =
- if Dict.isEmpty record then
- ( 2, [text "{}"] )
-
- else
- viewTinyRecordHelp 0 "{ " (Dict.toList record)
-
-
-viewTinyRecordHelp : Int -> String -> List (String, Expando) -> ( Int, List (Node msg) )
-viewTinyRecordHelp length starter entries =
- case entries of
- [] ->
- ( length + 2, [ text " }" ] )
-
- (field, value) :: rest ->
- let
- fieldLen =
- String.length field
-
- (valueLen, valueNodes) =
- viewExtraTiny value
-
- newLength =
- length + fieldLen + valueLen + 5
- in
- if newLength > 60 then
- ( length + 4, [text ", … }"] )
-
- else
- let
- ( finalLength, otherNodes ) =
- viewTinyRecordHelp newLength ", " rest
- in
- ( finalLength
- , text starter
- :: span [purple] [text field]
- :: text " = "
- :: span [] valueNodes
- :: otherNodes
- )
-
-
-viewExtraTiny : Expando -> ( Int, List (Node msg) )
-viewExtraTiny value =
- case value of
- Record _ record ->
- viewExtraTinyRecord 0 "{" (Dict.keys record)
-
- _ ->
- viewTiny value
-
-
-viewExtraTinyRecord : Int -> String -> List String -> ( Int, List (Node msg) )
-viewExtraTinyRecord length starter entries =
- case entries of
- [] ->
- ( length + 1, [text "}"] )
-
- field :: rest ->
- let
- nextLength =
- length + String.length field + 1
- in
- if nextLength > 18 then
- ( length + 2, [text "…}"])
-
- else
- let
- (finalLength, otherNodes) =
- viewExtraTinyRecord nextLength "," rest
- in
- ( finalLength
- , text starter :: span [purple] [text field] :: otherNodes
- )
-
-
-
--- VIEW HELPERS
-
-
-lineStarter : Maybe String -> Maybe Bool -> List (Node msg) -> List (Node msg)
-lineStarter maybeKey maybeIsClosed description =
- let
- arrow =
- case maybeIsClosed of
- Nothing ->
- makeArrow ""
-
- Just True ->
- makeArrow "▸"
-
- Just False ->
- makeArrow "▾"
- in
- case maybeKey of
- Nothing ->
- arrow :: description
-
- Just key ->
- arrow :: span [purple] [text key] :: text " = " :: description
-
-
-makeArrow : String -> Node msg
-makeArrow arrow =
- span
- [ VDom.style
- [ ("color", "#777")
- , ("padding-left", "2ch")
- , ("width", "2ch")
- , ("display", "inline-block")
- ]
- ]
- [ text arrow ]
-
-
-leftPad : Maybe a -> VDom.Property msg
-leftPad maybeKey =
- case maybeKey of
- Nothing ->
- VDom.style []
-
- Just _ ->
- VDom.style [("padding-left", "4ch")]
-
-
-red : VDom.Property msg
-red =
- VDom.style [("color", "rgb(196, 26, 22)")]
-
-
-blue : VDom.Property msg
-blue =
- VDom.style [("color", "rgb(28, 0, 207)")]
-
-
-purple : VDom.Property msg
-purple =
- VDom.style [("color", "rgb(136, 19, 145)")]
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Helpers.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Helpers.elm
deleted file mode 100644
index 104e23b..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Helpers.elm
+++ /dev/null
@@ -1,137 +0,0 @@
-module VirtualDom.Helpers exposing
- ( Node
- , text, node, div, span, a, h1
- , Property, property, attribute
- , class, id, href
- , style
- , on, onWithOptions, Options, defaultOptions
- , onClick
- , map
- , lazy, lazy2, lazy3
- , keyedNode
- )
-
-
-import Json.Decode as Decode
-import Json.Encode as Encode
-import Native.VirtualDom
-
-
-type Node msg = Node
-
-
-node : String -> List (Property msg) -> List (Node msg) -> Node msg
-node =
- Native.VirtualDom.node
-
-
-text : String -> Node msg
-text =
- Native.VirtualDom.text
-
-
-div : List (Property msg) -> List (Node msg) -> Node msg
-div =
- node "div"
-
-
-span : List (Property msg) -> List (Node msg) -> Node msg
-span =
- node "span"
-
-
-a : List (Property msg) -> List (Node msg) -> Node msg
-a =
- node "a"
-
-
-h1 : List (Property msg) -> List (Node msg) -> Node msg
-h1 =
- node "h1"
-
-
-map : (a -> msg) -> Node a -> Node msg
-map =
- Native.VirtualDom.map
-
-
-type Property msg = Property
-
-
-property : String -> Decode.Value -> Property msg
-property =
- Native.VirtualDom.property
-
-
-attribute : String -> String -> Property msg
-attribute =
- Native.VirtualDom.attribute
-
-
-class : String -> Property msg
-class name =
- property "className" (Encode.string name)
-
-
-href : String -> Property msg
-href name =
- property "href" (Encode.string name)
-
-
-id : String -> Property msg
-id =
- attribute "id"
-
-
-style : List (String, String) -> Property msg
-style =
- Native.VirtualDom.style
-
-
-on : String -> Decode.Decoder msg -> Property msg
-on eventName decoder =
- onWithOptions eventName defaultOptions decoder
-
-
-onClick : msg -> Property msg
-onClick msg =
- on "click" (Decode.succeed msg)
-
-
-onWithOptions : String -> Options -> Decode.Decoder msg -> Property msg
-onWithOptions =
- Native.VirtualDom.on
-
-
-type alias Options =
- { stopPropagation : Bool
- , preventDefault : Bool
- }
-
-
-defaultOptions : Options
-defaultOptions =
- { stopPropagation = False
- , preventDefault = False
- }
-
-
-lazy : (a -> Node msg) -> a -> Node msg
-lazy =
- Native.VirtualDom.lazy
-
-
-lazy2 : (a -> b -> Node msg) -> a -> b -> Node msg
-lazy2 =
- Native.VirtualDom.lazy2
-
-
-lazy3 : (a -> b -> c -> Node msg) -> a -> b -> c -> Node msg
-lazy3 =
- Native.VirtualDom.lazy3
-
-
-keyedNode : String -> List (Property msg) -> List ( String, Node msg ) -> Node msg
-keyedNode =
- Native.VirtualDom.keyedNode
-
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/History.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/History.elm
deleted file mode 100644
index bd9a28d..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/History.elm
+++ /dev/null
@@ -1,290 +0,0 @@
-module VirtualDom.History exposing
- ( History
- , empty
- , size
- , initialModel
- , add
- , get
- , view
- , decoder
- , encode
- )
-
-
-import Array exposing (Array)
-import Json.Decode as Decode
-import Json.Encode as Encode
-import Native.Debug
-import VirtualDom.Helpers as VDom exposing (Node)
-import VirtualDom.Metadata as Metadata
-
-
-
--- CONSTANTS
-
-
-maxSnapshotSize : Int
-maxSnapshotSize =
- 64
-
-
-
--- HISTORY
-
-
-type alias History model msg =
- { snapshots : Array (Snapshot model msg)
- , recent : RecentHistory model msg
- , numMessages : Int
- }
-
-
-type alias RecentHistory model msg =
- { model : model
- , messages : List msg
- , numMessages : Int
- }
-
-
-type alias Snapshot model msg =
- { model : model
- , messages : Array msg
- }
-
-
-empty : model -> History model msg
-empty model =
- History Array.empty (RecentHistory model [] 0) 0
-
-
-size : History model msg -> Int
-size history =
- history.numMessages
-
-
-initialModel : History model msg -> model
-initialModel { snapshots, recent } =
- case Array.get 0 snapshots of
- Just { model } ->
- model
-
- Nothing ->
- recent.model
-
-
-
--- JSON
-
-
-decoder : model -> (msg -> model -> model) -> Decode.Decoder (model, History model msg)
-decoder initialModel update =
- let
- addMessage rawMsg (model, history) =
- let
- msg =
- jsToElm rawMsg
- in
- (update msg model, add msg model history)
-
- updateModel rawMsgs =
- List.foldl addMessage (initialModel, empty initialModel) rawMsgs
- in
- Decode.map updateModel (Decode.list Decode.value)
-
-
-jsToElm : Encode.Value -> a
-jsToElm =
- Native.Debug.unsafeCoerce
-
-
-encode : History model msg -> Encode.Value
-encode { snapshots, recent } =
- let
- recentJson =
- List.map elmToJs (List.reverse recent.messages)
- in
- Encode.list <| Array.foldr encodeHelp recentJson snapshots
-
-
-encodeHelp : Snapshot model msg -> List Encode.Value -> List Encode.Value
-encodeHelp snapshot allMessages =
- Array.foldl (\elm msgs -> elmToJs elm :: msgs) allMessages snapshot.messages
-
-
-elmToJs : a -> Encode.Value
-elmToJs =
- Native.Debug.unsafeCoerce
-
-
-
--- ADD MESSAGES
-
-
-add : msg -> model -> History model msg -> History model msg
-add msg model { snapshots, recent, numMessages } =
- case addRecent msg model recent of
- (Just snapshot, newRecent) ->
- History (Array.push snapshot snapshots) newRecent (numMessages + 1)
-
- (Nothing, newRecent) ->
- History snapshots newRecent (numMessages + 1)
-
-
-addRecent
- : msg
- -> model
- -> RecentHistory model msg
- -> ( Maybe (Snapshot model msg), RecentHistory model msg )
-addRecent msg newModel { model, messages, numMessages } =
- if numMessages == maxSnapshotSize then
- ( Just (Snapshot model (Array.fromList messages))
- , RecentHistory newModel [msg] 1
- )
-
- else
- ( Nothing
- , RecentHistory model (msg :: messages) (numMessages + 1)
- )
-
-
-
--- GET SUMMARY
-
-
-get : (msg -> model -> (model, a)) -> Int -> History model msg -> ( model, msg )
-get update index { snapshots, recent, numMessages } =
- let
- snapshotMax =
- numMessages - recent.numMessages
- in
- if index >= snapshotMax then
- undone <|
- List.foldr (getHelp update) (Stepping (index - snapshotMax) recent.model) recent.messages
-
- else
- case Array.get (index // maxSnapshotSize) snapshots of
- Nothing ->
- Debug.crash "UI should only let you ask for real indexes!"
-
- Just { model, messages } ->
- undone <|
- Array.foldr (getHelp update) (Stepping (rem index maxSnapshotSize) model) messages
-
-
-type GetResult model msg
- = Stepping Int model
- | Done msg model
-
-
-getHelp : (msg -> model -> (model, a)) -> msg -> GetResult model msg -> GetResult model msg
-getHelp update msg getResult =
- case getResult of
- Done _ _ ->
- getResult
-
- Stepping n model ->
- if n == 0 then
- Done msg (Tuple.first (update msg model))
-
- else
- Stepping (n - 1) (Tuple.first (update msg model))
-
-
-undone : GetResult model msg -> ( model, msg )
-undone getResult =
- case getResult of
- Done msg model ->
- ( model, msg )
-
- Stepping _ _ ->
- Debug.crash "Bug in History.get"
-
-
-
--- VIEW
-
-
-view : Maybe Int -> History model msg -> Node Int
-view maybeIndex { snapshots, recent, numMessages } =
- let
- (index, className) =
- case maybeIndex of
- Nothing ->
- ( -1, "debugger-sidebar-messages" )
- Just i ->
- ( i, "debugger-sidebar-messages-paused" )
-
- oldStuff =
- VDom.lazy2 viewSnapshots index snapshots
-
- newStuff =
- Tuple.second <| List.foldl (consMsg index) (numMessages - 1, []) recent.messages
- in
- VDom.div [ VDom.class className ] (oldStuff :: newStuff)
-
-
-
--- VIEW SNAPSHOTS
-
-
-viewSnapshots : Int -> Array (Snapshot model msg) -> Node Int
-viewSnapshots currentIndex snapshots =
- let
- highIndex =
- maxSnapshotSize * Array.length snapshots
- in
- VDom.div [] <| Tuple.second <|
- Array.foldr (consSnapshot currentIndex) (highIndex, []) snapshots
-
-
-consSnapshot : Int -> Snapshot model msg -> ( Int, List (Node Int) ) -> ( Int, List (Node Int) )
-consSnapshot currentIndex snapshot (index, rest) =
- let
- nextIndex =
- index - maxSnapshotSize
-
- currentIndexHelp =
- if nextIndex <= currentIndex && currentIndex < index then currentIndex else -1
- in
- ( index - maxSnapshotSize
- , VDom.lazy3 viewSnapshot currentIndexHelp index snapshot :: rest
- )
-
-
-viewSnapshot : Int -> Int -> Snapshot model msg -> Node Int
-viewSnapshot currentIndex index { messages } =
- VDom.div [] <| Tuple.second <|
- Array.foldl (consMsg currentIndex) (index - 1, []) messages
-
-
-
--- VIEW MESSAGE
-
-
-consMsg : Int -> msg -> ( Int, List (Node Int) ) -> ( Int, List (Node Int) )
-consMsg currentIndex msg (index, rest) =
- ( index - 1
- , VDom.lazy3 viewMessage currentIndex index msg :: rest
- )
-
-
-viewMessage : Int -> Int -> msg -> Node Int
-viewMessage currentIndex index msg =
- let
- className =
- if currentIndex == index then
- "messages-entry messages-entry-selected"
-
- else
- "messages-entry"
-
- messageName =
- Native.Debug.messageToString msg
- in
- VDom.div
- [ VDom.class className
- , VDom.on "click" (Decode.succeed index)
- ]
- [ VDom.span [VDom.class "messages-entry-content", VDom.attribute "title" messageName ] [ VDom.text messageName ]
- , VDom.span [VDom.class "messages-entry-index"] [ VDom.text (toString index) ]
- ]
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Metadata.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Metadata.elm
deleted file mode 100644
index 74e7316..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Metadata.elm
+++ /dev/null
@@ -1,326 +0,0 @@
-module VirtualDom.Metadata exposing
- ( Metadata
- , check
- , decode, decoder, encode
- , Error, ProblemType, Problem(..)
- )
-
-
-import Array exposing (Array)
-import Dict exposing (Dict)
-import Json.Decode as Decode
-import Json.Encode as Encode
-import VirtualDom.Report as Report exposing (Report)
-
-
-
--- METADATA
-
-
-type alias Metadata =
- { versions : Versions
- , types : Types
- }
-
-
-
--- VERSIONS
-
-
-type alias Versions =
- { elm : String
- }
-
-
-
--- TYPES
-
-
-type alias Types =
- { message : String
- , aliases : Dict String Alias
- , unions : Dict String Union
- }
-
-
-type alias Alias =
- { args : List String
- , tipe : String
- }
-
-
-type alias Union =
- { args : List String
- , tags : Dict String (List String)
- }
-
-
-
--- PORTABILITY
-
-
-isPortable : Metadata -> Maybe Error
-isPortable {types} =
- let
- badAliases =
- Dict.foldl collectBadAliases [] types.aliases
- in
- case Dict.foldl collectBadUnions badAliases types.unions of
- [] ->
- Nothing
-
- problems ->
- Just (Error types.message problems)
-
-
-type alias Error =
- { message : String
- , problems : List ProblemType
- }
-
-
-type alias ProblemType =
- { name : String
- , problems : List Problem
- }
-
-
-type Problem
- = Function
- | Decoder
- | Task
- | Process
- | Socket
- | Request
- | Program
- | VirtualDom
-
-
-collectBadAliases : String -> Alias -> List ProblemType -> List ProblemType
-collectBadAliases name {tipe} list =
- case findProblems tipe of
- [] ->
- list
-
- problems ->
- ProblemType name problems :: list
-
-
-collectBadUnions : String -> Union -> List ProblemType -> List ProblemType
-collectBadUnions name {tags} list =
- case List.concatMap findProblems (List.concat (Dict.values tags)) of
- [] ->
- list
-
- problems ->
- ProblemType name problems :: list
-
-
-findProblems : String -> List Problem
-findProblems tipe =
- List.filterMap (hasProblem tipe) problemTable
-
-
-hasProblem : String -> (Problem, String) -> Maybe Problem
-hasProblem tipe (problem, token) =
- if String.contains token tipe then Just problem else Nothing
-
-
-problemTable : List (Problem, String)
-problemTable =
- [ ( Function, "->" )
- , ( Decoder, "Json.Decode.Decoder" )
- , ( Task, "Task.Task" )
- , ( Process, "Process.Id" )
- , ( Socket, "WebSocket.LowLevel.WebSocket" )
- , ( Request, "Http.Request" )
- , ( Program, "Platform.Program" )
- , ( VirtualDom, "VirtualDom.Node" )
- , ( VirtualDom, "VirtualDom.Attribute" )
- ]
-
-
-
--- CHECK
-
-
-check : Metadata -> Metadata -> Report
-check old new =
- if old.versions.elm /= new.versions.elm then
- Report.VersionChanged old.versions.elm new.versions.elm
-
- else
- checkTypes old.types new.types
-
-
-checkTypes : Types -> Types -> Report
-checkTypes old new =
- if old.message /= new.message then
- Report.MessageChanged old.message new.message
-
- else
- []
- |> Dict.merge ignore checkAlias ignore old.aliases new.aliases
- |> Dict.merge ignore checkUnion ignore old.unions new.unions
- |> Report.SomethingChanged
-
-
-ignore : String -> value -> a -> a
-ignore key value report =
- report
-
-
-
--- CHECK ALIASES
-
-
-checkAlias : String -> Alias -> Alias -> List Report.Change -> List Report.Change
-checkAlias name old new changes =
- if old.tipe == new.tipe && old.args == new.args then
- changes
-
- else
- Report.AliasChange name :: changes
-
-
-
--- CHECK UNIONS
-
-
-checkUnion : String -> Union -> Union -> List Report.Change -> List Report.Change
-checkUnion name old new changes =
- let
- tagChanges =
- Dict.merge removeTag checkTag addTag old.tags new.tags <|
- Report.emptyTagChanges (old.args == new.args)
- in
- if Report.hasTagChanges tagChanges then
- changes
-
- else
- Report.UnionChange name tagChanges :: changes
-
-
-removeTag : String -> a -> Report.TagChanges -> Report.TagChanges
-removeTag tag _ changes =
- { changes | removed = tag :: changes.removed }
-
-
-addTag : String -> a -> Report.TagChanges -> Report.TagChanges
-addTag tag _ changes =
- { changes | added = tag :: changes.added }
-
-
-checkTag : String -> a -> a -> Report.TagChanges -> Report.TagChanges
-checkTag tag old new changes =
- if old == new then
- changes
-
- else
- { changes | changed = tag :: changes.changed }
-
-
-
--- JSON DECODE
-
-
-decode : Encode.Value -> Result Error Metadata
-decode value =
- case Decode.decodeValue decoder value of
- Err _ ->
- Debug.crash "Compiler is generating bad metadata. Report this at ."
-
- Ok metadata ->
- case isPortable metadata of
- Nothing ->
- Ok metadata
-
- Just error ->
- Err error
-
-
-decoder : Decode.Decoder Metadata
-decoder =
- Decode.map2 Metadata
- (Decode.field "versions" decodeVersions)
- (Decode.field "types" decodeTypes)
-
-
-decodeVersions : Decode.Decoder Versions
-decodeVersions =
- Decode.map Versions
- (Decode.field "elm" Decode.string)
-
-
-decodeTypes : Decode.Decoder Types
-decodeTypes =
- Decode.map3 Types
- (Decode.field "message" Decode.string)
- (Decode.field "aliases" (Decode.dict decodeAlias))
- (Decode.field "unions" (Decode.dict decodeUnion))
-
-
-decodeUnion : Decode.Decoder Union
-decodeUnion =
- Decode.map2 Union
- (Decode.field "args" (Decode.list Decode.string))
- (Decode.field "tags" (Decode.dict (Decode.list Decode.string)))
-
-
-decodeAlias : Decode.Decoder Alias
-decodeAlias =
- Decode.map2 Alias
- (Decode.field "args" (Decode.list Decode.string))
- (Decode.field "type" (Decode.string))
-
-
-
--- JSON ENCODE
-
-
-encode : Metadata -> Encode.Value
-encode { versions, types } =
- Encode.object
- [ ("versions", encodeVersions versions)
- , ("types", encodeTypes types)
- ]
-
-
-encodeVersions : Versions -> Encode.Value
-encodeVersions { elm } =
- Encode.object [("elm", Encode.string elm)]
-
-
-encodeTypes : Types -> Encode.Value
-encodeTypes { message, unions, aliases } =
- Encode.object
- [ ("message", Encode.string message)
- , ("aliases", encodeDict encodeAlias aliases)
- , ("unions", encodeDict encodeUnion unions)
- ]
-
-
-encodeAlias : Alias -> Encode.Value
-encodeAlias { args, tipe } =
- Encode.object
- [ ("args", Encode.list (List.map Encode.string args))
- , ("type", Encode.string tipe)
- ]
-
-
-encodeUnion : Union -> Encode.Value
-encodeUnion { args, tags } =
- Encode.object
- [ ("args", Encode.list (List.map Encode.string args))
- , ("tags", encodeDict (Encode.list << List.map Encode.string) tags)
- ]
-
-
-encodeDict : (a -> Encode.Value) -> Dict String a -> Encode.Value
-encodeDict f dict =
- dict
- |> Dict.map (\key value -> f value)
- |> Dict.toList
- |> Encode.object
-
-
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Overlay.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Overlay.elm
deleted file mode 100644
index 9e6bd2e..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Overlay.elm
+++ /dev/null
@@ -1,541 +0,0 @@
-module VirtualDom.Overlay exposing
- ( State, none, corruptImport, badMetadata
- , Msg, close, assessImport
- , isBlocking
- , Config
- , Block
- , view
- , viewImportExport
- )
-
-import Json.Decode as Decode
-import Json.Encode as Encode
-import VirtualDom.Helpers exposing (..)
-import VirtualDom.Metadata as Metadata exposing (Metadata)
-import VirtualDom.Report as Report exposing (Report)
-
-
-
-type State
- = None
- | BadMetadata Metadata.Error
- | BadImport Report
- | RiskyImport Report Encode.Value
-
-
-none : State
-none =
- None
-
-
-corruptImport : State
-corruptImport =
- BadImport Report.CorruptHistory
-
-
-badMetadata : Metadata.Error -> State
-badMetadata =
- BadMetadata
-
-
-isBlocking : State -> Bool
-isBlocking state =
- case state of
- None ->
- False
-
- _ ->
- True
-
-
-
--- UPDATE
-
-
-type Msg = Cancel | Proceed
-
-
-close : Msg -> State -> Maybe Encode.Value
-close msg state =
- case state of
- None ->
- Nothing
-
- BadMetadata _ ->
- Nothing
-
- BadImport _ ->
- Nothing
-
- RiskyImport _ rawHistory ->
- case msg of
- Cancel ->
- Nothing
-
- Proceed ->
- Just rawHistory
-
-
-assessImport : Metadata -> String -> Result State Encode.Value
-assessImport metadata jsonString =
- case Decode.decodeString uploadDecoder jsonString of
- Err _ ->
- Err corruptImport
-
- Ok (foreignMetadata, rawHistory) ->
- let
- report =
- Metadata.check foreignMetadata metadata
- in
- case Report.evaluate report of
- Report.Impossible ->
- Err (BadImport report)
-
- Report.Risky ->
- Err (RiskyImport report rawHistory)
-
- Report.Fine ->
- Ok rawHistory
-
-
-uploadDecoder : Decode.Decoder (Metadata, Encode.Value)
-uploadDecoder =
- Decode.map2 (,)
- (Decode.field "metadata" Metadata.decoder)
- (Decode.field "history" Decode.value)
-
-
-
--- VIEW
-
-
-type alias Config msg =
- { resume : msg
- , open : msg
- , importHistory : msg
- , exportHistory : msg
- , wrap : Msg -> msg
- }
-
-
-type Block = Normal | Pause | Message
-
-
-view : Config msg -> Bool -> Bool -> Int -> State -> ( Block, Node msg )
-view config isPaused isOpen numMsgs state =
- let
- (block, nodes) =
- viewHelp config isPaused isOpen numMsgs state
- in
- ( block
- , div [ class "elm-overlay" ] (styles :: nodes)
- )
-
-
-viewHelp : Config msg -> Bool -> Bool -> Int -> State -> ( Block, List (Node msg) )
-viewHelp config isPaused isOpen numMsgs state =
- case state of
- None ->
- let
- miniControls =
- if isOpen then [] else [ viewMiniControls config numMsgs ]
- in
- ( if isPaused then Pause else Normal
- , if isPaused && not isOpen then
- viewResume config :: miniControls
- else
- miniControls
- )
-
- BadMetadata badMetadata ->
- viewMessage config
- "Cannot use Import or Export"
- (viewBadMetadata badMetadata)
- (Accept "Ok")
-
- BadImport report ->
- viewMessage config
- "Cannot Import History"
- (viewReport True report)
- (Accept "Ok")
-
- RiskyImport report _ ->
- viewMessage config
- "Warning"
- (viewReport False report)
- (Choose "Cancel" "Import Anyway")
-
-
-viewResume config =
- div [ class "elm-overlay-resume", onClick config.resume ]
- [ div [class "elm-overlay-resume-words"] [text "Click to Resume"] ]
-
-
-
--- VIEW MESSAGE
-
-
-viewMessage : Config msg -> String -> List (Node msg) -> Buttons -> ( Block, List (Node msg) )
-viewMessage config title details buttons =
- ( Message
- , [ div [ class "elm-overlay-message" ]
- [ div [ class "elm-overlay-message-title" ] [ text title ]
- , div [ class "elm-overlay-message-details" ] details
- , map config.wrap (viewButtons buttons)
- ]
- ]
- )
-
-
-viewReport : Bool -> Report -> List (Node msg)
-viewReport isBad report =
- case report of
- Report.CorruptHistory ->
- [ text "Looks like this history file is corrupt. I cannot understand it."
- ]
-
- Report.VersionChanged old new ->
- [ text <|
- "This history was created with Elm "
- ++ old ++ ", but you are using Elm "
- ++ new ++ " right now."
- ]
-
- Report.MessageChanged old new ->
- [ text <|
- "To import some other history, the overall message type must"
- ++ " be the same. The old history has "
- , viewCode old
- , text " messages, but the new program works with "
- , viewCode new
- , text " messages."
- ]
-
- Report.SomethingChanged changes ->
- [ node "p" [] [ text (if isBad then explanationBad else explanationRisky) ]
- , node "ul" [] (List.map viewChange changes)
- ]
-
-
-explanationBad : String
-explanationBad = """
-The messages in this history do not match the messages handled by your
-program. I noticed changes in the following types:
-"""
-
-explanationRisky : String
-explanationRisky = """
-This history seems old. It will work with this program, but some
-messages have been added since the history was created:
-"""
-
-
-viewCode : String -> Node msg
-viewCode name =
- node "code" [] [ text name ]
-
-
-viewChange : Report.Change -> Node msg
-viewChange change =
- node "li" [] <|
- case change of
- Report.AliasChange name ->
- [ span [ class "elm-overlay-message-details-type" ] [ viewCode name ]
- ]
-
- Report.UnionChange name { removed, changed, added, argsMatch } ->
- [ span [ class "elm-overlay-message-details-type" ] [ viewCode name ]
- , node "ul" []
- [ viewMention removed "Removed "
- , viewMention changed "Changed "
- , viewMention added "Added "
- ]
- , if argsMatch then
- text ""
- else
- text "This may be due to the fact that the type variable names changed."
- ]
-
-
-viewMention : List String -> String -> Node msg
-viewMention tags verbed =
- case List.map viewCode (List.reverse tags) of
- [] ->
- text ""
-
- [tag] ->
- node "li" []
- [ text verbed, tag, text "." ]
-
- [tag2, tag1] ->
- node "li" []
- [ text verbed, tag1, text " and ", tag2, text "." ]
-
- lastTag :: otherTags ->
- node "li" [] <|
- text verbed
- :: List.intersperse (text ", ") (List.reverse otherTags)
- ++ [ text ", and ", lastTag, text "." ]
-
-
-viewBadMetadata : Metadata.Error -> List (Node msg)
-viewBadMetadata {message, problems} =
- [ node "p" []
- [ text "The "
- , viewCode message
- , text " type of your program cannot be reliably serialized for history files."
- ]
- , node "p" [] [ text "Functions cannot be serialized, nor can values that contain functions. This is a problem in these places:" ]
- , node "ul" [] (List.map viewProblemType problems)
- , node "p" []
- [ text goodNews1
- , a [ href "https://guide.elm-lang.org/types/union_types.html" ] [ text "union types" ]
- , text ", in your messages. From there, your "
- , viewCode "update"
- , text goodNews2
- ]
- ]
-
-
-goodNews1 = """
-The good news is that having values like this in your message type is not
-so great in the long run. You are better off using simpler data, like
-"""
-
-
-goodNews2 = """
-function can pattern match on that data and call whatever functions, JSON
-decoders, etc. you need. This makes the code much more explicit and easy to
-follow for other readers (or you in a few months!)
-"""
-
-
-viewProblemType : Metadata.ProblemType -> Node msg
-viewProblemType { name, problems } =
- node "li" []
- [ viewCode name
- , text (" can contain " ++ addCommas (List.map problemToString problems) ++ ".")
- ]
-
-
-problemToString : Metadata.Problem -> String
-problemToString problem =
- case problem of
- Metadata.Function ->
- "functions"
-
- Metadata.Decoder ->
- "JSON decoders"
-
- Metadata.Task ->
- "tasks"
-
- Metadata.Process ->
- "processes"
-
- Metadata.Socket ->
- "web sockets"
-
- Metadata.Request ->
- "HTTP requests"
-
- Metadata.Program ->
- "programs"
-
- Metadata.VirtualDom ->
- "virtual DOM values"
-
-
-addCommas : List String -> String
-addCommas items =
- case items of
- [] ->
- ""
-
- [item] ->
- item
-
- [item1, item2] ->
- item1 ++ " and " ++ item2
-
- lastItem :: otherItems ->
- String.join ", " (otherItems ++ [ " and " ++ lastItem ])
-
-
-
--- VIEW MESSAGE BUTTONS
-
-
-type Buttons
- = Accept String
- | Choose String String
-
-
-viewButtons : Buttons -> Node Msg
-viewButtons buttons =
- div [ class "elm-overlay-message-buttons" ] <|
- case buttons of
- Accept proceed ->
- [ node "button" [ onClick Proceed ] [ text proceed ]
- ]
-
- Choose cancel proceed ->
- [ node "button" [ onClick Cancel ] [ text cancel ]
- , node "button" [ onClick Proceed ] [ text proceed ]
- ]
-
-
-
--- VIEW MINI CONTROLS
-
-
-viewMiniControls : Config msg -> Int -> Node msg
-viewMiniControls config numMsgs =
- div
- [ class "elm-mini-controls"
- ]
- [ div
- [ onClick config.open
- , class "elm-mini-controls-button"
- ]
- [ text ("Explore History (" ++ toString numMsgs ++ ")")
- ]
- , viewImportExport
- [class "elm-mini-controls-import-export"]
- config.importHistory
- config.exportHistory
- ]
-
-
-viewImportExport : List (Property msg) -> msg -> msg -> Node msg
-viewImportExport props importMsg exportMsg =
- div
- props
- [ button importMsg "Import"
- , text " / "
- , button exportMsg "Export"
- ]
-
-
-button : msg -> String -> Node msg
-button msg label =
- span [ onClick msg, style [("cursor","pointer")] ] [ text label ]
-
-
-
--- STYLE
-
-
-styles : Node msg
-styles =
- node "style" [] [ text """
-
-.elm-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- color: white;
- pointer-events: none;
- font-family: 'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif;
-}
-
-.elm-overlay-resume {
- width: 100%;
- height: 100%;
- cursor: pointer;
- text-align: center;
- pointer-events: auto;
- background-color: rgba(200, 200, 200, 0.7);
-}
-
-.elm-overlay-resume-words {
- position: absolute;
- top: calc(50% - 40px);
- font-size: 80px;
- line-height: 80px;
- height: 80px;
- width: 100%;
-}
-
-.elm-mini-controls {
- position: fixed;
- bottom: 0;
- right: 6px;
- border-radius: 4px;
- background-color: rgb(61, 61, 61);
- font-family: monospace;
- pointer-events: auto;
-}
-
-.elm-mini-controls-button {
- padding: 6px;
- cursor: pointer;
- text-align: center;
- min-width: 24ch;
-}
-
-.elm-mini-controls-import-export {
- padding: 4px 0;
- font-size: 0.8em;
- text-align: center;
- background-color: rgb(50, 50, 50);
-}
-
-.elm-overlay-message {
- position: absolute;
- width: 600px;
- height: 100%;
- padding-left: calc(50% - 300px);
- padding-right: calc(50% - 300px);
- background-color: rgba(200, 200, 200, 0.7);
- pointer-events: auto;
-}
-
-.elm-overlay-message-title {
- font-size: 36px;
- height: 80px;
- background-color: rgb(50, 50, 50);
- padding-left: 22px;
- vertical-align: middle;
- line-height: 80px;
-}
-
-.elm-overlay-message-details {
- padding: 8px 20px;
- overflow-y: auto;
- max-height: calc(100% - 156px);
- background-color: rgb(61, 61, 61);
-}
-
-.elm-overlay-message-details-type {
- font-size: 1.5em;
-}
-
-.elm-overlay-message-details ul {
- list-style-type: none;
- padding-left: 20px;
-}
-
-.elm-overlay-message-details ul ul {
- list-style-type: disc;
- padding-left: 2em;
-}
-
-.elm-overlay-message-details li {
- margin: 8px 0;
-}
-
-.elm-overlay-message-buttons {
- height: 60px;
- line-height: 60px;
- text-align: right;
- background-color: rgb(50, 50, 50);
-}
-
-.elm-overlay-message-buttons button {
- margin-right: 20px;
-}
-
-""" ]
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Report.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Report.elm
deleted file mode 100644
index 89b4e07..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/src/VirtualDom/Report.elm
+++ /dev/null
@@ -1,99 +0,0 @@
-module VirtualDom.Report exposing
- ( Report(..)
- , Change(..)
- , TagChanges
- , emptyTagChanges
- , hasTagChanges
- , Status(..), evaluate
- )
-
-
-
--- REPORTS
-
-
-type Report
- = CorruptHistory
- | VersionChanged String String
- | MessageChanged String String
- | SomethingChanged (List Change)
-
-
-type Change
- = AliasChange String
- | UnionChange String TagChanges
-
-
-type alias TagChanges =
- { removed : List String
- , changed : List String
- , added : List String
- , argsMatch : Bool
- }
-
-
-emptyTagChanges : Bool -> TagChanges
-emptyTagChanges argsMatch =
- TagChanges [] [] [] argsMatch
-
-
-hasTagChanges : TagChanges -> Bool
-hasTagChanges tagChanges =
- tagChanges == TagChanges [] [] [] True
-
-
-type Status = Impossible | Risky | Fine
-
-
-evaluate : Report -> Status
-evaluate report =
- case report of
- CorruptHistory ->
- Impossible
-
- VersionChanged _ _ ->
- Impossible
-
- MessageChanged _ _ ->
- Impossible
-
- SomethingChanged changes ->
- worstCase Fine (List.map evaluateChange changes)
-
-
-worstCase : Status -> List Status -> Status
-worstCase status statusList =
- case statusList of
- [] ->
- status
-
- Impossible :: _ ->
- Impossible
-
- Risky :: rest ->
- worstCase Risky rest
-
- Fine :: rest ->
- worstCase status rest
-
-
-evaluateChange : Change -> Status
-evaluateChange change =
- case change of
- AliasChange _ ->
- Impossible
-
- UnionChange _ { removed, changed, added, argsMatch } ->
- if not argsMatch || some changed || some removed then
- Impossible
-
- else if some added then
- Risky
-
- else
- Fine
-
-
-some : List a -> Bool
-some list =
- not (List.isEmpty list)
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/Native/TestHelpers.js b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/Native/TestHelpers.js
deleted file mode 100644
index 6b1ebbb..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/Native/TestHelpers.js
+++ /dev/null
@@ -1,35 +0,0 @@
-Elm.Native.TestHelpers = {};
-Elm.Native.TestHelpers.make = function(localRuntime)
-{
- localRuntime.Native = localRuntime.Native || {};
- localRuntime.Native.TestHelpers = localRuntime.Native.TestHelpers || {};
- if (localRuntime.Native.TestHelpers.values)
- {
- return localRuntime.Native.TestHelpers.values;
- }
-
- var VirtualDom = Elm.Native.VirtualDom.make(localRuntime);
-
- function unsafeRecordCallCount(f) {
- function wrapper(a) {
- wrapper.__elm_test_call_count += 1;
- return f(a);
- }
- wrapper.__elm_test_call_count = 0;
- return wrapper;
- }
-
- function unsafeQueryCallCount(f) {
- if (f.__elm_test_call_count === undefined) {
- return -1;
- }
- return f.__elm_test_call_count;
- }
-
- Elm.Native.TestHelpers.values = {
- unsafeRecordCallCount: unsafeRecordCallCount,
- unsafeQueryCallCount: unsafeQueryCallCount,
- updateAndReplace: F3(VirtualDom.updateAndReplace)
- };
- return localRuntime.Native.TestHelpers.values = Elm.Native.TestHelpers.values;
-};
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestCases/Lazy.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestCases/Lazy.elm
deleted file mode 100644
index 09e362a..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestCases/Lazy.elm
+++ /dev/null
@@ -1,72 +0,0 @@
-module TestCases.Lazy where
-
-import VirtualDom exposing (Node, lazy)
-import ElmTest.Assertion exposing (assertEqual)
-import ElmTest.Test exposing (Test, suite, test)
-
-import TestHelpers exposing (renderDom, updateDom, unsafeRecordCallCount, unsafeQueryCallCount)
-
-renderRecord : { x: String, y: String } -> Node
-renderRecord r =
- VirtualDom.text <| "The values: " ++ r.x ++ ", " ++ r.y
-
-
-renderPrimitive : Int -> Node
-renderPrimitive x =
- VirtualDom.text <| "The value: " ++ (toString x)
-
-
-testLazyIdenticalRecord =
- test "isn't called again with identical record" <|
- let record = { x = "a", y = "b" }
- wrappedRender = unsafeRecordCallCount renderRecord
- v1 = renderDom <| lazy wrappedRender record
- v2 = updateDom v1 <| lazy wrappedRender record
- v3 = updateDom v2 <| lazy wrappedRender record
- in
- assertEqual 1 <| unsafeQueryCallCount wrappedRender
-
-
-testLazyIdenticalPrimitive =
- test "isn't called again with identical primitive" <|
- let wrappedRender = unsafeRecordCallCount renderPrimitive
- v1 = renderDom <| lazy wrappedRender 5
- v2 = updateDom v1 <| lazy wrappedRender 5
- v3 = updateDom v2 <| lazy wrappedRender 5
- in
- assertEqual 1 <| unsafeQueryCallCount wrappedRender
-
-
-testLazyRecordMutationOfIdenticalValue =
- test "isn't called again with record mutation of identical value" <|
- let record = { x = "a", y = "b" }
- wrappedRender = unsafeRecordCallCount renderRecord
- v1 = renderDom <| lazy wrappedRender record
- v2 = updateDom v1 <| lazy wrappedRender { record | x = "a" }
- v3 = updateDom v2 <| lazy wrappedRender { record | x = "a", y = "b" }
- in
- assertEqual 1 <| unsafeQueryCallCount wrappedRender
-
-
-testNotLazyDifferentRecord =
- test "is called again with an equivalent but different record" <|
- let wrappedRender = unsafeRecordCallCount renderRecord
- v1 = renderDom <| lazy wrappedRender { x = "a", y = "b" }
- v2 = updateDom v1 <| lazy wrappedRender { x = "a", y = "b" }
- v3 = updateDom v2 <| lazy wrappedRender { x = "a", y = "b" }
- in
- assertEqual 3 <| unsafeQueryCallCount wrappedRender
-
-
-tests : Test
-tests =
- suite
- "Lazy"
- [
- testLazyIdenticalRecord,
- testLazyIdenticalPrimitive,
- -- Re-enable this test when core supports checking
- -- record update values for identity before copying:
- -- testLazyRecordMutationOfIdenticalValue,
- testNotLazyDifferentRecord
- ]
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestHelpers.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestHelpers.elm
deleted file mode 100644
index 2fe24cf..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestHelpers.elm
+++ /dev/null
@@ -1,34 +0,0 @@
-module TestHelpers where
-
-import VirtualDom exposing (Node)
-
-import Native.TestHelpers
-import Native.VirtualDom
-
-unsafeRecordCallCount : (a -> b) -> (a -> b)
-unsafeRecordCallCount =
- Native.TestHelpers.unsafeRecordCallCount
-
-unsafeQueryCallCount : (a -> b) -> Int
-unsafeQueryCallCount =
- Native.TestHelpers.unsafeQueryCallCount
-
-type OpaqueDom = OpaqueDom
-
-render : Node -> OpaqueDom
-render =
- Native.VirtualDom.render
-
-updateAndReplace : OpaqueDom -> Node -> Node -> OpaqueDom
-updateAndReplace =
- Native.TestHelpers.updateAndReplace
-
-
-renderDom : Node -> (OpaqueDom, Node)
-renderDom vdom =
- (render vdom, vdom)
-
-
-updateDom : (OpaqueDom, Node) -> Node -> (OpaqueDom, Node)
-updateDom (oldDom, oldVDom) newVDom =
- (updateAndReplace oldDom oldVDom newVDom, newVDom)
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestMain.elm b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestMain.elm
deleted file mode 100644
index ea59abf..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/TestMain.elm
+++ /dev/null
@@ -1,18 +0,0 @@
-
-import ElmTest.Runner.Console exposing (runDisplay)
-import ElmTest.Test exposing (Test, suite)
-import Console exposing (IO)
-import Task exposing (Task)
-
-import TestCases.Lazy
-
-tests : Test
-tests =
- suite
- "VirtualDom Library Tests"
- [
- TestCases.Lazy.tests
- ]
-
-port runner : Signal (Task x ())
-port runner = Console.run (runDisplay tests)
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/elm-package.json b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/elm-package.json
deleted file mode 100644
index 5041954..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/elm-package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "version": "1.0.0",
- "summary": "Test for VirtualDom",
- "license": "BSD3",
- "repository": "https://github.com/evancz/virtual-dom.git",
- "exposed-modules": [],
- "source-directories": [
- ".",
- "build/virtual-dom/"
- ],
- "native-modules": true,
- "dependencies": {
- "elm-lang/core": "2.0.0 <= v < 4.0.0",
- "laszlopandy/elm-console": "1.0.0 <= v < 2.0.0",
- "deadfoxygrandpa/elm-test": "1.0.3 <= v < 2.0.0"
- },
- "elm-version": "0.16.0 <= v < 0.17.0"
-}
\ No newline at end of file
diff --git a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/run-tests.sh b/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/run-tests.sh
deleted file mode 100644
index 98e4f2e..0000000
--- a/server/elm-stuff/packages/elm-lang/virtual-dom/2.0.4/tests/run-tests.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd "$(dirname "$0")"
-
-mkdir -p build/virtual-dom/Native
-cp ../src/VirtualDom.elm build/virtual-dom/
-$(npm bin)/browserify ../src/wrapper.js -o build/VirtualDom.browser.js
-
-set +e
-diff -u ../src/Native/VirtualDom.js build/VirtualDom.browser.js
-if [ $? != 0 ]; then
- echo "ERROR:"
- echo "src/Native/VirtualDom.js has local modifications or is out of date. Please run rebuild.sh"
- exit 1
-fi
-set -e
-
-$(npm bin)/browserify --no-browser-field ../src/wrapper.js -o build/virtual-dom/Native/VirtualDom.js
-
-elm-make --yes --output build/test.js TestMain.elm
-echo "Elm.worker(Elm.Main);" >> build/test.js
-node build/test.js
\ No newline at end of file