From b861db5d1fd2a5e5d4cd834ac2dc7e4fd3e58920 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 5 Apr 2017 13:01:51 -0400 Subject: [PATCH 01/26] Catch API timeouts --- src/API/JsonAPI.php | 15 ++-- src/API/Kitsu/KitsuTrait.php | 6 +- src/API/Kitsu/Model.php | 9 +- src/Controller/Character.php | 158 +++++++++++++++++++++++++++-------- src/Dispatcher.php | 22 +++-- 5 files changed, 159 insertions(+), 51 deletions(-) diff --git a/src/API/JsonAPI.php b/src/API/JsonAPI.php index b23eb090..210afc5a 100644 --- a/src/API/JsonAPI.php +++ b/src/API/JsonAPI.php @@ -54,7 +54,9 @@ class JsonAPI { ]; // Reorganize included data - $included = static::organizeIncluded($data['included']); + $included = (array_key_exists('included', $data)) + ? static::organizeIncluded($data['included']) + : []; // Inline organized data foreach($data['data'] as $i => &$item) @@ -138,10 +140,7 @@ class JsonAPI { continue; } - $relationship[$typeKey][$idKey] = array_merge( - $included[$typeKey][$idKey], - $relationship[$typeKey][$idKey] ?? [] - ); + $relationship[$typeKey][$idKey][$j] = $included[$typeKey][$idKey]; } } } @@ -149,6 +148,8 @@ class JsonAPI { } } + $data['data']['included'] = $included; + return $data['data']; } @@ -202,11 +203,11 @@ class JsonAPI { { foreach($items as $id => $item) { - if (array_key_exists('relationships', $item)) + if (array_key_exists('relationships', $item) && is_array($item['relationships'])) { foreach($item['relationships'] as $relType => $props) { - if (array_key_exists('data', $props)) + if (array_key_exists('data', $props) && is_array($props['data']) && array_key_exists('id', $props['data'])) { if (array_key_exists($props['data']['id'], $organized[$props['data']['type']])) { diff --git a/src/API/Kitsu/KitsuTrait.php b/src/API/Kitsu/KitsuTrait.php index 68c8b91c..fe2167b7 100644 --- a/src/API/Kitsu/KitsuTrait.php +++ b/src/API/Kitsu/KitsuTrait.php @@ -22,7 +22,7 @@ use function Amp\wait; use Amp\Artax\{Client, Request}; use Aviat\AnimeClient\AnimeClient; -use Aviat\AnimeClient\API\Kitsu as K; +use Aviat\AnimeClient\API\{FailedResponseException, Kitsu as K}; use Aviat\Ion\Json; trait KitsuTrait { @@ -142,8 +142,10 @@ trait KitsuTrait { { if ($logger) { - $logger->warning('Non 200 response for api call', (array)$response->getBody()); + $logger->warning('Non 200 response for api call', (array)$response); } + + throw new FailedResponseException('Failed to get the proper response from the API'); } return Json::decode($response->getBody(), TRUE); diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index db34552a..634a4ea8 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -160,13 +160,16 @@ class Model { */ public function getCharacter(string $slug): array { - // @todo catch non-existent characters and show 404 $data = $this->getRequest('/characters', [ 'query' => [ 'filter' => [ - 'name' => $slug + 'slug' => $slug, ], - // 'include' => 'primaryMedia,castings' + 'fields' => [ + 'anime' => 'canonicalTitle,titles,slug,posterImage', + 'manga' => 'canonicalTitle,titles,slug,posterImage' + ], + 'include' => 'castings.person,castings.media' ] ]); diff --git a/src/Controller/Character.php b/src/Controller/Character.php index 46bf2585..8f05563f 100644 --- a/src/Controller/Character.php +++ b/src/Controller/Character.php @@ -14,38 +14,128 @@ * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient */ -namespace Aviat\AnimeClient\Controller; - -use Aviat\AnimeClient\Controller as BaseController; - -/** - * Controller for character description pages - */ -class Character extends BaseController { - - public function index(string $slug) - { - $model = $this->container->get('kitsu-model'); - - $data = $model->getCharacter($slug); - - if (( ! array_key_exists('data', $data)) || empty($data['data'])) - { - return $this->notFound( - $this->formatTitle( - 'Characters', - 'Character not found' - ), - 'Character Not Found' - ); - } - - $this->outputHTML('character', [ - 'title' => $this->formatTitle( - 'Characters', - $data['data'][0]['attributes']['name'] - ), - 'data' => $data['data'][0]['attributes'] - ]); - } +namespace Aviat\AnimeClient\Controller; + +use Aviat\AnimeClient\Controller as BaseController; +use Aviat\AnimeClient\API\JsonAPI; +use Aviat\Ion\ArrayWrapper; + +/** + * Controller for character description pages + */ +class Character extends BaseController { + + use ArrayWrapper; + + public function index(string $slug) + { + $model = $this->container->get('kitsu-model'); + + $rawData = $model->getCharacter($slug); + + if (( ! array_key_exists('data', $rawData)) || empty($rawData['data'])) + { + return $this->notFound( + $this->formatTitle( + 'Characters', + 'Character not found' + ), + 'Character Not Found' + ); + } + + $data = JsonAPI::organizeData($rawData); + + $viewData = [ + 'title' => $this->formatTitle( + 'Characters', + $data[0]['attributes']['name'] + ), + 'data' => $data, + 'castings' => [] + ]; + + if (array_key_exists('included', $data) && array_key_exists('castings', $data['included'])) + { + $viewData['castings'] = $this->organizeCast($data['included']['castings']); + } + + $this->outputHTML('character', $viewData); + } + + private function dedupeCast(array $cast): array + { + $output = []; + $people = []; + + $i = 0; + foreach ($cast as &$role) + { + if (empty($role['attributes']['role'])) + { + continue; + } + + + $person = current($role['relationships']['person']['people'])['attributes']; + + if ( ! array_key_exists($person['name'], $people)) + { + $people[$person['name']] = $i; + $role['relationships']['media']['anime'] = [current($role['relationships']['media']['anime'])]; + $output[$i] = $role; + + $i++; + + continue; + } + else if(array_key_exists($person['name'], $people)) + { + if (array_key_exists('anime', $role['relationships']['media'])) + { + $key = $people[$person['name']]; + $output[$key]['relationships']['media']['anime'][] = current($role['relationships']['media']['anime']); + } + continue; + } + } + + return $output; + } + + private function organizeCast(array $cast): array + { + $cast = $this->dedupeCast($cast); + $output = []; + + foreach($cast as $id => $role) + { + if (empty($role['attributes']['role'])) + { + continue; + } + + $language = $role['attributes']['language']; + $roleName = $role['attributes']['role']; + $isVA = $role['attributes']['voiceActor']; + + if ($isVA) + { + $person = current($role['relationships']['person']['people'])['attributes']; + $name = $person['name']; + $item = [ + 'person' => $person, + 'series' => $role['relationships']['media']['anime'] + ]; + + $output[$roleName][$language][] = $item; + } + else + { + $output[$roleName][] = $role['relationships']['person']['people']; + } + } + + return $output; + } } \ No newline at end of file diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 2e092c7d..9d56ba5f 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -26,6 +26,7 @@ use const Aviat\AnimeClient\{ use function Aviat\Ion\_dir; +use Aviat\AnimeClient\API\FailedResponseException; use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Friend; @@ -256,13 +257,24 @@ class Dispatcher extends RoutingBase { { $logger = $this->container->getLogger('default'); - $controller = new $controllerName($this->container); + try + { + $controller = new $controllerName($this->container); - // Run the appropriate controller method - $logger->debug('Dispatcher - controller arguments'); - $logger->debug(print_r($params, TRUE)); + // Run the appropriate controller method + $logger->debug('Dispatcher - controller arguments', $params); + + call_user_func_array([$controller, $method], $params); + } + catch (FailedResponseException $e) + { + $controllerName = DEFAULT_CONTROLLER; + $controller = new $controllerName($this->container); + $controller->errorPage(500, + 'API request timed out', + 'Failed to retrieve data from API ☹️'); + } - call_user_func_array([$controller, $method], $params); } /** From fb3805b789a12e9b8250b43a6e2ddf17d95cdea6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 5 Apr 2017 13:02:48 -0400 Subject: [PATCH 02/26] Add staff to character pages --- app/views/anime/details.php | 2 +- app/views/character.php | 122 ++++++++++++++++++++++++++++++++++-- public/css/base.css | 18 ++++-- public/css/base.myth.css | 17 +++-- src/API/JsonAPI.php | 7 --- 5 files changed, 146 insertions(+), 20 deletions(-) diff --git a/app/views/anime/details.php b/app/views/anime/details.php index eea521c2..127a5706 100644 --- a/app/views/anime/details.php +++ b/app/views/anime/details.php @@ -79,7 +79,7 @@ 0): ?>

Characters

-
+
diff --git a/app/views/character.php b/app/views/character.php index 41a63087..a938a50c 100644 --- a/app/views/character.php +++ b/app/views/character.php @@ -1,12 +1,126 @@ -
+ +
- +
-

+

-

+

+ + +

Media

+
+ +
+

Anime

+
+ +
+ generate('anime.details', ['id' => $anime['attributes']['slug']]); + $titles = Kitsu::filterTitles($anime['attributes']); + ?> + + + + +
+ +
+
+ + +
+

Manga

+
+ + +
+ generate('manga.details', ['id' => $manga['attributes']['slug']]); + $titles = Kitsu::filterTitles($manga['attributes']); + ?> + + + + +
+ + +
+
+ +
+ + +
+ +

Castings

+ $entries): ?> +

