Merge branch 'release/0.13'

This commit is contained in:
Jonny Barnes 2017-11-17 14:48:40 +00:00
commit 21530f9497
32 changed files with 3018 additions and 2801 deletions

View file

@ -36,6 +36,10 @@ php:
- 7.1
- 7.2
matrix:
allow_failures:
- php: 7.2
before_install:
- printf "\n" | pecl install imagick
- cp .env.travis .env
@ -49,6 +53,10 @@ install:
- if [[ $setup = 'stable' ]]; then travis_retry composer update --no-interaction --prefer-dist --prefer-stable; fi
- if [[ $setup = 'lowest' ]]; then travis_retry composer update --no-interaction --prefer-dist --prefer-lowest --prefer-stable; fi
- travis/install-nginx.sh
- . $HOME/.nvm/nvm.sh
- nvm install stable
- nvm use stable
- npm i puppeteer
before_script:
- php artisan key:generate

View file

@ -13,6 +13,15 @@ class Bookmark extends Model
*/
protected $fillable = ['url', 'name', 'content'];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'syndicates' => 'array',
];
/**
* The tags that belong to the bookmark.
*/

View file

@ -0,0 +1,10 @@
<?php
namespace App\Exceptions;
use Exception;
class InternetArchiveErrorSavingException extends Exception
{
//
}

View file

@ -3,14 +3,12 @@
namespace App\Jobs;
use App\Bookmark;
use Ramsey\Uuid\Uuid;
use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Spatie\Browsershot\Browsershot;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Exceptions\InternetArchiveErrorSavingException;
class ProcessBookmark implements ShouldQueue
{
@ -33,24 +31,18 @@ class ProcessBookmark implements ShouldQueue
*
* @return void
*/
public function handle(Browsershot $browsershot, Client $client)
public function handle()
{
//save a local screenshot
$uuid = Uuid::uuid4();
$browsershot->url($this->bookmark->url)
->windowSize(960, 640)
->save(public_path() . '/assets/img/bookmarks/' . $uuid . '.png');
$uuid = (new BookmarkService())->saveScreenshot($this->bookmark->url);
$this->bookmark->screenshot = $uuid;
//get an internet archive link
$response = $client->request('GET', 'https://web.archive.org/save/' . $this->bookmark->url);
if ($response->hasHeader('Content-Location')) {
if (starts_with($response->getHeader('Content-Location')[0], '/web')) {
$this->bookmark->archive = $response->getHeader('Content-Location')[0];
}
try {
$archiveLink = (new BookmarkService())->getArchiveLink($this->bookmark->url);
} catch (InternetArchiveErrorSavingException $e) {
$archiveLink = null;
}
$this->bookmark->archive = $archiveLink;
//save
$this->bookmark->save();
}
}

View file

@ -47,7 +47,9 @@ class SyndicateBookmarkToFacebook implements ShouldQueue
//parse for syndication URL
if ($response->getStatusCode() == 201) {
$json = json_decode((string) $response->getBody());
$this->bookmark->update(['syndicates->facebook' => $json->url]);
$syndicates = $this->bookmark->syndicates;
$syndicates['facebook'] = $json->url;
$this->bookmark->syndicates = $syndicates;
$this->bookmark->save();
}
}

View file

@ -47,7 +47,9 @@ class SyndicateBookmarkToTwitter implements ShouldQueue
//parse for syndication URL
if ($response->getStatusCode() == 201) {
$json = json_decode((string) $response->getBody());
$this->bookmark->update(['syndicates->twitter' => $json->url]);
$syndicates = $this->bookmark->syndicates;
$syndicates['twitter'] = $json->url;
$this->bookmark->syndicates = $syndicates;
$this->bookmark->save();
}
}

View file

@ -6,10 +6,14 @@ namespace App\Services;
use App\Tag;
use App\Bookmark;
use Ramsey\Uuid\Uuid;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use App\Jobs\ProcessBookmark;
use Spatie\Browsershot\Browsershot;
use App\Jobs\SyndicateBookmarkToTwitter;
use App\Jobs\SyndicateBookmarkToFacebook;
use App\Exceptions\InternetArchiveErrorSavingException;
class BookmarkService
{
@ -82,4 +86,38 @@ class BookmarkService
return $bookmark;
}
public function saveScreenshot(string $url): string
{
$browsershot = new Browsershot();
$uuid = Uuid::uuid4();
$browsershot->url($url)
->setIncludePath('$PATH:/usr/local/bin')
->noSandbox()
->windowSize(960, 640)
->save(public_path() . '/assets/img/bookmarks/' . $uuid . '.png');
return $uuid->toString();
}
public function getArchiveLink(string $url): string
{
$client = new Client();
$response = $client->request('GET', 'https://web.archive.org/save/' . $url);
if ($response->hasHeader('Content-Location')) {
if (starts_with($response->getHeader('Content-Location')[0], '/web')) {
return $response->getHeader('Content-Location')[0];
}
}
if (starts_with(array_get($response->getHeader('Content-Location'), 0), '/web')) {
return $response->getHeader('Content-Location')[0];
}
//throw an exception to be caught
throw new InternetArchiveErrorSavingException;
}
}

