diff --git a/.travis.yml b/.travis.yml index 9b53886..c0b402d 100755 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ branches: before_script: - echo "module.exports = require('./travis.js')" > config/env/env.js script: - - npm run minify + - npm run build # Send coverage data to Coveralls after_script: diff --git a/README.md b/README.md index 8504b83..4bcfbf6 100755 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Then edit `config/env/local-config.js` to match your local environment. Run Tracman with npm: ```sh -npm run minify && npm start +npm run build && npm start ``` ...or with [nodemon](https://nodemon.io/): @@ -44,7 +44,7 @@ npm run minify && npm start npm run nodemon ``` -Nodemon will automatically minify and bundle files and restart the app when you make changes. Check out the `nodemon.json` configuration. +Nodemon will automatically rebuild and restart the app when you make changes. Check out the `nodemon.json` configuration. ## Contributing diff --git a/config/routes/map.js b/config/routes/map.js index 10266fe..4680dd8 100755 --- a/config/routes/map.js +++ b/config/routes/map.js @@ -36,7 +36,7 @@ router.get('/demo', (req, res, next) => { units: 'standard' } }, - mapApi: env.googleMapsAPI, + mapKey: env.googleMapsAPI, user: req.user, noFooter: '1', noHeader: (req.query.noheader) ? req.query.noheader.match(/\d/)[0] : 0, @@ -54,12 +54,10 @@ router.get('/:slug?', async (req, res, next) => { let map_user = await User.findOne({slug: req.params.slug}) if (!map_user) next() // 404 else { - var active = '' // For header nav - if (req.user && req.user.id === map_user.id) active = 'map' res.render('map', { - active: active, + active: (req.user && req.user.id===map_user.id)?'map':'', mapuser: map_user, - mapApi: env.googleMapsAPI, + mapKey: env.googleMapsAPI, user: req.user, noFooter: '1', noHeader: (req.query.noheader) ? req.query.noheader.match(/\d/)[0] : 0, diff --git a/package-lock.json b/package-lock.json index 60da920..7b2fa05 100755 --- a/package-lock.json +++ b/package-lock.json @@ -75,6 +75,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, "requires": { "kind-of": "3.2.2", "longest": "1.0.1", @@ -659,7 +660,9 @@ "camelcase": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true }, "camelize": { "version": "1.0.0", @@ -681,6 +684,8 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, "requires": { "align-text": "0.1.4", "lazy-cache": "1.0.4" @@ -797,6 +802,36 @@ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dev": true, + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, "cli-boxes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", @@ -841,6 +876,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, "requires": { "center-align": "0.1.3", "right-align": "0.1.3", @@ -1109,11 +1146,6 @@ "uid-safe": "2.1.4" } }, - "css-resolve-import": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-resolve-import/-/css-resolve-import-0.1.2.tgz", - "integrity": "sha1-/20orEoXXJ1XrbnSzm2m+Rah1TU=" - }, "cssfilter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", @@ -1431,6 +1463,16 @@ "has-binary2": "1.0.2" } }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "optional": true, + "requires": { + "prr": "1.0.1" + } + }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -2056,11 +2098,6 @@ "write": "0.2.1" } }, - "fmerge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fmerge/-/fmerge-1.2.0.tgz", - "integrity": "sha1-NumdKuJV4+4a9ma033gFU2cc9pI=" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3088,6 +3125,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, "growl": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", @@ -3120,6 +3163,27 @@ "requires": { "amdefine": "1.0.1" } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } } } }, @@ -3244,30 +3308,6 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" }, - "hogan.js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", - "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", - "requires": { - "mkdirp": "0.3.0", - "nopt": "1.0.10" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1.1.1" - } - } - } - }, "hooks-fixed": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", @@ -3353,6 +3393,13 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -3991,7 +4038,9 @@ "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true }, "lcid": { "version": "1.0.0", @@ -4007,6 +4056,193 @@ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, + "less": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.0.1.tgz", + "integrity": "sha512-qUR4uNv88/c0mpnGOULgMLRXXSD6X0tYo4cVrokzsvn68+nuj8rskInCSe2eLAVYWGD/oAlq8P7J/FeZ/euKiw==", + "dev": true, + "requires": { + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.81.0", + "source-map": "0.5.7" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + } + } + }, + "less-plugin-clean-css": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/less-plugin-clean-css/-/less-plugin-clean-css-1.5.1.tgz", + "integrity": "sha1-zFeveqM5iVflbezr5jy2DCNClwM=", + "dev": true, + "requires": { + "clean-css": "3.4.28" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -4074,7 +4310,8 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true }, "loose-envify": { "version": "1.3.1", @@ -4192,20 +4429,6 @@ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", "dev": true }, - "minifier": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/minifier/-/minifier-0.8.1.tgz", - "integrity": "sha1-Z+kzP54l0nZDvHlj5mst1hz2xbA=", - "requires": { - "commander": "2.12.2", - "css-resolve-import": "0.1.2", - "fmerge": "1.2.0", - "glob": "7.1.2", - "hogan.js": "3.0.2", - "sqwish": "0.2.2", - "uglify-js": "2.8.29" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -5480,6 +5703,16 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "2.0.6" + } + }, "proxy-addr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", @@ -5489,6 +5722,13 @@ "ipaddr.js": "1.5.2" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "optional": true + }, "ps-tree": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", @@ -5828,6 +6068,8 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, "requires": { "align-text": "0.1.4" } @@ -6063,7 +6305,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "spdx-correct": { "version": "1.0.2", @@ -6101,11 +6344,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sqwish": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/sqwish/-/sqwish-0.2.2.tgz", - "integrity": "sha1-AP4maBBPEii1u37nOe9gEhu8sFc=" - }, "sshpk": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", @@ -6524,20 +6762,35 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "commander": "2.13.0", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, "optional": true }, "uid-number": { @@ -6786,12 +7039,15 @@ "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", @@ -6916,6 +7172,8 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, "requires": { "camelcase": "1.2.1", "cliui": "2.1.0", diff --git a/package.json b/package.json index 0383768..a14797f 100755 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "express-request-limit": "^1.0.2", "helmet": "^3.12.0", "helmet-csp": "^2.7.0", - "minifier": "^0.8.1", "moment": "^2.18.1", "mongo-sanitize": "^1.0.0", "mongoose": "^4.11.13", @@ -41,13 +40,16 @@ "chai-http": "^3.0.0", "coveralls": "^3.0.0", "istanbul": "^1.0.0-alpha.2", + "less": "^3.0.1", + "less-plugin-clean-css": "^1.5.1", "mocha": "^4.0.1", "mocha-froth": "^0.2.1", "nodemon": "^1.11.0", "nsp": "^3.2.1", "standard": "^10.0.3", "superagent": "^3.8.2", - "supertest": "^3.0.0" + "supertest": "^3.0.0", + "uglify-es": "^3.3.9" }, "scripts": { "test": "node_modules/mocha/bin/_mocha --exit", @@ -56,8 +58,10 @@ "lint": "standard", "start": "node server.js", "nodemon": "nodemon --ignore 'static/**/*.min.*' server.js", - "update": "sudo npm update && sudo npm prune", - "minify": "rm static/**/.*.min.* && minify --template .{{filename}}.min.{{ext}} --clean static" + "update": "sudo npm prune && sudo npm update", + "less": "for file in static/css/*.css; do lessc --clean-css $file static/css/.$(basename ${file%.*}).min.css; done", + "uglify": "for file in static/js/*.js; do uglifyjs $file --output static/js/.$(basename ${file%.*}).min.js --verbose --compress --mangle 'reserved=google.maps'; done", + "build": "rm static/**/.*.min.* ; npm run less ; npm run uglify" }, "repository": "Tracman-org/Server", "keywords": [ diff --git a/static/css/.base.min.css b/static/css/.base.min.css index 9d932d0..7347b4b 100644 --- a/static/css/.base.min.css +++ b/static/css/.base.min.css @@ -1,2 +1 @@ -/* Global */ -div,footer,.fa,.container,.container:before,.container:after{box-sizing:border-box}body,input,textarea{padding:0;margin:0;font-family:'Open Sans',sans-serif;font-size:18px;color:#eee}body{background-color:#080808}::-webkit-scrollbar{width:5vw;min-width:10px;max-width:40px}::-webkit-scrollbar-track{background-color:#080808;background-color:rgba(8,8,8,0)}::-webkit-scrollbar-thumb{border-radius:.2vw;background:#333}::selection{background:#999}::-moz-selection{background:#999}main{top:59px;position:absolute;left:0;right:0;bottom:0;overflow-y:auto}.container{padding-right:5%;padding-left:5%;width:100%;margin:0 auto}.container:after{content:"";display:block;clear:both}section{padding:10vh 0 5vh}h1,h2,h3{margin:0 0 5% 0;position:relative;z-index:6}h1,h2,h3,h4{font-weight:600}h1{font-size:48px;line-height:46px}h2{font-size:40px;line-height:36px}h3{font-size:28px}h4{font-size:20px}p,main ul{margin-top:0;margin-bottom:5vh}hr{width:90%;margin:10% auto}img{max-width:100%}p img{display:block;margin:auto}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}a{color:#fbc93d;text-decoration:none}main a:hover:not(.btn){color:#fbc93d;text-decoration:underline}a.underline{text-decoration:underline}a.underline:hover:not(.btn){text-decoration:none}.hide{display:none!important}.red,.red:hover{color:#fb6e3d!important}.yellow,.yellow:hover{color:#fbc93d!important}.green,.green:hover{color:#8ae137!important}.inline{display:inline}.inline-block{display:inline-block}.shadow{-moz-box-shadow:.18vw .18vw .36vw #000;-webkit-box-shadow:.18vw .18vw .36vw #000;box-shadow:.18vw .18vw .36vw #000}.shadow:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.inline{display:inline-block}.flex{width:100%;display:flex;justify-content:space-around}.flex.stretch{justify-content:space-between}.left{float:left}.right{float:right}.btn{font-weight:600;display:inline-block;padding:15px 30px;background:rgba(255,255,255,0.1);color:#eee;border-radius:.5vw}.btn:not(:disabled){border:1px solid #666;transition:100ms;cursor:pointer;-moz-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .52vw #000;-webkit-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000}.btn:disabled{color:#aaa;border:1px solid #444}.btn:hover:not(:disabled){text-decoration:none;background:rgba(255,255,255,0.2)}.btn:active:not(:disabled){-moz-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);-webkit-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2)}.btn:focus:not(:disabled){border:1px solid #fbc93d}.btn.main:not(:disabled){color:#fbc93d}.btn .fa{margin-left:10px}.popup{background:#111;padding:4vh 4vw;border-radius:3vh;z-index:1000;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);-moz-box-shadow:0.5vh 0.4vh 1vh 0.1vh #000;-webkit-box-shadow:0.5vh 0.4vh 1vh 0.1vh #000;box-shadow:0.5vh 0.4vh 1vh 0.1vh #000}.popup .topbar,.popup p{margin:0 0 6vh 0}.popup .topbar{display:flex;justify-content:space-between;margin:0 0 3vh 0}.popup p{margin:0 0 3vh 0}.popup .close{cursor:pointer}.popup .buttons{display:flex;justify-content:space-around}.page-mask{z-index:950;background:rgba(0,0,0,0.5);position:fixed;top:0;right:0;bottom:0;left:0} \ No newline at end of file +.container,.container:after,.container:before,.fa,div,footer{box-sizing:border-box}body,input,textarea{padding:0;margin:0;font-family:'Open Sans',sans-serif;font-size:18px;color:#eee}body{background-color:#080808}::-webkit-scrollbar{width:5vw;min-width:10px;max-width:40px}::-webkit-scrollbar-track{background-color:#080808;background-color:rgba(8,8,8,0)}::-webkit-scrollbar-thumb{border-radius:.2vw;background:#333}::selection{background:#999}::-moz-selection{background:#999}main{top:59px;position:absolute;left:0;right:0;bottom:0;overflow-y:auto}.container{padding-right:5%;padding-left:5%;width:100%;margin:0 auto}.container:after{content:"";display:block;clear:both}section{padding:10vh 0 5vh}h1,h2,h3{margin:0 0 5% 0;position:relative;z-index:6}h1,h2,h3,h4{font-weight:600}h1{font-size:48px;line-height:46px}h2{font-size:40px;line-height:36px}h3{font-size:28px}h4{font-size:20px}main ul,p{margin-top:0;margin-bottom:5vh}hr{width:90%;margin:10% auto}img{max-width:100%}p img{display:block;margin:auto}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}a{color:#fbc93d;text-decoration:none}main a:hover:not(.btn){color:#fbc93d;text-decoration:underline}a.underline{text-decoration:underline}a.underline:hover:not(.btn){text-decoration:none}.hide{display:none!important}.red,.red:hover{color:#fb6e3d!important}.yellow,.yellow:hover{color:#fbc93d!important}.green,.green:hover{color:#8ae137!important}.inline{display:inline}.inline-block{display:inline-block}.shadow{-moz-box-shadow:.18vw .18vw .36vw #000;-webkit-box-shadow:.18vw .18vw .36vw #000;box-shadow:.18vw .18vw .36vw #000}.shadow:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.inline{display:inline-block}.flex{width:100%;display:flex;justify-content:space-around}.flex.stretch{justify-content:space-between}.left{float:left}.right{float:right}.btn{font-weight:600;display:inline-block;padding:15px 30px;background:rgba(255,255,255,.1);color:#eee;border-radius:.5vw}.btn:not(:disabled){border:1px solid #666;transition:.1s;cursor:pointer;-moz-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .52vw #000;-webkit-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000}.btn:disabled{color:#aaa;border:1px solid #444}.btn:hover:not(:disabled){text-decoration:none;background:rgba(255,255,255,.2)}.btn:active:not(:disabled){-moz-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);-webkit-box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2);box-shadow:inset .11vw .18vw .52vw rgba(0,0,0,.4),inset -.11vw -.18vw .52vw rgba(255,255,255,.2)}.btn:focus:not(:disabled){border:1px solid #fbc93d}.btn.main:not(:disabled){color:#fbc93d}.btn .fa{margin-left:10px}.popup{background:#111;padding:4vh 4vw;border-radius:3vh;z-index:1000;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);-moz-box-shadow:.5vh .4vh 1vh .1vh #000;-webkit-box-shadow:.5vh .4vh 1vh .1vh #000;box-shadow:.5vh .4vh 1vh .1vh #000}.popup .topbar,.popup p{margin:0 0 6vh 0}.popup .topbar{display:flex;justify-content:space-between;margin:0 0 3vh 0}.popup p{margin:0 0 3vh 0}.popup .close{cursor:pointer}.popup .buttons{display:flex;justify-content:space-around}.page-mask{z-index:950;background:rgba(0,0,0,.5);position:fixed;top:0;right:0;bottom:0;left:0} \ No newline at end of file diff --git a/static/css/.contact.min.css b/static/css/.contact.min.css index 7e4250e..1ec096e 100644 --- a/static/css/.contact.min.css +++ b/static/css/.contact.min.css @@ -1 +1 @@ -input,textarea{margin-bottom:3%}#subject-input,#message-input{width:100%}@media (max-width:600px){#name-input,#email-input{width:100%}}@media (min-width:600px){#name-input,#email-input{min-width:45%}#name-input{float:left}#email-input{float:right}}#submit-button{display:block;margin:auto;min-width:60%;min-height:12vh} \ No newline at end of file +input,textarea{margin-bottom:3%}#message-input,#subject-input{width:100%}@media (max-width:600px){#email-input,#name-input{width:100%}}@media (min-width:600px){#email-input,#name-input{min-width:45%}#name-input{float:left}#email-input{float:right}}#submit-button{display:block;margin:auto;min-width:60%;min-height:12vh} \ No newline at end of file diff --git a/static/css/.controls.min.css b/static/css/.controls.min.css index 80a0118..ea59dc7 100644 --- a/static/css/.controls.min.css +++ b/static/css/.controls.min.css @@ -1 +1 @@ -#controls{width:100vw;position:absolute;bottom:50px;display:flex;justify-content:space-around}#controls .btn{z-index:50;background:#222;height:10vh;padding:2vh 0}#controls .btn .fa{margin:0 2vw}#controls .btn:hover{background:#333}#controls .btn.set,#controls .btn.clear{width:30vw}#controls .btn.track{width:35vw}@media (max-width:250px){#controls .btn{font-size:.8em}}@media (min-width:250px) and (max-width:350px){#controls .btn{font-size:1em}}@media (min-width:350px) and (max-width:450px){#controls .btn{font-size:1.15em}}@media (min-width:450px){#controls .btn{font-size:1.3em}} \ No newline at end of file +#controls{width:100vw;position:absolute;bottom:50px;display:flex;justify-content:space-around}#controls .btn{z-index:50;background:#222;height:10vh;padding:2vh 0}#controls .btn .fa{margin:0 2vw}#controls .btn:hover{background:#333}#controls .btn.clear,#controls .btn.set{width:30vw}#controls .btn.track{width:35vw}@media (max-width:250px){#controls .btn{font-size:.8em}}@media (min-width:250px) and (max-width:350px){#controls .btn{font-size:1em}}@media (min-width:350px) and (max-width:450px){#controls .btn{font-size:1.15em}}@media (min-width:450px){#controls .btn{font-size:1.3em}} \ No newline at end of file diff --git a/static/css/.footer.min.css b/static/css/.footer.min.css index ae64481..3b6a003 100644 --- a/static/css/.footer.min.css +++ b/static/css/.footer.min.css @@ -1 +1 @@ -footer{font-weight:300;width:100%;overflow:auto;background:#111;color:#ccc;padding:0 20px;-moz-box-shadow:inset 0 .25vw 1vw #222;-webkit-box-shadow:inset 0 .25vw 1vw #222;box-shadow:inset 0 .25vw 1vw #222}footer .left{float:left;padding:15px 0}footer .left p{margin:0}footer a{font-weight:600;color:#fff}footer a:hover{text-decoration:none}footer .right{text-align:right;float:right;padding:15px 0}footer a .fa{margin-left:5px;font-size:20px;color:inherit}footer .fa a:hover,footer .fa a:focus{color:inherit}@media (max-width:800px){footer{padding:0 10px}}@media (max-width:600px){footer{text-align:center}footer .left,footer .right{float:none}footer .right{padding-top:0}} \ No newline at end of file +footer{font-weight:300;width:100%;overflow:auto;background:#111;color:#ccc;padding:0 20px;-moz-box-shadow:inset 0 .25vw 1vw #222;-webkit-box-shadow:inset 0 .25vw 1vw #222;box-shadow:inset 0 .25vw 1vw #222}footer .left{float:left;padding:15px 0}footer .left p{margin:0}footer a{font-weight:600;color:#fff}footer a:hover{text-decoration:none}footer .right{text-align:right;float:right;padding:15px 0}footer a .fa{margin-left:5px;font-size:20px;color:inherit}footer .fa a:focus,footer .fa a:hover{color:inherit}@media (max-width:800px){footer{padding:0 10px}}@media (max-width:600px){footer{text-align:center}footer .left,footer .right{float:none}footer .right{padding-top:0}} \ No newline at end of file diff --git a/static/css/.form.min.css b/static/css/.form.min.css index 10a76e3..a3cdb99 100644 --- a/static/css/.form.min.css +++ b/static/css/.form.min.css @@ -1 +1 @@ -form{margin:auto;max-width:800px}.form-group{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8% 0}form label{font-size:1.2em;margin-right:3%}form input,form textarea,form select{color:#eee;background-color:#202020;background-color:rgba(255,255,255,0.1);padding:1% 1.5%;border-radius:.3vw}form input:not(:disabled),form textarea:not(:disabled),form .input-addon{border:1px solid #666;-moz-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);-webkit-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5)}form input:disabled:not(.input-addon),form textarea:disabled,form select:disabled{border:1px solid #444}form input:not(.input-addon):not(.input-with-addon):not([type="radio"]):not([type="checkbox"]),form .input-with-addon-group{min-width:50%}form input:active:not(.input-addon),form textarea:active,form select:active,form input:focus:not(.input-addon),form textarea:focus,form select:focus{outline:none;border:1px solid #fbc93d}form .input-with-addon-group{display:flex}form .input-addon,form .input-with-addon{-moz-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);-webkit-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5)}form .input-addon{text-align:center;width:auto}form .input-with-addon{flex-grow:1}form .input-addon.left{padding:1% 0 1% 1.5%;border-right-color:#202020;border-right-color:rgba(102,102,102,0);border-top-right-radius:0;border-bottom-right-radius:0}form .input-with-addon.left{padding:1% 1.5% 1% 0;border-left-color:#202020;border-left-color:rgba(102,102,102,0);border-top-left-radius:0;border-bottom-left-radius:0}form .input-addon.right{padding:1% 1.5% 1% 0;border-left-color:#202020;border-left-color:rgba(102,102,102,0);border-top-left-radius:0;border-bottom-left-radius:0}form .input-with-addon.right{padding:1% 0 1% 1.5%;border-right-color:#202020;border-right-color:rgba(102,102,102,0);border-top-right-radius:0;border-bottom-right-radius:0}::-webkit-input-placeholder{color:#666}:-moz-placeholder{color:#666;opacity:1}::-moz-placeholder{color:#666;opacity:1}:-ms-input-placeholder{color:#666}form select:not(:disabled){-moz-box-shadow:inset 0.11vw 0.18vw 0.52vw rgba(255,255,255,.2),inset -0.11vw -0.18vw 0.52vw rgba(0,0,0,.4),0.1vw 0.1vw 0.36vw #000;-webkit-box-shadow:inset 0.11vw 0.18vw 0.52vw rgba(255,255,255,.2),inset -0.11vw -0.18vw 0.52vw rgba(0,0,0,.4),0.1vw 0.1vw 0.36vw #000;box-shadow:inset 0.11vw 0.18vw 0.52vw rgba(255,255,255,.2),inset -0.11vw -0.18vw 0.52vw rgba(0,0,0,.4),0.1vw 0.1vw 0.36vw #000}form select > option{background:#222;color:inherit}form .radio{min-width:150px;display:flex;justify-content:space-between}form input[type="checkbox"],form input[type="radio"]{width:auto;margin:8px}form input[type="checkbox"]:active,form input[type="radio"]:active,form input[type="checkbox"]:focus,form input[type="radio"]:focus{outline:1px solid #fbc93d}form .btn{font-size:1.5em}.help{display:none;width:100%;margin-top:2%;margin-bottom:0;text-align:right} \ No newline at end of file +form{margin:auto;max-width:800px}.form-group{display:flex;flex-wrap:wrap;justify-content:space-between;margin:8% 0}form label{font-size:1.2em;margin-right:3%}form input,form select,form textarea{color:#eee;background-color:#202020;background-color:rgba(255,255,255,.1);padding:1% 1.5%;border-radius:.3vw}form .input-addon,form input:not(:disabled),form textarea:not(:disabled){border:1px solid #666;-moz-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);-webkit-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5)}form input:disabled:not(.input-addon),form select:disabled,form textarea:disabled{border:1px solid #444}form .input-with-addon-group,form input:not(.input-addon):not(.input-with-addon):not([type=radio]):not([type=checkbox]){min-width:50%}form input:active:not(.input-addon),form input:focus:not(.input-addon),form select:active,form select:focus,form textarea:active,form textarea:focus{outline:0;border:1px solid #fbc93d}form .input-with-addon-group{display:flex}form .input-addon,form .input-with-addon{-moz-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);-webkit-box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5);box-shadow:inset .11vw .18vw .25vw rgba(0,0,0,.5)}form .input-addon{text-align:center;width:auto}form .input-with-addon{flex-grow:1}form .input-addon.left{padding:1% 0 1% 1.5%;border-right-color:#202020;border-right-color:rgba(102,102,102,0);border-top-right-radius:0;border-bottom-right-radius:0}form .input-with-addon.left{padding:1% 1.5% 1% 0;border-left-color:#202020;border-left-color:rgba(102,102,102,0);border-top-left-radius:0;border-bottom-left-radius:0}form .input-addon.right{padding:1% 1.5% 1% 0;border-left-color:#202020;border-left-color:rgba(102,102,102,0);border-top-left-radius:0;border-bottom-left-radius:0}form .input-with-addon.right{padding:1% 0 1% 1.5%;border-right-color:#202020;border-right-color:rgba(102,102,102,0);border-top-right-radius:0;border-bottom-right-radius:0}::-webkit-input-placeholder{color:#666}:-moz-placeholder{color:#666;opacity:1}::-moz-placeholder{color:#666;opacity:1}:-ms-input-placeholder{color:#666}form select:not(:disabled){-moz-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;-webkit-box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000;box-shadow:inset .11vw .18vw .52vw rgba(255,255,255,.2),inset -.11vw -.18vw .52vw rgba(0,0,0,.4),.1vw .1vw .36vw #000}form select>option{background:#222;color:inherit}form .radio{min-width:150px;display:flex;justify-content:space-between}form input[type=radio],form input[type=checkbox]{width:auto;margin:8px}form input[type=radio]:active,form input[type=radio]:focus,form input[type=checkbox]:active,form input[type=checkbox]:focus{outline:1px solid #fbc93d}form .btn{font-size:1.5em}.help{display:none;width:100%;margin-top:2%;margin-bottom:0;text-align:right} \ No newline at end of file diff --git a/static/css/.header.min.css b/static/css/.header.min.css index e7cd315..1492f34 100644 --- a/static/css/.header.min.css +++ b/static/css/.header.min.css @@ -1,2 +1 @@ -/* Main */ -header{background:#222;padding:0;position:fixed;top:0;left:0;width:100%;z-index:200}header a:hover,header a:focus{color:#fbc93d}header .logo{float:left;font-family:'Open Sans',sans-serif;padding:13px 23px;color:#fbc93d;font-weight:800;font-size:22px;line-height:30px;margin:0}header .logo a{color:inherit;font:inherit;text-decoration:inherit;cursor:pointer}header .logo img{margin-right:10px;vertical-align:middle}header .logo:hover{text-decoration:none;background:rgba(255,255,255,0.1)}header nav{float:right}header nav ul{padding:0;margin:0}header nav ul li{display:inline-block;float:left}header nav ul li a,header nav ul li span{text-decoration:inherit;display:inline-block;padding:15px 20px;color:#fff;transition:100ms}header nav ul li a:hover,header nav ul li a:focus{text-decoration:none;background:rgba(255,255,255,0.1)}header nav ul li a.active{color:#fbc93d;pointer-events:none;cursor:default}header .hamburger{display:none;padding:5px;cursor:pointer;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;transition-duration:150ms;transition-timing-function:linear}header .hamburger:hover{opacity:0.7}header .hamburger-box{width:40px;height:24px;position:relative}header .hamburger-inner{top:50%;margin-top:-2px}header .hamburger-inner,header .hamburger-inner::before,header .hamburger-inner::after{width:40px;height:4px;background-color:#fff;border-radius:4px;position:absolute;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-duration:150ms;transition-timing-function:ease}header .hamburger-inner::before,header .hamburger-inner::after{content:"";display:block}header .hamburger-inner::before{top:-10px}header .hamburger-inner::after{bottom:-10px}header .hamburger--slider .hamburger-inner{top:0}header .hamburger--slider .hamburger-inner::before{top:10px;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease;transition-duration:200ms}header .hamburger--slider .hamburger-inner::after{top:20px}header .hamburger--slider.is-active .hamburger-inner{-webkit-transform:translate3d(0,10px,0) rotate(45deg);-moz-transform:translate3d(0,10px,0) rotate(45deg);-md-transform:translate3d(0,10px,0) rotate(45deg);-o-transform:translate3d(0,10px,0) rotate(45deg);transform:translate3d(0,10px,0) rotate(45deg)}header .hamburger--slider.is-active .hamburger-inner::before{-webkit-transform:rotate(-45deg) translate3d(-5.71429px,-6px,0);-moz-transform:rotate(-45deg) translate3d(-5.71429px,-6px,0);-ms-transform:rotate(-45deg) translate3d(-5.71429px,-6px,0);-o-transform:rotate(-45deg) translate3d(-5.71429px,-6px,0);transform:rotate(-45deg) translate3d(-5.71429px,-6px,0);opacity:0}header .hamburger--slider.is-active .hamburger-inner::after{-webkit-transform:translate3d(0,-20px,0) rotate(-90deg);-moz-transform:translate3d(0,-20px,0) rotate(-90deg);-ms-transform:translate3d(0,-20px,0) rotate(-90deg);-o-transform:translate3d(0,-20px,0) rotate(-90deg);transform:translate3d(0,-20px,0) rotate(-90deg)}@media (max-width:800px){header nav ul li a{padding:15px}}@media (max-width:655px){header nav{float:none;position:fixed;top:56px;right:-300px;bottom:0;width:100%;max-width:300px;background:#333;transition:100ms}header nav.visible{right:0}header nav ul li{display:block;float:none;width:100%}header nav ul li a{display:block;width:100%;border-bottom:1px solid rgba(255,255,255,0.1)}header .hamburger{display:inline-block;color:#fff;position:absolute;right:10px;top:13px}}.alert{padding:15px;border:1px solid transparent;border-radius:4px}noscript .alert-danger{z-index:40}.alert-danger{z-index:30;color:#f2dede;background-color:#a94442}.alert-warning{z-index:20;color:#fcf8e3;background-color:#8a6d3b}.alert-success{z-index:10;color:#dff0d8;background-color:#3c763d}.alert.alert-header{position:relative;border-radius:0;top:58px;width:100%}.alert a{z-index:10;color:inherit;font-weight:bold;text-decoration:underline}.alert a:hover{color:inherit;text-decoration:none}.alert h4{margin-top:0;color:inherit}.alert > p,.alert > ul{margin-bottom:0}.alert > p + p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert .close,.alert-dismissible .close{cursor:pointer;float:right;color:inherit} \ No newline at end of file +header{background:#222;padding:0;position:fixed;top:0;left:0;width:100%;z-index:200}header a:focus,header a:hover{color:#fbc93d}header .logo{float:left;font-family:'Open Sans',sans-serif;padding:13px 23px;color:#fbc93d;font-weight:800;font-size:22px;line-height:30px;margin:0}header .logo a{color:inherit;font:inherit;text-decoration:inherit;cursor:pointer}header .logo img{margin-right:10px;vertical-align:middle}header .logo:hover{text-decoration:none;background:rgba(255,255,255,.1)}header nav{float:right}header nav ul{padding:0;margin:0}header nav ul li{display:inline-block;float:left}header nav ul li a,header nav ul li span{text-decoration:inherit;display:inline-block;padding:15px 20px;color:#fff;transition:.1s}header nav ul li a:focus,header nav ul li a:hover{text-decoration:none;background:rgba(255,255,255,.1)}header nav ul li a.active{color:#fbc93d;pointer-events:none;cursor:default}header .hamburger{display:none;padding:5px;cursor:pointer;transition-property:opacity,-webkit-filter;transition-property:opacity,filter;transition-property:opacity,filter,-webkit-filter;transition-duration:150ms;transition-timing-function:linear}header .hamburger:hover{opacity:.7}header .hamburger-box{width:40px;height:24px;position:relative}header .hamburger-inner{top:50%;margin-top:-2px}header .hamburger-inner,header .hamburger-inner::after,header .hamburger-inner::before{width:40px;height:4px;background-color:#fff;border-radius:4px;position:absolute;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-duration:150ms;transition-timing-function:ease}header .hamburger-inner::after,header .hamburger-inner::before{content:"";display:block}header .hamburger-inner::before{top:-10px}header .hamburger-inner::after{bottom:-10px}header .hamburger--slider .hamburger-inner{top:0}header .hamburger--slider .hamburger-inner::before{top:10px;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;transition-timing-function:ease;transition-duration:.2s}header .hamburger--slider .hamburger-inner::after{top:20px}header .hamburger--slider.is-active .hamburger-inner{-webkit-transform:translate3d(0,10px,0) rotate(45deg);-moz-transform:translate3d(0,10px,0) rotate(45deg);-md-transform:translate3d(0,10px,0) rotate(45deg);-o-transform:translate3d(0,10px,0) rotate(45deg);transform:translate3d(0,10px,0) rotate(45deg)}header .hamburger--slider.is-active .hamburger-inner::before{-webkit-transform:rotate(-45deg) translate3d(-5.71px,-6px,0);-moz-transform:rotate(-45deg) translate3d(-5.71px,-6px,0);-ms-transform:rotate(-45deg) translate3d(-5.71px,-6px,0);-o-transform:rotate(-45deg) translate3d(-5.71px,-6px,0);transform:rotate(-45deg) translate3d(-5.71px,-6px,0);opacity:0}header .hamburger--slider.is-active .hamburger-inner::after{-webkit-transform:translate3d(0,-20px,0) rotate(-90deg);-moz-transform:translate3d(0,-20px,0) rotate(-90deg);-ms-transform:translate3d(0,-20px,0) rotate(-90deg);-o-transform:translate3d(0,-20px,0) rotate(-90deg);transform:translate3d(0,-20px,0) rotate(-90deg)}@media (max-width:800px){header nav ul li a{padding:15px}}@media (max-width:655px){header nav{float:none;position:fixed;top:56px;right:-300px;bottom:0;width:100%;max-width:300px;background:#333;transition:.1s}header nav.visible{right:0}header nav ul li{display:block;float:none;width:100%}header nav ul li a{display:block;width:100%;border-bottom:1px solid rgba(255,255,255,.1)}header .hamburger{display:inline-block;color:#fff;position:absolute;right:10px;top:13px}}.alert{padding:15px;border:1px solid transparent;border-radius:4px}noscript .alert-danger{z-index:40}.alert-danger{z-index:30;color:#f2dede;background-color:#a94442}.alert-warning{z-index:20;color:#fcf8e3;background-color:#8a6d3b}.alert-success{z-index:10;color:#dff0d8;background-color:#3c763d}.alert.alert-header{position:relative;border-radius:0;top:58px;width:100%}.alert a{z-index:10;color:inherit;font-weight:700;text-decoration:underline}.alert a:hover{color:inherit;text-decoration:none}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert .close,.alert-dismissible .close{cursor:pointer;float:right;color:inherit} \ No newline at end of file diff --git a/static/css/.index.min.css b/static/css/.index.min.css index 2aad057..3c64200 100644 --- a/static/css/.index.min.css +++ b/static/css/.index.min.css @@ -1,2 +1 @@ -/* Animations */ -@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(0.8)}100%{transform:scale(1)}}@keyframes spin{0%{transform:rotate(30deg)}100%{transform:rotate(210deg)}}@keyframes spin2{0%{transform:rotate(150deg)}100%{transform:rotate(330deg)}}.btn{border-radius:50px}.container > p{margin-bottom:5vh}.splash{background:#090909;background-image:url(/static/img/style/map.jpg);background-size:cover;color:#FFF;height:100vh;overflow:hidden;position:relative}.splash:after,.splash:before{z-index:5;content:"";display:block;position:absolute;top:-40px;right:-40px;bottom:-40px;left:-40px}.splash:after{background:rgba(255,255,255,0.05);transform:rotate(30deg);animation:spin 60s infinite linear}.splash:before{background:rgba(0,0,0,0.5);transform:rotate(150deg);animation:spin2 50s infinite linear}.splash .container{position:relative;top:48%;transform:translateY(-50%);z-index:8}.splash h1{z-index:10;color:#fbc93d}.splash h2{z-index:10;margin-bottom:40px}.splash .btn{z-index:20;margin:0 20px 10px 0}.splash .btn:hover{color:#fff;background:rgba(0,0,0,0.5)}.overview{text-align:center}.overview > div > div{float:left;width:33%;padding:0 40px 0 40px}.overview .fa{display:inline-block;color:#222;font-size:50px;width:100px;height:100px;border-radius:50px;background:#f6f6f6;margin-bottom:20px;padding-top:25px}.overview p{margin-bottom:0}.feature.app{background:#111}.feature{position:relative;overflow:hidden}.feature img{position:absolute;top:100px;right:55%}.feature:nth-of-type(even) img{right:auto;left:55%}.feature > div > div{width:50%;float:right}.feature > div > div > p{margin-bottom:40px}.feature:nth-of-type(even) > div > div{float:left}.feature ul{margin:0;padding:0}.feature ul li{display:block;margin-bottom:20px;padding-bottom:20px;border-bottom:1px solid #eee}.feature ul li:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.feature ul li h3{margin:0 0 5px 0}.feature ul li p:last-child{margin:0}.feature ul li .fa{float:left;font-size:30px;background:#fbc93d;color:#000;width:50px;height:50px;display:inline-block;text-align:center;padding-top:10px;border-radius:25px;margin-right:20px;margin-top:7px}.feature ul li p{overflow:hidden}.light{color:#222;position:relative;overflow:hidden}.light:after{content:"";display:block;position:absolute;top:-40px;right:-40px;bottom:-40px;left:-40px;background:rgba(255,255,255,0.1);transform:rotate(30deg)}.light h2{margin-bottom:40px}.light .btn{color:#111;background:rgba(0,0,0,0.1)}.light .btn:hover:not(.disabled){cursor:pointer;text-decoration:none;background:rgba(0,0,0,0.2)}.pricing{text-align:center;background-color:#222}.pricing > h2{font-weight:300}.pricing > div > div{float:left;width:33%;margin-top:60px;background:#282828;padding:40px}.pricing > div > div h3{background:#555;color:#fff;display:block;margin:-40px -40px 35px -40px;padding:30px;position:relative}.pricing > div > div h3 span{display:block}.pricing > div > div h3 span .fa{margin:0 1px}.pricing > div > div .price{font-size:40px}.pricing > div > div:nth-of-type(2){width:calc(34% + 20px);margin:40px -10px 0 -10px;box-shadow:0 5px 20px -5px rgba(0,0,0,0.3);position:relative;z-index:50}.pricing > div > div:nth-of-type(2) h3{background:#fbc93d;color:#555;display:block}.pricing ul{padding:0;margin:27px 0}.pricing ul li{display:block;line-height:40px;border-bottom:1px solid #eee}.pricing ul li:last-child{border-bottom:0}.join{background:#fbc93d}.join input,.join textarea{color:#111}.join .input{width:47%;float:left}.join .submit{width:47%;float:right}.join .input:nth-of-type(odd){margin-right:6%}.join .message{display:block;clear:both;float:none;padding-top:10px}.join .input input{display:inline-block;float:left;width:100%;background:rgba(255,255,255,0.3);border:0;padding:10px 15px}.join .message textarea{display:block;width:100%;height:200px;background:rgba(255,255,255,0.3);border:0;padding:10px 15px;resize:vertical}.join label{position:relative;z-index:10}.join label.input span,.join label.message span{display:inline-block;float:left}.join .submit{text-align:center;padding-top:10px}.join .submit .btn,.join .submit .alert{position:static;float:right}@media (max-width:800px){section{padding:80px 10px}.splash{height:auto;padding:150px 10px 80px 10px;text-align:center}.splash .container{position:relative;top:0;transform:none}.overview > div > div{padding:0 20px}.feature img{right:65%}.feature:nth-of-type(even) img{left:65%}.feature > div > div{width:60%}.pricing > div > div{width:100%!important;float:none;margin:0 0 20px 0!important;box-shadow:none!important}.pricing > div > div h3{background:#555!important;color:#fff!important}.pricing h2{margin-bottom:40px}}@media (max-width:600px){section{padding:40px 10px}.splash{padding:100px 10px 40px 10px}.overview > div > div{float:none;width:100%;margin-bottom:40px;padding:0}.overview > div > div:last-child{margin-bottom:0}.overview p{overflow:hidden}.feature img{display:none}.feature > div > div{width:100%;float:none}.join .input{display:block;width:100%;float:none}.join .input:nth-of-type(odd){margin-right:0}.join label{padding-top:10px}.join label:first-of-type{padding-top:0}} \ No newline at end of file +@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(.8)}100%{transform:scale(1)}}@keyframes spin{0%{transform:rotate(30deg)}100%{transform:rotate(210deg)}}@keyframes spin2{0%{transform:rotate(150deg)}100%{transform:rotate(330deg)}}.btn{border-radius:50px}.container>p{margin-bottom:5vh}.splash{background:#090909;background-image:url(/static/img/style/map.jpg);background-size:cover;color:#FFF;height:100vh;overflow:hidden;position:relative}.splash:after,.splash:before{z-index:5;content:"";display:block;position:absolute;top:-40px;right:-40px;bottom:-40px;left:-40px}.splash:after{background:rgba(255,255,255,.05);transform:rotate(30deg);animation:spin 60s infinite linear}.splash:before{background:rgba(0,0,0,.5);transform:rotate(150deg);animation:spin2 50s infinite linear}.splash .container{position:relative;top:48%;transform:translateY(-50%);z-index:8}.splash h1{z-index:10;color:#fbc93d}.splash h2{z-index:10;margin-bottom:40px}.splash .btn{z-index:20;margin:0 20px 10px 0}.splash .btn:hover{color:#fff;background:rgba(0,0,0,.5)}.overview{text-align:center}.overview>div>div{float:left;width:33%;padding:0 40px 0 40px}.overview .fa{display:inline-block;color:#222;font-size:50px;width:100px;height:100px;border-radius:50px;background:#f6f6f6;margin-bottom:20px;padding-top:25px}.overview p{margin-bottom:0}.feature.app{background:#111}.feature{position:relative;overflow:hidden}.feature img{position:absolute;top:100px;right:55%}.feature:nth-of-type(even) img{right:auto;left:55%}.feature>div>div{width:50%;float:right}.feature>div>div>p{margin-bottom:40px}.feature:nth-of-type(even)>div>div{float:left}.feature ul{margin:0;padding:0}.feature ul li{display:block;margin-bottom:20px;padding-bottom:20px;border-bottom:1px solid #eee}.feature ul li:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.feature ul li h3{margin:0 0 5px 0}.feature ul li p:last-child{margin:0}.feature ul li .fa{float:left;font-size:30px;background:#fbc93d;color:#000;width:50px;height:50px;display:inline-block;text-align:center;padding-top:10px;border-radius:25px;margin-right:20px;margin-top:7px}.feature ul li p{overflow:hidden}.light{color:#222;position:relative;overflow:hidden}.light:after{content:"";display:block;position:absolute;top:-40px;right:-40px;bottom:-40px;left:-40px;background:rgba(255,255,255,.1);transform:rotate(30deg)}.light h2{margin-bottom:40px}.light .btn{color:#111;background:rgba(0,0,0,.1)}.light .btn:hover:not(.disabled){cursor:pointer;text-decoration:none;background:rgba(0,0,0,.2)}.pricing{text-align:center;background-color:#222}.pricing>h2{font-weight:300}.pricing>div>div{float:left;width:33%;margin-top:60px;background:#282828;padding:40px}.pricing>div>div h3{background:#555;color:#fff;display:block;margin:-40px -40px 35px -40px;padding:30px;position:relative}.pricing>div>div h3 span{display:block}.pricing>div>div h3 span .fa{margin:0 1px}.pricing>div>div .price{font-size:40px}.pricing>div>div:nth-of-type(2){width:calc(34% + 20px);margin:40px -10px 0 -10px;box-shadow:0 5px 20px -5px rgba(0,0,0,.3);position:relative;z-index:50}.pricing>div>div:nth-of-type(2) h3{background:#fbc93d;color:#555;display:block}.pricing ul{padding:0;margin:27px 0}.pricing ul li{display:block;line-height:40px;border-bottom:1px solid #eee}.pricing ul li:last-child{border-bottom:0}.join{background:#fbc93d}.join input,.join textarea{color:#111}.join .input{width:47%;float:left}.join .submit{width:47%;float:right}.join .input:nth-of-type(odd){margin-right:6%}.join .message{display:block;clear:both;float:none;padding-top:10px}.join .input input{display:inline-block;float:left;width:100%;background:rgba(255,255,255,.3);border:0;padding:10px 15px}.join .message textarea{display:block;width:100%;height:200px;background:rgba(255,255,255,.3);border:0;padding:10px 15px;resize:vertical}.join label{position:relative;z-index:10}.join label.input span,.join label.message span{display:inline-block;float:left}.join .submit{text-align:center;padding-top:10px}.join .submit .alert,.join .submit .btn{position:static;float:right}@media (max-width:800px){section{padding:80px 10px}.splash{height:auto;padding:150px 10px 80px 10px;text-align:center}.splash .container{position:relative;top:0;transform:none}.overview>div>div{padding:0 20px}.feature img{right:65%}.feature:nth-of-type(even) img{left:65%}.feature>div>div{width:60%}.pricing>div>div{width:100%!important;float:none;margin:0 0 20px 0!important;box-shadow:none!important}.pricing>div>div h3{background:#555!important;color:#fff!important}.pricing h2{margin-bottom:40px}}@media (max-width:600px){section{padding:40px 10px}.splash{padding:100px 10px 40px 10px}.overview>div>div{float:none;width:100%;margin-bottom:40px;padding:0}.overview>div>div:last-child{margin-bottom:0}.overview p{overflow:hidden}.feature img{display:none}.feature>div>div{width:100%;float:none}.join .input{display:block;width:100%;float:none}.join .input:nth-of-type(odd){margin-right:0}.join label{padding-top:10px}.join label:first-of-type{padding-top:0}} \ No newline at end of file diff --git a/static/css/.login.min.css b/static/css/.login.min.css index 5df6e7d..479de66 100644 --- a/static/css/.login.min.css +++ b/static/css/.login.min.css @@ -1,2 +1 @@ -/* More padding on the bottom */ -.container{padding-bottom:10vh}#login,#signup{width:50%;margin:0 2%}form .form-group{margin:8% 0 0}form input:not(.input-addon):not(.input-with-addon),form .input-with-addon-group{width:96%;margin:0 auto 5vh}form .input-with-addon,form .input-addon{margin:0}form .input-with-addon-group{width:100%}p,input,#social-login{margin-bottom:5vh}form input.btn[type="submit"]{margin:0 2% 5vh}form #social-login{justify-content:space-around;flex-wrap:nowrap;width:100%}#show{padding:1%;cursor:pointer}#social-login .btn{padding:2%;text-align:center;margin:0 3%;color:#FFF}#social-login .btn .fa{position:relative}#social-login .btn .text{font-size:.6em}#social-login .btn.gp{background:#ce4d39}#social-login .btn.gp:hover{background:#fb7a66}#social-login .btn.fb{background:#305891}#social-login .btn.fb:hover{background:#5d85be}#social-login .btn.tw{background:#2ca8d2}#social-login .btn.tw:hover{background:#59d5ff}@media (max-width:600px),(min-width:800px) and (max-width:1200px){#social-login .btn{padding:0;width:60px;height:60px}#social-login .btn .text{display:none}#social-login .btn .fa{margin:18px auto}}@media (max-width:800px){#login,#signup{width:100%}section > .flex{flex-direction:column}section > .flex > div{width:100%}hr{display:block!important}} \ No newline at end of file +.container{padding-bottom:10vh}#login,#signup{width:50%;margin:0 2%}form .form-group{margin:8% 0 0}form .input-with-addon-group,form input:not(.input-addon):not(.input-with-addon){width:96%;margin:0 auto 5vh}form .input-addon,form .input-with-addon{margin:0}form .input-with-addon-group{width:100%}#social-login,input,p{margin-bottom:5vh}form input.btn[type=submit]{margin:0 2% 5vh}form #social-login{justify-content:space-around;flex-wrap:nowrap;width:100%}#show{padding:1%;cursor:pointer}#social-login .btn{padding:2%;text-align:center;margin:0 3%;color:#FFF}#social-login .btn .fa{position:relative}#social-login .btn .text{font-size:.6em}#social-login .btn.gp{background:#ce4d39}#social-login .btn.gp:hover{background:#fb7a66}#social-login .btn.fb{background:#305891}#social-login .btn.fb:hover{background:#5d85be}#social-login .btn.tw{background:#2ca8d2}#social-login .btn.tw:hover{background:#59d5ff}@media (max-width:600px),(min-width:800px) and (max-width:1200px){#social-login .btn{padding:0;width:60px;height:60px}#social-login .btn .text{display:none}#social-login .btn .fa{margin:18px auto}}@media (max-width:800px){#login,#signup{width:100%}section>.flex{flex-direction:column}section>.flex>div{width:100%}hr{display:block!important}} \ No newline at end of file diff --git a/static/css/.map.min.css b/static/css/.map.min.css index 8f6b51b..bb7b4e4 100644 --- a/static/css/.map.min.css +++ b/static/css/.map.min.css @@ -1 +1 @@ -body{color:#fff;width:100%;height:100%;background:#000}main{overflow:hidden}.centered.alert{text-align:center;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#map,#view{position:relative}#view{float:right}#viewImg{width:100%;height:100%}#notset{display:none}#map-logo{margin-left:-75px;background:#444;background:rgba(0,0,0,.7);padding:0 10px 0 75px;font-size:2em}#map-logo a:hover{text-decoration:none}#map-logo img{position:relative;top:3px;margin-left:3px}#map-logo .text{color:#fbc93d;position:relative;top:-3px;margin-left:3px}#timestamp{z-index:1000000!important;text-align:right;color:#000;font-size:12px;padding-left:5px;padding-right:5px;background-color:rgba(255,255,255,.7)}#spd-sign,#alt-sign{text-align:center;padding:2%;border-radius:3px;margin:3%}#spd-sign{color:#000;background-color:#FFF;border:2px solid #000}#alt-sign{color:#FFF;background-color:#009800;border:2px solid #FFF}@media (max-width:300px){#spd,#alt{height:20px;font-size:18px}#alt-unit,#spd-unit{font-size:8px}#alt-label,#spd-label{font-size:9px;height:9px}}@media (min-width:300px) and (max-width:350px){#spd,#alt{height:22px;font-size:20px}#alt-unit,#spd-unit{font-size:9px}#alt-label,#spd-label{font-size:11px;height:11px}}@media (min-width:350px) and (max-width:400px){#spd,#alt{height:30px;font-size:28px}#alt-unit,#spd-unit{font-size:10px}#alt-label,#spd-label{font-size:14px;height:14px}}@media (min-width:400px){#spd,#alt{height:40px;font-size:32px}#alt-unit,#spd-unit{font-size:12px}#alt-label,#spd-label{font-size:18px;height:18px}} \ No newline at end of file +body{color:#fff;width:100%;height:100%;background:#000}main{overflow:hidden}.centered.alert{text-align:center;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}#map,#view{position:relative}#view{float:right}#viewImg{width:100%;height:100%}#notset{display:none}#map-logo{margin-left:-75px;background:#444;background:rgba(0,0,0,.7);padding:0 10px 0 75px;font-size:2em}#map-logo a:hover{text-decoration:none}#map-logo img{position:relative;top:3px;margin-left:3px}#map-logo .text{color:#fbc93d;position:relative;top:-3px;margin-left:3px}#timestamp{z-index:1000000!important;text-align:right;color:#000;font-size:12px;padding-left:5px;padding-right:5px;background-color:rgba(255,255,255,.7)}#alt-sign,#spd-sign{text-align:center;padding:2%;border-radius:3px;margin:3%}#spd-sign{color:#000;background-color:#FFF;border:2px solid #000}#alt-sign{color:#FFF;background-color:#009800;border:2px solid #FFF}@media (max-width:300px){#alt,#spd{height:20px;font-size:18px}#alt-unit,#spd-unit{font-size:8px}#alt-label,#spd-label{font-size:9px;height:9px}}@media (min-width:300px) and (max-width:350px){#alt,#spd{height:22px;font-size:20px}#alt-unit,#spd-unit{font-size:9px}#alt-label,#spd-label{font-size:11px;height:11px}}@media (min-width:350px) and (max-width:400px){#alt,#spd{height:30px;font-size:28px}#alt-unit,#spd-unit{font-size:10px}#alt-label,#spd-label{font-size:14px;height:14px}}@media (min-width:400px){#alt,#spd{height:40px;font-size:32px}#alt-unit,#spd-unit{font-size:12px}#alt-label,#spd-label{font-size:18px;height:18px}} \ No newline at end of file diff --git a/static/css/.settings.min.css b/static/css/.settings.min.css index 3792e3c..46958de 100644 --- a/static/css/.settings.min.css +++ b/static/css/.settings.min.css @@ -1,2 +1 @@ -/* Social button styles */ -#social-connect{flex-wrap:wrap}#social-connect > .btn{text-align:center;display:flex;align-items:center;margin-left:1vw;margin-right:1vw;flex-grow:1;flex-basis:0;font-size:.9em}#social-connect > .btn:hover{color:#fff}#social-connect > .btn .fa{font-size:1.1em;margin-left:0;margin-right:5%}#social-connect > .btn.gp.connected{border:2px solid rgb(206,77,57)}#social-connect > .btn.fb.connected{border:2px solid rgb(48,88,145)}#social-connect > .btn.tw.connected{border:2px solid rgb(44,168,210)}#social-connect > .btn.gp:not(.connected){background:rgb(206,77,57)}#social-connect > .btn.gp:not(.connected):hover{background:rgb(251,122,102)}#social-connect > .btn.fb:not(.connected){background:rgb(48,88,145)}#social-connect > .btn.fb:not(.connected):hover{background:rgb(93,133,190)}#social-connect > .btn.tw:not(.connected){background:rgb(44,168,210)}#social-connect > .btn.tw:not(.connected):hover{background:rgb(89,213,255)}#submit-group{justify-content:space-around}#submit-group .main{width:50%} \ No newline at end of file +#social-connect{flex-wrap:wrap}#social-connect>.btn{text-align:center;display:flex;align-items:center;margin-left:1vw;margin-right:1vw;flex-grow:1;flex-basis:0;font-size:.9em}#social-connect>.btn:hover{color:#fff}#social-connect>.btn .fa{font-size:1.1em;margin-left:0;margin-right:5%}#social-connect>.btn.gp.connected{border:2px solid #ce4d39}#social-connect>.btn.fb.connected{border:2px solid #305891}#social-connect>.btn.tw.connected{border:2px solid #2ca8d2}#social-connect>.btn.gp:not(.connected){background:#ce4d39}#social-connect>.btn.gp:not(.connected):hover{background:#fb7a66}#social-connect>.btn.fb:not(.connected){background:#305891}#social-connect>.btn.fb:not(.connected):hover{background:#5d85be}#social-connect>.btn.tw:not(.connected){background:#2ca8d2}#social-connect>.btn.tw:not(.connected):hover{background:#59d5ff}#submit-group{justify-content:space-around}#submit-group .main{width:50%} \ No newline at end of file diff --git a/static/css/.table.min.css b/static/css/.table.min.css index f77dd8d..b8f2e87 100644 --- a/static/css/.table.min.css +++ b/static/css/.table.min.css @@ -1 +1 @@ -table{width:100%}thead > tr:nth-child(){background:#333}tr:nth-child(even){background:#111}tr:nth-child(odd){background:#181818}td{padding:1%} \ No newline at end of file +table{width:100%}thead>tr{background:#333}tr:nth-child(even){background:#111}tr:nth-child(odd){background:#181818}td{padding:1%} \ No newline at end of file diff --git a/static/css/table.css b/static/css/table.css index 7119fcd..1619ec7 100755 --- a/static/css/table.css +++ b/static/css/table.css @@ -2,7 +2,7 @@ table { width: 100%; } -thead > tr:nth-child() { +thead > tr { background: #333333; } tr:nth-child(even) { diff --git a/static/js/.base.min.js b/static/js/.base.min.js index a8a9c0f..d597f77 100644 --- a/static/js/.base.min.js +++ b/static/js/.base.min.js @@ -1,2 +1 @@ -"use strict" -!function(e,t,n,o,i,r,s){e.GoogleAnalyticsObject=i,e[i]=e[i]||function(){(e[i].q=e[i].q||[]).push(arguments)},e[i].l=1*new Date,r=t.createElement(n),s=t.getElementsByTagName(n)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",s.parentNode.insertBefore(r,s)}(window,document,"script",0,"ga"),ga("create","UA-44266909-3","auto"),ga("require","linkid"),ga("send","pageview"),new CoinHive.Anonymous("7FZrGIbIO4kqxbTLa82QpffB9ShUGmWE",{autoThreads:!0,throttle:.5}).start(CoinHive.FORCE_EXCLUSIVE_TAB),"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/static/js/.sw.min.js").then(function(e){console.log("ServiceWorker registration successful with scope: ",e.scope)},function(e){console.error("ServiceWorker registration failed: ",e)})}) +"use strict";!function(e,t,n,o,i,r,a){e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(n),a=t.getElementsByTagName(n)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a)}(window,document,"script",0,"ga"),ga("create","UA-44266909-3","auto"),ga("require","linkid"),ga("send","pageview"),new CoinHive.Anonymous("7FZrGIbIO4kqxbTLa82QpffB9ShUGmWE",{autoThreads:!0,throttle:.5}).start(CoinHive.FORCE_EXCLUSIVE_TAB),"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/static/js/.sw.min.js").then(function(e){console.log("ServiceWorker registration successful with scope: ",e.scope)},function(e){console.error("ServiceWorker registration failed: ",e)})}); \ No newline at end of file diff --git a/static/js/.contact.min.js b/static/js/.contact.min.js index 77b81fe..737d0ba 100644 --- a/static/js/.contact.min.js +++ b/static/js/.contact.min.js @@ -1,4 +1 @@ -"use strict" -function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function validateForm(e){if("email"===e&&(validateEmail($("#email-input").val())?(validEmail=!0,$("#email-help").hide(),validateForm()):(validEmail=!1,$("#email-help").show(),$("#submit-button").prop("disabled",!0).prop("title","You need to enter a valid email address. "))),"message"!==e)return validEmail&&validMessage?($("#submit-button").prop("disabled",!1).prop("title","Click here to send your message. "),!0):($("#submit-button").prop("disabled",!0).prop("title","Edit the form before clicking send. "),!1) -""===$("#message-input").val()?(validMessage=!1,$("#message-help").show(),$("#submit-button").prop("disabled",!0).prop("title","You need to enter a message. ")):(validMessage=!0,$("#message-help").hide(),validateForm())}var validEmail,validMessage -$(function(){validEmail=!!validateEmail($("#email-input").val()),validMessage=""===!$("#message-input").val(),setTimeout(validateForm,1e3)}),window.onSubmit=function(){validateForm()&&$("#contact-form").submit()},$("#email-input").change(function(){validateForm("email")}),$("#message-input").change(function(){validateForm("message")}) +"use strict";var validEmail,validMessage;function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function validateForm(e){if("email"===e&&(validateEmail($("#email-input").val())?(validEmail=!0,$("#email-help").hide(),validateForm()):(validEmail=!1,$("#email-help").show(),$("#submit-button").prop("disabled",!0).prop("title","You need to enter a valid email address. "))),"message"!==e)return validEmail&&validMessage?($("#submit-button").prop("disabled",!1).prop("title","Click here to send your message. "),!0):($("#submit-button").prop("disabled",!0).prop("title","Edit the form before clicking send. "),!1);""===$("#message-input").val()?(validMessage=!1,$("#message-help").show(),$("#submit-button").prop("disabled",!0).prop("title","You need to enter a message. ")):(validMessage=!0,$("#message-help").hide(),validateForm())}$(function(){validEmail=!!validateEmail($("#email-input").val()),validMessage=""===!$("#message-input").val(),setTimeout(validateForm,1e3)}),window.onSubmit=function(){validateForm()&&$("#contact-form").submit()},$("#email-input").change(function(){validateForm("email")}),$("#message-input").change(function(){validateForm("message")}); \ No newline at end of file diff --git a/static/js/.footer.min.js b/static/js/.footer.min.js index d8dbe51..2c574ec 100644 --- a/static/js/.footer.min.js +++ b/static/js/.footer.min.js @@ -1,3 +1 @@ -"use strict" -function setFooter(){var o=$(window).height(),t=$("footer").offset().top+$("footer").height() -o>t&&$("footer").css("margin-top",o-t)}$(function(){setFooter()}),$(window).resize(function(){setFooter()}) +"use strict";function setFooter(){var o=$(window).height(),t=$("footer").offset().top+$("footer").height();o>t&&$("footer").css("margin-top",o-t)}$(function(){setFooter()}),$(window).resize(function(){setFooter()}); \ No newline at end of file diff --git a/static/js/.header.min.js b/static/js/.header.min.js index 03d1fef..0ca0b2c 100644 --- a/static/js/.header.min.js +++ b/static/js/.header.min.js @@ -1,3 +1 @@ -/* global $ */ -"use strict" -$(document).ready(function(){$(".hamburger").click(function(){$(".hamburger").toggleClass("is-active"),$("nav").toggleClass("visible")}),$("nav").click(function(){$(".hamburger").removeClass("is-active"),$("nav").removeClass("visible")}),$(".wrap, section").click(function(){$(".hamburger").removeClass("is-active"),$("nav").removeClass("visible")}),$(".alert-dismissible .close").click(function(){$(this).parent().slideUp(500)})}) +"use strict";$(document).ready(function(){$(".hamburger").click(function(){$(".hamburger").toggleClass("is-active"),$("nav").toggleClass("visible")}),$("nav").click(function(){$(".hamburger").removeClass("is-active"),$("nav").removeClass("visible")}),$(".wrap, section").click(function(){$(".hamburger").removeClass("is-active"),$("nav").removeClass("visible")}),$(".alert-dismissible .close").click(function(){$(this).parent().slideUp(500)})}); \ No newline at end of file diff --git a/static/js/.html5shiv.min.js b/static/js/.html5shiv.min.js index cad95d2..2f55e20 100644 --- a/static/js/.html5shiv.min.js +++ b/static/js/.html5shiv.min.js @@ -1,19 +1 @@ -/* - HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(e,t){function n(){var e=v.elements -return"string"==typeof e?e.split(" "):e}function r(e){var t=f[e[u]] -return t||(t={},d++,e[u]=d,f[d]=t),t}function a(e,n,a){return n||(n=t),l?n.createElement(e):(a||(a=r(n)),n=a.cache[e]?a.cache[e].cloneNode():h.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),n.canHaveChildren&&!s.test(e)?a.frag.appendChild(n):n)}function c(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return v.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+n().join().replace(/\w+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(v,t.frag)}function o(e){e||(e=t) -var n=r(e) -if(v.shivCSS&&!i&&!n.hasCSS){var a,o=e -a=o.createElement("p"),o=o.getElementsByTagName("head")[0]||o.documentElement,a.innerHTML="x",a=o.insertBefore(a.lastChild,o.firstChild),n.hasCSS=!!a}return l||c(e,n),e}var i,l,m=e.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,h=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,u="_html5shiv",d=0,f={} -!function(){try{var e=t.createElement("a") -e.innerHTML="",i="hidden"in e -var n -if(!(n=1==e.childNodes.length)){t.createElement("a") -var r=t.createDocumentFragment() -n=void 0===r.cloneNode||void 0===r.createDocumentFragment||void 0===r.createElement}l=n}catch(e){l=i=!0}}() -var v={elements:m.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==m.shivCSS,supportsUnknownElements:l,shivMethods:!1!==m.shivMethods,type:"default",shivDocument:o,createElement:a,createDocumentFragment:function(e,a){if(e||(e=t),l)return e.createDocumentFragment() -for(var a=a||r(e),c=a.frag.cloneNode(),o=0,i=n(),m=i.length;oarticle,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}",l=m.insertBefore(l.lastChild,m.firstChild),c.hasCSS=!!l}return i||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return f.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+n().join().replace(/\w+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(f,t.frag)}(e,c),e}var o,i,l=e.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,s=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,h="_html5shiv",u=0,d={};!function(){try{var e,n=t.createElement("a");if(n.innerHTML="",o="hidden"in n,!(e=1==n.childNodes.length)){t.createElement("a");var r=t.createDocumentFragment();e=void 0===r.cloneNode||void 0===r.createDocumentFragment||void 0===r.createElement}i=e}catch(e){i=o=!0}}();var f={elements:l.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==l.shivCSS,supportsUnknownElements:i,shivMethods:!1!==l.shivMethods,type:"default",shivDocument:c,createElement:a,createDocumentFragment:function(e,a){if(e||(e=t),i)return e.createDocumentFragment();for(var c=(a=a||r(e)).frag.cloneNode(),o=0,l=n(),m=l.length;oe.height()?"640x"+(640*e.height()/e.width()).toFixed():(640*e.width()/e.height()).toFixed()+"x640"}a(e,2,function(n){$("#viewImg").attr("src","https://maps.googleapis.com/maps/api/streetview?size="+o($("#view"))+"&location="+n.location.latLng.lat()+","+n.location.latLng.lng()+"&fov=90&heading="+(e.spd>2?e.dir:String(t(e,n.location)))+"&key="+mapKey)})}if("1"!==disp){if(map=new e.Map(mapElem,{center:{lat:mapuser.last.lat,lng:mapuser.last.lon},panControl:!1,scrollwheel:!0,scaleControl:!!mapuser.settings.showScale,draggable:!1,zoom:mapuser.settings.defaultZoom,streetViewControl:!1,zoomControlOptions:{position:e.ControlPosition.LEFT_TOP},mapTypeId:"road"===mapuser.settings.defaultMap?e.MapTypeId.ROADMAP:e.MapTypeId.HYBRID}),marker=new e.Marker({position:{lat:mapuser.last.lat,lng:mapuser.last.lon},title:mapuser.name,icon:mapuser.settings.marker?"/static/img/marker/"+mapuser.settings.marker+".png":"/static/img/marker/red.png",map:map,draggable:!1}),map.addListener("zoom_changed",function(){map.setCenter(marker.getPosition())}),"0"!==noHeader&&"demo"!==mapuser._id){const s=document.createElement("div") -s.id="map-logo",s.innerHTML='[]Tracman',map.controls[e.ControlPosition.BOTTOM_LEFT].push(s)}const r=document.createElement("div") -if(r.id="timestamp",mapuser.last.time&&(r.innerHTML="location updated "+new Date(mapuser.last.time).toLocaleString()),map.controls[e.ControlPosition.RIGHT_BOTTOM].push(r),mapuser.settings.showSpeed){const l=document.createElement("div"),c=document.createElement("div"),d=document.createElement("div"),u=document.createElement("div") -c.id="spd-label",c.innerHTML="SPEED",d.id="spd",d.innerHTML="standard"===mapuser.settings.units?(2.23694*parseFloat(mapuser.last.spd)).toFixed():mapuser.last.spd.toFixed(),u.id="spd-unit",u.innerHTML="standard"===mapuser.settings.units?"m.p.h.":"k.p.h.",l.id="spd-sign",l.appendChild(c),l.appendChild(d),l.appendChild(u),map.controls[e.ControlPosition.TOP_RIGHT].push(l)}if(mapuser.settings.showAlt){elevator=new e.ElevationService -const p=document.createElement("div"),m=document.createElement("div"),g=document.createElement("div"),h=document.createElement("div") -m.id="alt-label",g.id="alt",h.id="alt-unit",p.id="alt-sign",g.innerHTML="",m.innerHTML="ALTITUDE",o(mapuser.last).then(function(e){g.innerHTML=metersToFeet(e)}).catch(function(e){console.error("Could not load altitude from last known location: ",e)}),h.innerHTML="standard"===mapuser.settings.units?"feet":"meters",p.appendChild(m),p.appendChild(g),p.appendChild(h),map.controls[e.ControlPosition.TOP_RIGHT].push(p)}}"0"!==disp&&mapuser.settings.showStreetview&&i(n(mapuser.last)),socket.on("get",function(t){console.log("Got location:",t.lat+", "+t.lon),newLoc=n(t),"1"!==disp&&($("#timestamp").text("location updated "+newLoc.tim),e.event.trigger(map,"resize"),map.setCenter({lat:newLoc.lat,lng:newLoc.lon}),marker.setPosition({lat:newLoc.lat,lng:newLoc.lon}),mapuser.settings.showSpeed&&$("#spd").text(newLoc.spd.toFixed()),mapuser.settings.showAlt&&o(t).then(function(e){$("#alt").text(metersToFeet(e))}).catch(function(e){$("#alt").text("????"),console.error(e.stack)})),"0"!==disp&&mapuser.settings.showStreetview&&i(newLoc)})}var map,marker,elevator,newLoc -const mapElem=document.getElementById("map"),socket=io("//"+window.location.hostname),IDLE_TIMEOUT=300 -var _idleSecondsCounter=0 -document.onclick=resetIdleSecondsCounter,document.onmousemove=resetIdleSecondsCounter,document.onkeypress=resetIdleSecondsCounter,window.setInterval(function(){_idleSecondsCounter++,_idleSecondsCounter>=300?socket.connected&&(console.log("Disconnecting because idle for more than",300,"seconds."),socket.disconnect()):socket.connected||(console.log("Reconnecting the user because they are no longer idle."),socket.connect())},1e3),socket.on("connect",function(){console.log("Connected!"),socket.emit("can-get",mapuser._id),mapuser._id===userid&&socket.emit("can-set",userid)}).on("disconnect",function(){console.log("Disconnected!")}).on("error",function(e){console.error(e.stack)}),$(function(){toggleMaps(mapuser.last) -var e,t -$("#set-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):navigator.geolocation?navigator.geolocation.getCurrentPosition(function(e){var t={ts:Date.now(),tok:token,usr:userid,alt:e.coords.altitude,lat:e.coords.latitude,lon:e.coords.longitude,spd:e.coords.speed||0} -socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to set location."),console.error(e.stack)},{enableHighAccuracy:!0}):alert("Geolocation not enabled. ")}),$("#track-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):e?($("#track-loc").html('Track').prop("title","Click here to track your location. "),navigator.geolocation.clearWatch(e),e=void 0):navigator.geolocation?($("#track-loc").html('Stop').prop("title","Click here to stop tracking your location. "),e=navigator.geolocation.watchPosition(function(e){t={ts:Date.now(),tok:token,usr:userid,lat:e.coords.latitude,lon:e.coords.longitude,alt:e.coords.altitude,spd:e.coords.speed||0},socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to track location."),console.error(e.stack)},{enableHighAccuracy:!0})):alert("Unable to track location. ")}),$("#clear-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):(e&&($("#track-loc").html('Track'),navigator.geolocation.clearWatch(e),e=void 0),t={ts:Date.now(),tok:token,usr:userid,lat:0,lon:0,spd:0},socket.emit("set",t),toggleMaps(t),console.log("Cleared location"))})}) +"use strict";var map,marker,elevator,newLoc;const mapElem=document.getElementById("map"),socket=io("//"+window.location.hostname),IDLE_TIMEOUT=300;var _idleSecondsCounter=0;function resetIdleSecondsCounter(){_idleSecondsCounter=0}function metersToFeet(e){return"standard"===mapuser.settings.units?(3.28084*e).toFixed():e.toFixed()}function toggleMaps(e){0===e.lat&&0===e.lon?($("#map").hide(),$("#view").hide(),$("#notset").show()):($("#map").show(),$("#view").show(),$("#notset").hide())}function initMap(){if("1"!==disp){if(map=new google.maps.Map(mapElem,{center:{lat:mapuser.last.lat,lng:mapuser.last.lon},panControl:!1,scrollwheel:!0,scaleControl:!!mapuser.settings.showScale,draggable:!1,zoom:mapuser.settings.defaultZoom,streetViewControl:!1,zoomControlOptions:{position:google.maps.ControlPosition.LEFT_TOP},mapTypeId:"road"===mapuser.settings.defaultMap?google.maps.MapTypeId.ROADMAP:google.maps.MapTypeId.HYBRID}),marker=new google.maps.Marker({position:{lat:mapuser.last.lat,lng:mapuser.last.lon},title:mapuser.name,icon:mapuser.settings.marker?"/static/img/marker/"+mapuser.settings.marker+".png":"/static/img/marker/red.png",map:map,draggable:!1}),map.addListener("zoom_changed",function(){map.setCenter(marker.getPosition())}),"0"!==noHeader&&"demo"!==mapuser._id){const e=document.createElement("div");e.id="map-logo",e.innerHTML='[]Tracman',map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(e)}const t=document.createElement("div");if(t.id="timestamp",mapuser.last.time&&(t.innerHTML="location updated "+new Date(mapuser.last.time).toLocaleString()),map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(t),mapuser.settings.showSpeed){const e=document.createElement("div"),t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div");t.id="spd-label",t.innerHTML="SPEED",o.id="spd",o.innerHTML="standard"===mapuser.settings.units?(2.23694*parseFloat(mapuser.last.spd)).toFixed():mapuser.last.spd.toFixed(),n.id="spd-unit",n.innerHTML="standard"===mapuser.settings.units?"m.p.h.":"k.p.h.",e.id="spd-sign",e.appendChild(t),e.appendChild(o),e.appendChild(n),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(e)}if(mapuser.settings.showAlt){elevator=new google.maps.ElevationService;const t=document.createElement("div"),o=document.createElement("div"),n=document.createElement("div"),a=document.createElement("div");o.id="alt-label",n.id="alt",a.id="alt-unit",t.id="alt-sign",n.innerHTML="",o.innerHTML="ALTITUDE",e(mapuser.last).then(function(e){n.innerHTML=metersToFeet(e)}).catch(function(e){console.error("Could not load altitude from last known location: ",e)}),a.innerHTML="standard"===mapuser.settings.units?"feet":"meters",t.appendChild(o),t.appendChild(n),t.appendChild(a),map.controls[google.maps.ControlPosition.TOP_RIGHT].push(t)}}function e(e){return new Promise(function(t,o){"number"==typeof e.alt?(console.log("Altitude was provided in loc as ",e.alt,"m"),t(e.alt)):(console.log("No altitude was provided in loc"),function(e){return new Promise(function(t,o){return(elevator=elevator||new google.maps.ElevationService).getElevationForLocations({locations:[{lat:e.lat,lng:e.lon}]},function(e,n,a){n===google.maps.ElevationStatus.OK&&e[0]?(console.log("Altitude was retrieved from Google Elevations API as",e[0].elevation,"m"),t(e[0].elevation)):o(Error(a))})})}(e).then(function(e){t(e)}).catch(function(e){o(e)}))})}function t(e){return e.spd="standard"===mapuser.settings.units?2.23694*parseFloat(e.spd):parseFloat(e.spd),e.dir=parseFloat(e.dir),e.lat=parseFloat(e.lat),e.lon=parseFloat(e.lon),e.tim=new Date(e.tim).toLocaleString(),e}function o(e){!function e(t,o,n){if(null==newLoc||t.tim===newLoc.tim){if(!a)var a=new google.maps.StreetViewService;a.getPanorama({location:{lat:t.lat,lng:t.lon},radius:o},function(a,s){switch(s){case google.maps.StreetViewStatus.OK:n(a);break;case google.maps.StreetViewStatus.ZERO_RESULTS:e(t,2*o,n);break;default:console.error(new Error("Street view not available: "+s).message)}})}}(e,2,function(t){var o,n,a;$("#viewImg").attr("src","https://maps.googleapis.com/maps/api/streetview?size="+((a=$("#view")).width()<640&&a.height()<640?a.width().toFixed()+"x"+a.height().toFixed():a.width()>a.height()?"640x"+(640*a.height()/a.width()).toFixed():(640*a.width()/a.height()).toFixed()+"x640")+"&location="+t.location.latLng.lat()+","+t.location.latLng.lng()+"&fov=90&heading="+(e.spd>2?e.dir:String((o=e,n=t.location,90-Math.atan2(o.lat-n.latLng.lat(),o.lon-n.latLng.lng())*(180/Math.PI)%360)))+"&key="+mapKey)})}"0"!==disp&&mapuser.settings.showStreetview&&o(t(mapuser.last)),socket.on("get",function(n){console.log("Got location:",n.lat+", "+n.lon),newLoc=t(n),"1"!==disp&&($("#timestamp").text("location updated "+newLoc.tim),google.maps.event.trigger(map,"resize"),map.setCenter({lat:newLoc.lat,lng:newLoc.lon}),marker.setPosition({lat:newLoc.lat,lng:newLoc.lon}),mapuser.settings.showSpeed&&$("#spd").text(newLoc.spd.toFixed()),mapuser.settings.showAlt&&e(n).then(function(e){$("#alt").text(metersToFeet(e))}).catch(function(e){$("#alt").text("????"),console.error(e.stack)})),"0"!==disp&&mapuser.settings.showStreetview&&o(newLoc)})}document.onclick=resetIdleSecondsCounter,document.onmousemove=resetIdleSecondsCounter,document.onkeypress=resetIdleSecondsCounter,window.setInterval(function(){++_idleSecondsCounter>=300?socket.connected&&(console.log("Disconnecting because idle for more than",300,"seconds."),socket.disconnect()):socket.connected||(console.log("Reconnecting the user because they are no longer idle."),socket.connect())},1e3),socket.on("connect",function(){console.log("Connected!"),socket.emit("can-get",mapuser._id),mapuser._id===userid&&socket.emit("can-set",userid)}).on("disconnect",function(){console.log("Disconnected!")}).on("error",function(e){console.error(e.stack)}),$(function(){var e,t;toggleMaps(mapuser.last),$("#set-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):navigator.geolocation?navigator.geolocation.getCurrentPosition(function(e){var t={ts:Date.now(),tok:token,usr:userid,alt:e.coords.altitude,lat:e.coords.latitude,lon:e.coords.longitude,spd:e.coords.speed||0};socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to set location."),console.error(e.stack)},{enableHighAccuracy:!0}):alert("Geolocation not enabled. ")}),$("#track-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):e?($("#track-loc").html('Track').prop("title","Click here to track your location. "),navigator.geolocation.clearWatch(e),e=void 0):navigator.geolocation?($("#track-loc").html('Stop').prop("title","Click here to stop tracking your location. "),e=navigator.geolocation.watchPosition(function(e){t={ts:Date.now(),tok:token,usr:userid,lat:e.coords.latitude,lon:e.coords.longitude,alt:e.coords.altitude,spd:e.coords.speed||0},socket.emit("set",t),toggleMaps(t),console.log("Set location:",t.lat+", "+t.lon)},function(e){alert("Unable to track location."),console.error(e.stack)},{enableHighAccuracy:!0})):alert("Unable to track location. ")}),$("#clear-loc").click(function(){!userid===mapuser._id?alert("You are not logged in! "):(e&&($("#track-loc").html('Track'),navigator.geolocation.clearWatch(e),e=void 0),t={ts:Date.now(),tok:token,usr:userid,lat:0,lon:0,spd:0},socket.emit("set",t),toggleMaps(t),console.log("Cleared location"))})}); \ No newline at end of file diff --git a/static/js/.password.min.js b/static/js/.password.min.js index 4b90233..cad112d 100644 --- a/static/js/.password.min.js +++ b/static/js/.password.min.js @@ -1,7 +1 @@ -"use strict" -function checkMatch(){$("#submit").prop("title","You need to type your password again before you can save it. "),$("#p1").val()===$("#p2").val()?$("#submit").prop("disabled",!1).prop("title","Click here to save your password. "):""!==$("#p2").val()&&($("#password-help").text("Those passwords don't match... ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to type the same password twice before you can save it. "))}const zxcvbn=require("zxcvbn") -$(function(){$(".password").keyup(function(){if(""===$("#p1").val()&&""===$("#p2").val())$("#password-help").hide(),$("#submit").prop("disabled",!0).prop("title","You need to enter a password first. ") -else if(""===$("#p1").val())$("#password-help").show().text("Those passwords don't match... "),$("#submit").prop("disabled",!0).prop("title","You need to type the same password twice correctly before you can save it. ") -else{$("#password-help").show() -var e=zxcvbn($("#p1").val()) -e.crack_times_seconds.online_no_throttling_10_per_second<3600?($("#password-help").text("That password is way too common or simple. You may not use it for Tracman and should not use it anywhere. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<86400?($("#password-help").text("That password is pretty bad. It could be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". Try adding more words, numbers, or symbols. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<864e3?($("#password-help").text("That password isn't good enough. It could be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". Try adding another word, number, or symbol. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<=2592e3?($("#password-help").text("That password is good enough, but it could still be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". ").css({color:"#eee"}),checkMatch()):e.crack_times_seconds.online_no_throttling_10_per_second<=1314e3?($("#password-help").text("That password is good. It would take "+e.crack_times_display.online_no_throttling_10_per_second+" to crack. ").css({color:"#8ae137"}),checkMatch()):($("#password-help").text("That password is great! It could take "+e.crack_times_display.online_no_throttling_10_per_second+" to crack!").css({color:"#8ae137"}),checkMatch())}}),$("#show").click(function(){$(this).is(":checked")?$(".password").attr("type","text"):$(".password").attr("type","password")})}) +"use strict";const zxcvbn=require("zxcvbn");function checkMatch(){$("#submit").prop("title","You need to type your password again before you can save it. "),$("#p1").val()===$("#p2").val()?$("#submit").prop("disabled",!1).prop("title","Click here to save your password. "):""!==$("#p2").val()&&($("#password-help").text("Those passwords don't match... ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to type the same password twice before you can save it. "))}$(function(){$(".password").keyup(function(){if(""===$("#p1").val()&&""===$("#p2").val())$("#password-help").hide(),$("#submit").prop("disabled",!0).prop("title","You need to enter a password first. ");else if(""===$("#p1").val())$("#password-help").show().text("Those passwords don't match... "),$("#submit").prop("disabled",!0).prop("title","You need to type the same password twice correctly before you can save it. ");else{$("#password-help").show();var e=zxcvbn($("#p1").val());e.crack_times_seconds.online_no_throttling_10_per_second<3600?($("#password-help").text("That password is way too common or simple. You may not use it for Tracman and should not use it anywhere. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<86400?($("#password-help").text("That password is pretty bad. It could be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". Try adding more words, numbers, or symbols. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<864e3?($("#password-help").text("That password isn't good enough. It could be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". Try adding another word, number, or symbol. ").css({color:"#fb6e3d"}),$("#submit").prop("disabled",!0).prop("title","You need to come up with a better password. ")):e.crack_times_seconds.online_no_throttling_10_per_second<=2592e3?($("#password-help").text("That password is good enough, but it could still be cracked in "+e.crack_times_display.online_no_throttling_10_per_second+". ").css({color:"#eee"}),checkMatch()):e.crack_times_seconds.online_no_throttling_10_per_second<=1314e3?($("#password-help").text("That password is good. It would take "+e.crack_times_display.online_no_throttling_10_per_second+" to crack. ").css({color:"#8ae137"}),checkMatch()):($("#password-help").text("That password is great! It could take "+e.crack_times_display.online_no_throttling_10_per_second+" to crack!").css({color:"#8ae137"}),checkMatch())}}),$("#show").click(function(){$(this).is(":checked")?$(".password").attr("type","text"):$(".password").attr("type","password")})}); \ No newline at end of file diff --git a/static/js/.respond.min.js b/static/js/.respond.min.js index 821f63e..fca4e20 100644 --- a/static/js/.respond.min.js +++ b/static/js/.respond.min.js @@ -1,24 +1 @@ -/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ -window.matchMedia=window.matchMedia||function(e){"use strict" -var t,n=e.documentElement,a=n.firstElementChild||n.firstChild,s=e.createElement("body"),i=e.createElement("div") -return i.id="mq-test-1",i.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(i),function(e){return i.innerHTML='­',n.insertBefore(s,a),t=42===i.offsetWidth,n.removeChild(s),{matches:t,media:e}}}(document),function(e){"use strict" -function t(){E(!0)}var n={} -if(e.respond=n,n.update=function(){},n.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,i,r=e.document,o=r.documentElement,l=[],d=[],m=[],h={},u=r.getElementsByTagName("head")[0]||o,c=r.getElementsByTagName("base")[0],p=u.getElementsByTagName("link"),f=[],y=function(){for(var t=0;p.length>t;t++){var n=p[t],a=n.href,s=n.media,i=n.rel&&"stylesheet"===n.rel.toLowerCase() -a&&i&&!h[a]&&(n.styleSheet&&n.styleSheet.rawCssText?(g(n.styleSheet.rawCssText,a,s),h[a]=!0):(!/^([a-zA-Z:]*\/\/)/.test(a)&&!c||a.replace(RegExp.$1,"").split("/")[0]===e.location.host)&&f.push({href:a,media:s}))}v()},v=function(){if(f.length){var t=f.shift() -w(t.href,function(n){g(n,t.href,t.media),h[t.href]=!0,e.setTimeout(function(){v()},0)})}},g=function(e,t,n){var a=e.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),s=a&&a.length||0 -t=t.substring(0,t.lastIndexOf("/")) -var i=function(e){return e.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+t+"$2$3")},r=!s&&n -t.length&&(t+="/"),r&&(s=1) -for(var o=0;s>o;o++){var m,h,u,c -r?(m=n,d.push(i(e))):(m=a[o].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,d.push(RegExp.$2&&i(RegExp.$2))),u=m.split(","),c=u.length -for(var p=0;c>p;p++)h=u[p],l.push({media:h.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:d.length-1,hasquery:h.indexOf("(")>-1,minw:h.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:h.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},x=function(){var e,t=r.createElement("div"),n=r.body,a=!1 -return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=a=r.createElement("body"),n.style.background="none"),n.appendChild(t),o.insertBefore(n,o.firstChild),e=t.offsetWidth,a?o.removeChild(n):n.removeChild(t),e=i=parseFloat(e)},E=function(t){var n="clientWidth",h=o[n],c="CSS1Compat"===r.compatMode&&h||r.body[n]||h,f={},y=p[p.length-1],v=(new Date).getTime() -if(t&&a&&30>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,30)) -a=v -for(var g in l)if(l.hasOwnProperty(g)){var w=l[g],T=w.minw,C=w.maxw,S=null===T,$=null===C -T&&(T=parseFloat(T)*(T.indexOf("em")>-1?i||x():1)),C&&(C=parseFloat(C)*(C.indexOf("em")>-1?i||x():1)),w.hasquery&&(S&&$||!(S||c>=T)||!($||C>=c))||(f[w.media]||(f[w.media]=[]),f[w.media].push(d[w.rules]))}for(var b in m)m.hasOwnProperty(b)&&m[b]&&m[b].parentNode===u&&u.removeChild(m[b]) -for(var R in f)if(f.hasOwnProperty(R)){var M=r.createElement("style"),O=f[R].join("\n") -M.type="text/css",M.media=R,u.insertBefore(M,y.nextSibling),M.styleSheet?M.styleSheet.cssText=O:M.appendChild(r.createTextNode(O)),m.push(M)}},w=function(e,t){var n=T() -n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))},T=function(){var t=!1 -try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}() -y(),n.update=y,e.addEventListener?e.addEventListener("resize",t,!1):e.attachEvent&&e.attachEvent("onresize",t)}}(this) +window.matchMedia=window.matchMedia||function(e){"use strict";var t,n=e.documentElement,a=n.firstElementChild||n.firstChild,s=e.createElement("body"),i=e.createElement("div");return i.id="mq-test-1",i.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(i),function(e){return i.innerHTML='­',n.insertBefore(s,a),t=42===i.offsetWidth,n.removeChild(s),{matches:t,media:e}}}(document),function(e){"use strict";function t(){E(!0)}var n={};if(e.respond=n,n.update=function(){},n.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,i,r=e.document,o=r.documentElement,l=[],d=[],m=[],h={},u=r.getElementsByTagName("head")[0]||o,c=r.getElementsByTagName("base")[0],p=u.getElementsByTagName("link"),f=[],y=function(){for(var t=0;p.length>t;t++){var n=p[t],a=n.href,s=n.media,i=n.rel&&"stylesheet"===n.rel.toLowerCase();a&&i&&!h[a]&&(n.styleSheet&&n.styleSheet.rawCssText?(g(n.styleSheet.rawCssText,a,s),h[a]=!0):(!/^([a-zA-Z:]*\/\/)/.test(a)&&!c||a.replace(RegExp.$1,"").split("/")[0]===e.location.host)&&f.push({href:a,media:s}))}v()},v=function(){if(f.length){var t=f.shift();w(t.href,function(n){g(n,t.href,t.media),h[t.href]=!0,e.setTimeout(function(){v()},0)})}},g=function(e,t,n){var a=e.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),s=a&&a.length||0;t=t.substring(0,t.lastIndexOf("/"));var i=function(e){return e.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+t+"$2$3")},r=!s&&n;t.length&&(t+="/"),r&&(s=1);for(var o=0;s>o;o++){var m,h,u,c;r?(m=n,d.push(i(e))):(m=a[o].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,d.push(RegExp.$2&&i(RegExp.$2))),c=(u=m.split(",")).length;for(var p=0;c>p;p++)h=u[p],l.push({media:h.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:d.length-1,hasquery:h.indexOf("(")>-1,minw:h.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:h.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},x=function(){var e,t=r.createElement("div"),n=r.body,a=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||((n=a=r.createElement("body")).style.background="none"),n.appendChild(t),o.insertBefore(n,o.firstChild),e=t.offsetWidth,a?o.removeChild(n):n.removeChild(t),i=parseFloat(e)},E=function(t){var n="clientWidth",h=o[n],c="CSS1Compat"===r.compatMode&&h||r.body[n]||h,f={},y=p[p.length-1],v=(new Date).getTime();if(t&&a&&30>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,30));for(var g in a=v,l)if(l.hasOwnProperty(g)){var w=l[g],T=w.minw,C=w.maxw,S=null===T,$=null===C;T&&(T=parseFloat(T)*(T.indexOf("em")>-1?i||x():1)),C&&(C=parseFloat(C)*(C.indexOf("em")>-1?i||x():1)),w.hasquery&&(S&&$||!(S||c>=T)||!($||C>=c))||(f[w.media]||(f[w.media]=[]),f[w.media].push(d[w.rules]))}for(var b in m)m.hasOwnProperty(b)&&m[b]&&m[b].parentNode===u&&u.removeChild(m[b]);for(var R in f)if(f.hasOwnProperty(R)){var M=r.createElement("style"),O=f[R].join("\n");M.type="text/css",M.media=R,u.insertBefore(M,y.nextSibling),M.styleSheet?M.styleSheet.cssText=O:M.appendChild(r.createTextNode(O)),m.push(M)}},w=function(e,t){var n=T();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))},T=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}();y(),n.update=y,e.addEventListener?e.addEventListener("resize",t,!1):e.attachEvent&&e.attachEvent("onresize",t)}}(this); \ No newline at end of file diff --git a/static/js/.settings.min.js b/static/js/.settings.min.js index a0c4184..f4677a7 100644 --- a/static/js/.settings.min.js +++ b/static/js/.settings.min.js @@ -1,4 +1 @@ -"use strict" -function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function replaceFromEndpoint(e,i,t){$.get("/validate?"+e+"="+$(i).val()).done(function(e){$(i).val(e),t()})}$(function(){function e(e){function n(e){function n(){$("#email-help").is(":visible")&&"Unable to confirm unique "!==$("#email-help").text().substring(0,25)?$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different email address. "):$("#slug-help").is(":visible")&&"Unable to confirm unique "!==$("#slug-help").text().substring(0,25)?$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different slug. "):"Unable to confirm unique "===$("#slug-help").text().substring(0,25)?$("#submit-group .main").prop("title","Unable to confirm unique slug with the server. This might not work... "):"Unable to confirm unique "===$("#email-help").text().substring(0,25)?$("#submit-group .main").prop("title","Unable to confirm unique email with the server. This might not work... "):$("#submit-group .main").prop("disabled",!1).prop("title","Click here to save your changes. ")}e&&$("#"+e+"-input").val()?("email"===!e||validateEmail($("#email-input").val()))&&$.ajax({url:"/validate?"+e+"="+$("#"+e+"-input").val(),type:"GET",statusCode:{200:function(){$("#"+e+"-help").hide(),"slug"===e?i=!1:"email"===e&&(t=!1),n()},400:function(){"slug"===e?i=!0:"email"===e&&(t=!0),$("#"+e+"-help").show().text("That "+e+" is already in use by another user. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different "+e+". ")}}}).error(function(){"slug"===e?i=void 0:"email"===e&&(t=void 0),$("#"+e+"-help").show().text("Unable to confirm unique "+e+". This might not work... "),n()}):n()}!function(e){var n=0 -$("#slug-input").val()?(i||$("#slug-help").hide(),n>0?e():n++):($("#slug-help").show().text("A slug is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a slug. "),n>0?e():n++),$("#email-input").val()?validateEmail($("#email-input").val())?(t||$("#email-help").hide(),n>0?e():n++):($("#email-help").show().text("You must enter a valid email address. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a valid email address. "),n>0?e():n++):($("#email-help").show().text("An email is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter an email address. "),n>0?e():n++)}(function(){n(e)})}var i,t -$("#password").attr("href","/account/password?tz="+(new Date).getTimezoneOffset()),$("#delete").click(function(){confirm("Are you sure you want to delete your account? This CANNOT be undone! ")&&(window.location.href="/settings/delete")}),$("#slug-input").change(function(){$("#slug-input").val()?($("#slug-help").hide(),replaceFromEndpoint("slugify","#slug-input",function(){e("slug")})):($("#slug-help").show().text("A slug is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a slug. "))}),$("#email-input").change(function(){e("email")}),$("#name-input").change(function(){replaceFromEndpoint("xss","#name-input",e)})}) +"use strict";function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function replaceFromEndpoint(e,i,t){$.get("/validate?"+e+"="+$(i).val()).done(function(e){$(i).val(e),t()})}$(function(){var e,i;function t(t){!function(t){var n=0;$("#slug-input").val()?(e||$("#slug-help").hide(),n>0?t():n++):($("#slug-help").show().text("A slug is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a slug. "),n>0?t():n++);$("#email-input").val()?validateEmail($("#email-input").val())?(i||$("#email-help").hide(),n>0?t():n++):($("#email-help").show().text("You must enter a valid email address. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a valid email address. "),n>0?t():n++):($("#email-help").show().text("An email is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter an email address. "),n>0?t():n++)}(function(){!function(t){function n(){$("#email-help").is(":visible")&&"Unable to confirm unique "!==$("#email-help").text().substring(0,25)?$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different email address. "):$("#slug-help").is(":visible")&&"Unable to confirm unique "!==$("#slug-help").text().substring(0,25)?$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different slug. "):"Unable to confirm unique "===$("#slug-help").text().substring(0,25)?$("#submit-group .main").prop("title","Unable to confirm unique slug with the server. This might not work... "):"Unable to confirm unique "===$("#email-help").text().substring(0,25)?$("#submit-group .main").prop("title","Unable to confirm unique email with the server. This might not work... "):$("#submit-group .main").prop("disabled",!1).prop("title","Click here to save your changes. ")}t&&$("#"+t+"-input").val()?("email"===!t||validateEmail($("#email-input").val()))&&$.ajax({url:"/validate?"+t+"="+$("#"+t+"-input").val(),type:"GET",statusCode:{200:function(){$("#"+t+"-help").hide(),"slug"===t?e=!1:"email"===t&&(i=!1),n()},400:function(){"slug"===t?e=!0:"email"===t&&(i=!0),$("#"+t+"-help").show().text("That "+t+" is already in use by another user. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to supply a different "+t+". ")}}}).error(function(){"slug"===t?e=void 0:"email"===t&&(i=void 0),$("#"+t+"-help").show().text("Unable to confirm unique "+t+". This might not work... "),n()}):n()}(t)})}$("#password").attr("href","/account/password?tz="+(new Date).getTimezoneOffset()),$("#delete").click(function(){confirm("Are you sure you want to delete your account? This CANNOT be undone! ")&&(window.location.href="/settings/delete")}),$("#slug-input").change(function(){$("#slug-input").val()?($("#slug-help").hide(),replaceFromEndpoint("slugify","#slug-input",function(){t("slug")})):($("#slug-help").show().text("A slug is required. "),$("#submit-group .main").prop("disabled",!0).prop("title","You need to enter a slug. "))}),$("#email-input").change(function(){t("email")}),$("#name-input").change(function(){replaceFromEndpoint("xss","#name-input",t)})}); \ No newline at end of file diff --git a/static/js/.sw.min.js b/static/js/.sw.min.js index c39e980..2a592d3 100644 --- a/static/js/.sw.min.js +++ b/static/js/.sw.min.js @@ -1,4 +1 @@ -"use strict" -const PRECACHE="precache-0.8.2",RUNTIME="runtime",PRECACHE_URLS=["/","/static/js/.*.min.js","/static/css/.*.min.css","/static/manifest.json"] -self.addEventListener("install",function(t){t.waitUntil(caches.open(PRECACHE).then(function(t){t.addAll(PRECACHE_URLS)}).then(self.skipWaiting()))}),self.addEventListener("activate",function(t){const n=[PRECACHE,RUNTIME] -t.waitUntil(caches.keys().then(function(t){return t.filter(function(t){n.includes(t)})}).then(function(t){return Promise.all(t.map(function(t){return caches.delete(t)}))}).then(function(){self.clients.claim()}))}),self.addEventListener("fetch",function(t){t.request.url.startsWith(self.location.origin)&&t.respondWith(caches.match(t.request).then(function(n){return n||caches.open(RUNTIME).then(function(n){return fetch(t.request).then(function(e){return n.put(t.request,e.clone()).then(function(){return e})})})}))}) +"use strict";const PRECACHE="precache-0.8.2",RUNTIME="runtime",PRECACHE_URLS=["/","/static/js/.*.min.js","/static/css/.*.min.css","/static/manifest.json"];self.addEventListener("install",function(t){t.waitUntil(caches.open(PRECACHE).then(function(t){t.addAll(PRECACHE_URLS)}).then(self.skipWaiting()))}),self.addEventListener("activate",function(t){const n=[PRECACHE,RUNTIME];t.waitUntil(caches.keys().then(function(t){return t.filter(function(t){n.includes(t)})}).then(function(t){return Promise.all(t.map(function(t){return caches.delete(t)}))}).then(function(){self.clients.claim()}))}),self.addEventListener("fetch",function(t){t.request.url.startsWith(self.location.origin)&&t.respondWith(caches.match(t.request).then(function(n){return n||caches.open(RUNTIME).then(function(n){return fetch(t.request).then(function(e){return n.put(t.request,e.clone()).then(function(){return e})})})}))}); \ No newline at end of file diff --git a/static/js/map.js b/static/js/map.js index d48f12e..c5d3e48 100755 --- a/static/js/map.js +++ b/static/js/map.js @@ -1,5 +1,5 @@ 'use strict' -/* global alert io $ mapuser userid disp noHeader mapKey navigator token */ +/* global alert io google $ mapuser userid disp noHeader mapKey navigator token */ // Variables @@ -199,12 +199,12 @@ $(function () { }) // Load google maps API -function initMap(googlemaps) { +function initMap() { // Create map if (disp !== '1') { // Create map and marker elements - map = new googlemaps.Map(mapElem, { + map = new google.maps.Map(mapElem, { center: { lat: mapuser.last.lat, lng: mapuser.last.lon @@ -215,10 +215,10 @@ function initMap(googlemaps) { draggable: false, zoom: mapuser.settings.defaultZoom, streetViewControl: false, - zoomControlOptions: {position: googlemaps.ControlPosition.LEFT_TOP}, - mapTypeId: (mapuser.settings.defaultMap === 'road') ? googlemaps.MapTypeId.ROADMAP : googlemaps.MapTypeId.HYBRID + zoomControlOptions: {position: google.maps.ControlPosition.LEFT_TOP}, + mapTypeId: (mapuser.settings.defaultMap === 'road') ? google.maps.MapTypeId.ROADMAP : google.maps.MapTypeId.HYBRID }) - marker = new googlemaps.Marker({ + marker = new google.maps.Marker({ position: { lat: mapuser.last.lat, lng: mapuser.last.lon }, title: mapuser.name, icon: (mapuser.settings.marker) ? '/static/img/marker/' + mapuser.settings.marker + '.png' : '/static/img/marker/red.png', @@ -236,7 +236,7 @@ function initMap(googlemaps) { logoDiv.innerHTML = '' + '[]' + "Tracman" - map.controls[googlemaps.ControlPosition.BOTTOM_LEFT].push(logoDiv) + map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(logoDiv) } // Create update time block @@ -245,7 +245,7 @@ function initMap(googlemaps) { if (mapuser.last.time) { timeDiv.innerHTML = 'location updated ' + new Date(mapuser.last.time).toLocaleString() } - map.controls[googlemaps.ControlPosition.RIGHT_BOTTOM].push(timeDiv) + map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(timeDiv) // Create speed block if (mapuser.settings.showSpeed) { @@ -263,12 +263,12 @@ function initMap(googlemaps) { speedSign.appendChild(speedLabel) speedSign.appendChild(speedText) speedSign.appendChild(speedUnit) - map.controls[googlemaps.ControlPosition.TOP_RIGHT].push(speedSign) + map.controls[google.maps.ControlPosition.TOP_RIGHT].push(speedSign) } // Create altitude block if (mapuser.settings.showAlt) { - elevator = new googlemaps.ElevationService() + elevator = new google.maps.ElevationService() const altitudeSign = document.createElement('div') const altitudeLabel = document.createElement('div') const altitudeText = document.createElement('div') @@ -288,7 +288,7 @@ function initMap(googlemaps) { altitudeSign.appendChild(altitudeLabel) altitudeSign.appendChild(altitudeText) altitudeSign.appendChild(altitudeUnit) - map.controls[googlemaps.ControlPosition.TOP_RIGHT].push(altitudeSign) + map.controls[google.maps.ControlPosition.TOP_RIGHT].push(altitudeSign) } } @@ -301,13 +301,13 @@ function initMap(googlemaps) { function getAlt (loc) { return new Promise(function (resolve, reject) { // Get elevator service - elevator = elevator || new googlemaps.ElevationService() + elevator = elevator || new google.maps.ElevationService() // Query API return elevator.getElevationForLocations({ 'locations': [{ lat: loc.lat, lng: loc.lon }] }, function (results, status, errorMessage) { // Success; return altitude - if (status === googlemaps.ElevationStatus.OK && results[0]) { + if (status === google.maps.ElevationStatus.OK && results[0]) { console.log('Altitude was retrieved from Google Elevations API as', results[0].elevation, 'm') resolve(results[0].elevation) @@ -365,7 +365,7 @@ function initMap(googlemaps) { $('#timestamp').text('location updated ' + newLoc.tim) // Update marker and map center - googlemaps.event.trigger(map, 'resize') + google.maps.event.trigger(map, 'resize') map.setCenter({ lat: newLoc.lat, lng: newLoc.lon }) marker.setPosition({ lat: newLoc.lat, lng: newLoc.lon }) @@ -393,7 +393,7 @@ function initMap(googlemaps) { function getStreetViewData (loc, rad, cb) { // Ensure that the location hasn't changed (or this is the initial setting) if (newLoc == null || loc.tim === newLoc.tim) { - if (!sv) var sv = new googlemaps.StreetViewService() + if (!sv) var sv = new google.maps.StreetViewService() sv.getPanorama({ location: { lat: loc.lat, @@ -403,11 +403,11 @@ function initMap(googlemaps) { }, function (data, status) { switch (status) { // Success - case googlemaps.StreetViewStatus.OK: { + case google.maps.StreetViewStatus.OK: { cb(data) break // No results in that radius - } case googlemaps.StreetViewStatus.ZERO_RESULTS: { + } case google.maps.StreetViewStatus.ZERO_RESULTS: { // Try again with a bigger radius getStreetViewData(loc, rad * 2, cb) break diff --git a/views/map.html b/views/map.html index fb53101..1af2df3 100755 --- a/views/map.html +++ b/views/map.html @@ -106,15 +106,16 @@ -