+ $casting): ?> +
+ + + + + + + + + + + +
Cast MemberSeries
+
+ +
+ +
+
+
+
+ +
+ generate('anime.details', ['id' => $series['attributes']['slug']]); + $titles = Kitsu::filterTitles($series['attributes']); + ?> + + + + +
+ +
+
+ + + +
\ No newline at end of file diff --git a/public/css/base.css b/public/css/base.css index a003688e..fb108671 100644 --- a/public/css/base.css +++ b/public/css/base.css @@ -753,11 +753,11 @@ a:hover, a:active { .justify {text-align:justify} -.align_center {text-align:center} +.align_center {text-align:center !important} -.align_left {text-align:left} +.align_left {text-align:left !important} -.align_right {text-align:right} +.align_right {text-align:right !important} .valign_top {vertical-align:top} @@ -1263,7 +1263,12 @@ a:hover, a:active { font-size:inherit; } -.details.fixed { +.description { + max-width:800px; + max-width:80rem; +} + +.fixed { max-width:930px; max-width:93rem; } @@ -1339,6 +1344,11 @@ a:hover, a:active { width: 100%; } +.min-table { + min-width: 0; + margin-left: 0; +} + /* ---------------------------------------------------------------------------- User page styles -----------------------------------------------------------------------------*/ diff --git a/public/css/base.myth.css b/public/css/base.myth.css index 60fae728..588c02f8 100644 --- a/public/css/base.myth.css +++ b/public/css/base.myth.css @@ -79,9 +79,9 @@ a:hover, a:active { } .justify {text-align:justify} -.align_center {text-align:center} -.align_left {text-align:left} -.align_right {text-align:right} +.align_center {text-align:center !important} +.align_left {text-align:left !important} +.align_right {text-align:right !important} .valign_top {vertical-align:top} @@ -521,7 +521,11 @@ a:hover, a:active { font-size:inherit; } -.details.fixed { +.description { + max-width:80rem; +} + +.fixed { max-width:93rem; } @@ -590,6 +594,11 @@ a:hover, a:active { width: 100%; } +.min-table { + min-width: 0; + margin-left: 0; +} + /* ---------------------------------------------------------------------------- User page styles -----------------------------------------------------------------------------*/ diff --git a/src/API/JsonAPI.php b/src/API/JsonAPI.php index 210afc5a..0bd1fe75 100644 --- a/src/API/JsonAPI.php +++ b/src/API/JsonAPI.php @@ -127,13 +127,6 @@ class JsonAPI { $typeKey = $props['data'][$j]['type']; $relationship =& $item['relationships'][$relType]; - unset($relationship['data'][$j]); - - if (empty($relationship['data'])) - { - unset($relationship['data']); - } - if ($relType === $typeKey) { $relationship[$idKey] = $included[$typeKey][$idKey]; From 45bf1e11368ea22ba0d5d5a2353d7aeb17874eb0 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 5 Apr 2017 13:08:16 -0400 Subject: [PATCH 03/26] Add a better API timeout message emoticon --- src/Dispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 9d56ba5f..3d1da4d9 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -272,7 +272,7 @@ class Dispatcher extends RoutingBase { $controller = new $controllerName($this->container); $controller->errorPage(500, 'API request timed out', - 'Failed to retrieve data from API ☹️'); + 'Failed to retrieve data from API (╯°□°)╯︵ ┻━┻'); } } From 32b3617fed6ef3d9ecc6319e34b3a8cbc6dcfa68 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 10:01:09 -0400 Subject: [PATCH 04/26] Update postcss --- public/package.json | 4 +- public/yarn.lock | 862 +++++++++++++++++++++++++------------------- 2 files changed, 493 insertions(+), 373 deletions(-) diff --git a/public/package.json b/public/package.json index ded887c8..ed97ee5c 100644 --- a/public/package.json +++ b/public/package.json @@ -7,8 +7,8 @@ "autoprefixer": "^6.6.1", "npm-run-all": "^4.0.0", "postcss-cachify": "^1.3.1", - "postcss-cli": "^2.6.0", + "postcss-cli": "^3.1", "postcss-cssnext": "^2.9.0", "postcss-import": "^9.0.0" } -} \ No newline at end of file +} diff --git a/public/yarn.lock b/public/yarn.lock index 567005de..e417fcb3 100644 --- a/public/yarn.lock +++ b/public/yarn.lock @@ -1,12 +1,21 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 + + abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +ajv@^4.9.1: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-styles@^2.2.1: version "2.2.1" @@ -16,6 +25,10 @@ any-promise@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" +any-promise@^1.0.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -24,8 +37,8 @@ anymatch@^1.3.0: micromatch "^2.1.5" aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" are-we-there-yet@~1.1.2: version "1.1.2" @@ -34,6 +47,12 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.0 || ^1.1.13" +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -78,14 +97,14 @@ asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -95,14 +114,14 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" autoprefixer@^6.0.2, autoprefixer@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.6.1.tgz#11a4077abb4b313253ec2f6e1adb91ad84253519" + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" dependencies: - browserslist "~1.5.1" - caniuse-db "^1.0.30000604" + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.8" + postcss "^5.2.16" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -110,8 +129,12 @@ aws-sign2@~0.6.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +balanced-match@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" balanced-match@^0.2.0: version "0.2.1" @@ -121,13 +144,9 @@ balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -balanced-match@~0.1.0, balanced-match@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" - bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" @@ -162,11 +181,12 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browserslist@^1.0.0, browserslist@^1.0.1, browserslist@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.5.1.tgz#67c3f2a1a6ad174cd01d25d2362e6e6083b26986" +browserslist@^1.0.0, browserslist@^1.0.1, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" dependencies: - caniuse-db "^1.0.30000601" + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" buffer-shims@^1.0.0: version "1.0.0" @@ -180,25 +200,24 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-api@^1.3.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.2.tgz#8f393c682f661c0a997b77bba6e826483fb3600e" +caniuse-api@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" dependencies: browserslist "^1.0.1" caniuse-db "^1.0.30000346" lodash.memoize "^4.1.0" lodash.uniq "^4.3.0" - shelljs "^0.7.0" -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000601, caniuse-db@^1.0.30000604: - version "1.0.30000604" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000604.tgz#bc139270a777564d19c0aadcd832b491d093bda5" +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000649" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000649.tgz#1ee1754a6df235450c8b7cd15e0ebf507221a86a" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -208,7 +227,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chokidar@^1.5.1: +chokidar@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: @@ -223,6 +242,16 @@ chokidar@^1.5.1: optionalDependencies: fsevents "^1.0.0" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-spinners@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -235,6 +264,10 @@ clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -244,14 +277,14 @@ color-convert@^0.5.3: resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" color-convert@^1.3.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339" + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" color-name@^1.0.0, color-name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" color-string@^0.3.0: version "0.3.0" @@ -280,19 +313,13 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" connect-cachify-static@^1.3.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/connect-cachify-static/-/connect-cachify-static-1.4.2.tgz#48b993583fb7d5fb0f7f34197708e1dfd402a19a" + version "1.5.1" + resolved "https://registry.yarnpkg.com/connect-cachify-static/-/connect-cachify-static-1.5.1.tgz#0450f9979ebc6df4a998941a831ef39b6d59e94e" dependencies: debug "~2" find "~0" @@ -308,9 +335,20 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" + dependencies: + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + cross-spawn@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.0.1.tgz#a3bbb302db2297cbea3c04edf36941f4613aa399" + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -337,9 +375,9 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@^2.1.2, debug@~2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" +debug@^2.1.2, debug@^2.2.0, debug@~2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: ms "0.7.2" @@ -347,12 +385,6 @@ debug@~0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -376,6 +408,10 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +dependency-graph@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.5.0.tgz#71edf7945dbba86c1b19ac982b6afb6476b56dd5" + duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -386,15 +422,19 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +electron-to-chromium@^1.2.7: + version "1.3.2" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" + error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" es-abstract@^1.4.3: - version "1.6.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99" + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.0" @@ -413,6 +453,10 @@ escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + event-stream@~3.3.0: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -482,15 +526,15 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - for-in "^0.1.5" + for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" @@ -509,21 +553,37 @@ form-data@~2.1.1: mime-types "^2.1.12" from@~0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-extra@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs-promise@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.2.tgz#cfea45c80f46480a3fd176213fa22abc8c159521" + dependencies: + any-promise "^1.3.0" + fs-extra "^2.0.0" + mz "^2.6.0" + thenify-all "^1.6.0" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.15" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" -fstream-ignore@~1.0.5: +fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -531,9 +591,9 @@ fstream-ignore@~1.0.5: inherits "2" minimatch "^3.0.0" -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -544,13 +604,9 @@ function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -gather-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b" - gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -559,23 +615,16 @@ gauge@~2.7.1: signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" - supports-color "^0.2.0" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -595,17 +644,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.5: +glob@^7.0.3, glob@^7.0.5: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -616,33 +655,30 @@ glob@^7.0.0, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -globby@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" dependencies: array-union "^1.0.1" - arrify "^1.0.0" - glob "^6.0.1" + glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" + ajv "^4.9.1" + har-schema "^1.0.5" has-ansi@^2.0.0: version "2.0.0" @@ -658,6 +694,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -672,8 +714,8 @@ hoek@2.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + version "2.4.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" http-signature@~1.1.0: version "1.1.1" @@ -694,7 +736,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2: +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -702,10 +744,6 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" - invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -721,8 +759,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" is-builtin-module@^1.0.0: version "1.0.0" @@ -768,15 +806,6 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -791,13 +820,11 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-regex@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" is-symbol@^1.0.1: version "1.0.1" @@ -811,13 +838,13 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@~1.0.0, isarray@1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isnumeric@^0.2.0: version "0.2.0" @@ -843,30 +870,46 @@ js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" +js-yaml@^3.4.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" dependencies: + assert-plus "1.0.0" extsprintf "1.0.2" json-schema "0.2.3" verror "1.3.6" @@ -906,14 +949,6 @@ lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.indexof@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" - lodash.memoize@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -935,6 +970,16 @@ lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" +lodash@^4.1.0, lodash@^4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + lru-cache@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -947,10 +992,8 @@ map-stream@~0.1.0: resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" math-expression-evaluator@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab" - dependencies: - lodash.indexof "^4.0.5" + version "1.2.16" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" micromatch@^2.1.5: version "2.3.11" @@ -970,75 +1013,80 @@ micromatch@^2.1.5: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: - mime-db "~1.25.0" + mime-db "~1.27.0" -minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3": +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +minimatch@^3.0.0, minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.1: +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +"mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -nan@^2.3.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" +mz@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" -neo-async@^1.0.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-1.8.2.tgz#31795888b79dd04357a7c52113a65183e93b6735" +nan@^2.3.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.1.tgz#8c84f7b14c96b89f57fbc838012180ec8ca39a01" node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" + osenv "^0.1.4" normalize-package-data@^2.3.2: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -1046,16 +1094,18 @@ normalize-package-data@^2.3.2: validate-npm-package-license "^3.0.1" normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" npm-run-all@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.0.0.tgz#6c729dc9fb46b610b435039568bc7469ae7356fe" + version "4.0.2" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.0.2.tgz#a84669348e6db6ccbe052200b4cdb6bfe034a4fe" dependencies: chalk "^1.1.3" cross-spawn "^5.0.1" @@ -1065,7 +1115,7 @@ npm-run-all@^4.0.0: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -npmlog@^4.0.1: +npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -1087,8 +1137,8 @@ oauth-sign@~0.8.1: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-keys@^1.0.8: version "1.0.11" @@ -1105,28 +1155,52 @@ on-headers@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0: +once@^1.3.0, once@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onecolor@~2.4.0: version "2.4.2" resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-2.4.2.tgz#a53ec3ff171c3446016dd5210d1a1b544bf7d874" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +ora@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-1.2.0.tgz#32fb3183500efe83f5ea89101785f0ee6060fec9" + dependencies: + chalk "^1.1.1" + cli-cursor "^2.1.0" + cli-spinners "^1.0.0" + log-symbols "^1.0.2" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" dependencies: lcid "^1.0.0" +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1156,6 +1230,10 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -1176,6 +1254,10 @@ pause-stream@0.0.11: dependencies: through "~2.3" +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -1199,8 +1281,8 @@ pixrem@^3.0.0: reduce-css-calc "^1.2.7" pleeease-filters@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-3.0.0.tgz#35a4d4c2086413eabc2ce17aaa2ec29054e3075c" + version "3.0.1" + resolved "https://registry.yarnpkg.com/pleeease-filters/-/pleeease-filters-3.0.1.tgz#4dfe0e8f1046613517c64b728bc80608a7ebf22f" dependencies: onecolor "~2.4.0" postcss "^5.0.4" @@ -1220,8 +1302,8 @@ postcss-attribute-case-insensitive@^1.0.1: postcss-selector-parser "^2.2.0" postcss-cachify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/postcss-cachify/-/postcss-cachify-1.3.1.tgz#0e84b0aec037362add05fba4c561ed78c6eacd56" + version "1.3.2" + resolved "https://registry.yarnpkg.com/postcss-cachify/-/postcss-cachify-1.3.2.tgz#2c34282244ee50ba217cc2959305f6198453f139" dependencies: connect-cachify-static "^1.3.0" debug "^2.1.2" @@ -1235,19 +1317,22 @@ postcss-calc@^5.0.0: postcss-message-helpers "^2.0.0" reduce-css-calc "^1.2.6" -postcss-cli@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-2.6.0.tgz#f0de393caa026fcfc1b1479822989af508ed515d" +postcss-cli@^3.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-3.1.1.tgz#cccc4f8db12ad7e3058bf87aade68eaef2b4b7f1" dependencies: - globby "^4.1.0" - mkdirp "^0.5.1" - neo-async "^1.0.0" - postcss "^5.0.0" - read-file-stdin "^0.2.0" - resolve "^1.1.6" - yargs "^4.7.1" - optionalDependencies: - chokidar "^1.5.1" + chalk "^1.1.3" + chokidar "^1.6.1" + dependency-graph "^0.5.0" + fs-promise "^2.0.2" + get-stdin "^5.0.1" + globby "^6.1.0" + ora "^1.1.0" + postcss "^5.2.16" + postcss-load-config "^1.1.0" + postcss-reporter "^3.0.0" + read-cache "^1.0.0" + yargs "^7.0.2" postcss-color-function@^2.0.0: version "2.0.1" @@ -1315,11 +1400,11 @@ postcss-color-rgba-fallback@^2.0.0: rgb-hex "^1.0.0" postcss-cssnext@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-2.9.0.tgz#064df2a8c21fd2ebb88825df372cf20fca882868" + version "2.10.0" + resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-2.10.0.tgz#30e0dddcfb978eae2523a340aa2c8ba49c5d7103" dependencies: autoprefixer "^6.0.2" - caniuse-api "^1.3.2" + caniuse-api "^1.5.3" chalk "^1.1.1" pixrem "^3.0.0" pleeease-filters "^3.0.0" @@ -1338,6 +1423,7 @@ postcss-cssnext@^2.9.0: postcss-custom-media "^5.0.0" postcss-custom-properties "^5.0.0" postcss-custom-selectors "^3.0.0" + postcss-font-family-system-ui "^1.0.1" postcss-font-variant "^2.0.0" postcss-initial "^1.3.1" postcss-media-minmax "^2.1.0" @@ -1355,10 +1441,10 @@ postcss-custom-media@^5.0.0: postcss "^5.0.0" postcss-custom-properties@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-5.0.1.tgz#e07d4f6c78e547cf04274f120f490d236e33ea19" + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-5.0.2.tgz#9719d78f2da9cf9f53810aebc23d4656130aceb1" dependencies: - balanced-match "~0.1.0" + balanced-match "^0.4.2" postcss "^5.0.0" postcss-custom-selectors@^3.0.0: @@ -1369,15 +1455,23 @@ postcss-custom-selectors@^3.0.0: postcss "^5.0.0" postcss-selector-matches "^2.0.0" +postcss-font-family-system-ui@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-font-family-system-ui/-/postcss-font-family-system-ui-1.0.2.tgz#3e1a5e3fb7e31e5e9e71439ccb0e8014556927c7" + dependencies: + lodash "^4.17.4" + postcss "^5.2.12" + postcss-value-parser "^3.3.0" + postcss-font-variant@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-2.0.1.tgz#7ca29103f59fa02ca3ace2ca22b2f756853d4ef8" dependencies: postcss "^5.0.4" -postcss-import: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-9.0.0.tgz#751fcd21c53eec6eb468890384ce3c114968b391" +postcss-import@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-9.1.0.tgz#95fe9876a1e79af49fbdc3589f01fe5aa7cc1e80" dependencies: object-assign "^4.0.1" postcss "^5.0.14" @@ -1393,6 +1487,29 @@ postcss-initial@^1.3.1: lodash.template "^4.2.4" postcss "^5.0.19" +postcss-load-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + postcss-media-minmax@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-2.1.2.tgz#444c5cf8926ab5e4fd8a2509e9297e751649cdf8" @@ -1428,6 +1545,15 @@ postcss-replace-overflow-wrap@^1.0.0: dependencies: postcss "^5.0.16" +postcss-reporter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-3.0.0.tgz#09ea0f37a444c5693878606e09b018ebeff7cf8f" + dependencies: + chalk "^1.0.0" + lodash "^4.1.0" + log-symbols "^1.0.2" + postcss "^5.0.0" + postcss-selector-matches@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-2.0.5.tgz#fa0f43be57b68e77aa4cd11807023492a131027f" @@ -1451,8 +1577,8 @@ postcss-selector-parser@^1.1.4: uniq "^1.0.1" postcss-selector-parser@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: flatten "^1.0.2" indexes-of "^1.0.1" @@ -1462,14 +1588,14 @@ postcss-value-parser@^3.0.2, postcss-value-parser@^3.2.3, postcss-value-parser@^ version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^5.0.0, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.1.1, postcss@^5.2.0, postcss@^5.2.8: - version "5.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.8.tgz#05720c49df23c79bda51fd01daeb1e9222e94390" +postcss@^5.0.0, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.1.1, postcss@^5.2.0, postcss@^5.2.12, postcss@^5.2.16: + version "5.2.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" - supports-color "^3.1.2" + supports-color "^3.2.3" preserve@^0.2.0: version "0.2.0" @@ -1499,9 +1625,9 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" randomatic@^1.1.3: version "1.1.6" @@ -1510,14 +1636,14 @@ randomatic@^1.1.3: is-number "^2.0.2" kind-of "^3.0.2" -rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" - strip-json-comments "~1.0.4" + strip-json-comments "~2.0.1" read-cache@^1.0.0: version "1.0.0" @@ -1525,12 +1651,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-file-stdin@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61" - dependencies: - gather-stream "^1.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -1554,21 +1674,9 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -1587,12 +1695,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - reduce-css-calc@^1.2.6, reduce-css-calc@^1.2.7: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -1614,6 +1716,10 @@ regex-cache@^0.4.2: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -1622,18 +1728,18 @@ repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - caseless "~0.11.0" + caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.1.1" - har-validator "~2.0.6" + har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" @@ -1641,23 +1747,38 @@ request@^2.79.0: json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" - qs "~6.3.0" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" stringstream "~0.0.4" tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" + tunnel-agent "^0.6.0" uuid "^3.0.0" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -resolve@^1.1.6, resolve@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" +resolve@^1.1.7: + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" rgb-hex@^1.0.0: version "1.0.0" @@ -1667,13 +1788,17 @@ rgb@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" -rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" -semver@~5.3.0, "semver@2 || 3 || 4 || 5": +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -1704,15 +1829,7 @@ shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@^0.7.0: - version "0.7.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -1746,9 +1863,13 @@ split@0.3: dependencies: through "2" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -1767,11 +1888,7 @@ stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -1787,6 +1904,10 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -1807,38 +1928,34 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: has-flag "^1.0.0" -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" -tar@~2.2.1: +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -1846,7 +1963,19 @@ tar@~2.2.1: fstream "^1.0.2" inherits "2" -through@~2.3, through@~2.3.1, through@2: +thenify-all@^1.0.0, thenify-all@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.2.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" + dependencies: + any-promise "^1.0.0" + +through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -1860,15 +1989,17 @@ traverse-chain@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" -uid-number@~0.0.6: +uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -1913,10 +2044,10 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: - isexe "^1.1.1" + isexe "^2.0.0" wide-align@^1.1.0: version "1.1.0" @@ -1924,10 +2055,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.1" -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -1939,41 +2066,34 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" yallist@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" dependencies: camelcase "^3.0.0" - lodash.assign "^4.0.6" -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" +yargs@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.0.2.tgz#115b97df1321823e8b8648e8968c782521221f67" dependencies: + camelcase "^3.0.0" cliui "^3.2.0" decamelize "^1.1.1" get-caller-file "^1.0.1" - lodash.assign "^4.0.3" os-locale "^1.4.0" read-pkg-up "^1.0.1" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.1" + string-width "^1.0.2" which-module "^1.0.0" - window-size "^0.2.0" y18n "^3.2.1" - yargs-parser "^2.4.1" - + yargs-parser "^5.0.0" From edc6e6227eed651d3c702bbb1252f15f502a042d Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 11:45:25 -0400 Subject: [PATCH 05/26] Simplify css and javascript minification --- app/appConf/minify_config.php | 75 +- app/appConf/minify_css_groups.php | 40 - app/appConf/minify_js_groups.php | 53 - app/views/header.php | 14 +- public/cache/.gitkeep | 0 public/css.js | 28 + public/css.php | 180 --- public/css/app.min.css | 1 + public/css/app.min.css.map | 1 + public/css/base.css | 912 ++---------- public/css/base.myth.css | 652 --------- public/css/{marx.myth.css => marx.css} | 283 ++-- public/cssfilter.js | 3 + public/js.php | 128 +- public/min.php | 121 -- public/package.json | 11 +- public/yarn.lock | 1780 +++++------------------- 17 files changed, 727 insertions(+), 3555 deletions(-) delete mode 100644 app/appConf/minify_css_groups.php delete mode 100644 app/appConf/minify_js_groups.php delete mode 100644 public/cache/.gitkeep create mode 100644 public/css.js delete mode 100644 public/css.php create mode 100644 public/css/app.min.css create mode 100644 public/css/app.min.css.map delete mode 100644 public/css/base.myth.css rename public/css/{marx.myth.css => marx.css} (75%) create mode 100644 public/cssfilter.js delete mode 100644 public/min.php diff --git a/app/appConf/minify_config.php b/app/appConf/minify_config.php index 22898a06..44ecd993 100644 --- a/app/appConf/minify_config.php +++ b/app/appConf/minify_config.php @@ -18,46 +18,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | CSS Folder - |-------------------------------------------------------------------------- - | - | The folder where css files exist, in relation to the document root - | - */ - 'css_root' => 'css/', - - /* - |-------------------------------------------------------------------------- - | Path from - |-------------------------------------------------------------------------- - | - | Path fragment to rewrite in css files - | - */ - 'path_from' => '', - - /* - |-------------------------------------------------------------------------- - | Path to - |-------------------------------------------------------------------------- - | - | The path fragment replacement for the css files - | - */ - 'path_to' => '', - - /* - |-------------------------------------------------------------------------- - | CSS Groups file - |-------------------------------------------------------------------------- - | - | The file where the css groups are configured - | - */ - 'css_groups_file' => __DIR__ . '/minify_css_groups.php', - /* |-------------------------------------------------------------------------- | JS Folder @@ -70,13 +30,40 @@ return [ /* |-------------------------------------------------------------------------- - | JS Groups file + | JS Groups |-------------------------------------------------------------------------- | - | The file where the javascript groups are configured + | Config array for javascript files to concatenate and minify | */ - 'js_groups_file' => __DIR__ . '/minify_js_groups.php', - + 'groups' => [ + 'base' => [ + 'base/classList.js', + 'base/AnimeClient.js', + ], + 'event' => [ + 'base/events.js', + ], + 'table' => [ + 'base/sort_tables.js', + ], + 'table_edit' => [ + 'base/sort_tables.js', + 'anime_edit.js', + 'manga_edit.js', + ], + 'edit' => [ + 'anime_edit.js', + 'manga_edit.js', + ], + 'anime_collection' => [ + 'lib/mustache.js', + 'anime_collection.js', + ], + 'manga_collection' => [ + 'lib/mustache.js', + 'manga_collection.js', + ], + ] ]; // End of minify_config.php \ No newline at end of file diff --git a/app/appConf/minify_css_groups.php b/app/appConf/minify_css_groups.php deleted file mode 100644 index e0272ef5..00000000 --- a/app/appConf/minify_css_groups.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @copyright 2015 - 2017 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.0 - * @link https://github.com/timw4mail/HummingBirdAnimeClient - */ - - -// -------------------------------------------------------------------------- - -/** - * This is the config array for css files to concatenate and minify - */ -return [ - /*----- - Css - -----*/ - - /* - For each group create an array like so - - 'my_group' => array( - 'path/to/css/file1.css', - 'path/to/css/file2.css' - ), - */ - 'base' => [ - 'base.css' - ] -]; -// End of css_groups.php \ No newline at end of file diff --git a/app/appConf/minify_js_groups.php b/app/appConf/minify_js_groups.php deleted file mode 100644 index 12d910ea..00000000 --- a/app/appConf/minify_js_groups.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @copyright 2015 - 2017 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.0 - * @link https://github.com/timw4mail/HummingBirdAnimeClient - */ - - -// -------------------------------------------------------------------------- - -/** - * This is the config array for javascript files to concatenate and minify - */ -return [ - 'base' => [ - 'base/classList.js', - 'base/AnimeClient.js', - ], - 'event' => [ - 'base/events.js', - ], - 'table' => [ - 'base/sort_tables.js', - ], - 'table_edit' => [ - 'base/sort_tables.js', - 'anime_edit.js', - 'manga_edit.js', - ], - 'edit' => [ - 'anime_edit.js', - 'manga_edit.js', - ], - 'anime_collection' => [ - 'lib/mustache.js', - 'anime_collection.js', - ], - 'manga_collection' => [ - 'lib/mustache.js', - 'manga_collection.js', - ], -]; - -// End of js_groups.php \ No newline at end of file diff --git a/app/views/header.php b/app/views/header.php index 0ca31a95..04151e4a 100644 --- a/app/views/header.php +++ b/app/views/header.php @@ -6,7 +6,7 @@ - + @@ -21,17 +21,19 @@ -
- - + } + ?>
\ No newline at end of file diff --git a/public/cache/.gitkeep b/public/cache/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/public/css.js b/public/css.js new file mode 100644 index 00000000..083577a7 --- /dev/null +++ b/public/css.js @@ -0,0 +1,28 @@ +/** + * Script for optimizing css + */ +const fs = require('fs'); +const postcss = require('postcss'); +const atImport = require('postcss-import'); +const cssNext = require('postcss-cssnext'); +const cssNano = require('cssnano'); + +const css = fs.readFileSync('css/base.css', 'utf8'); + +postcss() + .use(atImport()) + .use(cssNext({ + warnForDuplicates: false + })) + .use(cssNano({ + options: { + sourcemap: false + } + })) + .process(css, { + from: 'css/base.css', + to: 'css/app.min.css' + }).then(result => { + fs.writeFileSync('css/app.min.css', result.css); + fs.writeFileSync('css/app.min.css.map', result.map); + }); \ No newline at end of file diff --git a/public/css.php b/public/css.php deleted file mode 100644 index 81e38ccc..00000000 --- a/public/css.php +++ /dev/null @@ -1,180 +0,0 @@ - - * @copyright 2015 - 2017 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.0 - * @link https://github.com/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\EasyMin; - -require_once('./min.php'); - -/** - * Simple CSS Minifier - */ -class CSSMin extends BaseMin { - - protected $cssRoot; - protected $pathFrom; - protected $pathTo; - protected $group; - protected $lastModified; - protected $requestedTime; - - public function __construct(array $config, array $groups) - { - $group = $_GET['g']; - $this->cssRoot = $config['css_root']; - $this->pathFrom = $config['path_from']; - $this->pathTo = $config['path_to']; - $this->group = $groups[$group]; - $this->lastModified = $this->getLastModified(); - - $this->send(); - } - - /** - * Send the CSS - * - * @return void - */ - protected function send() - { - if($this->lastModified >= $this->getIfModified() && $this->isNotDebug()) - { - throw new FileNotChangedException(); - } - - $css = ( ! array_key_exists('debug', $_GET)) - ? $this->compress($this->getCss()) - : $this->getCss(); - - $this->output($css); - } - - /** - * Function for compressing the CSS as tightly as possible - * - * @param string $buffer - * @return string - */ - protected function compress($buffer) - { - //Remove CSS comments - $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer); - - //Remove tabs, spaces, newlines, etc. - $buffer = preg_replace('`\s+`', ' ', $buffer); - $replace = [ - ' )' => ')', - ') ' => ')', - ' }' => '}', - '} ' => '}', - ' {' => '{', - '{ ' => '{', - ', ' => ',', - ': ' => ':', - '; ' => ';', - ]; - - //Eradicate every last space! - $buffer = trim(strtr($buffer, $replace)); - $buffer = str_replace('{ ', '{', $buffer); - $buffer = str_replace('} ', '}', $buffer); - - return $buffer; - } - - /** - * Get the most recent file modification date - * - * @return int - */ - protected function getLastModified() - { - $modified = []; - - // Get all the css files, and concatenate them together - if(isset($this->group)) - { - foreach($this->group as $file) - { - $newFile = realpath("{$this->cssRoot}{$file}"); - $modified[] = filemtime($newFile); - } - } - - //Add this page for last modified check - $modified[] = filemtime(__FILE__); - - //Get the latest modified date - rsort($modified); - - return array_shift($modified); - } - - /** - * Get the css to display - * - * @return string - */ - protected function getCss() - { - $css = ''; - - foreach($this->group as $file) - { - $newFile = realpath("{$this->cssRoot}{$file}"); - $css .= file_get_contents($newFile); - } - - // Correct paths that have changed due to concatenation - // based on rules in the config file - $css = str_replace($this->pathFrom, $this->pathTo, $css); - - return $css; - } - - /** - * Output the CSS - * - * @return void - */ - protected function output($css) - { - $this->sendFinalOutput($css, 'text/css', $this->lastModified); - } -} - -// -------------------------------------------------------------------------- -// ! Start Minifying -// -------------------------------------------------------------------------- - -//Get config files -$config = require('../app/appConf/minify_config.php'); -$groups = require($config['css_groups_file']); - -if ( ! array_key_exists($_GET['g'], $groups)) -{ - throw new InvalidArgumentException('You must specify a css group that exists'); -} - -try -{ - new CSSMin($config, $groups); -} -catch (FileNotChangedException $e) -{ - BaseMin::send304(); -} - -//End of css.php \ No newline at end of file diff --git a/public/css/app.min.css b/public/css/app.min.css new file mode 100644 index 00000000..7d565419 --- /dev/null +++ b/public/css/app.min.css @@ -0,0 +1 @@ +:root{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;text-size-adjust:100%;scroll-behavior:smooth}audio:not([controls]){display:none}details{display:block}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}main{margin:0 auto;padding:0 1.6em 1.6em;padding:0 16px 16px;padding:0 1.6rem 1.6rem}main,pre,summary{display:block}pre{background:#efefef;color:#444;font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace;font-size:1.4em;font-size:14px;font-size:1.4rem;margin:1.6em 0;margin:16px 0;margin:1.6rem 0;overflow:auto;padding:1.6em;padding:16px;padding:1.6rem;word-break:break-all;word-wrap:break-word}progress{display:inline-block}small{color:#777;font-size:75%}big{font-size:125%}template{display:none}textarea{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:8px;margin-bottom:.8rem;overflow:auto;padding:8px;padding:.8rem;resize:vertical;vertical-align:middle}[hidden]{display:none}[unselectable]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}*,:after,:before{border-style:solid;border-width:0;box-sizing:inherit}*{font-size:inherit;line-height:inherit;margin:0;padding:0}:after,:before{text-decoration:inherit;vertical-align:inherit}a{-webkit-transition:.25s ease;color:#1271db;text-decoration:none;transition:.25s ease}audio,canvas,iframe,img,svg,video{vertical-align:middle}button,input,select,textarea{border:1px solid #ccc;border:.1rem solid #ccc;color:inherit;font-family:inherit;font-style:inherit;font-weight:inherit;min-height:1.4em}code,kbd,pre,samp{font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace}table{border-collapse:collapse;border-spacing:0;margin-bottom:16px;margin-bottom:1.6rem}::-moz-selection{background-color:#b3d4fc;text-shadow:none}::selection{background-color:#b3d4fc;text-shadow:none}button::-moz-focus-inner{border:0}body{color:#444;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:16px;font-size:1.6rem;font-style:normal;font-weight:400;padding:0}p{margin:0 0 16px;margin:0 0 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:2em 0 1.6em;margin:20px 0 16px;margin:2rem 0 1.6rem}h1{border-bottom:1px solid rgba(0,0,0,.2);border-bottom:.1rem solid rgba(0,0,0,.2);font-size:3.6em;font-size:36px;font-size:3.6rem}h1,h2{font-style:normal;font-weight:500}h2{font-size:3em;font-size:30px;font-size:3rem}h3{font-size:2.4em;font-size:24px;font-size:2.4rem;font-style:normal;font-weight:500;margin:16px 0 4px;margin:1.6rem 0 .4rem}h4{font-size:1.8em;font-size:18px;font-size:1.8rem}h4,h5{font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}h5{font-size:1.6em;font-size:16px;font-size:1.6rem}h6{color:#777;font-size:1.4em;font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}code,h6{font-size:14px;font-size:1.4rem}code{background:#efefef;color:#444;font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace;word-break:break-all;word-wrap:break-word}a:focus,a:hover{text-decoration:none}dl{margin-bottom:16px;margin-bottom:1.6rem}dd{margin-left:40px;margin-left:4rem}ol,ul{margin-bottom:8px;margin-bottom:.8rem;padding-left:20px;padding-left:2rem}blockquote{border-left:2px solid #1271db;border-left:.2rem solid #1271db;font-style:italic;margin:16px 0;margin:1.6rem 0;padding-left:16px;padding-left:1.6rem}blockquote,figcaption{font-family:Georgia,Times,Times New Roman,serif}html{font-size:62.5%}article,aside,details,footer,header,main,section,summary{display:block;height:auto;margin:0 auto;width:100%}footer{clear:both;display:inline-block;float:left;max-width:100%;padding:10px 0;padding:1rem 0;text-align:center}footer,hr{border-top:1px solid rgba(0,0,0,.2);border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;margin-bottom:16px;margin-bottom:1.6rem;width:100%}img{height:auto;vertical-align:baseline}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:inline-block;padding:8px;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:8px;padding:.8rem;text-align:left}input[type=color]{padding:8px 16px;padding:.8rem 1.6rem}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#b3d4fc}input[type=checkbox],input[type=radio]{vertical-align:middle}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin solid #444}input:not([type])[disabled],input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{background-color:#efefef;color:#777;cursor:not-allowed}input[readonly],select[readonly],textarea[readonly]{background-color:#efefef;border-color:#ccc;color:#777}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{border-color:#e9322d;color:#b94a48}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#ff4136}select{background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:8px 0;padding:.8rem 0}legend{border-bottom:1px solid #ccc;border-bottom:.1rem solid #ccc;display:block;padding:8px 0;padding:.8rem 0;width:100%}button,input[type=submit],legend{color:#444;margin-bottom:8px;margin-bottom:.8rem}button,input[type=submit]{-moz-user-select:none;-ms-user-select:none;-webkit-transition:.25s ease;-webkit-user-drag:none;-webkit-user-select:none;border:2px solid #444;border:.2rem solid #444;border-radius:0;cursor:pointer;display:inline-block;margin-right:4px;margin-right:.4rem;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;text-decoration:none;text-transform:uppercase;transition:.25s ease;user-select:none;vertical-align:baseline}button a,input[type=submit] a{color:#444}button::-moz-focus-inner,input[type=submit]::-moz-focus-inner{padding:0}button:hover,input[type=submit]:hover{background:#444;border-color:#444;color:#fff}button:hover a,input[type=submit]:hover a{color:#fff}button:active,input[type=submit]:active{background:#6a6a6a;border-color:#6a6a6a;color:#fff}button:active a,input[type=submit]:active a{color:#fff}button:disabled,input[type=submit]:disabled{box-shadow:none;cursor:not-allowed;opacity:.4}nav ul{list-style:none;margin:0;padding:0;text-align:center}nav ul li{display:inline}nav a{-webkit-transition:.25s ease;border-bottom:2px solid transparent;border-bottom:.2rem solid transparent;color:#444;padding:8px 16px;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:rgba(0,0,0,.2)}nav a:active{border-color:rgba(0,0,0,.56)}caption{padding:8px 0;padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:8px;margin-bottom:.8rem}td,th{border:1px solid #ccc;border:.1rem solid #ccc;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;vertical-align:inherit}tfoot tr{background:none}tfoot td{color:#efefef;font-size:8px;font-size:.8rem;font-style:italic;padding:16px 4px;padding:1.6rem .4rem}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){clip:rect(0)!important;position:absolute!important}}@media screen and max-width 40rem{article,aside,section{clear:both;display:block;max-width:100%}img{margin-right:1.6rem}}.media[hidden],[hidden=hidden],template{display:none}body{margin:.5em}button{background:hsla(0,0%,100%,.65);margin:0}table{min-width:85%;margin:0 auto}td{padding:1em;padding:10px;padding:1rem}thead td,thead th{padding:.5em;padding:5px;padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}.bracketed{color:#12db18}.bracketed,h1 a{text-shadow:1px 1px 1px #000}.bracketed:before{content:"[\00a0"}.bracketed:after{content:"\00a0]"}.bracketed:active,.bracketed:hover{color:#db7d12}.grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.flex-align-space-around{-ms-flex-line-pack:distribute;align-content:space-around}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-self-center{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.small-font{font-size:16px;font-size:1.6rem}.justify{text-align:justify}.align_center{text-align:center!important}.align_left{text-align:left!important}.align_right{text-align:right!important}.valign_top{vertical-align:top}.no_border{border:none}.media-wrap{text-align:center;margin:0 auto}.danger{background-color:#ff4136;border-color:#924949;color:#fff}.danger:active,.danger:hover{background-color:#924949;border-color:#ff4136;color:#fff}.user-btn{border-color:#12db18;color:#12db18;text-shadow:1px 1px 1px #000;padding:0 .5em;padding:0 5px;padding:0 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full_width{width:100%}.cssload-loader{position:relative;left:calc(50% - 31px);width:62px;height:62px;border-radius:50%;-webkit-perspective:780px;perspective:780px}.cssload-inner{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:50%}.cssload-inner.cssload-one{left:0;top:0;-webkit-animation:a 1.15s linear infinite;animation:a 1.15s linear infinite;border-bottom:3px solid #000}.cssload-inner.cssload-two{right:0;top:0;-webkit-animation:b 1.15s linear infinite;animation:b 1.15s linear infinite;border-right:3px solid #000}.cssload-inner.cssload-three{right:0;bottom:0;-webkit-animation:c 1.15s linear infinite;animation:c 1.15s linear infinite;border-top:3px solid #000}@-webkit-keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@-webkit-keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@-webkit-keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}@keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}.sorting,.sorting_asc,.sorting_desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting_asc:before{content:" ↑\00a0"}.sorting_desc:before{content:" ↓\00a0"}.form{width:100%}.form thead th,.form thead tr{background:inherit;border:0}.form tr>td:nth-child(odd){text-align:right;min-width:25px;max-width:30%}.form tr>td:nth-child(2n){text-align:left;width:70%}.invisible tbody>tr:nth-child(odd){background:inherit}.invisible td,.invisible th,.invisible tr{border:0}.message{position:relative;margin:.5em auto;padding:.5em;width:95%}.message .close{width:1em;height:1em;position:absolute;right:.5em;top:.5em;text-align:center;vertical-align:middle;line-height:1em}.message:hover .close:after{content:"☒"}.message:hover{cursor:pointer}.message .icon{left:.5em;top:.5em;margin-right:1em}.message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info{border:1px solid #bfbe3a;background:#ffc}.message.info .icon:after{content:"⚠"}.character,.media,.small_character{position:relative;vertical-align:top;display:inline-block;text-align:center;width:220px;height:311px;margin:.25em .125em}.character>img,.media>img,.small_character>img{width:100%}.media .edit_buttons>button{margin:.5em auto}.media_metadata>div,.medium_metadata>div,.name,.row{text-shadow:1px 2px 1px rgba(0,0,0,.85);background:#000;background:rgba(0,0,0,.45);color:#fff;padding:.25em .125em;text-align:right}.age_rating,.media_type{text-align:left}.media>.media_metadata{position:absolute;bottom:0;right:0}.media>.medium_metadata{position:absolute;bottom:0;left:0}.media>.name{position:absolute;top:0}.character:hover>.name,.media:hover>.media_metadata>div,.media:hover>.medium_metadata>div,.media:hover>.name,.media:hover>.table .row,.small_character:hover>.name{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.media:hover>.edit_buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.character>.name a,.character>.name a small,.media>.name a,.media>.name a small,.small_character>.name a,.small_character>.name a small{background:none;color:#fff;text-shadow:1px 2px 1px rgba(0,0,0,.85)}.anime .name,.manga .name{text-align:center;width:100%;padding:.5em .25em}.anime .age_rating,.anime .airing_status,.anime .completion,.anime .delete,.anime .edit,.anime .media_type,.anime .user_rating{background:none;text-align:center}.anime .table,.manga .table{position:absolute;bottom:0;left:0;width:100%}.anime .row,.manga .row{width:100%;background:#000;background:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:distribute;align-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;text-align:center;padding:0 inherit}.anime .row>span,.manga .row>span{text-align:left}.anime .row>div,.manga .row>div{font-size:.8em;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle}.anime .media>button.plus_one{position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px)}.manga .row{padding:1px}.manga .media{border:1px solid #ddd;height:310px;margin:.25em}.manga .media>.edit_buttons{position:absolute;top:86px;top:calc(50% - 58.5px);left:43.5px;left:calc(50% - 66.5px)}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.big-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.big-check:checked+label:after{content:"✓";font-size:15em;font-size:150px;font-size:15rem;text-align:center;color:#adff2f;position:absolute;top:147px;left:0;height:100%;width:100%}#series_list article.media{position:relative}#series_list .name,#series_list .name label{position:absolute;display:block;top:0;left:0;height:100%;width:100%;vertical-align:middle;line-height:1.25em}#series_list .name small{color:#fff}.details{margin:15px auto 0;margin:1.5rem auto 0;padding:10px;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:930px;max-width:93rem}.details .cover{display:block;width:284px}.details h2{margin-top:0}.details .flex>div{margin:10px;margin:1rem}.details .media_details{max-width:300px}.details .media_details td{padding:0 15px;padding:0 1.5rem}.details p{text-align:justify}.details .media_details td:nth-child(odd){width:1%;white-space:nowrap;text-align:right}.details .media_details td:nth-child(2n){text-align:left}.character,.small_character{background:rgba(0,0,0,.5);width:225px;height:350px;vertical-align:middle;white-space:nowrap}.small_character a{display:inline-block;width:100%;height:100%}.character .name,.small_character .name{position:absolute;bottom:0;left:0;z-index:2}.character img,.small_character img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;width:100%}.min-table{min-width:0;margin-left:0}.small_character{width:160px;height:250px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}.media{margin:2px 0}main{padding:0 0,5em .5em;padding:0 .5rem .5rem}}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover_streaming_link .streaming-logo{width:20px;height:20px} \ No newline at end of file diff --git a/public/css/app.min.css.map b/public/css/app.min.css.map new file mode 100644 index 00000000..66dc9051 --- /dev/null +++ b/public/css/app.min.css.map @@ -0,0 +1 @@ +undefined \ No newline at end of file diff --git a/public/css/base.css b/public/css/base.css index fb108671..177282ff 100644 --- a/public/css/base.css +++ b/public/css/base.css @@ -1,675 +1,16 @@ -:root -{ - -ms-text-size-adjust:100%; - -webkit-text-size-adjust:100%; - box-sizing:border-box; - cursor:default; - font-family:'Open Sans', 'Nimbus Sans L', 'Helvetica Neue', Helvetica, 'Lucida Grande', sans-serif; - line-height:1.4; - overflow-y:scroll; - text-size-adjust:100%; - scroll-behavior: smooth; -} - -audio:not([controls]) -{ - display:none; -} - -details -{ - display:block; -} - -input[type=search] -{ - -webkit-appearance:textfield; -} - -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration -{ - -webkit-appearance:none; -} - -main -{ - display:block; - margin:0 auto; - padding:0 1.6em 1.6em; - padding:0 16px 16px; - padding:0 1.6rem 1.6rem; -} - -summary -{ - display:block; -} - -pre -{ - background:#efefef; - color:#444; - display:block; - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace; - font-size:1.4em; - font-size:14px; - font-size:1.4rem; - margin:1.6em 0; - margin:16px 0; - margin:1.6rem 0; - overflow:auto; - padding:1.6em; - padding:16px; - padding:1.6rem; - word-break:break-all; - word-wrap:break-word; -} - -progress -{ - display:inline-block; -} - -small -{ - color:#777; - font-size:75%; -} - -big -{ - font-size:125%; -} - -template -{ - display:none; -} - -textarea -{ - border:1px solid #ccc; - border:.1rem solid #ccc; - border-radius:0; - display:block; - margin-bottom:8px; - margin-bottom:.8rem; - overflow:auto; - padding:8px; - padding:.8rem; - resize:vertical; - vertical-align:middle; -} - -[hidden] -{ - display:none; -} - -[unselectable] -{ - -moz-user-select:none; - -ms-user-select:none; - -webkit-user-select:none; - user-select:none; -} - -*,::before,::after -{ - border-style:solid; - border-width:0; - box-sizing:inherit; -} - -* -{ - font-size:inherit; - line-height:inherit; - margin:0; - padding:0; -} - -::before,::after -{ - text-decoration:inherit; - vertical-align:inherit; -} - -a -{ - -webkit-transition:.25s ease; - color:#1271db; - text-decoration:none; - transition:.25s ease; -} - -audio,canvas,iframe,img,svg,video -{ - vertical-align:middle; -} - -button,input,select,textarea -{ - border:1px solid #ccc; - border:.1rem solid #ccc; - color:inherit; - font-family:inherit; - font-style:inherit; - font-weight:inherit; - min-height:1.4em; -} - -code,kbd,pre,samp -{ - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace, monospace; -} - -table -{ - border-collapse:collapse; - border-spacing:0; - margin-bottom:16px; - margin-bottom:1.6rem; -} - -::-moz-selection -{ - background-color:#b3d4fc; - text-shadow:none; -} - -::selection -{ - background-color:#b3d4fc; - text-shadow:none; -} - -button::-moz-focus-inner -{ - border:0; -} - -body -{ - color:#444; - font-family:'Open Sans', 'Nimbus Sans L', 'Helvetica Neue', Helvetica, 'Lucida Grande', sans-serif; - font-size:16px; - font-size:1.6rem; - font-style:normal; - font-weight:400; - padding:0; -} - -p -{ - margin:0 0 16px; - margin:0 0 1.6rem; -} - -h1,h2,h3,h4,h5,h6 -{ - font-family:Lato, 'Open Sans', 'Nimbus Sans L', 'Helvetica Neue', Helvetica, 'Lucida Grande', sans-serif; - margin:2em 0 1.6em; - margin:20px 0 16px; - margin:2rem 0 1.6rem; -} - -h1 -{ - border-bottom:1px solid rgba(0, 0, 0, .2); - border-bottom:.1rem solid rgba(0, 0, 0, .2); - font-size:3.6em; - font-size:36px; - font-size:3.6rem; - font-style:normal; - font-weight:500; -} - -h2 -{ - font-size:3em; - font-size:30px; - font-size:3rem; - font-style:normal; - font-weight:500; -} - -h3 -{ - font-size:2.4em; - font-size:24px; - font-size:2.4rem; - font-style:normal; - font-weight:500; - margin:16px 0 4px; - margin:1.6rem 0 .4rem; -} - -h4 -{ - font-size:1.8em; - font-size:18px; - font-size:1.8rem; - font-style:normal; - font-weight:600; - margin:16px 0 4px; - margin:1.6rem 0 .4rem; -} - -h5 -{ - font-size:1.6em; - font-size:16px; - font-size:1.6rem; - font-style:normal; - font-weight:600; - margin:16px 0 4px; - margin:1.6rem 0 .4rem; -} - -h6 -{ - color:#777; - font-size:1.4em; - font-size:14px; - font-size:1.4rem; - font-style:normal; - font-weight:600; - margin:16px 0 4px; - margin:1.6rem 0 .4rem; -} - -code -{ - background:#efefef; - color:#444; - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace; - font-size:14px; - font-size:1.4rem; - word-break:break-all; - word-wrap:break-word; -} - -a:hover,a:focus -{ - text-decoration:none; -} - -dl -{ - margin-bottom:16px; - margin-bottom:1.6rem; -} - -dd -{ - margin-left:40px; - margin-left:4rem; -} - -ul,ol -{ - margin-bottom:8px; - margin-bottom:.8rem; - padding-left:20px; - padding-left:2rem; -} - -blockquote -{ - border-left:2px solid #1271db; - border-left:.2rem solid #1271db; - font-family:Georgia, Times, 'Times New Roman', serif; - font-style:italic; - margin:16px 0; - margin:1.6rem 0; - padding-left:16px; - padding-left:1.6rem; -} - -figcaption -{ - font-family:Georgia, Times, 'Times New Roman', serif; -} - -html -{ - font-size:62.5%; -} - -main,header,footer,article,section,aside,details,summary -{ - display:block; - height:auto; - margin:0 auto; - width:100%; -} - -footer -{ - border-top:1px solid rgba(0, 0, 0, .2); - border-top:.1rem solid rgba(0, 0, 0, .2); - clear:both; - display:inline-block; - float:left; - max-width:100%; - padding:10px 0; - padding:1rem 0; - text-align:center; -} - -hr -{ - border-top:1px solid rgba(0, 0, 0, .2); - border-top:.1rem solid rgba(0, 0, 0, .2); - display:block; - margin-bottom:16px; - margin-bottom:1.6rem; - width:100%; -} - -img -{ - height:auto; - /* max-width:100%; */ - vertical-align:baseline; -} - -input[type=text],input[type=password],input[type=email],input[type=url],input[type=date],input[type=month],input[type=time],input[type=datetime],input[type=datetime-local],input[type=week],input[type=number],input[type=search],input[type=tel],input[type=color],select -{ - border:1px solid #ccc; - border:.1rem solid #ccc; - border-radius:0; - display:inline-block; - padding:8px; - padding:.8rem; - vertical-align:middle; -} - -input:not([type]) -{ - -webkit-appearance:none; - background-clip:padding-box; - background-color:#fff; - border:1px solid #ccc; - border:.1rem solid #ccc; - border-radius:0; - color:#444; - display:inline-block; - padding:8px; - padding:.8rem; - text-align:left; -} - -input[type=color] -{ - padding:8px 16px; - padding:.8rem 1.6rem; -} - -input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=url]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=week]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,select:focus,textarea:focus -{ - border-color:#b3d4fc; -} - -input:not([type]):focus -{ - border-color:#b3d4fc; -} - -input[type=radio],input[type=checkbox] -{ - vertical-align:middle; -} - -input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus -{ - outline:1px solid thin #444; - outline:.1rem solid thin #444; -} - -input[type=text][disabled],input[type=password][disabled],input[type=email][disabled],input[type=url][disabled],input[type=date][disabled],input[type=month][disabled],input[type=time][disabled],input[type=datetime][disabled],input[type=datetime-local][disabled],input[type=week][disabled],input[type=number][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=color][disabled],select[disabled],textarea[disabled] -{ - background-color:#efefef; - color:#777; - cursor:not-allowed; -} - -input:not([type])[disabled] -{ - background-color:#efefef; - color:#777; - cursor:not-allowed; -} - -input[readonly],select[readonly],textarea[readonly] -{ - background-color:#efefef; - border-color:#ccc; - color:#777; -} - -input:focus:invalid,textarea:focus:invalid,select:focus:invalid -{ - border-color:#e9322d; - color:#b94a48; -} - -input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus,input[type=checkbox]:focus:invalid:focus -{ - outline-color:#ff4136; -} - -select -{ - background-color:#fff; - border:1px solid #ccc; - border:.1rem solid #ccc; -} - -select[multiple] -{ - height:auto; -} - -label -{ - line-height:2; -} - -fieldset -{ - border:0; - margin:0; - padding:8px 0; - padding:.8rem 0; -} - -legend -{ - border-bottom:1px solid #ccc; - border-bottom:.1rem solid #ccc; - color:#444; - display:block; - margin-bottom:8px; - margin-bottom:.8rem; - padding:8px 0; - padding:.8rem 0; - width:100%; -} - -input[type=submit],button -{ - -moz-user-select:none; - -ms-user-select:none; - -webkit-transition:.25s ease; - -webkit-user-drag:none; - -webkit-user-select:none; - border:2px solid #444; - border:.2rem solid #444; - border-radius:0; - color:#444; - cursor:pointer; - display:inline-block; - margin-bottom:8px; - margin-bottom:.8rem; - margin-right:4px; - margin-right:.4rem; - padding:8px 16px; - padding:.8rem 1.6rem; - text-align:center; - text-decoration:none; - text-transform:uppercase; - transition:.25s ease; - user-select:none; - vertical-align:baseline; -} - -input[type=submit] a,button a -{ - color:#444; -} - -input[type=submit]::-moz-focus-inner,button::-moz-focus-inner -{ - padding:0; -} - -input[type=submit]:hover,button:hover -{ - background:#444; - border-color:#444; - color:#fff; -} - -input[type=submit]:hover a,button:hover a -{ - color:#fff; -} - -input[type=submit]:active,button:active -{ - background:#6a6a6a; - border-color:#6a6a6a; - color:#fff; -} - -input[type=submit]:active a,button:active a -{ - color:#fff; -} - -input[type=submit]:disabled,button:disabled -{ - box-shadow:none; - cursor:not-allowed; - opacity:.40; -} - -nav ul -{ - list-style:none; - margin:0; - padding:0; - text-align:center; -} - -nav ul li -{ - display:inline; -} - -nav a -{ - -webkit-transition:.25s ease; - border-bottom:2px solid transparent; - border-bottom:.2rem solid transparent; - color:#444; - padding:8px 16px; - padding:.8rem 1.6rem; - text-decoration:none; - transition:.25s ease; -} - -nav a:hover,nav li.selected a -{ - border-color:rgba(0, 0, 0, .2); -} - -nav a:active -{ - border-color:rgba(0, 0, 0, .56); -} - -caption -{ - padding:8px 0; - padding:.8rem 0; -} - -thead th -{ - background:#efefef; - color:#444; -} - -tr -{ - background:#fff; - margin-bottom:8px; - margin-bottom:.8rem; -} - -th,td -{ - border:1px solid #ccc; - border:.1rem solid #ccc; - padding:8px 16px; - padding:.8rem 1.6rem; - text-align:center; - vertical-align:inherit; -} - -tfoot tr -{ - background:none; -} - -tfoot td -{ - color:#efefef; - font-size:8px; - font-size:.8rem; - font-style:italic; - padding:16px 4px; - padding:1.6rem .4rem; -} - -@media screen { - [hidden~=screen] - { - display:inherit; - } - - [hidden~=screen]:not(:active):not(:focus):not(:target) - { - clip:rect(0000)!important; - position:absolute!important; - } -} - -@media screen and max-width 40rem { - article,section,aside - { - clear:both; - display:block; - max-width:100%; - } - - img - { - margin-right:1.6rem; - } +@import "./marx.css"; + +:root { + --link-shadow: 1px 1px 1px #000; + --shadow: 1px 2px 1px rgba(0, 0, 0, 0.85); + --title-overlay: rgba(0, 0, 0, 0.45); + --title-overlay-fallback: #000; + --text-color: #ffffff; + --normal-padding: 0.25em 0.125em; + --link-hover-color: #7d12db; + --edit-link-hover-color: #db7d12; + --edit-link-color: #12db18; + --radius: 5px; } template, [hidden="hidden"], .media[hidden] {display:none} @@ -677,7 +18,7 @@ template, [hidden="hidden"], .media[hidden] {display:none} body {margin: 0.5em;} button { - background:rgba(255, 255, 255, .65); + background:rgba(255,255,255,0.65); margin: 0; } @@ -688,13 +29,11 @@ table { td { padding:1em; - padding:10px; padding:1rem; } thead td, thead th { padding:0.5em; - padding:5px; padding:0.5rem; } @@ -707,7 +46,7 @@ tbody > tr:nth-child(odd) { } a:hover, a:active { - color:#7d12db + color: var(--link-hover-color) } /* ----------------------------------------------------------------------------- @@ -715,48 +54,33 @@ a:hover, a:active { ------------------------------------------------------------------------------*/ .bracketed { - color:#12db18; + color: var(--edit-link-color); } - .bracketed, h1 a { - text-shadow:1px 1px 1px #000; + text-shadow: var(--link-shadow); } - .bracketed:before {content: '[\00a0'} - .bracketed:after {content: '\00a0]'} - .bracketed:hover, .bracketed:active { - color:#db7d12 + color: var(--edit-link-hover-color) } -.grow-1 {-webkit-box-flex: 1;-ms-flex-positive: 1;flex-grow: 1} - -.flex-wrap {-ms-flex-wrap: wrap;flex-wrap: wrap} - -.flex-no-wrap {-ms-flex-wrap: nowrap;flex-wrap: nowrap} - -.flex-align-end {-webkit-box-align: end;-ms-flex-align: end;align-items: flex-end} - -.flex-align-space-around {-ms-flex-line-pack: distribute;align-content: space-around} - -.flex-justify-space-around {-ms-flex-pack: distribute;justify-content: space-around} - -.flex-self-center {-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center} - -.flex {display: -webkit-box;display: -ms-flexbox;display: flex} +.grow-1 {flex-grow: 1} +.flex-wrap {flex-wrap: wrap} +.flex-no-wrap {flex-wrap: nowrap} +.flex-align-end {align-items: flex-end} +.flex-align-space-around {align-content: space-around} +.flex-justify-space-around {justify-content: space-around} +.flex-self-center {align-self:center} +.flex {display: flex} .small-font { - font-size:16px; font-size:1.6rem; } .justify {text-align:justify} - .align_center {text-align:center !important} - .align_left {text-align:left !important} - .align_right {text-align:right !important} .valign_top {vertical-align:top} @@ -781,17 +105,15 @@ a:hover, a:active { } .user-btn { - border-color:#12db18; - color:#12db18; - text-shadow:1px 1px 1px #000; + border-color: var(--edit-link-color); + color: var(--edit-link-color); + text-shadow: var(--link-shadow); padding:0 0.5em; - padding:0 5px; padding:0 0.5rem; } - .user-btn:hover, .user-btn:active { - border-color:#db7d12; - background-color:#db7d12; + border-color: var(--edit-link-hover-color); + background-color: var(--edit-link-hover-color); } .full_width { @@ -808,8 +130,7 @@ a:hover, a:active { width: 62px; height: 62px; border-radius: 50%; - -webkit-perspective: 780px; - perspective: 780px; + perspective: 780px; } .cssload-inner { @@ -823,111 +144,65 @@ a:hover, a:active { .cssload-inner.cssload-one { left: 0%; top: 0%; - -webkit-animation: cssload-rotate-one 1.15s linear infinite; - animation: cssload-rotate-one 1.15s linear infinite; - border-bottom: 3px solid rgb(0, 0, 0); + animation: cssload-rotate-one 1.15s linear infinite; + border-bottom: 3px solid rgb(0,0,0); } .cssload-inner.cssload-two { right: 0%; top: 0%; - -webkit-animation: cssload-rotate-two 1.15s linear infinite; - animation: cssload-rotate-two 1.15s linear infinite; - border-right: 3px solid rgb(0, 0, 0); + animation: cssload-rotate-two 1.15s linear infinite; + border-right: 3px solid rgb(0,0,0); } .cssload-inner.cssload-three { right: 0%; bottom: 0%; - -webkit-animation: cssload-rotate-three 1.15s linear infinite; - animation: cssload-rotate-three 1.15s linear infinite; - border-top: 3px solid rgb(0, 0, 0); -} - -@-webkit-keyframes cssload-rotate-one { - 0% { - -webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); - transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); - } - 100% { - -webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); - transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); - } + animation: cssload-rotate-three 1.15s linear infinite; + border-top: 3px solid rgb(0,0,0); } @keyframes cssload-rotate-one { 0% { - -webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); - transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); + transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); } 100% { - -webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); - transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); - } -} - -@-webkit-keyframes cssload-rotate-two { - 0% { - -webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); - transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); - } - 100% { - -webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); - transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); + transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); } } @keyframes cssload-rotate-two { 0% { - -webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); - transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); + transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); } 100% { - -webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); - transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); - } -} - -@-webkit-keyframes cssload-rotate-three { - 0% { - -webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); - transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); - } - 100% { - -webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); - transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); + transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); } } @keyframes cssload-rotate-three { 0% { - -webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); - transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); + transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); } 100% { - -webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); - transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); + transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); } } /* ----------------------------------------------------------------------------- Table sorting and form styles ------------------------------------------------------------------------------*/ - .sorting, .sorting_asc, .sorting_desc { vertical-align:text-bottom; } - .sorting::before { content: " ↕\00a0"; } - .sorting_asc::before { content: " ↑\00a0"; } - .sorting_desc::before { content: " ↓\00a0"; } @@ -944,7 +219,6 @@ a:hover, a:active { min-width:25px; max-width:30%; } - .form tr > td:nth-child(even) { text-align:left; width:70%; @@ -953,7 +227,6 @@ a:hover, a:active { .invisible tbody > tr:nth-child(odd) { background: inherit; } - .invisible tr, .invisible td, .invisible th { border:0; } @@ -999,7 +272,7 @@ a:hover, a:active { background: #f3e6e6; } -.message.error .icon::after { + .message.error .icon::after { content: '✘'; } @@ -1007,8 +280,7 @@ a:hover, a:active { border:1px solid #1f8454; background: #70dda9; } - -.message.success .icon::after { + .message.success .icon::after { content: '✔' } @@ -1017,7 +289,7 @@ a:hover, a:active { background: #FFFFCC; } -.message.info .icon::after { + .message.info .icon::after { content: '⚠'; } @@ -1032,7 +304,7 @@ a:hover, a:active { text-align:center; width:220px; height:311px; - margin:0.25em 0.125em; + margin: var(--normal-padding); } .media > img, @@ -1045,60 +317,57 @@ a:hover, a:active { margin:0.5em auto; } -.name, + .name, .media_metadata > div, .medium_metadata > div, .row { - text-shadow:1px 2px 1px rgba(0, 0, 0, .85); - background:#000; - background:rgba(0, 0, 0, .45); - color:#ffffff; - padding:0.25em 0.125em; + text-shadow: var(--shadow); + background: var(--title-overlay-fallback); + background: var(--title-overlay); + color: var(--text-color); + padding: var(--normal-padding); text-align:right; } -.media_type, .age_rating { + .media_type, .age_rating { text-align:left; } -.media > .media_metadata { + .media > .media_metadata { position:absolute; bottom:0; right:0; } -.media > .medium_metadata { + .media > .medium_metadata { position:absolute; bottom: 0; left:0; } -.media > .name { + .media > .name { position:absolute; top: 0; } - -.small_character:hover > .name, + .small_character:hover > .name, .character:hover > .name, .media:hover > .name, .media:hover > .media_metadata > div, .media:hover > .medium_metadata > div, .media:hover > .table .row { - -webkit-transition:.25s ease; transition: .25s ease; - background:rgba(0, 0, 0, .75); + background:rgba(0,0,0,0.75); } -.media:hover > button[hidden], + .media:hover > button[hidden], .media:hover > .edit_buttons[hidden] { - -webkit-transition:.25s ease; transition: .25s ease; display:block; } -.small_character > .name a, + .small_character > .name a, .small_character > .name a small, .character > .name a, .character > .name a small, @@ -1107,13 +376,14 @@ a:hover, a:active { { background:none; color:#fff; - text-shadow:1px 2px 1px rgba(0, 0, 0, .85); + text-shadow: var(--shadow); } + + /* ----------------------------------------------------------------------------- Anime-list-specific styles ------------------------------------------------------------------------------*/ - .anime .name, .manga .name { text-align:center; width:100%; @@ -1131,6 +401,7 @@ a:hover, a:active { text-align:center; } + .anime .table, .manga .table { position:absolute; bottom:0; @@ -1140,15 +411,11 @@ a:hover, a:active { .anime .row, .manga .row { width:100%; - background:#000; - background:rgba(0, 0, 0, .45); - display: -webkit-box; - display: -ms-flexbox; + background: var(--title-overlay-fallback); + background: var(--title-overlay); display: flex; - -ms-flex-line-pack: distribute; - align-content: space-around; - -ms-flex-pack: distribute; - justify-content: space-around; + align-content: space-around; + justify-content: space-around; text-align:center; padding:0 inherit; } @@ -1160,8 +427,7 @@ a:hover, a:active { .anime .row > div, .manga .row > div { font-size:0.8em; display:flex-item; - -ms-flex-item-align:center; - align-self:center; + align-self:center; text-align:center; vertical-align:middle; } @@ -1177,7 +443,6 @@ a:hover, a:active { /* ----------------------------------------------------------------------------- Manga-list-specific styles ------------------------------------------------------------------------------*/ - .manga .row { padding:1px; } @@ -1196,13 +461,13 @@ a:hover, a:active { left: calc(50% - 66.5px); } + /* ----------------------------------------------------------------------------- Search page styles ------------------------------------------------------------------------------*/ - .media.search > .name { background-color:#555; - background-color: rgba(0, 0, 0, .35); + background-color: rgba(000,000,000,0.35); background-size: cover; background-size: contain; background-repeat: no-repeat; @@ -1213,15 +478,13 @@ a:hover, a:active { } .big-check:checked + label { - -webkit-transition:.25s ease; transition: .25s ease; - background:rgba(0, 0, 0, .75); + background:rgba(0,0,0,0.75); } .big-check:checked + label:after { content: '✓'; font-size: 15em; - font-size:150px; font-size: 15rem; text-align:center; color: greenyellow; @@ -1235,7 +498,6 @@ a:hover, a:active { #series_list article.media { position:relative; } - #series_list .name, #series_list .name label { position:absolute; display:block; @@ -1246,7 +508,6 @@ a:hover, a:active { vertical-align:middle; line-height: 1.25em; } - #series_list .name small { color: #fff; } @@ -1254,22 +515,17 @@ a:hover, a:active { /* ---------------------------------------------------------------------------- Details page styles -----------------------------------------------------------------------------*/ - .details { - margin:15px auto 0 auto; margin: 1.5rem auto 0 auto; - padding:10px; padding:1rem; font-size:inherit; } .description { - max-width:800px; max-width:80rem; } .fixed { - max-width:930px; max-width:93rem; } @@ -1284,16 +540,13 @@ a:hover, a:active { } .details .flex > div { - margin:10px; margin: 1rem; } .details .media_details { max-width:300px; } - -.details .media_details td { - padding:0 15px; + .details .media_details td { padding:0 1.5rem; } @@ -1306,27 +559,25 @@ a:hover, a:active { white-space:nowrap; text-align:right; } - .details .media_details td:nth-child(even) { text-align:left; } .character, .small_character { - background: rgba(0, 0, 0, .5); + background: rgba(0,0,0,0.5); width: 225px; height: 350px; vertical-align: middle; white-space: nowrap; } - -.small_character a { + .small_character a { display:inline-block; width: 100%; height: 100%; } -.small_character .name, + .small_character .name, .character .name { position: absolute; bottom: 0; @@ -1334,12 +585,11 @@ a:hover, a:active { z-index: 10; } -.small_character img, + .small_character img, .character img { position: relative; top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); + transform: translateY(-50%); z-index: 5; width: 100%; } @@ -1352,7 +602,6 @@ a:hover, a:active { /* ---------------------------------------------------------------------------- User page styles -----------------------------------------------------------------------------*/ - .small_character { width: 160px; height: 250px; @@ -1391,7 +640,6 @@ a:hover, a:active { /* ---------------------------------------------------------------------------- Images / Logos -----------------------------------------------------------------------------*/ - .streaming-logo { width: 50px; height: 50px; diff --git a/public/css/base.myth.css b/public/css/base.myth.css deleted file mode 100644 index 588c02f8..00000000 --- a/public/css/base.myth.css +++ /dev/null @@ -1,652 +0,0 @@ -@import "./marx.myth.css"; - -:root { - --link-shadow: 1px 1px 1px #000; - --shadow: 1px 2px 1px rgba(0, 0, 0, 0.85); - --title-overlay: rgba(0, 0, 0, 0.45); - --title-overlay-fallback: #000; - --text-color: #ffffff; - --normal-padding: 0.25em 0.125em; - --link-hover-color: #7d12db; - --edit-link-hover-color: #db7d12; - --edit-link-color: #12db18; - --radius: 5px; -} - -template, [hidden="hidden"], .media[hidden] {display:none} - -body {margin: 0.5em;} - -button { - background:rgba(255,255,255,0.65); - margin: 0; -} - -table { - min-width:85%; - margin: 0 auto; -} - -td { - padding:1em; - padding:1rem; -} - -thead td, thead th { - padding:0.5em; - padding:0.5rem; -} - -input[type=number] { - width: 4em; -} - -tbody > tr:nth-child(odd) { - background: #ddd; -} - -a:hover, a:active { - color: var(--link-hover-color) -} - -/* ----------------------------------------------------------------------------- - Utility classes -------------------------------------------------------------------------------*/ - -.bracketed { - color: var(--edit-link-color); -} -.bracketed, h1 a { - text-shadow: var(--link-shadow); -} -.bracketed:before {content: '[\00a0'} -.bracketed:after {content: '\00a0]'} -.bracketed:hover, .bracketed:active { - color: var(--edit-link-hover-color) -} - -.grow-1 {flex-grow: 1} -.flex-wrap {flex-wrap: wrap} -.flex-no-wrap {flex-wrap: nowrap} -.flex-align-end {align-items: flex-end} -.flex-align-space-around {align-content: space-around} -.flex-justify-space-around {justify-content: space-around} -.flex-self-center {align-self:center} -.flex {display: flex} - -.small-font { - font-size:1.6rem; -} - -.justify {text-align:justify} -.align_center {text-align:center !important} -.align_left {text-align:left !important} -.align_right {text-align:right !important} - -.valign_top {vertical-align:top} - -.no_border {border:none} - -.media-wrap { - text-align:center; - margin:0 auto; -} - -.danger { - background-color: #ff4136; - border-color: #924949; - color:#fff; -} - -.danger:hover, .danger:active { - background-color: #924949; - border-color: #ff4136; - color:#fff; -} - -.user-btn { - border-color: var(--edit-link-color); - color: var(--edit-link-color); - text-shadow: var(--link-shadow); - padding:0 0.5em; - padding:0 0.5rem; -} -.user-btn:hover, .user-btn:active { - border-color: var(--edit-link-hover-color); - background-color: var(--edit-link-hover-color); -} - -.full_width { - width: 100%; -} - -/* ----------------------------------------------------------------------------- - CSS loading icon -------------------------------------------------------------------------------*/ - -.cssload-loader { - position: relative; - left: calc(50% - 31px); - width: 62px; - height: 62px; - border-radius: 50%; - perspective: 780px; -} - -.cssload-inner { - position: absolute; - width: 100%; - height: 100%; - box-sizing: border-box; - border-radius: 50%; -} - -.cssload-inner.cssload-one { - left: 0%; - top: 0%; - animation: cssload-rotate-one 1.15s linear infinite; - border-bottom: 3px solid rgb(0,0,0); -} - -.cssload-inner.cssload-two { - right: 0%; - top: 0%; - animation: cssload-rotate-two 1.15s linear infinite; - border-right: 3px solid rgb(0,0,0); -} - -.cssload-inner.cssload-three { - right: 0%; - bottom: 0%; - animation: cssload-rotate-three 1.15s linear infinite; - border-top: 3px solid rgb(0,0,0); -} - -@keyframes cssload-rotate-one { - 0% { - transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg); - } - 100% { - transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg); - } -} - -@keyframes cssload-rotate-two { - 0% { - transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg); - } - 100% { - transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg); - } -} - -@keyframes cssload-rotate-three { - 0% { - transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg); - } - 100% { - transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg); - } -} - -/* ----------------------------------------------------------------------------- - Table sorting and form styles -------------------------------------------------------------------------------*/ -.sorting, -.sorting_asc, -.sorting_desc { - vertical-align:text-bottom; -} -.sorting::before { - content: " ↕\00a0"; -} -.sorting_asc::before { - content: " ↑\00a0"; -} -.sorting_desc::before { - content: " ↓\00a0"; -} - -.form { width:100%; } - -.form thead th, .form thead tr { - background: inherit; - border:0; -} - -.form tr > td:nth-child(odd) { - text-align:right; - min-width:25px; - max-width:30%; -} -.form tr > td:nth-child(even) { - text-align:left; - width:70%; -} - -.invisible tbody > tr:nth-child(odd) { - background: inherit; -} -.invisible tr, .invisible td, .invisible th { - border:0; -} - -/* ----------------------------------------------------------------------------- - Message boxes -------------------------------------------------------------------------------*/ - -.message{ - position:relative; - margin:0.5em auto; - padding:0.5em; - width:95%; -} - -.message .close{ - width:1em; - height:1em; - position:absolute; - right:0.5em; - top:0.5em; - text-align:center; - vertical-align:middle; - line-height:1em; -} - -.message:hover .close:after { - content: '☒'; -} - -.message:hover { - cursor:pointer; -} - -.message .icon{ - left:0.5em; - top:0.5em; - margin-right:1em; -} - -.message.error{ - border:1px solid #924949; - background: #f3e6e6; -} - - .message.error .icon::after { - content: '✘'; - } - -.message.success{ - border:1px solid #1f8454; - background: #70dda9; -} - .message.success .icon::after { - content: '✔' - } - -.message.info{ - border:1px solid #bfbe3a; - background: #FFFFCC; -} - - .message.info .icon::after { - content: '⚠'; - } - -/* ----------------------------------------------------------------------------- - Base list styles -------------------------------------------------------------------------------*/ - -.media, .character, .small_character { - position:relative; - vertical-align:top; - display:inline-block; - text-align:center; - width:220px; - height:311px; - margin: var(--normal-padding); -} - -.media > img, -.character > img, -.small_character > img { - width: 100%; -} - -.media .edit_buttons > button { - margin:0.5em auto; -} - - .name, - .media_metadata > div, - .medium_metadata > div, - .row { - text-shadow: var(--shadow); - background: var(--title-overlay-fallback); - background: var(--title-overlay); - color: var(--text-color); - padding: var(--normal-padding); - text-align:right; - } - - .media_type, .age_rating { - text-align:left; - } - - .media > .media_metadata { - position:absolute; - bottom:0; - right:0; - } - - .media > .medium_metadata { - position:absolute; - bottom: 0; - left:0; - } - - .media > .name { - position:absolute; - top: 0; - } - .small_character:hover > .name, - .character:hover > .name, - .media:hover > .name, - .media:hover > .media_metadata > div, - .media:hover > .medium_metadata > div, - .media:hover > .table .row - { - transition: .25s ease; - background:rgba(0,0,0,0.75); - } - - .media:hover > button[hidden], - .media:hover > .edit_buttons[hidden] - { - transition: .25s ease; - display:block; - } - - .small_character > .name a, - .small_character > .name a small, - .character > .name a, - .character > .name a small, - .media > .name a, - .media > .name a small - { - background:none; - color:#fff; - text-shadow: var(--shadow); - } - - - -/* ----------------------------------------------------------------------------- - Anime-list-specific styles -------------------------------------------------------------------------------*/ -.anime .name, .manga .name { - text-align:center; - width:100%; - padding:0.5em 0.25em; -} - -.anime .media_type, -.anime .airing_status, -.anime .user_rating, -.anime .completion, -.anime .age_rating, -.anime .edit, -.anime .delete { - background: none; - text-align:center; -} - - -.anime .table, .manga .table { - position:absolute; - bottom:0; - left:0; - width:100%; -} - -.anime .row, .manga .row { - width:100%; - background: var(--title-overlay-fallback); - background: var(--title-overlay); - display: flex; - align-content: space-around; - justify-content: space-around; - text-align:center; - padding:0 inherit; -} - -.anime .row > span, .manga .row > span { - text-align:left; -} - -.anime .row > div, .manga .row > div { - font-size:0.8em; - display:flex-item; - align-self:center; - text-align:center; - vertical-align:middle; -} - -.anime .media > button.plus_one { - position:absolute; - top: 138px; - top: calc(50% - 21.5px); - left: 44px; - left: calc(50% - 66.5px); -} - -/* ----------------------------------------------------------------------------- - Manga-list-specific styles -------------------------------------------------------------------------------*/ -.manga .row { - padding:1px; -} - -.manga .media { - border:1px solid #ddd; - height:310px; - margin:0.25em; -} - -.manga .media > .edit_buttons { - position:absolute; - top: 86px; - top: calc(50% - 58.5px); - left: 43.5px; - left: calc(50% - 66.5px); -} - - -/* ----------------------------------------------------------------------------- - Search page styles -------------------------------------------------------------------------------*/ -.media.search > .name { - background-color:#555; - background-color: rgba(000,000,000,0.35); - background-size: cover; - background-size: contain; - background-repeat: no-repeat; -} - -.big-check { - display:none; -} - -.big-check:checked + label { - transition: .25s ease; - background:rgba(0,0,0,0.75); -} - -.big-check:checked + label:after { - content: '✓'; - font-size: 15em; - font-size: 15rem; - text-align:center; - color: greenyellow; - position:absolute; - top:147px; - left:0; - height:100%; - width:100%; -} - -#series_list article.media { - position:relative; -} -#series_list .name, #series_list .name label { - position:absolute; - display:block; - top:0; - left:0; - height:100%; - width:100%; - vertical-align:middle; - line-height: 1.25em; -} -#series_list .name small { - color: #fff; -} - -/* ---------------------------------------------------------------------------- - Details page styles ------------------------------------------------------------------------------*/ -.details { - margin: 1.5rem auto 0 auto; - padding:1rem; - font-size:inherit; -} - -.description { - max-width:80rem; -} - -.fixed { - max-width:93rem; -} - -.details .cover { - display: block; - width: 284px; - /* height: 402px; */ -} - -.details h2 { - margin-top: 0; -} - -.details .flex > div { - margin: 1rem; -} - -.details .media_details { - max-width:300px; -} - .details .media_details td { - padding:0 1.5rem; - } - -.details p { - text-align:justify; -} - -.details .media_details td:nth-child(odd) { - width:1%; - white-space:nowrap; - text-align:right; -} -.details .media_details td:nth-child(even) { - text-align:left; -} - -.character, -.small_character { - background: rgba(0,0,0,0.5); - width: 225px; - height: 350px; - vertical-align: middle; - white-space: nowrap; -} - .small_character a { - display:inline-block; - width: 100%; - height: 100%; - } - - .small_character .name, - .character .name { - position: absolute; - bottom: 0; - left: 0; - z-index: 10; - } - - .small_character img, - .character img { - position: relative; - top: 50%; - transform: translateY(-50%); - z-index: 5; - width: 100%; - } - -.min-table { - min-width: 0; - margin-left: 0; -} - -/* ---------------------------------------------------------------------------- - User page styles ------------------------------------------------------------------------------*/ -.small_character { - width: 160px; - height: 250px; -} - -.user-page .media-wrap { - text-align: left; -} - -.media a { - display: inline-block; - width: 100%; - height: 100%; -} - -/* ---------------------------------------------------------------------------- - Viewport-based styles ------------------------------------------------------------------------------*/ - -@media screen and (max-width: 40em) { - nav a { - line-height:4em; - line-height:4rem; - } - - .media { - margin:2px 0; - } - - main { - padding:0 0,5em 0.5em; - padding:0 0.5rem 0.5rem; - } -} - -/* ---------------------------------------------------------------------------- - Images / Logos ------------------------------------------------------------------------------*/ -.streaming-logo { - width: 50px; - height: 50px; - vertical-align:middle; -} - -.cover_streaming_link .streaming-logo { - width: 20px; - height: 20px; -} \ No newline at end of file diff --git a/public/css/marx.myth.css b/public/css/marx.css similarity index 75% rename from public/css/marx.myth.css rename to public/css/marx.css index 856fbdf0..426fefe8 100644 --- a/public/css/marx.myth.css +++ b/public/css/marx.css @@ -1,6 +1,7 @@ -:root -{ - --default-font-list:'Open Sans', 'Nimbus Sans L', 'Helvetica Neue', Helvetica, 'Lucida Grande', sans-serif; +:root { + --default-font-list:system-ui,sans-serif; + --monospace-font-list:'Anonymous Pro','Fira Code',Menlo,Monaco,Consolas,'Courier New',monospace; + --serif-font-list:Georgia,Times,'Times New Roman',serif; -ms-text-size-adjust:100%; -webkit-text-size-adjust:100%; box-sizing:border-box; @@ -9,48 +10,41 @@ line-height:1.4; overflow-y:scroll; text-size-adjust:100%; - scroll-behavior: smooth; + scroll-behavior:smooth; } -audio:not([controls]) -{ +audio:not([controls]) { display:none; } -details -{ +details { display:block; } -input[type=search] -{ +input[type=search] { -webkit-appearance:textfield; } -input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration -{ +input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration { -webkit-appearance:none; } -main -{ +main { display:block; margin:0 auto; padding:0 1.6em 1.6em; padding:0 1.6rem 1.6rem; } -summary -{ +summary { display:block; } -pre -{ +pre { background:#efefef; color:#444; display:block; - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace; + font-family:var(--monospace-font-list); font-size:1.4em; font-size:1.4rem; margin:1.6em 0; @@ -62,29 +56,24 @@ pre word-wrap:break-word; } -progress -{ +progress { display:inline-block; } -small -{ +small { color:#777; font-size:75%; } -big -{ +big { font-size:125%; } -template -{ +template { display:none; } -textarea -{ +textarea { border:.1rem solid #ccc; border-radius:0; display:block; @@ -95,55 +84,47 @@ textarea vertical-align:middle; } -[hidden] -{ +[hidden] { display:none; } -[unselectable] -{ +[unselectable] { -moz-user-select:none; -ms-user-select:none; -webkit-user-select:none; user-select:none; } -*,::before,::after -{ +*,::before,::after { border-style:solid; border-width:0; box-sizing:inherit; } -* -{ +* { font-size:inherit; line-height:inherit; margin:0; padding:0; } -::before,::after -{ +::before,::after { text-decoration:inherit; vertical-align:inherit; } -a -{ +a { -webkit-transition:.25s ease; color:#1271db; text-decoration:none; transition:.25s ease; } -audio,canvas,iframe,img,svg,video -{ +audio,canvas,iframe,img,svg,video { vertical-align:middle; } -button,input,select,textarea -{ +button,input,select,textarea { border:.1rem solid #ccc; color:inherit; font-family:inherit; @@ -152,37 +133,31 @@ button,input,select,textarea min-height:1.4em; } -code,kbd,pre,samp -{ - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace, monospace; +code,kbd,pre,samp { + font-family:var(--monospace-font-list); } -table -{ +table { border-collapse:collapse; border-spacing:0; margin-bottom:1.6rem; } -::-moz-selection -{ +::-moz-selection { background-color:#b3d4fc; text-shadow:none; } -::selection -{ +::selection { background-color:#b3d4fc; text-shadow:none; } -button::-moz-focus-inner -{ +button::-moz-focus-inner { border:0; } -body -{ +body { color:#444; font-family:var(--default-font-list); font-size:1.6rem; @@ -191,20 +166,17 @@ body padding:0; } -p -{ +p { margin:0 0 1.6rem; } -h1,h2,h3,h4,h5,h6 -{ - font-family:Lato, var(--default-font-list); +h1,h2,h3,h4,h5,h6 { + font-family:var(--default-font-list); margin:2em 0 1.6em; margin:2rem 0 1.6rem; } -h1 -{ +h1 { border-bottom:.1rem solid rgba(0,0,0,0.2); font-size:3.6em; font-size:3.6rem; @@ -212,16 +184,14 @@ h1 font-weight:500; } -h2 -{ +h2 { font-size:3em; font-size:3rem; font-style:normal; font-weight:500; } -h3 -{ +h3 { font-size:2.4em; font-size:2.4rem; font-style:normal; @@ -229,8 +199,7 @@ h3 margin:1.6rem 0 .4rem; } -h4 -{ +h4 { font-size:1.8em; font-size:1.8rem; font-style:normal; @@ -238,8 +207,7 @@ h4 margin:1.6rem 0 .4rem; } -h5 -{ +h5 { font-size:1.6em; font-size:1.6rem; font-style:normal; @@ -247,8 +215,7 @@ h5 margin:1.6rem 0 .4rem; } -h6 -{ +h6 { color:#777; font-size:1.4em; font-size:1.4rem; @@ -257,66 +224,56 @@ h6 margin:1.6rem 0 .4rem; } -code -{ +code { background:#efefef; color:#444; - font-family:Menlo, Monaco, Consolas, 'Courier New', monospace; + font-family:var(--monospace-font-list); font-size:1.4rem; word-break:break-all; word-wrap:break-word; } -a:hover,a:focus -{ +a:hover,a:focus { text-decoration:none; } -dl -{ +dl { margin-bottom:1.6rem; } -dd -{ +dd { margin-left:4rem; } -ul,ol -{ +ul,ol { margin-bottom:.8rem; padding-left:2rem; } -blockquote -{ +blockquote { border-left:.2rem solid #1271db; - font-family:Georgia, Times, 'Times New Roman', serif; + font-family:var(--serif-font-list); font-style:italic; margin:1.6rem 0; padding-left:1.6rem; } -figcaption -{ - font-family:Georgia, Times, 'Times New Roman', serif; +figcaption { + font-family:var(--serif-font-list); } -html -{ +html { font-size:62.5%; } -main,header,footer,article,section,aside,details,summary -{ +main,header,footer,article,section,aside,details,summary { display:block; height:auto; margin:0 auto; width:100%; } -footer -{ +footer { border-top:.1rem solid rgba(0,0,0,0.2); clear:both; display:inline-block; @@ -326,23 +283,20 @@ footer text-align:center; } -hr -{ +hr { border-top:.1rem solid rgba(0,0,0,0.2); display:block; margin-bottom:1.6rem; width:100%; } -img -{ +img { height:auto; - /* max-width:100%; */ +/* max-width:100%; */ vertical-align:baseline; } -input[type=text],input[type=password],input[type=email],input[type=url],input[type=date],input[type=month],input[type=time],input[type=datetime],input[type=datetime-local],input[type=week],input[type=number],input[type=search],input[type=tel],input[type=color],select -{ +input[type=text],input[type=password],input[type=email],input[type=url],input[type=date],input[type=month],input[type=time],input[type=datetime],input[type=datetime-local],input[type=week],input[type=number],input[type=search],input[type=tel],input[type=color],select { border:.1rem solid #ccc; border-radius:0; display:inline-block; @@ -350,8 +304,7 @@ input[type=text],input[type=password],input[type=email],input[type=url],input[ty vertical-align:middle; } -input:not([type]) -{ +input:not([type]) { -webkit-appearance:none; background-clip:padding-box; background-color:#fff; @@ -363,88 +316,73 @@ input:not([type]) text-align:left; } -input[type=color] -{ +input[type=color] { padding:.8rem 1.6rem; } -input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=url]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=week]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,select:focus,textarea:focus -{ +input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=url]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=week]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,select:focus,textarea:focus { border-color:#b3d4fc; } -input:not([type]):focus -{ +input:not([type]):focus { border-color:#b3d4fc; } -input[type=radio],input[type=checkbox] -{ +input[type=radio],input[type=checkbox] { vertical-align:middle; } -input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus -{ +input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus { outline:.1rem solid thin #444; } -input[type=text][disabled],input[type=password][disabled],input[type=email][disabled],input[type=url][disabled],input[type=date][disabled],input[type=month][disabled],input[type=time][disabled],input[type=datetime][disabled],input[type=datetime-local][disabled],input[type=week][disabled],input[type=number][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=color][disabled],select[disabled],textarea[disabled] -{ +input[type=text][disabled],input[type=password][disabled],input[type=email][disabled],input[type=url][disabled],input[type=date][disabled],input[type=month][disabled],input[type=time][disabled],input[type=datetime][disabled],input[type=datetime-local][disabled],input[type=week][disabled],input[type=number][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=color][disabled],select[disabled],textarea[disabled] { background-color:#efefef; color:#777; cursor:not-allowed; } -input:not([type])[disabled] -{ +input:not([type])[disabled] { background-color:#efefef; color:#777; cursor:not-allowed; } -input[readonly],select[readonly],textarea[readonly] -{ +input[readonly],select[readonly],textarea[readonly] { background-color:#efefef; border-color:#ccc; color:#777; } -input:focus:invalid,textarea:focus:invalid,select:focus:invalid -{ +input:focus:invalid,textarea:focus:invalid,select:focus:invalid { border-color:#e9322d; color:#b94a48; } -input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus,input[type=checkbox]:focus:invalid:focus -{ +input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus,input[type=checkbox]:focus:invalid:focus { outline-color:#ff4136; } -select -{ +select { background-color:#fff; border:.1rem solid #ccc; } -select[multiple] -{ +select[multiple] { height:auto; } -label -{ +label { line-height:2; } -fieldset -{ +fieldset { border:0; margin:0; padding:.8rem 0; } -legend -{ +legend { border-bottom:.1rem solid #ccc; color:#444; display:block; @@ -453,8 +391,7 @@ legend width:100%; } -input[type=submit],button -{ +input[type=submit],button { -moz-user-select:none; -ms-user-select:none; -webkit-transition:.25s ease; @@ -476,62 +413,52 @@ input[type=submit],button vertical-align:baseline; } -input[type=submit] a,button a -{ +input[type=submit] a,button a { color:#444; } -input[type=submit]::-moz-focus-inner,button::-moz-focus-inner -{ +input[type=submit]::-moz-focus-inner,button::-moz-focus-inner { padding:0; } -input[type=submit]:hover,button:hover -{ +input[type=submit]:hover,button:hover { background:#444; border-color:#444; color:#fff; } -input[type=submit]:hover a,button:hover a -{ +input[type=submit]:hover a,button:hover a { color:#fff; } -input[type=submit]:active,button:active -{ +input[type=submit]:active,button:active { background:#6a6a6a; border-color:#6a6a6a; color:#fff; } -input[type=submit]:active a,button:active a -{ +input[type=submit]:active a,button:active a { color:#fff; } -input[type=submit]:disabled,button:disabled -{ +input[type=submit]:disabled,button:disabled { box-shadow:none; cursor:not-allowed; - opacity:.40; + opacity:.4; } -nav ul -{ +nav ul { list-style:none; margin:0; padding:0; text-align:center; } -nav ul li -{ +nav ul li { display:inline; } -nav a -{ +nav a { -webkit-transition:.25s ease; border-bottom:.2rem solid transparent; color:#444; @@ -540,48 +467,40 @@ nav a transition:.25s ease; } -nav a:hover,nav li.selected a -{ +nav a:hover,nav li.selected a { border-color:rgba(0,0,0,0.2); } -nav a:active -{ +nav a:active { border-color:rgba(0,0,0,0.56); } -caption -{ +caption { padding:.8rem 0; } -thead th -{ +thead th { background:#efefef; color:#444; } -tr -{ +tr { background:#fff; margin-bottom:.8rem; } -th,td -{ +th,td { border:.1rem solid #ccc; padding:.8rem 1.6rem; text-align:center; vertical-align:inherit; } -tfoot tr -{ +tfoot tr { background:none; } -tfoot td -{ +tfoot td { color:#efefef; font-size:.8rem; font-style:italic; @@ -589,28 +508,24 @@ tfoot td } @media screen { - [hidden~=screen] - { + [hidden~=screen] { display:inherit; } - [hidden~=screen]:not(:active):not(:focus):not(:target) - { + [hidden~=screen]:not(:active):not(:focus):not(:target) { clip:rect(0000)!important; position:absolute!important; } } @media screen and max-width 40rem { - article,section,aside - { + article,section,aside { clear:both; display:block; max-width:100%; } - img - { + img { margin-right:1.6rem; } } \ No newline at end of file diff --git a/public/cssfilter.js b/public/cssfilter.js new file mode 100644 index 00000000..35d269d1 --- /dev/null +++ b/public/cssfilter.js @@ -0,0 +1,3 @@ +module.exports = function filter(filename) { + return ! String(filename).includes('min'); +} \ No newline at end of file diff --git a/public/js.php b/public/js.php index 36e0e206..8a9c2d22 100644 --- a/public/js.php +++ b/public/js.php @@ -22,29 +22,48 @@ use Aviat\Ion\Json; // Include guzzle require_once('../vendor/autoload.php'); -require_once('./min.php'); + +//Creative rewriting of /g/groupname to ?g=groupname +$pi = $_SERVER['PATH_INFO']; +$pia = explode('/', $pi); + +$piaLen = count($pia); +$i = 1; + +while($i < $piaLen) +{ + $j = $i+1; + $j = (isset($pia[$j])) ? $j : $i; + + $_GET[$pia[$i]] = $pia[$j]; + + $i = $j + 1; +}; + +class FileNotChangedException extends \Exception {} /** * Simple Javascript minfier, using google closure compiler */ -class JSMin extends BaseMin { +class JSMin { protected $jsRoot; protected $jsGroup; - protected $jsGroupsFile; + protected $configFile; protected $cacheFile; protected $lastModified; protected $requestedTime; protected $cacheModified; - public function __construct(array $config, array $groups) + public function __construct(array $config, string $configFile) { $group = $_GET['g']; + $groups = $config['groups']; $this->jsRoot = $config['js_root']; $this->jsGroup = $groups[$group]; - $this->jsGroupsFile = $config['js_groups_file']; + $this->configFile = $configFile; $this->cacheFile = "{$this->jsRoot}cache/{$group}"; $this->lastModified = $this->getLastModified(); @@ -99,7 +118,7 @@ class JSMin extends BaseMin { protected function closureCall(array $options) { $formFields = http_build_query($options); - + $request = (new Request) ->setMethod('POST') ->setUri('http://closure-compiler.appspot.com/compile') @@ -109,7 +128,7 @@ class JSMin extends BaseMin { 'Content-type' => 'application/x-www-form-urlencoded' ]) ->setBody($formFields); - + $response = wait((new Client)->request($request, [ Client::OP_AUTO_ENCODING => false ])); @@ -128,7 +147,7 @@ class JSMin extends BaseMin { $errorRes = $this->closureCall($options); $errorJson = $errorRes->getBody(); $errorObj = Json::decode($errorJson) ?: (object)[]; - + // Show error if exists if ( ! empty($errorObj->errors) || ! empty($errorObj->serverErrors)) @@ -178,7 +197,7 @@ class JSMin extends BaseMin { //Add this page too, as well as the groups file $modified[] = filemtime(__FILE__); - $modified[] = filemtime($this->jsGroupsFile); + $modified[] = filemtime($this->configFile); rsort($modified); $lastModified = $modified[0]; @@ -227,14 +246,97 @@ class JSMin extends BaseMin { { $this->sendFinalOutput($js, 'application/javascript', $this->lastModified); } + + /** + * Get value of the if-modified-since header + * + * @return int - timestamp to compare for cache control + */ + protected function getIfModified() + { + return (array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) + ? strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) + : time(); + } + + /** + * Get value of etag to compare to hash of output + * + * @return string - the etag to compare + */ + protected function getIfNoneMatch() + { + return (array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)) + ? $_SERVER['HTTP_IF_NONE_MATCH'] + : ''; + } + + /** + * Determine whether or not to send debug version + * + * @return boolean + */ + protected function isNotDebug() + { + return ! $this->isDebugCall(); + } + + /** + * Determine whether or not to send debug version + * + * @return boolean + */ + protected function isDebugCall() + { + return array_key_exists('debug', $_GET); + } + + /** + * Send actual output to browser + * + * @param string $content - the body of the response + * @param string $mimeType - the content type + * @param int $lastModified - the last modified date + * @return void + */ + protected function sendFinalOutput($content, $mimeType, $lastModified) + { + //This GZIPs the CSS for transmission to the user + //making file size smaller and transfer rate quicker + ob_start("ob_gzhandler"); + + $expires = $lastModified + 691200; + $lastModifiedDate = gmdate('D, d M Y H:i:s', $lastModified); + $expiresDate = gmdate('D, d M Y H:i:s', $expires); + + header("Content-Type: {$mimeType}; charset=utf8"); + header("Cache-control: public, max-age=691200, must-revalidate"); + header("Last-Modified: {$lastModifiedDate} GMT"); + header("Expires: {$expiresDate} GMT"); + + echo $content; + + ob_end_flush(); + } + + /** + * Send a 304 Not Modified header + * + * @return void + */ + public static function send304() + { + header("status: 304 Not Modified", true, 304); + } } // -------------------------------------------------------------------------- // ! Start Minifying // -------------------------------------------------------------------------- -$config = require_once('../app/appConf/minify_config.php'); -$groups = require_once($config['js_groups_file']); +$configFile = realpath(__DIR__ . '/../app/appConf/minify_config.php'); +$config = require_once($configFile); +$groups = $config['groups']; $cacheDir = "{$config['js_root']}cache"; if ( ! is_dir($cacheDir)) @@ -249,11 +351,11 @@ if ( ! array_key_exists($_GET['g'], $groups)) try { - new JSMin($config, $groups); + new JSMin($config, $configFile); } catch (FileNotChangedException $e) { - BaseMin::send304(); + JSMin::send304(); } //end of js.php \ No newline at end of file diff --git a/public/min.php b/public/min.php deleted file mode 100644 index 200443ff..00000000 --- a/public/min.php +++ /dev/null @@ -1,121 +0,0 @@ - - * @copyright 2015 - 2017 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.0 - * @link https://github.com/timw4mail/HummingBirdAnimeClient - */ - - -namespace Aviat\EasyMin; - -//Creative rewriting of /g/groupname to ?g=groupname -$pi = $_SERVER['PATH_INFO']; -$pia = explode('/', $pi); - -$piaLen = count($pia); -$i = 1; - -while($i < $piaLen) -{ - $j = $i+1; - $j = (isset($pia[$j])) ? $j : $i; - - $_GET[$pia[$i]] = $pia[$j]; - - $i = $j + 1; -}; - -class FileNotChangedException extends \Exception {} -class BaseMin { - - /** - * Get value of the if-modified-since header - * - * @return int - timestamp to compare for cache control - */ - protected function getIfModified() - { - return (array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER)) - ? strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) - : time(); - } - - /** - * Get value of etag to compare to hash of output - * - * @return string - the etag to compare - */ - protected function getIfNoneMatch() - { - return (array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER)) - ? $_SERVER['HTTP_IF_NONE_MATCH'] - : ''; - } - - /** - * Determine whether or not to send debug version - * - * @return boolean - */ - protected function isNotDebug() - { - return ! $this->isDebugCall(); - } - - /** - * Determine whether or not to send debug version - * - * @return boolean - */ - protected function isDebugCall() - { - return array_key_exists('debug', $_GET); - } - - /** - * Send actual output to browser - * - * @param string $content - the body of the response - * @param string $mimeType - the content type - * @param int $lastModified - the last modified date - * @return void - */ - protected function sendFinalOutput($content, $mimeType, $lastModified) - { - //This GZIPs the CSS for transmission to the user - //making file size smaller and transfer rate quicker - ob_start("ob_gzhandler"); - - $expires = $lastModified + 691200; - $lastModifiedDate = gmdate('D, d M Y H:i:s', $lastModified); - $expiresDate = gmdate('D, d M Y H:i:s', $expires); - - header("Content-Type: {$mimeType}; charset=utf8"); - header("Cache-control: public, max-age=691200, must-revalidate"); - header("Last-Modified: {$lastModifiedDate} GMT"); - header("Expires: {$expiresDate} GMT"); - - echo $content; - - ob_end_flush(); - } - - /** - * Send a 304 Not Modified header - * - * @return void - */ - public static function send304() - { - header("status: 304 Not Modified", true, 304); - } -} \ No newline at end of file diff --git a/public/package.json b/public/package.json index ed97ee5c..f642310a 100644 --- a/public/package.json +++ b/public/package.json @@ -1,14 +1,13 @@ { "scripts": { - "build": "postcss -u postcss-import --autoprefixer.browsers \"> 5%\" -u postcss-cssnext -o css/base.css css/base.myth.css", - "watch": "postcss -u postcss-import --autoprefixer.browsers \"> 5%\" -u postcss-cssnext -w -o css/base.css css/base.myth.css" + "build": "node ./css.js", + "watch": "watch 'npm run build' --filter=./cssfilter.js" }, "devDependencies": { - "autoprefixer": "^6.6.1", - "npm-run-all": "^4.0.0", + "cssnano": "^3.10.0", "postcss-cachify": "^1.3.1", - "postcss-cli": "^3.1", "postcss-cssnext": "^2.9.0", - "postcss-import": "^9.0.0" + "postcss-import": "^9.0.0", + "watch": "^1.0.2" } } diff --git a/public/yarn.lock b/public/yarn.lock index e417fcb3..73d9e289 100644 --- a/public/yarn.lock +++ b/public/yarn.lock @@ -2,16 +2,9 @@ # yarn lockfile v1 -abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" - -ajv@^4.9.1: - version "4.11.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" ansi-regex@^2.0.0: version "2.1.1" @@ -25,95 +18,13 @@ any-promise@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" -any-promise@^1.0.0, any-promise@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" - dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" - -aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" - -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" - argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: sprintf-js "~1.0.2" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -autoprefixer@^6.0.2, autoprefixer@^6.6.1: +autoprefixer@^6.0.2, autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" dependencies: @@ -124,14 +35,6 @@ autoprefixer@^6.0.2, autoprefixer@^6.6.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - balanced-match@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" @@ -144,28 +47,6 @@ balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - brace-expansion@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" @@ -173,34 +54,14 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -browserslist@^1.0.0, browserslist@^1.0.1, browserslist@^1.7.6: +browserslist@^1.0.0, browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" dependencies: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -caniuse-api@^1.5.3: +caniuse-api@^1.5.2, caniuse-api@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" dependencies: @@ -213,11 +74,7 @@ caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000649" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000649.tgz#1ee1754a6df235450c8b7cd15e0ebf507221a86a" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -227,50 +84,21 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chokidar@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" +clap@^1.0.9: + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-spinners@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + chalk "^1.1.3" clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" color-convert@^0.5.3: version "0.5.3" @@ -307,11 +135,17 @@ color@^0.11.0, color@^0.11.3, color@^0.11.4: color-convert "^1.3.0" color-string "^0.3.0" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" dependencies: - delayed-stream "~1.0.0" + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" concat-map@0.0.1: version "0.0.1" @@ -327,39 +161,6 @@ connect-cachify-static@^1.3.0: on-headers "^1.0.0" parseurl "~1" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" - dependencies: - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.1.0" - os-homedir "^1.0.1" - parse-json "^2.2.0" - require-from-string "^1.1.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - css-color-function@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.0.tgz#72c767baf978f01b8a8a94f42f17ba5d22a776fc" @@ -369,13 +170,55 @@ css-color-function@^1.2.0: debug "~0.7.4" rgb "~0.1.0" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -debug@^2.1.2, debug@^2.2.0, debug@~2: +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +debug@^2.1.2, debug@~2: version "2.6.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: @@ -385,136 +228,31 @@ debug@~0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -decamelize@^1.1.1: +decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -delayed-stream@~1.0.0: +defined@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -dependency-graph@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.5.0.tgz#71edf7945dbba86c1b19ac982b6afb6476b56dd5" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" electron-to-chromium@^1.2.7: version "1.3.2" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.4.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -event-stream@~3.3.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + merge "^1.1.3" find@~0: version "0.2.7" @@ -526,160 +264,10 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - -fs-extra@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - -fs-promise@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.2.tgz#cfea45c80f46480a3fd176213fa22abc8c159521" - dependencies: - any-promise "^1.3.0" - fs-extra "^2.0.0" - mz "^2.6.0" - thenify-all "^1.6.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.0: +function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -gauge@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -690,260 +278,48 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hosted-git-info@^2.1.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" - -http-signature@~1.1.0: +html-comment-regex@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.0.2, is-number@^2.1.0: +is-absolute-url@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-regex@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + html-comment-regex "^1.1.0" isnumeric@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/isnumeric/-/isnumeric-0.2.0.tgz#a2347ba360de19e33d0ffd590fddf7755cbf2e64" -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-yaml@^3.4.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: argparse "^1.0.7" - esprima "^3.1.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" - dependencies: - assert-plus "1.0.0" - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" + esprima "^2.6.0" lodash._reinterpolate@~3.0.0: version "3.0.0" @@ -970,64 +346,23 @@ lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.1.0, lodash@^4.17.4: +lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" math-expression-evaluator@^1.2.14: version "1.2.16" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" - dependencies: - mime-db "~1.27.0" - -mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - -minimatch@^3.0.0, minimatch@^3.0.2: +minimatch@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -1041,7 +376,7 @@ minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -"mkdirp@>=0.5 0", mkdirp@^0.5.1: +mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -1051,227 +386,47 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -mz@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.3.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.1.tgz#8c84f7b14c96b89f57fbc838012180ec8ca39a01" - -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" - dependencies: - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "^2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -npm-run-all@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.0.2.tgz#a84669348e6db6ccbe052200b4cdb6bfe034a4fe" +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" dependencies: - chalk "^1.1.3" - cross-spawn "^5.0.1" - minimatch "^3.0.2" - ps-tree "^1.0.1" - read-pkg "^2.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - on-headers@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - onecolor@~2.4.0: version "2.4.2" resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-2.4.2.tgz#a53ec3ff171c3446016dd5210d1a1b544bf7d874" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -ora@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-1.2.0.tgz#32fb3183500efe83f5ea89101785f0ee6060fec9" - dependencies: - chalk "^1.1.1" - cli-cursor "^2.1.0" - cli-spinners "^1.0.0" - log-symbols "^1.0.2" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - parseurl@~1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - pixrem@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/pixrem/-/pixrem-3.0.2.tgz#30d1bafb4c3bdce8e9bb4bd56a13985619320c34" @@ -1309,7 +464,7 @@ postcss-cachify@^1.3.1: debug "^2.1.2" postcss "^5.0.0" -postcss-calc@^5.0.0: +postcss-calc@^5.0.0, postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" dependencies: @@ -1317,23 +472,6 @@ postcss-calc@^5.0.0: postcss-message-helpers "^2.0.0" reduce-css-calc "^1.2.6" -postcss-cli@^3.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-3.1.1.tgz#cccc4f8db12ad7e3058bf87aade68eaef2b4b7f1" - dependencies: - chalk "^1.1.3" - chokidar "^1.6.1" - dependency-graph "^0.5.0" - fs-promise "^2.0.2" - get-stdin "^5.0.1" - globby "^6.1.0" - ora "^1.1.0" - postcss "^5.2.16" - postcss-load-config "^1.1.0" - postcss-reporter "^3.0.0" - read-cache "^1.0.0" - yargs "^7.0.2" - postcss-color-function@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/postcss-color-function/-/postcss-color-function-2.0.1.tgz#9ad226f550e8a7c7f8b8a77860545b6dd7f55241" @@ -1399,6 +537,21 @@ postcss-color-rgba-fallback@^2.0.0: postcss-value-parser "^3.0.2" rgb-hex "^1.0.0" +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + postcss-cssnext@^2.9.0: version "2.10.0" resolved "https://registry.yarnpkg.com/postcss-cssnext/-/postcss-cssnext-2.10.0.tgz#30e0dddcfb978eae2523a340aa2c8ba49c5d7103" @@ -1455,6 +608,44 @@ postcss-custom-selectors@^3.0.0: postcss "^5.0.0" postcss-selector-matches "^2.0.0" +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + postcss-font-family-system-ui@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/postcss-font-family-system-ui/-/postcss-font-family-system-ui-1.0.2.tgz#3e1a5e3fb7e31e5e9e71439ccb0e8014556927c7" @@ -1487,45 +678,101 @@ postcss-initial@^1.3.1: lodash.template "^4.2.4" postcss "^5.0.19" -postcss-load-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - postcss-load-options "^1.2.0" - postcss-load-plugins "^2.3.0" - -postcss-load-options@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" - dependencies: - cosmiconfig "^2.1.0" - object-assign "^4.1.0" - -postcss-load-plugins@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" - dependencies: - cosmiconfig "^2.1.1" - object-assign "^4.1.0" - postcss-media-minmax@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-2.1.2.tgz#444c5cf8926ab5e4fd8a2509e9297e751649cdf8" dependencies: postcss "^5.0.4" +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + postcss-message-helpers@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + postcss-nesting@^2.0.5: version "2.3.1" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-2.3.1.tgz#94a6b6a4ef707fbec20a87fee5c957759b4e01cf" dependencies: postcss "^5.0.19" +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + postcss-pseudo-class-any-link@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-1.0.0.tgz#903239196401d335fe73ac756186fa62e693af26" @@ -1539,21 +786,33 @@ postcss-pseudoelements@^3.0.0: dependencies: postcss "^5.0.4" +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + postcss-replace-overflow-wrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-1.0.0.tgz#f0a03b31eab9636a6936bfd210e2aef1b434a643" dependencies: postcss "^5.0.16" -postcss-reporter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-3.0.0.tgz#09ea0f37a444c5693878606e09b018ebeff7cf8f" - dependencies: - chalk "^1.0.0" - lodash "^4.1.0" - log-symbols "^1.0.2" - postcss "^5.0.0" - postcss-selector-matches@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-2.0.5.tgz#fa0f43be57b68e77aa4cd11807023492a131027f" @@ -1576,7 +835,7 @@ postcss-selector-parser@^1.1.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^2.2.0: +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: @@ -1584,11 +843,36 @@ postcss-selector-parser@^2.2.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-value-parser@^3.0.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^5.0.0, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.1.1, postcss@^5.2.0, postcss@^5.2.12, postcss@^5.2.16: +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.3, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.1.1, postcss@^5.2.0, postcss@^5.2.12, postcss@^5.2.16: version "5.2.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: @@ -1597,13 +881,9 @@ postcss@^5.0.0, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0. source-map "^0.5.6" supports-color "^3.2.3" -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" promise-each@^2.2.0: version "2.2.0" @@ -1611,39 +891,16 @@ promise-each@^2.2.0: dependencies: any-promise "^0.1.0" -ps-tree@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + +query-string@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" dependencies: - event-stream "~3.3.0" - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" - -rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" read-cache@^1.0.0: version "1.0.0" @@ -1651,50 +908,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - reduce-css-calc@^1.2.6, reduce-css-calc@^1.2.7: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -1709,77 +922,12 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" - dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - resolve@^1.1.7: version "1.3.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" dependencies: path-parse "^1.0.5" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - rgb-hex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-1.0.0.tgz#bfaf8cd9cd9164b5a26d71eb4f15a0965324b3c1" @@ -1788,150 +936,34 @@ rgb@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +sax@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" dependencies: - glob "^7.0.5" + is-plain-obj "^1.0.0" -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -source-map@^0.5.6: +source-map@^0.5.3, source-map@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" -sshpk@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -1942,71 +974,36 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -thenify-all@^1.0.0, thenify-all@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.2.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" - dependencies: - any-promise "^1.0.0" - -through@2, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" traverse-chain@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + units-css@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/units-css/-/units-css-0.4.0.tgz#d6228653a51983d7c16ff28f8b9dc3b1ffed3a07" @@ -2014,86 +1011,21 @@ units-css@^0.4.0: isnumeric "^0.2.0" viewport-dimensions "^0.2.0" -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" viewport-dimensions@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" - dependencies: - string-width "^1.0.1" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: +watch@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + resolved "https://registry.yarnpkg.com/watch/-/watch-1.0.2.tgz#340a717bde765726fa0aa07d721e0147a551df0c" dependencies: - camelcase "^3.0.0" + exec-sh "^0.2.0" + minimist "^1.2.0" -yargs@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.0.2.tgz#115b97df1321823e8b8648e8968c782521221f67" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" From 472be3c4ed0e5a2541a81897d9248c9edba0fcb1 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 11:59:53 -0400 Subject: [PATCH 06/26] Use snapshots library with tests to simplify testcases --- composer.json | 3 +- .../Transformer/AnimeListTransformerTest.php | 50 ++++--------------- ...eListTransformerTest__testTransform__1.php | 45 +++++++++++++++++ ...t__testUntransform with data set #0__1.php | 14 ++++++ ...t__testUntransform with data set #1__1.php | 14 ++++++ tests/AnimeClientTestCase.php | 4 ++ 6 files changed, 88 insertions(+), 42 deletions(-) create mode 100644 tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php create mode 100644 tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #0__1.php create mode 100644 tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #1__1.php diff --git a/composer.json b/composer.json index 26e7ae82..57ad8fa1 100644 --- a/composer.json +++ b/composer.json @@ -42,7 +42,8 @@ "henrikbjorn/lurker": "^1.1.0", "symfony/var-dumper": "^3.2", "squizlabs/php_codesniffer": "^3.0.0@beta", - "phpstan/phpstan": "^0.6.4" + "phpstan/phpstan": "^0.6.4", + "spatie/phpunit-snapshot-assertions": "^0.4.1" }, "scripts": { "build": "vendor/bin/robo build", diff --git a/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php b/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php index aca91cb3..39c07430 100644 --- a/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php +++ b/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php @@ -22,33 +22,27 @@ use Aviat\Ion\Friend; use Aviat\Ion\Json; class AnimeListTransformerTest extends AnimeClientTestCase { - protected $dir; protected $beforeTransform; protected $afterTransform; protected $transformer; - + public function setUp() { parent::setUp(); $this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu'; - + $this->beforeTransform = Json::decodeFile("{$this->dir}/animeListItemBeforeTransform.json"); - $this->afterTransform = Json::decodeFile("{$this->dir}/animeListItemAfterTransform.json"); - + $this->transformer = new AnimeListTransformer(); } - + public function testTransform() { - $expected = $this->afterTransform; $actual = $this->transformer->transform($this->beforeTransform); - - // Json::encodeFile("{$this->dir}/animeListItemAfterTransform.json", $actual); - - $this->assertEquals($expected, $actual); + $this->assertMatchesSnapshot($actual); } - + public function dataUntransform() { return [[ @@ -60,19 +54,6 @@ class AnimeListTransformerTest extends AnimeClientTestCase { 'rewatched' => 0, 'notes' => 'Very formulaic.', 'edit' => true - ], - 'expected' => [ - 'id' => 14047981, - 'mal_id' => null, - 'data' => [ - 'status' => 'current', - 'rating' => 4, - 'reconsuming' => false, - 'reconsumeCount' => 0, - 'notes' => 'Very formulaic.', - 'progress' => 38, - 'private' => false - ] ] ], [ 'input' => [ @@ -86,29 +67,16 @@ class AnimeListTransformerTest extends AnimeClientTestCase { 'edit' => 'true', 'private' => 'On', 'rewatching' => 'On' - ], - 'expected' => [ - 'id' => 14047981, - 'mal_id' => '12345', - 'data' => [ - 'status' => 'current', - 'rating' => 4, - 'reconsuming' => true, - 'reconsumeCount' => 0, - 'notes' => 'Very formulaic.', - 'progress' => 38, - 'private' => true, - ] ] ]]; } - + /** * @dataProvider dataUntransform */ - public function testUntransform($input, $expected) + public function testUntransform($input) { $actual = $this->transformer->untransform($input); - $this->assertEquals($expected, $actual); + $this->assertMatchesSnapshot($actual); } } \ No newline at end of file diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php new file mode 100644 index 00000000..6796b0a5 --- /dev/null +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php @@ -0,0 +1,45 @@ + '15839442', + 'mal_id' => '33206', + 'episodes' => + array ( + 'watched' => 0, + 'total' => '-', + 'length' => NULL, + ), + 'airing' => + array ( + 'status' => 'Currently Airing', + 'started' => '2017-01-12', + 'ended' => NULL, + ), + 'anime' => + array ( + 'age_rating' => NULL, + 'title' => 'Kobayashi-san Chi no Maid Dragon', + 'titles' => + array ( + 0 => 'Kobayashi-san Chi no Maid Dragon', + 1 => 'Miss Kobayashi\'s Dragon Maid', + 2 => '小林さんちのメイドラゴン', + ), + 'slug' => 'kobayashi-san-chi-no-maid-dragon', + 'type' => 'TV', + 'image' => 'https://media.kitsu.io/anime/poster_images/12243/small.jpg?1481144116', + 'genres' => + array ( + 0 => 'Comedy', + 1 => 'Fantasy', + 2 => 'Slice of Life', + ), + 'streaming_links' => + array ( + ), + ), + 'watching_status' => 'current', + 'notes' => NULL, + 'rewatching' => false, + 'rewatched' => 0, + 'user_rating' => '-', + 'private' => false, +); diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #0__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #0__1.php new file mode 100644 index 00000000..2db06bc8 --- /dev/null +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #0__1.php @@ -0,0 +1,14 @@ + 14047981, + 'mal_id' => NULL, + 'data' => + array ( + 'status' => 'current', + 'reconsuming' => false, + 'reconsumeCount' => 0, + 'notes' => 'Very formulaic.', + 'progress' => 38, + 'private' => false, + 'rating' => 4, + ), +); diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #1__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #1__1.php new file mode 100644 index 00000000..de278585 --- /dev/null +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #1__1.php @@ -0,0 +1,14 @@ + 14047981, + 'mal_id' => '12345', + 'data' => + array ( + 'status' => 'current', + 'reconsuming' => true, + 'reconsumeCount' => 0, + 'notes' => 'Very formulaic.', + 'progress' => 38, + 'private' => true, + 'rating' => 4, + ), +); diff --git a/tests/AnimeClientTestCase.php b/tests/AnimeClientTestCase.php index f531273f..7c4e0804 100644 --- a/tests/AnimeClientTestCase.php +++ b/tests/AnimeClientTestCase.php @@ -23,6 +23,7 @@ use function Aviat\Ion\_dir; use Aura\Web\WebFactory; use Aviat\Ion\Json; use PHPUnit\Framework\TestCase; +use Spatie\Snapshots\MatchesSnapshots; use Zend\Diactoros\{ Response as HttpResponse, ServerRequestFactory @@ -36,6 +37,9 @@ define('TEST_VIEW_DIR', __DIR__ . '/test_views'); * Base class for TestCases */ class AnimeClientTestCase extends TestCase { + use MatchesSnapshots; + + // Test directory constants const ROOT_DIR = ROOT_DIR; const SRC_DIR = SRC_DIR; From b2109548749f7d6933f36e2e3692fa9c89d9c47a Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 14:53:38 -0400 Subject: [PATCH 07/26] Make sure rating parameter sent to Kitsu is greater than 0 --- src/API/Kitsu/Transformer/AnimeListTransformer.php | 2 +- .../Kitsu/Transformer/AnimeListTransformerTest.php | 13 +++++++++++++ ...merTest__testUntransform with data set #2__1.php | 13 +++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #2__1.php diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index 9578a0c2..c6fee55d 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -123,7 +123,7 @@ class AnimeListTransformer extends AbstractTransformer { ] ]; - if (is_numeric($item['user_rating'])) + if (is_numeric($item['user_rating']) && $item['user_rating'] > 0) { $untransformed['data']['rating'] = $item['user_rating'] / 2; } diff --git a/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php b/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php index 39c07430..e8a20e63 100644 --- a/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php +++ b/tests/API/Kitsu/Transformer/AnimeListTransformerTest.php @@ -68,6 +68,19 @@ class AnimeListTransformerTest extends AnimeClientTestCase { 'private' => 'On', 'rewatching' => 'On' ] + ], [ + 'input' => [ + 'id' => 14047983, + 'mal_id' => '12347', + 'watching_status' => 'current', + 'user_rating' => 0, + 'episodes_watched' => 12, + 'rewatched' => 0, + 'notes' => '', + 'edit' => 'true', + 'private' => 'On', + 'rewatching' => 'On' + ] ]]; } diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #2__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #2__1.php new file mode 100644 index 00000000..79fc5db2 --- /dev/null +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set #2__1.php @@ -0,0 +1,13 @@ + 14047983, + 'mal_id' => '12347', + 'data' => + array ( + 'status' => 'current', + 'reconsuming' => true, + 'reconsumeCount' => 0, + 'notes' => '', + 'progress' => 12, + 'private' => true, + ), +); From 81a1a927b14f919af04cba685f486e8c757f7eb6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 21:27:03 -0400 Subject: [PATCH 08/26] Make sure Cast heading only shows up if there are actual cast entries --- app/views/character.php | 2 +- src/Controller/Character.php | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/views/character.php b/app/views/character.php index a938a50c..d499f213 100644 --- a/app/views/character.php +++ b/app/views/character.php @@ -72,7 +72,7 @@
- + 0): ?>