View file

@ -1,5 +1,9 @@
# Changelog
## Version 0.13 (2017-11-17)
- Update Browsershot to v3, uses puppeteer to control Chrome
- Improve bookmarks syndication
## Version 0.12.6.1 (2017-11-13)
- `.1` fixes a typo
- Fix issue with generating image links from images uploaded to `/api/media`

View file

@ -29,7 +29,7 @@
"predis/predis": "~1.0",
"ramsey/uuid": "^3.5",
"sensiolabs/security-checker": "^4.0",
"spatie/browsershot": "^2.4",
"spatie/browsershot": "~3.0",
"thujohn/twitter": "~2.0"
},
"require-dev": {
@ -40,6 +40,7 @@
"jakub-onderka/php-parallel-lint": "^0.9.2",
"laravel/dusk": "^2.0",
"mockery/mockery": "0.9.*",
"nunomaduro/collision": "^1.1",
"phpunit/phpunit": "~6.0",
"sebastian/phpcpd": "^3.0"
},

5257
composer.lock generated

File diff suppressed because it is too large Load diff

365
package-lock.json generated
View file

@ -165,6 +165,12 @@
"resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
"integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk="
},
"any-observable": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz",
"integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=",
"dev": true
},
"anymatch": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
@ -1552,6 +1558,12 @@
"readdirp": "2.1.0"
}
},
"ci-info": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz",
"integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==",
"dev": true
},
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@ -1832,25 +1844,46 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz",
"integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz",
"integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"js-yaml": "3.8.4",
"minimist": "1.2.0",
"object-assign": "4.1.1",
"os-homedir": "1.0.2",
"parse-json": "2.2.0",
"pinkie-promise": "2.0.1",
"require-from-string": "1.2.1"
"is-directory": "0.3.1",
"js-yaml": "3.10.0",
"parse-json": "3.0.0",
"require-from-string": "2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"esprima": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
"dev": true
},
"js-yaml": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
"integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
"dev": true,
"requires": {
"argparse": "1.0.9",
"esprima": "4.0.0"
}
},
"parse-json": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz",
"integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=",
"dev": true,
"requires": {
"error-ex": "1.3.1"
}
},
"require-from-string": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz",
"integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=",
"dev": true
}
}
@ -1999,6 +2032,12 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
"deep-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
@ -2129,9 +2168,9 @@
}
},
"earcut": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.1.tgz",
"integrity": "sha1-FXY05fPrtCIk5HUBboalts5Va0U="
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.2.tgz",
"integrity": "sha512-ji2b8qOVwK4WChYTbpKo983518wEqY2wrpkd85Us/LLw+3O7G0jGvGbHgQERuovrv3Cop9cEpiNkhqVQSkgTtA=="
},
"ecc-jsbn": {
"version": "0.1.1",
@ -2333,9 +2372,9 @@
}
},
"eslint": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-4.10.0.tgz",
"integrity": "sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==",
"version": "4.11.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz",
"integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==",
"dev": true,
"requires": {
"ajv": "5.3.0",
@ -2346,7 +2385,7 @@
"debug": "3.1.0",
"doctrine": "2.0.0",
"eslint-scope": "3.7.1",
"espree": "3.5.1",
"espree": "3.5.2",
"esquery": "1.0.0",
"estraverse": "4.2.0",
"esutils": "2.0.2",
@ -2359,7 +2398,7 @@
"inquirer": "3.3.0",
"is-resolvable": "1.0.0",
"js-yaml": "3.10.0",
"json-stable-stringify": "1.0.1",
"json-stable-stringify-without-jsonify": "1.0.1",
"levn": "0.3.0",
"lodash": "4.17.4",
"minimatch": "3.0.2",
@ -2720,13 +2759,21 @@
}
},
"espree": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz",
"integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
"integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
"dev": true,
"requires": {
"acorn": "5.1.1",
"acorn": "5.2.1",
"acorn-jsx": "3.0.1"
},
"dependencies": {
"acorn": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
"integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
"dev": true
}
}
},
"esprima": {
@ -2857,6 +2904,14 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"requires": {
"is-extendable": "0.1.1"
}
},
"external-editor": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz",
@ -2971,6 +3026,12 @@
"pkg-dir": "2.0.0"
}
},
"find-parent-dir": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
"integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
"dev": true
},
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
@ -2999,9 +3060,9 @@
"dev": true
},
"flow-remove-types": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.1.tgz",
"integrity": "sha1-WOJhv4uEK9I0yGyvuYKhITr/Dts=",
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.3.tgz",
"integrity": "sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q==",
"requires": {
"babylon": "6.17.4",
"vlq": "0.2.3"
@ -4143,16 +4204,43 @@
"url-parse-lax": "1.0.0"
}
},
"gr-event-dispatcher": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/gr-event-dispatcher/-/gr-event-dispatcher-1.1.1.tgz",
"integrity": "sha1-BvAVBnIgkTOqijH29ukQU/J9EnY="
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
"gray-matter": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz",
"integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==",
"requires": {
"extend-shallow": "2.0.1",
"js-yaml": "3.10.0",
"kind-of": "5.1.0",
"strip-bom-string": "1.0.0"
},
"dependencies": {
"esprima": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
},
"js-yaml": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
"integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
"requires": {
"argparse": "1.0.9",
"esprima": "4.0.0"
}
},
"kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
}
}
},
"grid-index": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.0.0.tgz",
@ -4301,6 +4389,31 @@
"integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
"dev": true
},
"husky": {
"version": "0.14.3",
"resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
"integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==",
"dev": true,
"requires": {
"is-ci": "1.0.10",
"normalize-path": "1.0.0",
"strip-indent": "2.0.0"
},
"dependencies": {
"normalize-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
"integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
"dev": true
},
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
"integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
"dev": true
}
}
},
"iconv-lite": {
"version": "0.4.19",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
@ -4436,6 +4549,15 @@
"builtin-modules": "1.1.1"
}
},
"is-ci": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz",
"integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
"dev": true,
"requires": {
"ci-info": "1.1.1"
}
},
"is-directory": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
@ -4460,8 +4582,7 @@
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
},
"is-extglob": {
"version": "1.0.0",
@ -4513,6 +4634,15 @@
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
},
"is-observable": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz",
"integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=",
"dev": true,
"requires": {
"symbol-observable": "0.2.4"
}
},
"is-path-cwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
@ -4637,7 +4767,7 @@
"integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==",
"dev": true,
"requires": {
"chalk": "2.2.0",
"chalk": "2.3.0",
"jest-get-type": "21.2.0",
"leven": "2.1.0",
"pretty-format": "21.2.1"
@ -4653,9 +4783,9 @@
}
},
"chalk": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
"ansi-styles": "3.2.0",
@ -4738,6 +4868,12 @@
"jsonify": "0.0.0"
}
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@ -4846,24 +4982,28 @@
}
},
"lint-staged": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.3.0.tgz",
"integrity": "sha512-C/Zxslg0VRbsxwmCu977iIs+QyrmW2cyRCPUV5NDFYOH/jtRFHH8ch7ua2fH0voI/nVC3Tpg7DykfgMZySliKw==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-5.0.0.tgz",
"integrity": "sha512-nKwjLlYOd6Eqog3cg3aDulrRfLkR3GPasqTI7+3ZKucLATqay86wOaEM0gtYVmTS0/ihHSARnOWduAqNJZAbeQ==",
"dev": true,
"requires": {
"app-root-path": "2.0.1",
"chalk": "2.2.0",
"chalk": "2.3.0",
"commander": "2.11.0",
"cosmiconfig": "1.1.0",
"cosmiconfig": "3.1.0",
"dedent": "0.7.0",
"execa": "0.8.0",
"find-parent-dir": "0.3.0",
"is-glob": "4.0.0",
"jest-validate": "21.2.1",
"listr": "0.12.0",
"listr": "0.13.0",
"lodash": "4.17.4",
"log-symbols": "2.1.0",
"minimatch": "3.0.2",
"npm-which": "3.0.1",
"p-map": "1.2.0",
"path-is-inside": "1.0.2",
"pify": "3.0.0",
"staged-git-files": "0.0.4",
"stringify-object": "3.2.1"
},
@ -4878,9 +5018,9 @@
}
},
"chalk": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
"integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
"dev": true,
"requires": {
"ansi-styles": "3.2.0",
@ -4903,6 +5043,12 @@
"is-extglob": "2.1.1"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
},
"supports-color": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
@ -4915,26 +5061,27 @@
}
},
"listr": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
"integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz",
"integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=",
"dev": true,
"requires": {
"chalk": "1.1.3",
"cli-truncate": "0.2.1",
"figures": "1.7.0",
"indent-string": "2.1.0",
"is-observable": "0.2.0",
"is-promise": "2.1.0",
"is-stream": "1.1.0",
"listr-silent-renderer": "1.1.1",
"listr-update-renderer": "0.2.0",
"listr-verbose-renderer": "0.4.0",
"listr-update-renderer": "0.4.0",
"listr-verbose-renderer": "0.4.1",
"log-symbols": "1.0.2",
"log-update": "1.0.2",
"ora": "0.2.3",
"p-map": "1.2.0",
"rxjs": "5.5.0",
"stream-to-observable": "0.1.0",
"rxjs": "5.5.2",
"stream-to-observable": "0.2.0",
"strip-ansi": "3.0.1"
},
"dependencies": {
@ -4956,9 +5103,9 @@
"dev": true
},
"listr-update-renderer": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz",
"integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=",
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz",
"integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=",
"dev": true,
"requires": {
"chalk": "1.1.3",
@ -4989,9 +5136,9 @@
}
},
"listr-verbose-renderer": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz",
"integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=",
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
"integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=",
"dev": true,
"requires": {
"chalk": "1.1.3",
@ -5249,9 +5396,9 @@
"dev": true
},
"mapbox-gl": {
"version": "0.41.0",
"resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.41.0.tgz",
"integrity": "sha512-4U4/nhhJhqEqwHK3GSHiBL8STNRQiPkjqZKBivDS18Tuo4A1SPR/PVoSTMZeAqAJWToM9ENWDHSKyj8VKqILxw==",
"version": "0.42.0",
"resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.42.0.tgz",
"integrity": "sha512-/2nij4njYsy6+VGzzntwRmndCsIKVY0I/ayHrpEHZbGKoh2ONXa1ZYbGSyud57alamrfuHMocTE2woRmKgBOyQ==",
"requires": {
"@mapbox/gl-matrix": "0.0.1",
"@mapbox/point-geometry": "0.1.0",
@ -5263,9 +5410,10 @@
"brfs": "1.4.3",
"bubleify": "0.7.0",
"csscolorparser": "1.0.3",
"earcut": "2.1.1",
"earcut": "2.1.2",
"geojson-rewind": "0.2.0",
"geojson-vt": "2.4.0",
"gray-matter": "3.1.1",
"grid-index": "1.0.0",
"jsonlint-lines-primitives": "1.6.0",
"lodash.isequal": "3.0.4",
@ -5280,10 +5428,10 @@
"supercluster": "2.3.0",
"through2": "2.0.3",
"tinyqueue": "1.2.3",
"unassertify": "2.0.4",
"unassertify": "2.1.0",
"unflowify": "1.0.1",
"vt-pbf": "3.0.1",
"webworkify": "1.4.0"
"vt-pbf": "3.1.0",
"webworkify": "1.5.0"
}
},
"mapbox-gl-supported": {
@ -7215,12 +7363,20 @@
}
},
"rxjs": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.0.tgz",
"integrity": "sha512-vmvP5y/oJIJmXKHY36PIjVeI/46Sny6BMBa7/ou2zsNz1PiqU/Gtcz1GujnHz5Qlxncv+J9VlWmttnshqFj3Kg==",
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.2.tgz",
"integrity": "sha512-oRYoIKWBU3Ic37fLA5VJu31VqQO4bWubRntcHSJ+cwaDQBwdnZ9x4zmhJfm/nFQ2E82/I4loSioHnACamrKGgA==",
"dev": true,
"requires": {
"symbol-observable": "1.0.4"
},
"dependencies": {
"symbol-observable": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=",
"dev": true
}
}
},
"safe-buffer": {
@ -7751,10 +7907,13 @@
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
},
"stream-to-observable": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
"integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=",
"dev": true
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz",
"integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=",
"dev": true,
"requires": {
"any-observable": "0.2.0"
}
},
"string-length": {
"version": "1.0.1",
@ -7821,6 +7980,11 @@
"is-utf8": "0.2.1"
}
},
"strip-bom-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@ -8091,9 +8255,9 @@
"dev": true
},
"symbol-observable": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
"integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=",
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz",
"integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=",
"dev": true
},
"table": {
@ -8327,9 +8491,9 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"uglify-js": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.8.tgz",
"integrity": "sha512-1lnTkrJWw6LJ7n43ZyYVXx0eN2PQh0c3Inb0nY/vj5fNfwykXQFif2kvNgm/Bf0ClLA8R6SKaMHFzo9io4Q+vg==",
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.9.tgz",
"integrity": "sha512-ari2E89bD7f+fMU173NgF12JBcOhgoxeyuCs97h5K58IBENrnG9eVj2lFadrOPdqf0KifsxVmUQfzA2cHNxCZQ==",
"dev": true,
"requires": {
"commander": "2.11.0",
@ -8421,11 +8585,11 @@
}
},
"unassertify": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/unassertify/-/unassertify-2.0.4.tgz",
"integrity": "sha1-s8orpfKbSDbjWm3Xflsg9tu/jlI=",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/unassertify/-/unassertify-2.1.0.tgz",
"integrity": "sha512-CB3C3vbOwrZydRuGdU8H421r4/qhM8RLuEOo3G+wEFf7kDP4TR+7oDuj1yOik5pUzXMaJmzxICM7akupP1AlJw==",
"requires": {
"acorn": "4.0.13",
"acorn": "5.1.1",
"convert-source-map": "1.5.0",
"escodegen": "1.9.0",
"multi-stage-sourcemap": "0.2.1",
@ -8433,11 +8597,6 @@
"unassert": "1.5.1"
},
"dependencies": {
"acorn": {
"version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
"integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
},
"escodegen": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
@ -8473,7 +8632,7 @@
"resolved": "https://registry.npmjs.org/unflowify/-/unflowify-1.0.1.tgz",
"integrity": "sha1-ouoNJcCv/MRpVeZHNXX3xaH0ppY=",
"requires": {
"flow-remove-types": "1.2.1",
"flow-remove-types": "1.2.3",
"through": "2.3.8"
}
},
@ -8660,9 +8819,9 @@
}
},
"vt-pbf": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.0.1.tgz",
"integrity": "sha512-urEI/S1MF+qT1LNe539pCb0iCQ7CXppaNrYCp0KnnN0G558R3F33GPmQpDguf7FDDByRuc8z+Mr/J2DKcl/1WA==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.0.tgz",
"integrity": "sha512-UUCGPkpT1P/bm3R3/HX0SCnRSto44xXx0WuLFVG6C7KspdfQfU+84etoO6cITAGCdq8V5DjuWfDhvk/pyTyt3Q==",
"requires": {
"@mapbox/point-geometry": "0.1.0",
"@mapbox/vector-tile": "1.3.0",
@ -8691,14 +8850,6 @@
}
}
},
"webStorage": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/webStorage/-/webStorage-1.2.4.tgz",
"integrity": "sha1-/jNN8N5uLe58i9A2uxVaw115FTY=",
"requires": {
"gr-event-dispatcher": "1.1.1"
}
},
"webpack": {
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz",
@ -8956,9 +9107,9 @@
}
},
"webworkify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.4.0.tgz",
"integrity": "sha1-cSRdHjTKz1TkJr2VX4zG7hLQJMI="
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz",
"integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g=="
},
"wgs84": {
"version": "0.0.0",

View file

@ -6,10 +6,9 @@
"license": "CC0-1.0",
"dependencies": {
"alertify.js": "^1.0.12",
"mapbox-gl": "^0.41.0",
"mapbox-gl": "^0.42.0",
"marked": "^0.3.6",
"normalize.css": "^7.0.0",
"webStorage": "^1.2.4"
"normalize.css": "^7.0.0"
},
"devDependencies": {
"ajv": "^5.3.0",
@ -22,42 +21,45 @@
"babel-preset-latest": "^6.16.0",
"babel-runtime": "^6.26.0",
"dotenv-webpack": "^1.5.4",
"eslint": "^4.10.0",
"eslint": "^4.11.0",
"eslint-config-standard": "^10.2.1",
"eslint-plugin-import": "^2.8.0",
"eslint-plugin-node": "^5.2.1",
"eslint-plugin-promise": "^3.6.0",
"eslint-plugin-standard": "^3.0.1",
"lint-staged": "^4.3.0",
"husky": "^0.14.3",
"lint-staged": "^5.0.0",
"postcss-cli": "^4.1.1",
"pre-commit": "^1.1.3",
"source-list-map": "^2.0.0",
"stylelint": "^8.2.0",
"stylelint-config-standard": "^17.0.0",
"uglify-js": "^3.1.8",
"uglify-js": "^3.1.9",
"webpack": "^3.8.1",
"webpack-sources": "^1.0.2"
},
"scripts": {
"compress": "scripts/compress",
"copy-dist": "cp ./node_modules/mapbox-gl/dist/mapbox-gl.css ./public/assets/frontend/ && cp ./node_modules/alertify.js/dist/css/alertify.css ./public/assets/frontend/ && cp ./node_modules/normalize.css/normalize.css ./public/assets/frontend/",
"lint-staged": "lint-staged",
"lint:es6": "eslint resources/assets/es6/*.js",
"lint:sass": "stylelint --syntax=scss resources/assets/sass/**/*.scss",
"make": "npm run make:css && npm run make:js",
"make:css": "npm run lint:sass && npm run sass && npm run postcss",
"make:js": "npm run lint:es6 && npm run webpack && npm run uglifyjs",
"postcss": "postcss public/assets/css/app.css --use autoprefixer --autoprefixer.browsers \"> 5%\" --replace --map",
"precommit": "lint-staged",
"sass": "sassc --style compressed --sourcemap resources/assets/sass/app.scss public/assets/css/app.css",
"stylelint-staged": "stylelint --syntax=scss",
"uglifyjs": "scripts/uglifyjs",
"webpack": "webpack --progress --colors"
},
"lint-staged": {
"resources/assets/es6/*.js": "eslint",
"resources/assets/sass/**/*.scss": "stylelint-staged"
},
"pre-commit": [
"lint-staged"
]
"resources/assets/es6/*.js": [
"eslint --fix",
"git add"
],
"resources/assets/sass/**/*.scss": [
"stylelint --syntax=scss --fix",
"git add"
]
}
}