Castings

$entries): ?>

diff --git a/src/Controller/Character.php b/src/Controller/Character.php index 8f05563f..25977ade 100644 --- a/src/Controller/Character.php +++ b/src/Controller/Character.php @@ -52,17 +52,25 @@ class Character extends BaseController { $data[0]['attributes']['name'] ), 'data' => $data, + 'castCount' => 0, 'castings' => [] ]; if (array_key_exists('included', $data) && array_key_exists('castings', $data['included'])) { $viewData['castings'] = $this->organizeCast($data['included']['castings']); + $viewData['castCount'] = $this->getCastCount($viewData['castings']); } $this->outputHTML('character', $viewData); } + /** + * Organize VA => anime relationships + * + * @param array $cast + * @return array + */ private function dedupeCast(array $cast): array { $output = []; @@ -102,6 +110,24 @@ class Character extends BaseController { return $output; } + + private function getCastCount(array $cast): int + { + $count = 0; + + foreach($cast as $role) + { + if ( + array_key_exists('attributes', $role) && + array_key_exists('role', $role['attributes']) && + ( ! is_null($role['attributes']['role'])) + ) { + $count++; + } + } + + return $count; + } private function organizeCast(array $cast): array { From 6436ca2e9c90503d1965ecaa4272d5fceb071780 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 6 Apr 2017 21:27:47 -0400 Subject: [PATCH 09/26] Update doc generation --- phpdox.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phpdox.xml b/phpdox.xml index 7c27270a..9b64cbd1 100644 --- a/phpdox.xml +++ b/phpdox.xml @@ -56,7 +56,7 @@ - + @@ -117,10 +117,10 @@ - - - --> + From 7825e46321363499eb402e4dd794f9915f2da262 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 7 Apr 2017 13:57:14 -0400 Subject: [PATCH 10/26] Replace 0 with - --- src/API/Kitsu/Transformer/AnimeListTransformer.php | 8 +++++--- src/API/Kitsu/Transformer/MangaListTransformer.php | 14 +++++++++----- .../AnimeListTransformerTest__testTransform__1.php | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index c6fee55d..45af8f55 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -40,7 +40,9 @@ class AnimeListTransformer extends AbstractTransformer { $genres = array_column($anime['relationships']['genres'], 'name') ?? []; sort($genres); - $rating = (int) 2 * $item['attributes']['rating']; + $rating = (int) $item['attributes']['rating'] !== 0 + ? (int) 2 * $item['attributes']['rating'] + : '-'; $total_episodes = array_key_exists('episodeCount', $anime) && (int) $anime['episodeCount'] !== 0 ? (int) $anime['episodeCount'] @@ -68,7 +70,7 @@ class AnimeListTransformer extends AbstractTransformer { 'id' => $item['id'], 'mal_id' => $MALid, 'episodes' => [ - 'watched' => (int) $item['attributes']['progress'] !== '0' + 'watched' => (int) $item['attributes']['progress'] !== 0 ? (int) $item['attributes']['progress'] : '-', 'total' => $total_episodes, @@ -93,7 +95,7 @@ class AnimeListTransformer extends AbstractTransformer { 'notes' => $item['attributes']['notes'], 'rewatching' => (bool) $item['attributes']['reconsuming'], 'rewatched' => (int) $item['attributes']['reconsumeCount'], - 'user_rating' => ($rating === 0) ? '-' : (int) $rating, + 'user_rating' => $rating, 'private' => (bool) $item['attributes']['private'] ?? FALSE, ]; } diff --git a/src/API/Kitsu/Transformer/MangaListTransformer.php b/src/API/Kitsu/Transformer/MangaListTransformer.php index 209bb1c6..7d2152ce 100644 --- a/src/API/Kitsu/Transformer/MangaListTransformer.php +++ b/src/API/Kitsu/Transformer/MangaListTransformer.php @@ -42,18 +42,22 @@ class MangaListTransformer extends AbstractTransformer { $genres = array_column($manga['relationships']['genres'], 'name') ?? []; sort($genres); - $rating = (is_numeric($item['attributes']['rating'])) - ? intval(2 * $item['attributes']['rating']) + $rating = (int) $item['attributes']['rating'] !== 0 + ? (int) 2 * $item['attributes']['rating'] : '-'; - $totalChapters = ($manga['chapterCount'] > 0) + $totalChapters = ((int) $manga['chapterCount'] !== 0) ? $manga['chapterCount'] : '-'; - $totalVolumes = ($manga['volumeCount'] > 0) + $totalVolumes = ((int) $manga['volumeCount'] !== 0) ? $manga['volumeCount'] : '-'; + $readChapters = ((int) $item['attributes']['progress'] !== 0) + ? $item['attributes']['progress'] + : '-'; + $MALid = NULL; if (array_key_exists('mappings', $manga['relationships'])) @@ -72,7 +76,7 @@ class MangaListTransformer extends AbstractTransformer { 'id' => $item['id'], 'mal_id' => $MALid, 'chapters' => [ - 'read' => $item['attributes']['progress'], + 'read' => $readChapters, 'total' => $totalChapters ], 'volumes' => [ diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php index 6796b0a5..e1add9b6 100644 --- a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php @@ -3,7 +3,7 @@ 'mal_id' => '33206', 'episodes' => array ( - 'watched' => 0, + 'watched' => '-', 'total' => '-', 'length' => NULL, ), From ec6f9b1189ad4c1c6a2b56909bdf390d3361910b Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 7 Apr 2017 16:44:27 -0400 Subject: [PATCH 11/26] Tweak handling of alternate titles, to ensure the +1 button is always usable --- src/API/Kitsu.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/API/Kitsu.php b/src/API/Kitsu.php index 6716339b..207135ea 100644 --- a/src/API/Kitsu.php +++ b/src/API/Kitsu.php @@ -219,11 +219,11 @@ class Kitsu { foreach($existingTitles as $existing) { - $isSubset = stripos($existing, $title) !== FALSE; + $isSubset = mb_stripos($existing, $title) !== FALSE; $diff = levenshtein($existing, $title); $onlydifferentCase = (mb_strtolower($existing) === mb_strtolower($title)); - if ($diff < 3 OR $isSubset OR $onlydifferentCase) + if ($diff <= 3 OR $isSubset OR $onlydifferentCase OR mb_strlen($title) > 55) { return FALSE; } From d157f097d144292e0150cba9cbf49ebd4c1d4f1f Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 7 Apr 2017 16:58:08 -0400 Subject: [PATCH 12/26] Use a more appropriate function for substring filtering --- src/API/Kitsu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/API/Kitsu.php b/src/API/Kitsu.php index 207135ea..a2cb9d87 100644 --- a/src/API/Kitsu.php +++ b/src/API/Kitsu.php @@ -219,7 +219,7 @@ class Kitsu { foreach($existingTitles as $existing) { - $isSubset = mb_stripos($existing, $title) !== FALSE; + $isSubset = mb_substr_count($existing, $title) > 0; $diff = levenshtein($existing, $title); $onlydifferentCase = (mb_strtolower($existing) === mb_strtolower($title)); From 679560e185b63621d669581ae490d237f08676bd Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 10 Apr 2017 15:31:35 -0400 Subject: [PATCH 13/26] Fix various edge cases --- public/js/anime_edit.js | 2 +- public/js/manga_edit.js | 2 +- src/API/Kitsu/Model.php | 9 +++++++-- src/API/Kitsu/Transformer/AnimeListTransformer.php | 6 +++++- src/API/Kitsu/Transformer/MangaListTransformer.php | 8 ++++++-- src/Controller/Index.php | 4 ++++ 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/public/js/anime_edit.js b/public/js/anime_edit.js index 911cd4d3..d09c028b 100644 --- a/public/js/anime_edit.js +++ b/public/js/anime_edit.js @@ -8,7 +8,7 @@ // Action to increment episode count _.on('body.anime.list', 'click', '.plus_one', (e) => { let parentSel = _.closestParent(e.target, 'article'); - let watchedCount = parseInt(_.$('.completed_number', parentSel)[0].textContent, 10); + let watchedCount = parseInt(_.$('.completed_number', parentSel)[0].textContent, 10) || 0; let totalCount = parseInt(_.$('.total_number', parentSel)[0].textContent, 10); let title = _.$('.name a', parentSel)[0].textContent; diff --git a/public/js/manga_edit.js b/public/js/manga_edit.js index e010d681..85a488ab 100644 --- a/public/js/manga_edit.js +++ b/public/js/manga_edit.js @@ -9,7 +9,7 @@ let thisSel = e.target; let parentSel = _.closestParent(e.target, 'article'); let type = thisSel.classList.contains('plus_one_chapter') ? 'chapter' : 'volume'; - let completed = parseInt(_.$(`.${type}s_read`, parentSel)[0].textContent, 10); + let completed = parseInt(_.$(`.${type}s_read`, parentSel)[0].textContent, 10) || 0; let total = parseInt(_.$(`.${type}_count`, parentSel)[0].textContent, 10); let mangaName = _.$('.name', parentSel)[0].textContent; diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index 634a4ea8..fbb07305 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -238,9 +238,9 @@ class Model { * * @param string $malId * @param string $type "anime" or "manga" - * @return string + * @return string|NULL */ - public function getKitsuIdFromMALId(string $malId, string $type="anime"): string + public function getKitsuIdFromMALId(string $malId, string $type="anime") { $options = [ 'query' => [ @@ -257,6 +257,11 @@ class Model { $raw = $this->getRequest('mappings', $options); + if ( ! array_key_exists('included', $raw)) + { + return NULL; + } + return $raw['included'][0]['id']; } diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index 45af8f55..a628b510 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -120,11 +120,15 @@ class AnimeListTransformer extends AbstractTransformer { 'reconsuming' => $rewatching, 'reconsumeCount' => $item['rewatched'], 'notes' => $item['notes'], - 'progress' => $item['episodes_watched'], 'private' => $privacy ] ]; + if (is_numeric($item['episodes_watched']) && $item['episodes_watched'] > 0) + { + $untransformed['data']['progress'] = (int) $item['episodes_watched']; + } + if (is_numeric($item['user_rating']) && $item['user_rating'] > 0) { $untransformed['data']['rating'] = $item['user_rating'] / 2; diff --git a/src/API/Kitsu/Transformer/MangaListTransformer.php b/src/API/Kitsu/Transformer/MangaListTransformer.php index 7d2152ce..d241c4a4 100644 --- a/src/API/Kitsu/Transformer/MangaListTransformer.php +++ b/src/API/Kitsu/Transformer/MangaListTransformer.php @@ -117,14 +117,18 @@ class MangaListTransformer extends AbstractTransformer { 'mal_id' => $item['mal_id'], 'data' => [ 'status' => $item['status'], - 'progress' => (int)$item['chapters_read'], 'reconsuming' => $rereading, 'reconsumeCount' => (int)$item['reread_count'], 'notes' => $item['notes'], ], ]; - if (is_numeric($item['new_rating'])) + if (is_numeric($item['chapters_read']) && $item['chapters_read'] > 0) + { + $map['data']['progress'] = (int)$item['chapters_read']; + } + + if (is_numeric($item['new_rating']) && $item['new_rating'] > 0) { $map['data']['rating'] = $item['new_rating'] / 2; } diff --git a/src/Controller/Index.php b/src/Controller/Index.php index b9a9f08f..411aac26 100644 --- a/src/Controller/Index.php +++ b/src/Controller/Index.php @@ -118,6 +118,10 @@ class Index extends BaseController { // return $rawfavorites; $output = []; + unset($rawfavorites['data']); + + // dump($rawfavorites); + foreach($rawfavorites as $item) { $rank = $item['attributes']['favRank']; From 5cca3cf33548e232f27c8fbc4d336a486c83ed8d Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 11 Apr 2017 09:28:07 -0400 Subject: [PATCH 14/26] Fix changing a list item's status with no score or progress on MAL --- humbug.json.dist | 12 ------------ src/API/Kitsu/Model.php | 2 +- src/API/MAL/Transformer/AnimeListTransformer.php | 8 +++++--- src/Controller/Anime.php | 6 +++--- 4 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 humbug.json.dist diff --git a/humbug.json.dist b/humbug.json.dist deleted file mode 100644 index d1e38834..00000000 --- a/humbug.json.dist +++ /dev/null @@ -1,12 +0,0 @@ -{ - "source": { - "directories": [ - "src" - ] - }, - "timeout": 10, - "logs": { - "text": "build\/humbuglog.txt", - "json": "build\/humbug.json" - } -} \ No newline at end of file diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index fbb07305..e5924714 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -285,7 +285,7 @@ class Model { } $transformed = $this->animeTransformer->transform($baseData); - $transformed['included'] = $baseData['included']; + $transformed['included'] = JsonAPI::organizeIncluded($baseData['included']); return $transformed; } diff --git a/src/API/MAL/Transformer/AnimeListTransformer.php b/src/API/MAL/Transformer/AnimeListTransformer.php index 222a3600..2e74dceb 100644 --- a/src/API/MAL/Transformer/AnimeListTransformer.php +++ b/src/API/MAL/Transformer/AnimeListTransformer.php @@ -44,9 +44,7 @@ class AnimeListTransformer extends AbstractTransformer { { $map = [ 'id' => $item['mal_id'], - 'data' => [ - 'episode' => $item['data']['progress'] - ] + 'data' => [] ]; $data =& $item['data']; @@ -55,6 +53,10 @@ class AnimeListTransformer extends AbstractTransformer { { switch($key) { + case 'progress': + $map['data']['episode'] = $value; + break; + case 'notes': $map['data']['comments'] = $value; break; diff --git a/src/Controller/Anime.php b/src/Controller/Anime.php index 48fa800d..90cbac2c 100644 --- a/src/Controller/Anime.php +++ b/src/Controller/Anime.php @@ -280,11 +280,11 @@ class Anime extends BaseController { ); } - foreach($data['included'] as $included) + if (array_key_exists('characters', $data['included'])) { - if ($included['type'] === 'characters') + foreach($data['included']['characters'] as $id => $character) { - $characters[$included['id']] = $included['attributes']; + $characters[$id] = $character['attributes']; } } From 0d2cde37a0f68183a64e6c215f9fddb067742996 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 11 Apr 2017 13:28:05 -0400 Subject: [PATCH 15/26] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 208bdea3..0e6920f7 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,7 @@ composer.lock *.sqlite *.db *.sqlite3 -docs/* +apidocs/* tests/test_data/sessions/* cache.properties build/** From 8b43dee20fd158506db5a618977ed95cdf7fe22f Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 13 Apr 2017 11:15:16 -0400 Subject: [PATCH 16/26] Css tweaks, and start caching kitsu images --- .gitignore | 5 +- app/appConf/routes.php | 10 ++ app/views/anime/details.php | 6 +- app/views/character.php | 10 +- app/views/collection/cover.php | 2 +- public/css.js | 7 +- public/css/app.min.css | 2 +- public/css/marx.css | 2 +- public/images/characters/.gitkeep | 0 src/API/Kitsu/Model.php | 2 + .../Kitsu/Transformer/AnimeTransformer.php | 3 +- src/Controller/Index.php | 44 ++++++++ .../Transformer/AnimeTransformerTest.php | 16 ++- ...AnimeTransformerTest__testTransform__1.php | 104 ++++++++++++++++++ .../test_data/Kitsu/animeBeforeTransform.json | 1 + 15 files changed, 189 insertions(+), 25 deletions(-) create mode 100644 public/images/characters/.gitkeep create mode 100644 tests/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php diff --git a/.gitignore b/.gitignore index 0e6920f7..cf44b717 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,7 @@ app/config/*.toml phinx.yml .idea/ Caddyfile -build/humbuglog.txt \ No newline at end of file +build/humbuglog.txt +public/images/anime/** +public/images/manga/** +public/images/characters/** \ No newline at end of file diff --git a/app/appConf/routes.php b/app/appConf/routes.php index d8b81816..0d3e5971 100644 --- a/app/appConf/routes.php +++ b/app/appConf/routes.php @@ -147,6 +147,16 @@ return [ // --------------------------------------------------------------------- // Default / Shared routes // --------------------------------------------------------------------- + 'image_proxy' => [ + 'path' => '/public/images/{type}/{file}', + 'action' => 'images', + 'controller' => DEFAULT_CONTROLLER, + 'verb' => 'get', + 'tokens' => [ + 'type' => '[a-z0-9\-]+', + 'file' => '[a-z0-9\-]+\.[a-z]{3}' + ] + ], 'cache_purge' => [ 'path' => '/cache_purge', 'action' => 'clearCache', diff --git a/app/views/anime/details.php b/app/views/anime/details.php index 127a5706..f354f277 100644 --- a/app/views/anime/details.php +++ b/app/views/anime/details.php @@ -1,7 +1,7 @@
- + " alt="" />

@@ -80,7 +80,7 @@ 0): ?>

Characters

- + $char): ?>
generate('character', ['slug' => $char['slug']]) ?> @@ -88,7 +88,7 @@ a($link, $char['name']); ?> - img($char['image']['original'], [ + img($urlGenerator->assetUrl("images/characters/{$id}.jpg"), [ 'width' => '225' ]) ?> diff --git a/app/views/character.php b/app/views/character.php index d499f213..8b0dfb3c 100644 --- a/app/views/character.php +++ b/app/views/character.php @@ -2,7 +2,7 @@
- + " alt="" />

@@ -18,14 +18,14 @@

Anime

- + $anime): ?>
generate('anime.details', ['id' => $anime['attributes']['slug']]); $titles = Kitsu::filterTitles($anime['attributes']); ?> - + " width="220" alt="" />
@@ -45,14 +45,14 @@

Manga

- + $manga): ?>
generate('manga.details', ['id' => $manga['attributes']['slug']]); $titles = Kitsu::filterTitles($manga['attributes']); ?> - + " width="220" alt="" />
diff --git a/app/views/collection/cover.php b/app/views/collection/cover.php index 94690f56..d35f1274 100644 --- a/app/views/collection/cover.php +++ b/app/views/collection/cover.php @@ -11,7 +11,7 @@
- " alt=" cover image" />
diff --git a/public/css.js b/public/css.js index 083577a7..1db6c13e 100644 --- a/public/css.js +++ b/public/css.js @@ -11,10 +11,11 @@ const css = fs.readFileSync('css/base.css', 'utf8'); postcss() .use(atImport()) - .use(cssNext({ - warnForDuplicates: false - })) + .use(cssNext()) .use(cssNano({ + autoprefixer: false, + colormin: false, + minifyFontValues: false, options: { sourcemap: false } diff --git a/public/css/app.min.css b/public/css/app.min.css index 7d565419..4f637cee 100644 --- a/public/css/app.min.css +++ b/public/css/app.min.css @@ -1 +1 @@ -:root{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;text-size-adjust:100%;scroll-behavior:smooth}audio:not([controls]){display:none}details{display:block}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}main{margin:0 auto;padding:0 1.6em 1.6em;padding:0 16px 16px;padding:0 1.6rem 1.6rem}main,pre,summary{display:block}pre{background:#efefef;color:#444;font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace;font-size:1.4em;font-size:14px;font-size:1.4rem;margin:1.6em 0;margin:16px 0;margin:1.6rem 0;overflow:auto;padding:1.6em;padding:16px;padding:1.6rem;word-break:break-all;word-wrap:break-word}progress{display:inline-block}small{color:#777;font-size:75%}big{font-size:125%}template{display:none}textarea{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:8px;margin-bottom:.8rem;overflow:auto;padding:8px;padding:.8rem;resize:vertical;vertical-align:middle}[hidden]{display:none}[unselectable]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}*,:after,:before{border-style:solid;border-width:0;box-sizing:inherit}*{font-size:inherit;line-height:inherit;margin:0;padding:0}:after,:before{text-decoration:inherit;vertical-align:inherit}a{-webkit-transition:.25s ease;color:#1271db;text-decoration:none;transition:.25s ease}audio,canvas,iframe,img,svg,video{vertical-align:middle}button,input,select,textarea{border:1px solid #ccc;border:.1rem solid #ccc;color:inherit;font-family:inherit;font-style:inherit;font-weight:inherit;min-height:1.4em}code,kbd,pre,samp{font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace}table{border-collapse:collapse;border-spacing:0;margin-bottom:16px;margin-bottom:1.6rem}::-moz-selection{background-color:#b3d4fc;text-shadow:none}::selection{background-color:#b3d4fc;text-shadow:none}button::-moz-focus-inner{border:0}body{color:#444;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:16px;font-size:1.6rem;font-style:normal;font-weight:400;padding:0}p{margin:0 0 16px;margin:0 0 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:2em 0 1.6em;margin:20px 0 16px;margin:2rem 0 1.6rem}h1{border-bottom:1px solid rgba(0,0,0,.2);border-bottom:.1rem solid rgba(0,0,0,.2);font-size:3.6em;font-size:36px;font-size:3.6rem}h1,h2{font-style:normal;font-weight:500}h2{font-size:3em;font-size:30px;font-size:3rem}h3{font-size:2.4em;font-size:24px;font-size:2.4rem;font-style:normal;font-weight:500;margin:16px 0 4px;margin:1.6rem 0 .4rem}h4{font-size:1.8em;font-size:18px;font-size:1.8rem}h4,h5{font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}h5{font-size:1.6em;font-size:16px;font-size:1.6rem}h6{color:#777;font-size:1.4em;font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}code,h6{font-size:14px;font-size:1.4rem}code{background:#efefef;color:#444;font-family:Anonymous Pro,Fira Code,Menlo,Monaco,Consolas,Courier New,monospace;word-break:break-all;word-wrap:break-word}a:focus,a:hover{text-decoration:none}dl{margin-bottom:16px;margin-bottom:1.6rem}dd{margin-left:40px;margin-left:4rem}ol,ul{margin-bottom:8px;margin-bottom:.8rem;padding-left:20px;padding-left:2rem}blockquote{border-left:2px solid #1271db;border-left:.2rem solid #1271db;font-style:italic;margin:16px 0;margin:1.6rem 0;padding-left:16px;padding-left:1.6rem}blockquote,figcaption{font-family:Georgia,Times,Times New Roman,serif}html{font-size:62.5%}article,aside,details,footer,header,main,section,summary{display:block;height:auto;margin:0 auto;width:100%}footer{clear:both;display:inline-block;float:left;max-width:100%;padding:10px 0;padding:1rem 0;text-align:center}footer,hr{border-top:1px solid rgba(0,0,0,.2);border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;margin-bottom:16px;margin-bottom:1.6rem;width:100%}img{height:auto;vertical-align:baseline}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:inline-block;padding:8px;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:8px;padding:.8rem;text-align:left}input[type=color]{padding:8px 16px;padding:.8rem 1.6rem}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#b3d4fc}input[type=checkbox],input[type=radio]{vertical-align:middle}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin solid #444}input:not([type])[disabled],input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{background-color:#efefef;color:#777;cursor:not-allowed}input[readonly],select[readonly],textarea[readonly]{background-color:#efefef;border-color:#ccc;color:#777}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{border-color:#e9322d;color:#b94a48}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#ff4136}select{background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:8px 0;padding:.8rem 0}legend{border-bottom:1px solid #ccc;border-bottom:.1rem solid #ccc;display:block;padding:8px 0;padding:.8rem 0;width:100%}button,input[type=submit],legend{color:#444;margin-bottom:8px;margin-bottom:.8rem}button,input[type=submit]{-moz-user-select:none;-ms-user-select:none;-webkit-transition:.25s ease;-webkit-user-drag:none;-webkit-user-select:none;border:2px solid #444;border:.2rem solid #444;border-radius:0;cursor:pointer;display:inline-block;margin-right:4px;margin-right:.4rem;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;text-decoration:none;text-transform:uppercase;transition:.25s ease;user-select:none;vertical-align:baseline}button a,input[type=submit] a{color:#444}button::-moz-focus-inner,input[type=submit]::-moz-focus-inner{padding:0}button:hover,input[type=submit]:hover{background:#444;border-color:#444;color:#fff}button:hover a,input[type=submit]:hover a{color:#fff}button:active,input[type=submit]:active{background:#6a6a6a;border-color:#6a6a6a;color:#fff}button:active a,input[type=submit]:active a{color:#fff}button:disabled,input[type=submit]:disabled{box-shadow:none;cursor:not-allowed;opacity:.4}nav ul{list-style:none;margin:0;padding:0;text-align:center}nav ul li{display:inline}nav a{-webkit-transition:.25s ease;border-bottom:2px solid transparent;border-bottom:.2rem solid transparent;color:#444;padding:8px 16px;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:rgba(0,0,0,.2)}nav a:active{border-color:rgba(0,0,0,.56)}caption{padding:8px 0;padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:8px;margin-bottom:.8rem}td,th{border:1px solid #ccc;border:.1rem solid #ccc;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;vertical-align:inherit}tfoot tr{background:none}tfoot td{color:#efefef;font-size:8px;font-size:.8rem;font-style:italic;padding:16px 4px;padding:1.6rem .4rem}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){clip:rect(0)!important;position:absolute!important}}@media screen and max-width 40rem{article,aside,section{clear:both;display:block;max-width:100%}img{margin-right:1.6rem}}.media[hidden],[hidden=hidden],template{display:none}body{margin:.5em}button{background:hsla(0,0%,100%,.65);margin:0}table{min-width:85%;margin:0 auto}td{padding:1em;padding:10px;padding:1rem}thead td,thead th{padding:.5em;padding:5px;padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}.bracketed{color:#12db18}.bracketed,h1 a{text-shadow:1px 1px 1px #000}.bracketed:before{content:"[\00a0"}.bracketed:after{content:"\00a0]"}.bracketed:active,.bracketed:hover{color:#db7d12}.grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.flex-align-space-around{-ms-flex-line-pack:distribute;align-content:space-around}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-self-center{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.small-font{font-size:16px;font-size:1.6rem}.justify{text-align:justify}.align_center{text-align:center!important}.align_left{text-align:left!important}.align_right{text-align:right!important}.valign_top{vertical-align:top}.no_border{border:none}.media-wrap{text-align:center;margin:0 auto}.danger{background-color:#ff4136;border-color:#924949;color:#fff}.danger:active,.danger:hover{background-color:#924949;border-color:#ff4136;color:#fff}.user-btn{border-color:#12db18;color:#12db18;text-shadow:1px 1px 1px #000;padding:0 .5em;padding:0 5px;padding:0 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full_width{width:100%}.cssload-loader{position:relative;left:calc(50% - 31px);width:62px;height:62px;border-radius:50%;-webkit-perspective:780px;perspective:780px}.cssload-inner{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:50%}.cssload-inner.cssload-one{left:0;top:0;-webkit-animation:a 1.15s linear infinite;animation:a 1.15s linear infinite;border-bottom:3px solid #000}.cssload-inner.cssload-two{right:0;top:0;-webkit-animation:b 1.15s linear infinite;animation:b 1.15s linear infinite;border-right:3px solid #000}.cssload-inner.cssload-three{right:0;bottom:0;-webkit-animation:c 1.15s linear infinite;animation:c 1.15s linear infinite;border-top:3px solid #000}@-webkit-keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@-webkit-keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@-webkit-keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}@keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}.sorting,.sorting_asc,.sorting_desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting_asc:before{content:" ↑\00a0"}.sorting_desc:before{content:" ↓\00a0"}.form{width:100%}.form thead th,.form thead tr{background:inherit;border:0}.form tr>td:nth-child(odd){text-align:right;min-width:25px;max-width:30%}.form tr>td:nth-child(2n){text-align:left;width:70%}.invisible tbody>tr:nth-child(odd){background:inherit}.invisible td,.invisible th,.invisible tr{border:0}.message{position:relative;margin:.5em auto;padding:.5em;width:95%}.message .close{width:1em;height:1em;position:absolute;right:.5em;top:.5em;text-align:center;vertical-align:middle;line-height:1em}.message:hover .close:after{content:"☒"}.message:hover{cursor:pointer}.message .icon{left:.5em;top:.5em;margin-right:1em}.message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info{border:1px solid #bfbe3a;background:#ffc}.message.info .icon:after{content:"⚠"}.character,.media,.small_character{position:relative;vertical-align:top;display:inline-block;text-align:center;width:220px;height:311px;margin:.25em .125em}.character>img,.media>img,.small_character>img{width:100%}.media .edit_buttons>button{margin:.5em auto}.media_metadata>div,.medium_metadata>div,.name,.row{text-shadow:1px 2px 1px rgba(0,0,0,.85);background:#000;background:rgba(0,0,0,.45);color:#fff;padding:.25em .125em;text-align:right}.age_rating,.media_type{text-align:left}.media>.media_metadata{position:absolute;bottom:0;right:0}.media>.medium_metadata{position:absolute;bottom:0;left:0}.media>.name{position:absolute;top:0}.character:hover>.name,.media:hover>.media_metadata>div,.media:hover>.medium_metadata>div,.media:hover>.name,.media:hover>.table .row,.small_character:hover>.name{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.media:hover>.edit_buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.character>.name a,.character>.name a small,.media>.name a,.media>.name a small,.small_character>.name a,.small_character>.name a small{background:none;color:#fff;text-shadow:1px 2px 1px rgba(0,0,0,.85)}.anime .name,.manga .name{text-align:center;width:100%;padding:.5em .25em}.anime .age_rating,.anime .airing_status,.anime .completion,.anime .delete,.anime .edit,.anime .media_type,.anime .user_rating{background:none;text-align:center}.anime .table,.manga .table{position:absolute;bottom:0;left:0;width:100%}.anime .row,.manga .row{width:100%;background:#000;background:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:distribute;align-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;text-align:center;padding:0 inherit}.anime .row>span,.manga .row>span{text-align:left}.anime .row>div,.manga .row>div{font-size:.8em;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle}.anime .media>button.plus_one{position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px)}.manga .row{padding:1px}.manga .media{border:1px solid #ddd;height:310px;margin:.25em}.manga .media>.edit_buttons{position:absolute;top:86px;top:calc(50% - 58.5px);left:43.5px;left:calc(50% - 66.5px)}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.big-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.big-check:checked+label:after{content:"✓";font-size:15em;font-size:150px;font-size:15rem;text-align:center;color:#adff2f;position:absolute;top:147px;left:0;height:100%;width:100%}#series_list article.media{position:relative}#series_list .name,#series_list .name label{position:absolute;display:block;top:0;left:0;height:100%;width:100%;vertical-align:middle;line-height:1.25em}#series_list .name small{color:#fff}.details{margin:15px auto 0;margin:1.5rem auto 0;padding:10px;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:930px;max-width:93rem}.details .cover{display:block;width:284px}.details h2{margin-top:0}.details .flex>div{margin:10px;margin:1rem}.details .media_details{max-width:300px}.details .media_details td{padding:0 15px;padding:0 1.5rem}.details p{text-align:justify}.details .media_details td:nth-child(odd){width:1%;white-space:nowrap;text-align:right}.details .media_details td:nth-child(2n){text-align:left}.character,.small_character{background:rgba(0,0,0,.5);width:225px;height:350px;vertical-align:middle;white-space:nowrap}.small_character a{display:inline-block;width:100%;height:100%}.character .name,.small_character .name{position:absolute;bottom:0;left:0;z-index:2}.character img,.small_character img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;width:100%}.min-table{min-width:0;margin-left:0}.small_character{width:160px;height:250px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}.media{margin:2px 0}main{padding:0 0,5em .5em;padding:0 .5rem .5rem}}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover_streaming_link .streaming-logo{width:20px;height:20px} \ No newline at end of file +:root{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;text-size-adjust:100%;scroll-behavior:smooth}audio:not([controls]){display:none}details{display:block}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}main{margin:0 auto;padding:0 1.6em 1.6em;padding:0 16px 16px;padding:0 1.6rem 1.6rem}main,pre,summary{display:block}pre{background:#efefef;color:#444;font-family:"Anonymous Pro","Fira Code",Menlo,Monaco,Consolas,"Courier New",monospace;font-size:1.4em;font-size:14px;font-size:1.4rem;margin:1.6em 0;margin:16px 0;margin:1.6rem 0;overflow:auto;padding:1.6em;padding:16px;padding:1.6rem;word-break:break-all;word-wrap:break-word}progress{display:inline-block}small{color:#777;font-size:75%}big{font-size:125%}template{display:none}textarea{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:8px;margin-bottom:.8rem;overflow:auto;padding:8px;padding:.8rem;resize:vertical;vertical-align:middle}[hidden]{display:none}[unselectable]{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}*,:after,:before{border-style:solid;border-width:0;box-sizing:inherit}*{font-size:inherit;line-height:inherit;margin:0;padding:0}:after,:before{text-decoration:inherit;vertical-align:inherit}a{-webkit-transition:.25s ease;color:#1271db;text-decoration:none;transition:.25s ease}audio,canvas,iframe,img,svg,video{vertical-align:middle}button,input,select,textarea{border:1px solid #ccc;border:.1rem solid #ccc;color:inherit;font-family:inherit;font-style:inherit;font-weight:inherit;min-height:1.4em}code,kbd,pre,samp{font-family:"Anonymous Pro","Fira Code",Menlo,Monaco,Consolas,"Courier New",monospace}table{border-collapse:collapse;border-spacing:0;margin-bottom:16px;margin-bottom:1.6rem}::-moz-selection{background-color:#b3d4fc;text-shadow:none}::selection{background-color:#b3d4fc;text-shadow:none}button::-moz-focus-inner{border:0}body{color:#444;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:16px;font-size:1.6rem;font-style:normal;font-weight:400;padding:0}p{margin:0 0 16px;margin:0 0 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:2em 0 1.6em;margin:20px 0 16px;margin:2rem 0 1.6rem}h1{border-bottom:1px solid rgba(0,0,0,.2);border-bottom:.1rem solid rgba(0,0,0,.2);font-size:3.6em;font-size:36px;font-size:3.6rem}h1,h2{font-style:normal;font-weight:500}h2{font-size:3em;font-size:30px;font-size:3rem}h3{font-size:2.4em;font-size:24px;font-size:2.4rem;font-style:normal;font-weight:500;margin:16px 0 4px;margin:1.6rem 0 .4rem}h4{font-size:1.8em;font-size:18px;font-size:1.8rem}h4,h5{font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}h5{font-size:1.6em;font-size:16px;font-size:1.6rem}h6{color:#777;font-size:1.4em;font-style:normal;font-weight:600;margin:16px 0 4px;margin:1.6rem 0 .4rem}code,h6{font-size:14px;font-size:1.4rem}code{background:#efefef;color:#444;font-family:"Anonymous Pro","Fira Code",Menlo,Monaco,Consolas,"Courier New",monospace;word-break:break-all;word-wrap:break-word}a:focus,a:hover{text-decoration:none}dl{margin-bottom:16px;margin-bottom:1.6rem}dd{margin-left:40px;margin-left:4rem}ol,ul{margin-bottom:8px;margin-bottom:.8rem;padding-left:20px;padding-left:2rem}blockquote{border-left:2px solid #1271db;border-left:.2rem solid #1271db;font-style:italic;margin:16px 0;margin:1.6rem 0;padding-left:16px;padding-left:1.6rem}blockquote,figcaption{font-family:Georgia,Times,"Times New Roman",serif}html{font-size:62.5%}article,aside,details,footer,header,main,section,summary{display:block;height:auto;margin:0 auto;width:100%}footer{clear:both;display:inline-block;float:left;max-width:100%;padding:10px 0;padding:1rem 0;text-align:center}footer,hr{border-top:1px solid rgba(0,0,0,.2);border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;margin-bottom:16px;margin-bottom:1.6rem;width:100%}img{height:auto;vertical-align:baseline}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select{border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;display:inline-block;padding:8px;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:8px;padding:.8rem;text-align:left}input[type=color]{padding:8px 16px;padding:.8rem 1.6rem}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#b3d4fc}input[type=checkbox],input[type=radio]{vertical-align:middle}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin solid #444}input:not([type])[disabled],input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{background-color:#efefef;color:#777;cursor:not-allowed}input[readonly],select[readonly],textarea[readonly]{background-color:#efefef;border-color:#ccc;color:#777}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{border-color:#e9322d;color:#b94a48}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#ff4136}select{background-color:#fff;border:1px solid #ccc;border:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:8px 0;padding:.8rem 0}legend{border-bottom:1px solid #ccc;border-bottom:.1rem solid #ccc;display:block;padding:8px 0;padding:.8rem 0;width:100%}button,input[type=submit],legend{color:#444;margin-bottom:8px;margin-bottom:.8rem}button,input[type=submit]{-moz-user-select:none;-ms-user-select:none;-webkit-transition:.25s ease;-webkit-user-drag:none;-webkit-user-select:none;border:2px solid #444;border:.2rem solid #444;border-radius:0;cursor:pointer;display:inline-block;margin-right:4px;margin-right:.4rem;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;text-decoration:none;text-transform:uppercase;transition:.25s ease;user-select:none;vertical-align:baseline}button a,input[type=submit] a{color:#444}button::-moz-focus-inner,input[type=submit]::-moz-focus-inner{padding:0}button:hover,input[type=submit]:hover{background:#444;border-color:#444;color:#fff}button:hover a,input[type=submit]:hover a{color:#fff}button:active,input[type=submit]:active{background:#6a6a6a;border-color:#6a6a6a;color:#fff}button:active a,input[type=submit]:active a{color:#fff}button:disabled,input[type=submit]:disabled{box-shadow:none;cursor:not-allowed;opacity:.4}nav ul{list-style:none;margin:0;padding:0;text-align:center}nav ul li{display:inline}nav a{-webkit-transition:.25s ease;border-bottom:2px solid transparent;border-bottom:.2rem solid transparent;color:#444;padding:8px 16px;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:rgba(0,0,0,.2)}nav a:active{border-color:rgba(0,0,0,.56)}caption{padding:8px 0;padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:8px;margin-bottom:.8rem}td,th{border:1px solid #ccc;border:.1rem solid #ccc;padding:8px 16px;padding:.8rem 1.6rem;text-align:center;vertical-align:inherit}tfoot tr{background:none}tfoot td{color:#efefef;font-size:8px;font-size:.8rem;font-style:italic;padding:16px 4px;padding:1.6rem .4rem}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){clip:rect(0)!important;position:absolute!important}}@media screen and max-width 40rem{article,aside,section{clear:both;display:block;max-width:100%}img{margin-right:1.6rem}}.media[hidden],[hidden=hidden],template{display:none}body{margin:.5em}button{background:rgba(255,255,255,.65);margin:0}table{min-width:85%;margin:0 auto}td{padding:1em;padding:10px;padding:1rem}thead td,thead th{padding:.5em;padding:5px;padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}.bracketed{color:#12db18}.bracketed,h1 a{text-shadow:1px 1px 1px #000}.bracketed:before{content:"[\00a0"}.bracketed:after{content:"\00a0]"}.bracketed:active,.bracketed:hover{color:#db7d12}.grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-no-wrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-align-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.flex-align-space-around{-ms-flex-line-pack:distribute;align-content:space-around}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-self-center{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.small-font{font-size:16px;font-size:1.6rem}.justify{text-align:justify}.align_center{text-align:center!important}.align_left{text-align:left!important}.align_right{text-align:right!important}.valign_top{vertical-align:top}.no_border{border:none}.media-wrap{text-align:center;margin:0 auto}.danger{background-color:#ff4136;border-color:#924949;color:#fff}.danger:active,.danger:hover{background-color:#924949;border-color:#ff4136;color:#fff}.user-btn{border-color:#12db18;color:#12db18;text-shadow:1px 1px 1px #000;padding:0 .5em;padding:0 5px;padding:0 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full_width{width:100%}.cssload-loader{position:relative;left:calc(50% - 31px);width:62px;height:62px;border-radius:50%;-webkit-perspective:780px;perspective:780px}.cssload-inner{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:50%}.cssload-inner.cssload-one{left:0;top:0;-webkit-animation:a 1.15s linear infinite;animation:a 1.15s linear infinite;border-bottom:3px solid rgb(0,0,0)}.cssload-inner.cssload-two{right:0;top:0;-webkit-animation:b 1.15s linear infinite;animation:b 1.15s linear infinite;border-right:3px solid rgb(0,0,0)}.cssload-inner.cssload-three{right:0;bottom:0;-webkit-animation:c 1.15s linear infinite;animation:c 1.15s linear infinite;border-top:3px solid rgb(0,0,0)}@-webkit-keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(0deg);transform:rotateX(35deg) rotateY(-45deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(-45deg) rotate(1turn);transform:rotateX(35deg) rotateY(-45deg) rotate(1turn)}}@-webkit-keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@keyframes b{0%{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(0deg);transform:rotateX(50deg) rotateY(10deg) rotate(0deg)}to{-webkit-transform:rotateX(50deg) rotateY(10deg) rotate(1turn);transform:rotateX(50deg) rotateY(10deg) rotate(1turn)}}@-webkit-keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}@keyframes c{0%{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(0deg);transform:rotateX(35deg) rotateY(55deg) rotate(0deg)}to{-webkit-transform:rotateX(35deg) rotateY(55deg) rotate(1turn);transform:rotateX(35deg) rotateY(55deg) rotate(1turn)}}.sorting,.sorting_asc,.sorting_desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting_asc:before{content:" ↑\00a0"}.sorting_desc:before{content:" ↓\00a0"}.form{width:100%}.form thead th,.form thead tr{background:inherit;border:0}.form tr>td:nth-child(odd){text-align:right;min-width:25px;max-width:30%}.form tr>td:nth-child(2n){text-align:left;width:70%}.invisible tbody>tr:nth-child(odd){background:inherit}.invisible td,.invisible th,.invisible tr{border:0}.message{position:relative;margin:.5em auto;padding:.5em;width:95%}.message .close{width:1em;height:1em;position:absolute;right:.5em;top:.5em;text-align:center;vertical-align:middle;line-height:1em}.message:hover .close:after{content:"☒"}.message:hover{cursor:pointer}.message .icon{left:.5em;top:.5em;margin-right:1em}.message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info{border:1px solid #bfbe3a;background:#FFFFCC}.message.info .icon:after{content:"⚠"}.character,.media,.small_character{position:relative;vertical-align:top;display:inline-block;text-align:center;width:220px;height:311px;margin:.25em .125em}.character>img,.media>img,.small_character>img{width:100%}.media .edit_buttons>button{margin:.5em auto}.media_metadata>div,.medium_metadata>div,.name,.row{text-shadow:1px 2px 1px rgba(0,0,0,.85);background:#000;background:rgba(0,0,0,.45);color:#ffffff;padding:.25em .125em;text-align:right}.age_rating,.media_type{text-align:left}.media>.media_metadata{position:absolute;bottom:0;right:0}.media>.medium_metadata{position:absolute;bottom:0;left:0}.media>.name{position:absolute;top:0}.character:hover>.name,.media:hover>.media_metadata>div,.media:hover>.medium_metadata>div,.media:hover>.name,.media:hover>.table .row,.small_character:hover>.name{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.media:hover>.edit_buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.character>.name a,.character>.name a small,.media>.name a,.media>.name a small,.small_character>.name a,.small_character>.name a small{background:none;color:#fff;text-shadow:1px 2px 1px rgba(0,0,0,.85)}.anime .name,.manga .name{text-align:center;width:100%;padding:.5em .25em}.anime .age_rating,.anime .airing_status,.anime .completion,.anime .delete,.anime .edit,.anime .media_type,.anime .user_rating{background:none;text-align:center}.anime .table,.manga .table{position:absolute;bottom:0;left:0;width:100%}.anime .row,.manga .row{width:100%;background:#000;background:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:distribute;align-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;text-align:center;padding:0 inherit}.anime .row>span,.manga .row>span{text-align:left}.anime .row>div,.manga .row>div{font-size:.8em;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle}.anime .media>button.plus_one{position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px)}.manga .row{padding:1px}.manga .media{border:1px solid #ddd;height:310px;margin:.25em}.manga .media>.edit_buttons{position:absolute;top:86px;top:calc(50% - 58.5px);left:43.5px;left:calc(50% - 66.5px)}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.big-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:rgba(0,0,0,.75)}.big-check:checked+label:after{content:"✓";font-size:15em;font-size:150px;font-size:15rem;text-align:center;color:greenyellow;position:absolute;top:147px;left:0;height:100%;width:100%}#series_list article.media{position:relative}#series_list .name,#series_list .name label{position:absolute;display:block;top:0;left:0;height:100%;width:100%;vertical-align:middle;line-height:1.25em}#series_list .name small{color:#fff}.details{margin:15px auto 0;margin:1.5rem auto 0;padding:10px;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:930px;max-width:93rem}.details .cover{display:block;width:284px}.details h2{margin-top:0}.details .flex>div{margin:10px;margin:1rem}.details .media_details{max-width:300px}.details .media_details td{padding:0 15px;padding:0 1.5rem}.details p{text-align:justify}.details .media_details td:nth-child(odd){width:1%;white-space:nowrap;text-align:right}.details .media_details td:nth-child(2n){text-align:left}.character,.small_character{background:rgba(0,0,0,.5);width:225px;height:350px;vertical-align:middle;white-space:nowrap}.small_character a{display:inline-block;width:100%;height:100%}.character .name,.small_character .name{position:absolute;bottom:0;left:0;z-index:2}.character img,.small_character img{position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;width:100%}.min-table{min-width:0;margin-left:0}.small_character{width:160px;height:250px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}.media{margin:2px 0}main{padding:0 0,5em .5em;padding:0 .5rem .5rem}}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover_streaming_link .streaming-logo{width:20px;height:20px} \ No newline at end of file diff --git a/public/css/marx.css b/public/css/marx.css index 426fefe8..db716220 100644 --- a/public/css/marx.css +++ b/public/css/marx.css @@ -1,5 +1,5 @@ :root { - --default-font-list:system-ui,sans-serif; + --default-font-list: system-ui,sans-serif; --monospace-font-list:'Anonymous Pro','Fira Code',Menlo,Monaco,Consolas,'Courier New',monospace; --serif-font-list:Georgia,Times,'Times New Roman',serif; -ms-text-size-adjust:100%; diff --git a/public/images/characters/.gitkeep b/public/images/characters/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index e5924714..1f5d6891 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -829,6 +829,7 @@ class Model { } $baseData = $data['data']['attributes']; + $baseData['id'] = $data['id']; $baseData['included'] = $data['included']; return $baseData; } @@ -864,6 +865,7 @@ class Model { } $baseData = $data['data'][0]['attributes']; + $baseData['id'] = $data['data'][0]['id']; $baseData['included'] = $data['included']; return $baseData; } diff --git a/src/API/Kitsu/Transformer/AnimeTransformer.php b/src/API/Kitsu/Transformer/AnimeTransformer.php index 42323166..b04a8c73 100644 --- a/src/API/Kitsu/Transformer/AnimeTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeTransformer.php @@ -36,10 +36,11 @@ class AnimeTransformer extends AbstractTransformer { $item['included'] = JsonAPI::organizeIncludes($item['included']); $item['genres'] = array_column($item['included']['genres'], 'name') ?? []; sort($item['genres']); - + $titles = Kitsu::filterTitles($item); return [ + 'id' => $item['id'], 'slug' => $item['slug'], 'title' => $titles[0], 'titles' => $titles, diff --git a/src/Controller/Index.php b/src/Controller/Index.php index 411aac26..79555f73 100644 --- a/src/Controller/Index.php +++ b/src/Controller/Index.php @@ -16,10 +16,16 @@ namespace Aviat\AnimeClient\Controller; +use function Amp\wait; + +use Amp\Artax\Client; use Aviat\AnimeClient\Controller as BaseController; use Aviat\AnimeClient\API\JsonAPI; use Aviat\Ion\View\HtmlView; +/** + * Controller for handling routes that don't fit elsewhere + */ class Index extends BaseController { /** @@ -113,6 +119,44 @@ class Index extends BaseController { ]); } + /** + * Get image covers from kitsu + * + * @return void + */ + public function images($type, $file) + { + $kitsuUrl = 'https://media.kitsu.io/'; + list($id, $ext) = explode('.', basename($file)); + switch ($type) + { + case 'anime': + $kitsuUrl .= "anime/poster_images/{$id}/small.{$ext}"; + break; + + case 'manga': + $kitsuUrl .= "manga/poster_images/{$id}/small.{$ext}"; + break; + + case 'characters': + $kitsuUrl .= "characters/images/{$id}/original.{$ext}"; + break; + + default: + $this->notFound(); + return; + } + + $promise = (new Client)->request($kitsuUrl); + $response = wait($promise); + $data = (string) $response->getBody(); + + $baseSavePath = $this->config->get('img_cache_path'); + file_put_contents("{$baseSavePath}/{$type}/{$id}.{$ext}", $data); + header('Content-type: ' . $response->getHeader('content-type')[0]); + echo (string) $response->getBody(); + } + private function organizeFavorites(array $rawfavorites): array { // return $rawfavorites; diff --git a/tests/API/Kitsu/Transformer/AnimeTransformerTest.php b/tests/API/Kitsu/Transformer/AnimeTransformerTest.php index cb761d35..d9b84a8e 100644 --- a/tests/API/Kitsu/Transformer/AnimeTransformerTest.php +++ b/tests/API/Kitsu/Transformer/AnimeTransformerTest.php @@ -22,29 +22,27 @@ use Aviat\Ion\Friend; use Aviat\Ion\Json; class AnimeTransformerTest extends AnimeClientTestCase { - + protected $dir; protected $beforeTransform; protected $afterTransform; protected $transformer; - + public function setUp() { parent::setUp(); $this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu'; - + $this->beforeTransform = Json::decodeFile("{$this->dir}/animeBeforeTransform.json"); - $this->afterTransform = Json::decodeFile("{$this->dir}/animeAfterTransform.json"); - + $this->transformer = new AnimeTransformer(); } - + public function testTransform() { $expected = $this->afterTransform; $actual = $this->transformer->transform($this->beforeTransform); - // Json::encodeFile("{$this->dir}/animeAfterTransform.json", $actual); - - $this->assertEquals($expected, $actual); + + $this->assertMatchesSnapshot($actual); } } \ No newline at end of file diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php new file mode 100644 index 00000000..36bc8262 --- /dev/null +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php @@ -0,0 +1,104 @@ + 32344, + 'slug' => 'attack-on-titan', + 'title' => 'Attack on Titan', + 'titles' => + array ( + 0 => 'Attack on Titan', + 1 => 'Shingeki no Kyojin', + 2 => '進撃の巨人', + ), + 'status' => 'Finished Airing', + 'cover_image' => 'https://media.kitsu.io/anime/poster_images/7442/small.jpg?1418580054', + 'show_type' => 'TV', + 'episode_count' => 25, + 'episode_length' => 24, + 'synopsis' => 'Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind. + +(Source: ANN)', + 'age_rating' => 'R', + 'age_rating_guide' => 'Violence, Profanity', + 'url' => 'https://kitsu.io/anime/attack-on-titan', + 'genres' => + array ( + 0 => 'Action', + 1 => 'Drama', + 2 => 'Fantasy', + 3 => 'Super Power', + ), + 'streaming_links' => + array ( + 0 => + array ( + 'meta' => + array ( + 'name' => 'Crunchyroll', + 'link' => true, + 'image' => 'streaming-logos/crunchyroll.svg', + ), + 'link' => 'http://www.crunchyroll.com/attack-on-titan', + 'subs' => + array ( + 0 => 'en', + ), + 'dubs' => + array ( + 0 => 'ja', + ), + ), + 1 => + array ( + 'meta' => + array ( + 'name' => 'Hulu', + 'link' => true, + 'image' => 'streaming-logos/hulu.svg', + ), + 'link' => 'http://www.hulu.com/attack-on-titan', + 'subs' => + array ( + 0 => 'en', + ), + 'dubs' => + array ( + 0 => 'ja', + ), + ), + 2 => + array ( + 'meta' => + array ( + 'name' => 'Funimation', + 'link' => true, + 'image' => 'streaming-logos/funimation.svg', + ), + 'link' => 'http://www.funimation.com/shows/attack-on-titan/videos/episodes', + 'subs' => + array ( + 0 => 'en', + ), + 'dubs' => + array ( + 0 => 'ja', + ), + ), + 3 => + array ( + 'meta' => + array ( + 'name' => 'Netflix', + 'link' => false, + 'image' => 'streaming-logos/netflix.svg', + ), + 'link' => 't', + 'subs' => + array ( + 0 => 'en', + ), + 'dubs' => + array ( + 0 => 'ja', + ), + ), + ), +); diff --git a/tests/test_data/Kitsu/animeBeforeTransform.json b/tests/test_data/Kitsu/animeBeforeTransform.json index 2a996e20..e64bc419 100644 --- a/tests/test_data/Kitsu/animeBeforeTransform.json +++ b/tests/test_data/Kitsu/animeBeforeTransform.json @@ -1,4 +1,5 @@ { + "id": 32344, "slug": "attack-on-titan", "synopsis": "Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind.\n\n(Source: ANN)", "coverImageTopOffset": 263, From 08aff2ffe8a9837e8f28d9fbc891ae4e0ab55a97 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 13 Apr 2017 11:26:28 -0400 Subject: [PATCH 17/26] All anime images now pull from proxy or cache --- app/views/anime/cover.php | 16 ++++++++-------- app/views/anime/edit.php | 2 +- .../Kitsu/Transformer/AnimeListTransformer.php | 1 + ...nimeListTransformerTest__testTransform__1.php | 1 + 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/views/anime/cover.php b/app/views/anime/cover.php index 4c539a11..b3526d68 100644 --- a/app/views/anime/cover.php +++ b/app/views/anime/cover.php @@ -15,7 +15,7 @@ isAuthenticated()): ?> - + " alt="" />
@@ -28,17 +28,17 @@ isAuthenticated()): ?> - +
@@ -48,13 +48,13 @@
- + 0): ?>
Rewatched time(s)
- + 0): ?>
@@ -70,7 +70,7 @@
- +
Rating: / 10
Episodes: diff --git a/app/views/anime/edit.php b/app/views/anime/edit.php index 3e70adb9..08707720 100644 --- a/app/views/anime/edit.php +++ b/app/views/anime/edit.php @@ -13,7 +13,7 @@
diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index a628b510..5cd72d6e 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -82,6 +82,7 @@ class AnimeListTransformer extends AbstractTransformer { 'ended' => $anime['endDate'] ], 'anime' => [ + 'id' => $animeId, 'age_rating' => $anime['ageRating'], 'title' => $anime['canonicalTitle'], 'titles' => Kitsu::filterTitles($anime), diff --git a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php index e1add9b6..0d1ac07b 100644 --- a/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php +++ b/tests/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php @@ -15,6 +15,7 @@ ), 'anime' => array ( + 'id' => '12243', 'age_rating' => NULL, 'title' => 'Kobayashi-san Chi no Maid Dragon', 'titles' => From 28da32f2ac88923a8e89618bb27853a2bfd62aa6 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Thu, 13 Apr 2017 11:44:03 -0400 Subject: [PATCH 18/26] Get images from proxy or cache for Manga views, and Add views --- app/views/manga/cover.php | 2 +- app/views/manga/details.php | 6 +++--- app/views/manga/edit.php | 2 +- public/templates/anime-ajax-search-results.html | 3 ++- public/templates/manga-ajax-search-results.html | 3 ++- src/API/Kitsu/Transformer/MangaListTransformer.php | 1 + src/API/Kitsu/Transformer/MangaTransformer.php | 7 ++++--- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/views/manga/cover.php b/app/views/manga/cover.php index fc4fa9ad..e334ba74 100644 --- a/app/views/manga/cover.php +++ b/app/views/manga/cover.php @@ -17,7 +17,7 @@ +1 Volume */ ?> - + " />
- img($item['anime']['image']); ?> + img($urlGenerator->assetUrl('images/anime', "{$item['anime']['id']}.jpg")) ?>
@@ -39,7 +39,7 @@ 0): ?>

Characters

- + $char): ?>
diff --git a/public/templates/anime-ajax-search-results.html b/public/templates/anime-ajax-search-results.html index c5a64562..3e9f5682 100644 --- a/public/templates/anime-ajax-search-results.html +++ b/public/templates/anime-ajax-search-results.html @@ -1,8 +1,9 @@ {{#data}}
- img($item['manga']['image']); ?> + img($urlGenerator->assetUrl('images/manga', "{$item['manga']['id']}.jpg")); ?>