View file

@ -4,6 +4,10 @@
position: relative;
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.mapboxgl-map:-webkit-full-screen {
width: 100%;
height: 100%;
}
.mapboxgl-missing-css {
display: none;

View file

@ -1 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap 9314bc4cbb6b06151377","webpack:///colours.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","css","document","querySelector","getAttribute","split","pop","getElementById","value","form","childNodes","addEventListener","e","preventDefault","newCss","link","parts","push","setAttribute","join","formData","FormData","fetch","method","credentials","body","catch","error","console","warn"],"mappings":"mBAIA,SAAAA,oBAAAC,UAGA,GAAAC,iBAAAD,UACA,OAAAC,iBAAAD,UAAAE,QAGA,IAAAC,OAAAF,iBAAAD,WACAI,EAAAJ,SACAK,GAAA,EACAH,YAUA,OANAI,QAAAN,UAAAO,KAAAJ,OAAAD,QAAAC,OAAAA,OAAAD,QAAAH,qBAGAI,OAAAE,GAAA,EAGAF,OAAAD,QAvBA,IAAAD,oBA4BAF,oBAAAS,EAAAF,QAGAP,oBAAAU,EAAAR,iBAGAF,oBAAAW,EAAA,SAAAR,QAAAS,KAAAC,QACAb,oBAAAc,EAAAX,QAAAS,OACAG,OAAAC,eAAAb,QAAAS,MACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,UAMAb,oBAAAoB,EAAA,SAAAhB,QACA,IAAAS,OAAAT,QAAAA,OAAAiB,WACA,WAA2B,OAAAjB,OAAA,SAC3B,WAAiC,OAAAA,QAEjC,OADAJ,oBAAAW,EAAAE,OAAA,IAAAA,QACAA,QAIAb,oBAAAc,EAAA,SAAAQ,OAAAC,UAAsD,OAAAR,OAAAS,UAAAC,eAAAjB,KAAAc,OAAAC,WAGtDvB,oBAAA0B,EAAA,GAGA1B,oBAAAA,oBAAA2B,EAAA,iEC3DA,IAEIC,IAFOC,SAASC,cAAc,iBAEnBC,aAAa,QAAQC,MAAM,KAAKC,MAG/CJ,SAASK,eAAe,sBAAsBC,MAAQP,IAGtD,IAAIQ,KAAOP,SAASK,eAAe,oBACzBE,KAAKC,WAAW,GACtBC,iBAAiB,QAAS,SAAUC,GACpCA,EAAEC,iBACF,IAAIC,OAASZ,SAASK,eAAe,sBAAsBC,MACvDO,KAAOb,SAASC,cAAc,iBAE9Ba,MADMD,KAAKX,aAAa,QACZC,MAAM,KACtBW,MAAMV,MACNU,MAAMC,KAAKH,QACXC,KAAKG,aAAa,OAAQF,MAAMG,KAAK,MACrC,IAAIC,SAAW,IAAIC,SAASZ,MAC5Ba,MAAM,yBACFC,OAAQ,OACRC,YAAa,cACbC,KAAML,WACPM,MAAM,SAAUC,OACfC,QAAQC,KAAKF","file":"public/assets/js/colours.js.map","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9314bc4cbb6b06151377","//colours.js\n\nlet link = document.querySelector('#colourScheme');\n\nlet css = link.getAttribute('href').split('/').pop();\n\n// update selected item in colour scheme list\ndocument.getElementById('colourSchemeSelect').value = css;\n\n// fix form\nlet form = document.getElementById('colourSchemeForm');\nlet btn = form.childNodes[5];\nbtn.addEventListener('click', function (e) {\n e.preventDefault();\n let newCss = document.getElementById('colourSchemeSelect').value;\n let link = document.querySelector('#colourScheme');\n let css = link.getAttribute('href');\n let parts = css.split('/');\n parts.pop();\n parts.push(newCss);\n link.setAttribute('href', parts.join('/'));\n let formData = new FormData(form);\n fetch('/update-colour-scheme', {\n method: 'POST',\n credentials: 'same-origin',\n body: formData\n }).catch(function (error) {\n console.warn(error);\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./colours.js"]}
{"version":3,"sources":["webpack:///webpack/bootstrap b6efe62e7997f66fb20e","webpack:///colours.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","css","document","querySelector","getAttribute","split","pop","getElementById","value","form","childNodes","addEventListener","e","preventDefault","newCss","link","parts","push","setAttribute","join","formData","FormData","fetch","method","credentials","body","catch","error","console","warn"],"mappings":"mBAIA,SAAAA,oBAAAC,UAGA,GAAAC,iBAAAD,UACA,OAAAC,iBAAAD,UAAAE,QAGA,IAAAC,OAAAF,iBAAAD,WACAI,EAAAJ,SACAK,GAAA,EACAH,YAUA,OANAI,QAAAN,UAAAO,KAAAJ,OAAAD,QAAAC,OAAAA,OAAAD,QAAAH,qBAGAI,OAAAE,GAAA,EAGAF,OAAAD,QAvBA,IAAAD,oBA4BAF,oBAAAS,EAAAF,QAGAP,oBAAAU,EAAAR,iBAGAF,oBAAAW,EAAA,SAAAR,QAAAS,KAAAC,QACAb,oBAAAc,EAAAX,QAAAS,OACAG,OAAAC,eAAAb,QAAAS,MACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,UAMAb,oBAAAoB,EAAA,SAAAhB,QACA,IAAAS,OAAAT,QAAAA,OAAAiB,WACA,WAA2B,OAAAjB,OAAA,SAC3B,WAAiC,OAAAA,QAEjC,OADAJ,oBAAAW,EAAAE,OAAA,IAAAA,QACAA,QAIAb,oBAAAc,EAAA,SAAAQ,OAAAC,UAAsD,OAAAR,OAAAS,UAAAC,eAAAjB,KAAAc,OAAAC,WAGtDvB,oBAAA0B,EAAA,GAGA1B,oBAAAA,oBAAA2B,EAAA,iEC3DA,IAEIC,IAFOC,SAASC,cAAc,iBAEnBC,aAAa,QAAQC,MAAM,KAAKC,MAG/CJ,SAASK,eAAe,sBAAsBC,MAAQP,IAGtD,IAAIQ,KAAOP,SAASK,eAAe,oBACzBE,KAAKC,WAAW,GACtBC,iBAAiB,QAAS,SAAUC,GACpCA,EAAEC,iBACF,IAAIC,OAASZ,SAASK,eAAe,sBAAsBC,MACvDO,KAAOb,SAASC,cAAc,iBAE9Ba,MADMD,KAAKX,aAAa,QACZC,MAAM,KACtBW,MAAMV,MACNU,MAAMC,KAAKH,QACXC,KAAKG,aAAa,OAAQF,MAAMG,KAAK,MACrC,IAAIC,SAAW,IAAIC,SAASZ,MAC5Ba,MAAM,yBACFC,OAAQ,OACRC,YAAa,cACbC,KAAML,WACPM,MAAM,SAAUC,OACfC,QAAQC,KAAKF","file":"public/assets/js/colours.js.map","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b6efe62e7997f66fb20e","//colours.js\n\nlet link = document.querySelector('#colourScheme');\n\nlet css = link.getAttribute('href').split('/').pop();\n\n// update selected item in colour scheme list\ndocument.getElementById('colourSchemeSelect').value = css;\n\n// fix form\nlet form = document.getElementById('colourSchemeForm');\nlet btn = form.childNodes[5];\nbtn.addEventListener('click', function (e) {\n e.preventDefault();\n let newCss = document.getElementById('colourSchemeSelect').value;\n let link = document.querySelector('#colourScheme');\n let css = link.getAttribute('href');\n let parts = css.split('/');\n parts.pop();\n parts.push(newCss);\n link.setAttribute('href', parts.join('/'));\n let formData = new FormData(form);\n fetch('/update-colour-scheme', {\n method: 'POST',\n credentials: 'same-origin',\n body: formData\n }).catch(function (error) {\n console.warn(error);\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./colours.js"]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"sources":["webpack:///webpack/bootstrap 9314bc4cbb6b06151377","webpack:///piwik.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_paq","push"],"mappings":"mBAIA,SAAAA,oBAAAC,UAGA,GAAAC,iBAAAD,UACA,OAAAC,iBAAAD,UAAAE,QAGA,IAAAC,OAAAF,iBAAAD,WACAI,EAAAJ,SACAK,GAAA,EACAH,YAUA,OANAI,QAAAN,UAAAO,KAAAJ,OAAAD,QAAAC,OAAAA,OAAAD,QAAAH,qBAGAI,OAAAE,GAAA,EAGAF,OAAAD,QAvBA,IAAAD,oBA4BAF,oBAAAS,EAAAF,QAGAP,oBAAAU,EAAAR,iBAGAF,oBAAAW,EAAA,SAAAR,QAAAS,KAAAC,QACAb,oBAAAc,EAAAX,QAAAS,OACAG,OAAAC,eAAAb,QAAAS,MACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,UAMAb,oBAAAoB,EAAA,SAAAhB,QACA,IAAAS,OAAAT,QAAAA,OAAAiB,WACA,WAA2B,OAAAjB,OAAA,SAC3B,WAAiC,OAAAA,QAEjC,OADAJ,oBAAAW,EAAAE,OAAA,IAAAA,QACAA,QAIAb,oBAAAc,EAAA,SAAAQ,OAAAC,UAAsD,OAAAR,OAAAS,UAAAC,eAAAjB,KAAAc,OAAAC,WAGtDvB,oBAAA0B,EAAA,GAGA1B,oBAAAA,oBAAA2B,EAAA,iEC1DA,IAGIC,KAAOA,SAEXA,KAAKC,MAAM,gBAJe,uCAK1BD,KAAKC,MAAM,YANE,MAObD,KAAKC,MAAM,kBACXD,KAAKC,MAAM","file":"public/assets/js/piwik.js.map","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9314bc4cbb6b06151377","/* global process */\n\n// Piwik in its own js file to allow usage with a CSP policy\nvar idSite = process.env.PIWIK_ID;\nvar piwikTrackingApiUrl = process.env.PIWIK_URL;\n\nvar _paq = _paq || [];\n// tracker methods like \"setCustomDimension\" should be called before \"trackPageView\"\n_paq.push(['setTrackerUrl', piwikTrackingApiUrl]);\n_paq.push(['setSiteId', idSite]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n\n\n\n// WEBPACK FOOTER //\n// ./piwik.js"]}
{"version":3,"sources":["webpack:///webpack/bootstrap b6efe62e7997f66fb20e","webpack:///piwik.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_paq","push"],"mappings":"mBAIA,SAAAA,oBAAAC,UAGA,GAAAC,iBAAAD,UACA,OAAAC,iBAAAD,UAAAE,QAGA,IAAAC,OAAAF,iBAAAD,WACAI,EAAAJ,SACAK,GAAA,EACAH,YAUA,OANAI,QAAAN,UAAAO,KAAAJ,OAAAD,QAAAC,OAAAA,OAAAD,QAAAH,qBAGAI,OAAAE,GAAA,EAGAF,OAAAD,QAvBA,IAAAD,oBA4BAF,oBAAAS,EAAAF,QAGAP,oBAAAU,EAAAR,iBAGAF,oBAAAW,EAAA,SAAAR,QAAAS,KAAAC,QACAb,oBAAAc,EAAAX,QAAAS,OACAG,OAAAC,eAAAb,QAAAS,MACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,UAMAb,oBAAAoB,EAAA,SAAAhB,QACA,IAAAS,OAAAT,QAAAA,OAAAiB,WACA,WAA2B,OAAAjB,OAAA,SAC3B,WAAiC,OAAAA,QAEjC,OADAJ,oBAAAW,EAAAE,OAAA,IAAAA,QACAA,QAIAb,oBAAAc,EAAA,SAAAQ,OAAAC,UAAsD,OAAAR,OAAAS,UAAAC,eAAAjB,KAAAc,OAAAC,WAGtDvB,oBAAA0B,EAAA,GAGA1B,oBAAAA,oBAAA2B,EAAA,iEC1DA,IAGIC,KAAOA,SAEXA,KAAKC,MAAM,gBAJe,uCAK1BD,KAAKC,MAAM,YANE,MAObD,KAAKC,MAAM,kBACXD,KAAKC,MAAM","file":"public/assets/js/piwik.js.map","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b6efe62e7997f66fb20e","/* global process */\n\n// Piwik in its own js file to allow usage with a CSP policy\nvar idSite = process.env.PIWIK_ID;\nvar piwikTrackingApiUrl = process.env.PIWIK_URL;\n\nvar _paq = _paq || [];\n// tracker methods like \"setCustomDimension\" should be called before \"trackPageView\"\n_paq.push(['setTrackerUrl', piwikTrackingApiUrl]);\n_paq.push(['setSiteId', idSite]);\n_paq.push(['trackPageView']);\n_paq.push(['enableLinkTracking']);\n\n\n\n// WEBPACK FOOTER //\n// ./piwik.js"]}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -1,32 +0,0 @@
//persist-form.js
import webStorage from 'webStorage';
import alertify from 'alertify.js';
const loadData = () => {
let replyTo = document.querySelector('#in-reply-to');
replyTo.value = webStorage.getItem('replyTo');
let content = document.querySelector('#content');
content.value = webStorage.getItem('content');
};
const saveData = () => {
let replyTo = document.querySelector('#in-reply-to');
let content = document.querySelector('#content');
webStorage.setItem('replyTo', replyTo.value);
webStorage.setItem('content', content.value);
alertify.success('Auto-saved data');
};
const clearData = () => {
webStorage.removeItem('replyTo');
webStorage.removeItem('content');
};
export default function persistFormData()
{
let form = document.querySelector('form[name="micropub"]');
form.addEventListener('change', saveData);
form.addEventListener('submit', clearData);
loadData();
}

View file

@ -28,4 +28,13 @@ class BookmarksTest extends TestCase
Queue::assertPushed(ProcessBookmark::class);
$this->assertDatabaseHas('bookmarks', ['url' => 'https://example.org/blog-post']);
}
public function test_screenshot_of_google()
{
$url = 'https://www.google.co.uk';
$uuid = (new \App\Services\BookmarkService())->saveScreenshot($url);
$this->assertTrue(file_exists(public_path() . '/assets/img/bookmarks/' . $uuid . '.png'));
}
}