From ac382a96a84f67642c50317d4439cb341b7d1776 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 21 Dec 2018 15:52:34 -0500 Subject: [PATCH 01/18] Simplify/clean up some base classes --- build/phpunit.xml | 2 +- .../Transformer/AnimeListTransformer.php | 2 +- src/Controller.php | 78 +++++++------------ src/Controller/Anime.php | 6 +- src/Controller/AnimeCollection.php | 3 +- src/Controller/Images.php | 2 - src/Controller/Manga.php | 5 +- src/Controller/MangaCollection.php | 3 +- src/Controller/Settings.php | 11 +-- src/Helper/Form.php | 5 +- 10 files changed, 39 insertions(+), 78 deletions(-) diff --git a/build/phpunit.xml b/build/phpunit.xml index 537121c8..f5f4ce1e 100644 --- a/build/phpunit.xml +++ b/build/phpunit.xml @@ -20,7 +20,7 @@ - + diff --git a/src/API/Kitsu/Transformer/AnimeListTransformer.php b/src/API/Kitsu/Transformer/AnimeListTransformer.php index 4d49fef5..5f29b9b8 100644 --- a/src/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/API/Kitsu/Transformer/AnimeListTransformer.php @@ -72,7 +72,7 @@ final class AnimeListTransformer extends AbstractTransformer { } } - $streamingLinks = (array_key_exists('streamingLinks', $anime['relationships'])) + $streamingLinks = array_key_exists('streamingLinks', $anime['relationships']) ? Kitsu::parseListItemStreamingLinks($included, $animeId) : []; diff --git a/src/Controller.php b/src/Controller.php index 5dc3c1e3..08b117ef 100644 --- a/src/Controller.php +++ b/src/Controller.php @@ -79,11 +79,7 @@ class Controller { * Common data to be sent to views * @var array */ - protected $baseData = [ - 'url_type' => 'anime', - 'other_type' => 'manga', - 'menu_name' => '' - ]; + protected $baseData = []; /** * Controller constructor. @@ -95,46 +91,29 @@ class Controller { public function __construct(ContainerInterface $container) { $this->setContainer($container); + $auraUrlGenerator = $container->get('aura-router')->getGenerator(); + $session = $container->get('session'); $urlGenerator = $container->get('url-generator'); + $this->cache = $container->get('cache'); $this->config = $container->get('config'); $this->request = $container->get('request'); $this->response = $container->get('response'); - - $this->baseData = array_merge($this->baseData, [ - 'url' => $auraUrlGenerator, - 'urlGenerator' => $urlGenerator, - 'auth' => $container->get('auth'), - 'config' => $this->config - ]); - + $this->session = $session->getSegment(SESSION_SEGMENT); $this->url = $auraUrlGenerator; $this->urlGenerator = $urlGenerator; - $session = $container->get('session'); - $this->session = $session->getSegment(SESSION_SEGMENT); - - // Set a 'previous' flash value for better redirects - $serverParams = $this->request->getServerParams(); - if (array_key_exists('HTTP_REFERER', $serverParams) && false === stripos($serverParams['HTTP_REFERER'], 'login')) - { - $this->session->setFlash('previous', $serverParams['HTTP_REFERER']); - } - - // Set a message box if available - $this->baseData['message'] = $this->session->getFlash('message'); - } - - /** - * Redirect to the previous page - * - * @return void - */ - public function redirectToPrevious(): void - { - $previous = $this->session->getFlash('previous'); - $this->redirect($previous, 303); + $this->baseData = [ + 'auth' => $container->get('auth'), + 'config' => $this->config, + 'menu_name' => '', + 'message' => $this->session->getFlash('message'), // Get message box data if it exists + 'other_type' => 'manga', + 'url' => $auraUrlGenerator, + 'url_type' => 'anime', + 'urlGenerator' => $urlGenerator, + ]; } /** @@ -159,7 +138,7 @@ class Controller { // Don't attempt to set the redirect url if // the page is one of the form type pages, - // and the previous page is also a form type page_segments + // and the previous page is also a form type if ($doubleFormPage || $isLoginPage) { return; @@ -178,6 +157,8 @@ class Controller { /** * Redirect to the url previously set in the session * + * If one is not set, redirect to default url + * * @throws InvalidArgumentException * @throws \Aviat\Ion\Di\Exception\ContainerException * @throws \Aviat\Ion\Di\Exception\NotFoundException @@ -185,16 +166,10 @@ class Controller { */ public function sessionRedirect(): void { - $target = $this->session->get('redirect_url'); - if (empty($target)) - { - $this->notFound(); - } - else - { - $this->redirect($target, 303); - $this->session->set('redirect_url', NULL); - } + $target = $this->session->get('redirect_url') ?? '/'; + + $this->redirect($target, 303); + $this->session->set('redirect_url', NULL); } /** @@ -218,7 +193,7 @@ class Controller { } $route = $router->getRoute(); - $data['route_path'] = $route ? $router->getRoute()->path : ''; + $data['route_path'] = $route !== FALSE ? $route->path : ''; $templatePath = _dir($this->config->get('view_path'), "{$template}.php"); @@ -275,7 +250,7 @@ class Controller { public function notFound( string $title = 'Sorry, page not found', string $message = 'Page Not Found' - ): void + ): void { $this->outputHTML('404', [ 'title' => $title, @@ -408,7 +383,6 @@ class Controller { (new JsonView($this->container)) ->setStatusCode($code) ->setOutput($data); - // ->send(); exit(); } @@ -421,8 +395,8 @@ class Controller { */ protected function redirect(string $url, int $code): void { - $http = new HttpView($this->container); - $http->redirect($url, $code); + (new HttpView($this->container))->redirect($url, $code); + exit(); } } // End of BaseController.php \ No newline at end of file diff --git a/src/Controller/Anime.php b/src/Controller/Anime.php index 8b5adecb..9bce1426 100644 --- a/src/Controller/Anime.php +++ b/src/Controller/Anime.php @@ -28,6 +28,7 @@ use Aviat\Ion\Json; * Controller for Anime-related pages */ final class Anime extends BaseController { + /** * The anime list model * @var \Aviat\AnimeClient\Model\Anime $model @@ -49,12 +50,9 @@ final class Anime extends BaseController { $this->baseData = array_merge($this->baseData, [ 'menu_name' => 'anime_list', - 'url_type' => 'anime', 'other_type' => 'manga', - 'config' => $this->config, + 'url_type' => 'anime', ]); - - $this->cache = $container->get('cache'); } /** diff --git a/src/Controller/AnimeCollection.php b/src/Controller/AnimeCollection.php index cdb3e487..ea2b45b5 100644 --- a/src/Controller/AnimeCollection.php +++ b/src/Controller/AnimeCollection.php @@ -56,9 +56,8 @@ final class AnimeCollection extends BaseController { $this->baseData = array_merge($this->baseData, [ 'collection_type' => 'anime', 'menu_name' => 'collection', - 'url_type' => 'anime', 'other_type' => 'manga', - 'config' => $this->config, + 'url_type' => 'anime', ]); } diff --git a/src/Controller/Images.php b/src/Controller/Images.php index 25858566..a9ad4344 100644 --- a/src/Controller/Images.php +++ b/src/Controller/Images.php @@ -131,8 +131,6 @@ final class Images extends BaseController { $data = wait($response->getBody()); - - [$origWidth] = getimagesizefromstring($data); $gdImg = imagecreatefromstring($data); $resizedImg = imagescale($gdImg, $width ?? $origWidth); diff --git a/src/Controller/Manga.php b/src/Controller/Manga.php index 72465489..8d1b81be 100644 --- a/src/Controller/Manga.php +++ b/src/Controller/Manga.php @@ -29,8 +29,6 @@ use Aviat\Ion\{Json, StringWrapper}; */ final class Manga extends Controller { - use StringWrapper; - /** * The manga model * @var MangaModel $model @@ -51,9 +49,8 @@ final class Manga extends Controller { $this->model = $container->get('manga-model'); $this->baseData = array_merge($this->baseData, [ 'menu_name' => 'manga_list', - 'config' => $this->config, + 'other_type' => 'anime', 'url_type' => 'manga', - 'other_type' => 'anime' ]); } diff --git a/src/Controller/MangaCollection.php b/src/Controller/MangaCollection.php index 47ad0ef6..73a8cf44 100644 --- a/src/Controller/MangaCollection.php +++ b/src/Controller/MangaCollection.php @@ -57,9 +57,8 @@ final class MangaCollection extends BaseController { $this->baseData = array_merge($this->baseData, [ 'collection_type' => 'manga', 'menu_name' => 'manga-collection', - 'url_type' => 'manga', 'other_type' => 'anime', - 'config' => $this->config, + 'url_type' => 'manga', ]); } diff --git a/src/Controller/Settings.php b/src/Controller/Settings.php index c8360e41..225d05b1 100644 --- a/src/Controller/Settings.php +++ b/src/Controller/Settings.php @@ -23,6 +23,7 @@ use Aviat\Ion\Di\ContainerInterface; * Controller for user settings */ final class Settings extends BaseController { + /** * @var \Aviat\AnimeClient\API\Anilist\Model */ @@ -144,13 +145,9 @@ final class Settings extends BaseController { $saved = $this->settingsModel->saveSettingsFile($newSettings); - if ($saved) - { - $this->setFlashMessage('Linked Anilist Account', 'success'); - } else - { - $this->setFlashMessage('Error Linking Anilist Account', 'error'); - } + $saved + ? $this->setFlashMessage('Linked Anilist Account', 'success') + : $this->setFlashMessage('Error Linking Anilist Account', 'error'); $this->redirect($this->url->generate('settings'), 303); } diff --git a/src/Helper/Form.php b/src/Helper/Form.php index 244030ab..efe099bf 100644 --- a/src/Helper/Form.php +++ b/src/Helper/Form.php @@ -20,14 +20,14 @@ use Aviat\AnimeClient\FormGenerator; use Aviat\Ion\Di\ContainerAware; /** - * MenuGenerator helper wrapper + * FormGenerator helper wrapper */ final class Form { use ContainerAware; /** - * Create the html for the selected menu + * Create the html for the specified form * * @param string $name * @param array $form @@ -38,4 +38,3 @@ final class Form { return (new FormGenerator($this->container))->generate($name, $form); } } -// End of Menu.php \ No newline at end of file From b66a35843dd780f4bd18196e5069364f8b28c554 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 7 Jan 2019 09:08:00 -0500 Subject: [PATCH 02/18] Small code cleanup --- src/Dispatcher.php | 9 ++++----- src/RoutingBase.php | 14 ++++++-------- tests/AnimeClientTestCase.php | 6 +++--- tests/RoutingBaseTest.php | 20 +++++++------------- 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index f44e1465..faeb4df5 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -45,10 +45,10 @@ final class Dispatcher extends RoutingBase { protected $matcher; /** - * Class wrapper for input superglobals - * @var \Psr\Http\Message\ServerRequestInterface + * Routing array + * @var array */ - protected $request; + protected $routes; /** * Routes added to router @@ -67,8 +67,7 @@ final class Dispatcher extends RoutingBase { $router = $this->container->get('aura-router'); $this->router = $router->getMap(); $this->matcher = $router->getMatcher(); - $this->request = $container->get('request'); - + $this->routes = $this->config->get('routes'); $this->outputRoutes = $this->setupRoutes(); } diff --git a/src/RoutingBase.php b/src/RoutingBase.php index 55d9db64..90a6424c 100644 --- a/src/RoutingBase.php +++ b/src/RoutingBase.php @@ -39,10 +39,10 @@ class RoutingBase { protected $config; /** - * Routing array - * @var array + * Class wrapper for input superglobals + * @var \Psr\Http\Message\ServerRequestInterface */ - protected $routes; + protected $request; /** * Constructor @@ -56,7 +56,7 @@ class RoutingBase { { $this->container = $container; $this->config = $container->get('config'); - $this->routes = $this->config->get('routes'); + $this->request = $container->get('request'); } /** @@ -67,8 +67,7 @@ class RoutingBase { */ public function path(): string { - $request = $this->container->get('request'); - $path = $request->getUri()->getPath(); + $path = $this->request->getUri()->getPath(); $cleanedPath = $this->string($path) ->replace('%20', '') ->trim() @@ -116,5 +115,4 @@ class RoutingBase { $segments = $this->segments(); return end($segments); } -} -// End of RoutingBase.php \ No newline at end of file +} \ No newline at end of file diff --git a/tests/AnimeClientTestCase.php b/tests/AnimeClientTestCase.php index caeca83c..c7fa67dd 100644 --- a/tests/AnimeClientTestCase.php +++ b/tests/AnimeClientTestCase.php @@ -124,7 +124,7 @@ class AnimeClientTestCase extends TestCase { * @param array $supers * @return void */ - public function setSuperGlobals($supers = []) + public function setSuperGlobals($supers = []): void { $default = [ '_SERVER' => $_SERVER, @@ -139,7 +139,7 @@ class AnimeClientTestCase extends TestCase { array_merge($default, $supers) ); $this->container->setInstance('request', $request); - $this->container->set('repsone', function() { + $this->container->set('response', function() { return new HttpResponse(); }); } @@ -151,7 +151,7 @@ class AnimeClientTestCase extends TestCase { * * @return string - contents of the data file */ - public function getMockFile() + public function getMockFile(): string { $args = func_get_args(); array_unshift($args, TEST_DATA_DIR); diff --git a/tests/RoutingBaseTest.php b/tests/RoutingBaseTest.php index 9bf83ca9..8ac1bb34 100644 --- a/tests/RoutingBaseTest.php +++ b/tests/RoutingBaseTest.php @@ -19,14 +19,6 @@ namespace Aviat\AnimeClient\Tests; use Aviat\AnimeClient\RoutingBase; class RoutingBaseTest extends AnimeClientTestCase { - - protected $routingBase; - - public function setUp() - { - parent::setUp(); - $this->routingBase = new RoutingBase($this->container); - } public function dataSegments() { @@ -49,7 +41,7 @@ class RoutingBaseTest extends AnimeClientTestCase { /** * @dataProvider dataSegments */ - public function testSegments($requestUri, $path, $segments, $lastSegment) + public function testSegments(string $requestUri, string $path, array $segments, $lastSegment): void { $this->setSuperGlobals([ '_SERVER' => [ @@ -57,13 +49,15 @@ class RoutingBaseTest extends AnimeClientTestCase { ] ]); - $this->assertEquals($path, $this->routingBase->path(), "Path is invalid"); - $this->assertEquals($segments, $this->routingBase->segments(), "Segments array is invalid"); - $this->assertEquals($lastSegment, $this->routingBase->lastSegment(), "Last segment is invalid"); + $routingBase = new RoutingBase($this->container); + + $this->assertEquals($path, $routingBase->path(), "Path is invalid"); + $this->assertEquals($segments, $routingBase->segments(), "Segments array is invalid"); + $this->assertEquals($lastSegment, $routingBase->lastSegment(), "Last segment is invalid"); foreach($segments as $i => $value) { - $this->assertEquals($value, $this->routingBase->getSegment($i), "Segment {$i} is invalid"); + $this->assertEquals($value, $routingBase->getSegment($i), "Segment {$i} is invalid"); } } } \ No newline at end of file From 317d8fd29b63bbb4292ee14ee9f226fa0addf0db Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 7 Jan 2019 14:29:15 -0500 Subject: [PATCH 03/18] Cleanup database logic a bit --- src/Model/Collection.php | 11 +++++++++-- src/Model/DB.php | 6 ------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Model/Collection.php b/src/Model/Collection.php index f08e22db..6191b4b1 100644 --- a/src/Model/Collection.php +++ b/src/Model/Collection.php @@ -25,6 +25,12 @@ use PDOException; */ class Collection extends DB { + /** + * The query builder object + * @var \Query\Query_Builder_Interface + */ + protected $db; + /** * Whether the database is valid for querying * @var boolean @@ -43,6 +49,7 @@ class Collection extends DB { try { $this->db = \Query($this->dbConfig); + $this->validDatabase = TRUE; } catch (PDOException $e) {} @@ -62,9 +69,9 @@ class Collection extends DB { $this->validDatabase = FALSE; } } - else + else if ($this->db === NULL) { - $this->validDatabase = TRUE; + $this->validDatabase = FALSE; } } diff --git a/src/Model/DB.php b/src/Model/DB.php index 18ae114e..f66b71e3 100644 --- a/src/Model/DB.php +++ b/src/Model/DB.php @@ -24,12 +24,6 @@ use Aviat\Ion\Di\{ContainerAware, ContainerInterface}; class DB { use ContainerAware; - /** - * The query builder object - * @var \Query\Query_Builder_Interface - */ - protected $db; - /** * The database connection information array * @var array $dbConfig From b6f12ff2f66604c4b1e1bb71b2d56714f322da6c Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 7 Jan 2019 14:31:17 -0500 Subject: [PATCH 04/18] Update phinx.yml file for new version of Phinx, see #20 --- app/config/database.toml.example | 2 +- phinx.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/config/database.toml.example b/app/config/database.toml.example index d71eb9fb..7ba3bc7d 100644 --- a/app/config/database.toml.example +++ b/app/config/database.toml.example @@ -8,4 +8,4 @@ user = "" pass = "" port = "" database = "" -file = "anime_collection.sqlite" +file = "anime_collection.sqlite3" diff --git a/phinx.yml b/phinx.yml index 23cc4bae..af089093 100644 --- a/phinx.yml +++ b/phinx.yml @@ -1,9 +1,9 @@ paths: - migrations: %%PHINX_CONFIG_DIR%%/migrations + migrations: '%%PHINX_CONFIG_DIR%%/migrations' environments: default_migration_table: phinxlog default_database: development development: adapter: sqlite - name: ./anime_collection.sqlite + name: ./anime_collection # Phinx will add a .sqlite3 suffix From 27c7f08d7f93e084805a376aeba41b66693c6979 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 8 Jan 2019 15:52:53 -0500 Subject: [PATCH 05/18] Hide missing table error on noninitialized collection, see #20 --- src/Controller/Settings.php | 11 ++----- src/Model/AnimeCollection.php | 55 +++++++++++++++++++++++++++++++++++ src/Model/Collection.php | 49 ------------------------------- 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/src/Controller/Settings.php b/src/Controller/Settings.php index 225d05b1..729595ac 100644 --- a/src/Controller/Settings.php +++ b/src/Controller/Settings.php @@ -79,16 +79,11 @@ final class Settings extends BaseController { $post = $this->request->getParsedBody(); unset($post['settings-tabs']); - // dump($post); $saved = $this->settingsModel->saveSettingsFile($post); - if ($saved) - { - $this->setFlashMessage('Saved config settings.', 'success'); - } else - { - $this->setFlashMessage('Failed to save config file.', 'error'); - } + $saved + ? $this->setFlashMessage('Saved config settings.', 'success') + : $this->setFlashMessage('Failed to save config file.', 'error'); $this->redirect($this->url->generate('settings'), 303); } diff --git a/src/Model/AnimeCollection.php b/src/Model/AnimeCollection.php index 29d91485..0c1deb37 100644 --- a/src/Model/AnimeCollection.php +++ b/src/Model/AnimeCollection.php @@ -18,6 +18,7 @@ namespace Aviat\AnimeClient\Model; use Aviat\Ion\Di\ContainerInterface; use PDO; +use PDOException; /** * Model for getting anime collection data @@ -226,6 +227,60 @@ final class AnimeCollection extends Collection { return $query->fetch(PDO::FETCH_ASSOC); } + /** + * Get genres for anime collection items + * + * @param array $filter + * @return array + */ + public function getGenreList(array $filter = []): array + { + $output = []; + + // Catch the missing table PDOException + // so that the collection does not show an + // error by default + try + { + $this->db->select('hummingbird_id, genre') + ->from('genre_anime_set_link gl') + ->join('genres g', 'g.id=gl.genre_id', 'left'); + + + if ( ! empty($filter)) + { + $this->db->whereIn('hummingbird_id', $filter); + } + + $query = $this->db->orderBy('hummingbird_id') + ->orderBy('genre') + ->get(); + + foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) + { + $id = $row['hummingbird_id']; + $genre = $row['genre']; + + // Empty genre names aren't useful + if (empty($genre)) + { + continue; + } + + if (array_key_exists($id, $output)) + { + $output[$id][] = $genre; + } else + { + $output[$id] = [$genre]; + } + } + } + catch (PDOException $e) {} + + return $output; + } + /** * Get the list of genres from the database * diff --git a/src/Model/Collection.php b/src/Model/Collection.php index 6191b4b1..008b1556 100644 --- a/src/Model/Collection.php +++ b/src/Model/Collection.php @@ -74,54 +74,5 @@ class Collection extends DB { $this->validDatabase = FALSE; } } - - /** - * Get genres for anime collection items - * - * @param array $filter - * @return array - */ - public function getGenreList(array $filter = []): array - { - $this->db->select('hummingbird_id, genre') - ->from('genre_anime_set_link gl') - ->join('genres g', 'g.id=gl.genre_id', 'left'); - - - if ( ! empty($filter)) - { - $this->db->whereIn('hummingbird_id', $filter); - } - - $query = $this->db->orderBy('hummingbird_id') - ->orderBy('genre') - ->get(); - - $output = []; - - foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) - { - $id = $row['hummingbird_id']; - $genre = $row['genre']; - - // Empty genre names aren't useful - if (empty($genre)) - { - continue; - } - - if (array_key_exists($id, $output)) - { - $output[$id][] = $genre; - } - else - { - $output[$id] = [$genre]; - } - } - - return $output; - } - } // End of Collection.php \ No newline at end of file From 4e2437f2bcf0fa550102b116d839775a8f69defd Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 22 Jan 2019 10:21:58 -0500 Subject: [PATCH 06/18] Fix error on attempt to insert a duplicate series --- app/views/collection/edit.php | 8 ++++---- src/Model/AnimeCollection.php | 30 ++++++++++++------------------ src/Model/Collection.php | 1 - 3 files changed, 16 insertions(+), 23 deletions(-) diff --git a/app/views/collection/edit.php b/app/views/collection/edit.php index 74e6605a..516858f0 100644 --- a/app/views/collection/edit.php +++ b/app/views/collection/edit.php @@ -14,13 +14,13 @@ - + - + - + @@ -28,7 +28,7 @@ diff --git a/src/Model/AnimeCollection.php b/src/Model/AnimeCollection.php index 0c1deb37..ea42e848 100644 --- a/src/Model/AnimeCollection.php +++ b/src/Model/AnimeCollection.php @@ -89,21 +89,6 @@ final class AnimeCollection extends Collection { return $output; } - /** - * Get item from collection for editing - * - * @param string $id - * @return array - */ - public function getCollectionEntry($id): array - { - $query = $this->db->from('anime_set') - ->where('hummingbird_id', $id) - ->get(); - - return $query->fetch(PDO::FETCH_ASSOC); - } - /** * Get full collection from the database * @@ -151,7 +136,16 @@ final class AnimeCollection extends Collection { */ public function add($data): void { - $anime = (object)$this->animeModel->getAnimeById($data['id']); + $id = $data['id']; + + // Check that the anime doesn't already exist + $existing = $this->get($id); + if ($existing === FALSE) + { + return; + } + + $anime = (object)$this->animeModel->getAnimeById($id); $this->db->set([ 'hummingbird_id' => $data['id'], 'slug' => $anime->slug, @@ -216,9 +210,9 @@ final class AnimeCollection extends Collection { * Get the details of a collection item * * @param int $kitsuId - * @return array + * @return array | false */ - public function get($kitsuId): array + public function get($kitsuId) { $query = $this->db->from('anime_set') ->where('hummingbird_id', $kitsuId) diff --git a/src/Model/Collection.php b/src/Model/Collection.php index 008b1556..44a33e4f 100644 --- a/src/Model/Collection.php +++ b/src/Model/Collection.php @@ -17,7 +17,6 @@ namespace Aviat\AnimeClient\Model; use Aviat\Ion\Di\ContainerInterface; -use PDO; use PDOException; /** From 8a8ea0b470cf7f3e25eb066fbc6357cd3c7e5874 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 28 Jan 2019 14:31:48 -0500 Subject: [PATCH 07/18] Cleanup redundant methods in Collection model --- src/Controller/AnimeCollection.php | 17 ++++++++-- src/Model/AnimeCollection.php | 50 +++++++++++------------------- src/Model/MangaCollection.php | 15 --------- 3 files changed, 32 insertions(+), 50 deletions(-) diff --git a/src/Controller/AnimeCollection.php b/src/Controller/AnimeCollection.php index ea2b45b5..3510910a 100644 --- a/src/Controller/AnimeCollection.php +++ b/src/Controller/AnimeCollection.php @@ -141,6 +141,7 @@ final class AnimeCollection extends BaseController { $data = $this->request->getParsedBody(); if (array_key_exists('hummingbird_id', $data)) { + // @TODO verify data was updated correctly $this->animeCollectionModel->update($data); $this->setFlashMessage('Successfully updated collection item.', 'success'); } @@ -165,8 +166,17 @@ final class AnimeCollection extends BaseController { $data = $this->request->getParsedBody(); if (array_key_exists('id', $data)) { - $this->animeCollectionModel->add($data); - $this->setFlashMessage('Successfully added collection item', 'success'); + // Check for existing entry + if ($this->animeCollectionModel->get($data['id']) !== FALSE) + { + $this->setFlashMessage('Anime already exists, can not create duplicate', 'info'); + } + else + { + // @TODO actually verify that collection item was added + $this->animeCollectionModel->add($data); + $this->setFlashMessage('Successfully added collection item', 'success'); + } } else { @@ -189,10 +199,11 @@ final class AnimeCollection extends BaseController { $this->redirect('/anime-collection/view', 303); } + // @TODO verify that item was actually deleted $this->animeCollectionModel->delete($data); $this->setFlashMessage('Successfully removed anime from collection.', 'success'); $this->redirect('/anime-collection/view', 303); } } -// End of CollectionController.php \ No newline at end of file +// End of AnimeCollection.php \ No newline at end of file diff --git a/src/Model/AnimeCollection.php b/src/Model/AnimeCollection.php index ea42e848..c69888c6 100644 --- a/src/Model/AnimeCollection.php +++ b/src/Model/AnimeCollection.php @@ -112,7 +112,7 @@ final class AnimeCollection extends Collection { // Add genres associated with each item $rows = $query->fetchAll(PDO::FETCH_ASSOC); - $genres = $this->getGenresForList(); + $genres = $this->getGenreList(); foreach($rows as &$row) { @@ -275,29 +275,6 @@ final class AnimeCollection extends Collection { return $output; } - /** - * Get the list of genres from the database - * - * @return array - */ - private function getGenresForList(): array - { - $query = $this->db->select('hummingbird_id, genre') - ->from('genres g') - ->join('genre_anime_set_link gasl', 'gasl.genre_id=g.id') - ->get(); - - $rows = $query->fetchAll(PDO::FETCH_ASSOC); - $output = []; - - foreach($rows as $row) - { - $output[$row['hummingbird_id']][] = $row['genre']; - } - - return $output; - } - /** * Update genre information for selected anime * @@ -353,9 +330,16 @@ final class AnimeCollection extends Collection { * @return array */ private function getGenreData(): array + { + return [ + 'genres' => $this->getExistingGenres(), + 'links' => $this->getExistingGenreLinkEntries(), + ]; + } + + private function getExistingGenres(): array { $genres = []; - $links = []; // Get existing genres $query = $this->db->select('id, genre') @@ -366,7 +350,13 @@ final class AnimeCollection extends Collection { $genres[$genre['id']] = $genre['genre']; } - // Get existing link table entries + return $genres; + } + + private function getExistingGenreLinkEntries(): array + { + $links = []; + $query = $this->db->select('hummingbird_id, genre_id') ->from('genre_anime_set_link') ->get(); @@ -375,17 +365,13 @@ final class AnimeCollection extends Collection { if (array_key_exists($link['hummingbird_id'], $links)) { $links[$link['hummingbird_id']][] = $link['genre_id']; - } - else + } else { $links[$link['hummingbird_id']] = [$link['genre_id']]; } } - return [ - 'genres' => $genres, - 'links' => $links - ]; + return $links; } } // End of AnimeCollectionModel.php \ No newline at end of file diff --git a/src/Model/MangaCollection.php b/src/Model/MangaCollection.php index 6c42f2bd..71238f42 100644 --- a/src/Model/MangaCollection.php +++ b/src/Model/MangaCollection.php @@ -88,21 +88,6 @@ final class MangaCollection extends Collection { return $output; } - /** - * Get item from collection for editing - * - * @param int $id - * @return array - */ - public function getCollectionEntry($id): array - { - $query = $this->db->from('anime_set') - ->where('hummingbird_id', $id) - ->get(); - - return $query->fetch(PDO::FETCH_ASSOC); - } - /** * Get full collection from the database * From 04c5b135a7a4431a4d543f1165ed32d1b1bd7e6a Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 29 Jan 2019 15:12:31 -0500 Subject: [PATCH 08/18] Add a per-controller-method check for authorization for private routes --- src/Controller.php | 23 +++++++++++++++++++++++ src/Controller/Anime.php | 28 ++++++++++++++++++++++++++++ src/Controller/AnimeCollection.php | 4 ++++ src/Controller/Manga.php | 20 ++++++++++++++++++++ src/Controller/Misc.php | 1 + src/Controller/Settings.php | 3 +++ 6 files changed, 79 insertions(+) diff --git a/src/Controller.php b/src/Controller.php index 08b117ef..6f0d7b44 100644 --- a/src/Controller.php +++ b/src/Controller.php @@ -33,6 +33,12 @@ class Controller { use ContainerAware; + /** + * The authentication object + * @var \Aviat\AnimeClient\API\Kitsu\Auth $auth ; + */ + protected $auth; + /** * Cache manager * @var \Psr\Cache\CacheItemPoolInterface @@ -96,6 +102,7 @@ class Controller { $session = $container->get('session'); $urlGenerator = $container->get('url-generator'); + $this->auth = $container->get('auth'); $this->cache = $container->get('cache'); $this->config = $container->get('config'); $this->request = $container->get('request'); @@ -172,6 +179,22 @@ class Controller { $this->session->set('redirect_url', NULL); } + /** + * Check if the current user is authenticated, else error and exit + */ + protected function checkAuth(): void + { + if ( ! $this->auth->isAuthenticated()) + { + $this->errorPage( + 403, + 'Forbidden', + 'You must log in to perform this action.' + ); + die(); + } + } + /** * Get the string output of a partial template * diff --git a/src/Controller/Anime.php b/src/Controller/Anime.php index 9bce1426..47be217b 100644 --- a/src/Controller/Anime.php +++ b/src/Controller/Anime.php @@ -67,6 +67,18 @@ final class Anime extends BaseController { */ public function index($type = KitsuWatchingStatus::WATCHING, string $view = NULL): void { + if ( ! in_array($type, [ + 'all', + 'watching', + 'plan_to_watch', + 'on_hold', + 'dropped', + 'completed', + ], TRUE)) + { + $this->errorPage(404, 'Not Found', 'Page not found'); + } + $title = array_key_exists($type, AnimeWatchingStatus::ROUTE_TO_TITLE) ? $this->formatTitle( $this->config->get('whose_list') . "'s Anime List", @@ -100,6 +112,8 @@ final class Anime extends BaseController { */ public function addForm(): void { + $this->checkAuth(); + $this->setSessionRedirect(); $this->outputHTML('anime/add', [ 'title' => $this->formatTitle( @@ -120,6 +134,8 @@ final class Anime extends BaseController { */ public function add(): void { + $this->checkAuth(); + $data = $this->request->getParsedBody(); if (empty($data['mal_id'])) @@ -155,6 +171,7 @@ final class Anime extends BaseController { */ public function edit(string $id, $status = 'all'): void { + $this->checkAuth(); $item = $this->model->getLibraryItem($id); $this->setSessionRedirect(); @@ -192,6 +209,7 @@ final class Anime extends BaseController { */ public function formUpdate(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); // Do some minor data manipulation for @@ -220,6 +238,8 @@ final class Anime extends BaseController { */ public function increment(): void { + $this->checkAuth(); + if (stripos($this->request->getHeader('content-type')[0], 'application/json') !== FALSE) { $data = Json::decode((string)$this->request->getBody()); @@ -229,6 +249,12 @@ final class Anime extends BaseController { $data = $this->request->getParsedBody(); } + if (empty($data)) + { + $this->errorPage(400, 'Bad Request', ''); + die(); + } + $response = $this->model->incrementLibraryItem(new FormItem($data)); $this->cache->clear(); @@ -242,6 +268,8 @@ final class Anime extends BaseController { */ public function delete(): void { + $this->checkAuth(); + $body = $this->request->getParsedBody(); $response = $this->model->deleteLibraryItem($body['id'], $body['mal_id']); diff --git a/src/Controller/AnimeCollection.php b/src/Controller/AnimeCollection.php index 3510910a..3332bf64 100644 --- a/src/Controller/AnimeCollection.php +++ b/src/Controller/AnimeCollection.php @@ -111,6 +111,7 @@ final class AnimeCollection extends BaseController { */ public function form($id = NULL): void { + $this->checkAuth(); $this->setSessionRedirect(); $action = $id === NULL ? 'Add' : 'Edit'; @@ -138,6 +139,7 @@ final class AnimeCollection extends BaseController { */ public function edit(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); if (array_key_exists('hummingbird_id', $data)) { @@ -163,6 +165,7 @@ final class AnimeCollection extends BaseController { */ public function add(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); if (array_key_exists('id', $data)) { @@ -193,6 +196,7 @@ final class AnimeCollection extends BaseController { */ public function delete(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); if ( ! array_key_exists('hummingbird_id', $data)) { diff --git a/src/Controller/Manga.php b/src/Controller/Manga.php index 8d1b81be..ed269482 100644 --- a/src/Controller/Manga.php +++ b/src/Controller/Manga.php @@ -66,6 +66,18 @@ final class Manga extends Controller { */ public function index($status = 'all', $view = ''): void { + if ( ! in_array($type, [ + 'all', + 'reading', + 'plan_to_read', + 'dropped', + 'on_hold', + 'completed', + ], TRUE)) + { + $this->errorPage(404, 'Not Found', 'Page not found'); + } + $statusTitle = MangaReadingStatus::ROUTE_TO_TITLE[$status]; $title = $this->formatTitle( @@ -99,6 +111,7 @@ final class Manga extends Controller { */ public function addForm(): void { + $this->checkAuth(); $statuses = MangaReadingStatus::KITSU_TO_TITLE; $this->setSessionRedirect(); @@ -121,6 +134,7 @@ final class Manga extends Controller { */ public function add(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); if ( ! array_key_exists('id', $data)) { @@ -160,6 +174,7 @@ final class Manga extends Controller { */ public function edit($id, $status = 'All'): void { + $this->checkAuth(); $this->setSessionRedirect(); $item = $this->model->getLibraryItem($id); $title = $this->formatTitle( @@ -198,6 +213,7 @@ final class Manga extends Controller { */ public function formUpdate(): void { + $this->checkAuth(); $data = $this->request->getParsedBody(); // Do some minor data manipulation for @@ -225,6 +241,8 @@ final class Manga extends Controller { */ public function increment(): void { + $this->checkAuth(); + if (stripos($this->request->getHeader('content-type')[0], 'application/json') !== FALSE) { $data = Json::decode((string)$this->request->getBody()); @@ -249,6 +267,8 @@ final class Manga extends Controller { */ public function delete(): void { + $this->checkAuth(); + $body = $this->request->getParsedBody(); $response = $this->model->deleteLibraryItem($body['id'], $body['mal_id']); diff --git a/src/Controller/Misc.php b/src/Controller/Misc.php index fdc12f66..a93ace98 100644 --- a/src/Controller/Misc.php +++ b/src/Controller/Misc.php @@ -89,6 +89,7 @@ final class Misc extends BaseController { */ public function logout(): void { + $this->checkAuth(); $auth = $this->container->get('auth'); $auth->logout(); diff --git a/src/Controller/Settings.php b/src/Controller/Settings.php index 729595ac..82a296dd 100644 --- a/src/Controller/Settings.php +++ b/src/Controller/Settings.php @@ -47,6 +47,9 @@ final class Settings extends BaseController { $this->anilistModel = $container->get('anilist-model'); $this->settingsModel = $container->get('settings-model'); + + // This is a rare controller where every route is private + $this->checkAuth(); } /** From f6278a13048f13348659fe41933054bf887ff25c Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 29 Jan 2019 16:01:31 -0500 Subject: [PATCH 09/18] Consistent spacing around auth checks --- src/Controller/Anime.php | 2 ++ src/Controller/AnimeCollection.php | 4 ++++ src/Controller/Manga.php | 4 ++++ src/Controller/Misc.php | 1 + 4 files changed, 11 insertions(+) diff --git a/src/Controller/Anime.php b/src/Controller/Anime.php index 47be217b..0f63dc6d 100644 --- a/src/Controller/Anime.php +++ b/src/Controller/Anime.php @@ -172,6 +172,7 @@ final class Anime extends BaseController { public function edit(string $id, $status = 'all'): void { $this->checkAuth(); + $item = $this->model->getLibraryItem($id); $this->setSessionRedirect(); @@ -210,6 +211,7 @@ final class Anime extends BaseController { public function formUpdate(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); // Do some minor data manipulation for diff --git a/src/Controller/AnimeCollection.php b/src/Controller/AnimeCollection.php index 3332bf64..3e0e382f 100644 --- a/src/Controller/AnimeCollection.php +++ b/src/Controller/AnimeCollection.php @@ -112,6 +112,7 @@ final class AnimeCollection extends BaseController { public function form($id = NULL): void { $this->checkAuth(); + $this->setSessionRedirect(); $action = $id === NULL ? 'Add' : 'Edit'; @@ -140,6 +141,7 @@ final class AnimeCollection extends BaseController { public function edit(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); if (array_key_exists('hummingbird_id', $data)) { @@ -166,6 +168,7 @@ final class AnimeCollection extends BaseController { public function add(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); if (array_key_exists('id', $data)) { @@ -197,6 +200,7 @@ final class AnimeCollection extends BaseController { public function delete(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); if ( ! array_key_exists('hummingbird_id', $data)) { diff --git a/src/Controller/Manga.php b/src/Controller/Manga.php index ed269482..9c97c1cb 100644 --- a/src/Controller/Manga.php +++ b/src/Controller/Manga.php @@ -112,6 +112,7 @@ final class Manga extends Controller { public function addForm(): void { $this->checkAuth(); + $statuses = MangaReadingStatus::KITSU_TO_TITLE; $this->setSessionRedirect(); @@ -135,6 +136,7 @@ final class Manga extends Controller { public function add(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); if ( ! array_key_exists('id', $data)) { @@ -175,6 +177,7 @@ final class Manga extends Controller { public function edit($id, $status = 'All'): void { $this->checkAuth(); + $this->setSessionRedirect(); $item = $this->model->getLibraryItem($id); $title = $this->formatTitle( @@ -214,6 +217,7 @@ final class Manga extends Controller { public function formUpdate(): void { $this->checkAuth(); + $data = $this->request->getParsedBody(); // Do some minor data manipulation for diff --git a/src/Controller/Misc.php b/src/Controller/Misc.php index a93ace98..b73afc5b 100644 --- a/src/Controller/Misc.php +++ b/src/Controller/Misc.php @@ -90,6 +90,7 @@ final class Misc extends BaseController { public function logout(): void { $this->checkAuth(); + $auth = $this->container->get('auth'); $auth->logout(); From 94b15f455cb60e04c89cc298a5a9453150e16d6d Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 12 Mar 2019 09:43:17 -0400 Subject: [PATCH 10/18] Remove XML codec class --- src/API/XML.php | 280 ------------------------------------------------ 1 file changed, 280 deletions(-) delete mode 100644 src/API/XML.php diff --git a/src/API/XML.php b/src/API/XML.php deleted file mode 100644 index ed4126ba..00000000 --- a/src/API/XML.php +++ /dev/null @@ -1,280 +0,0 @@ - - * @copyright 2015 - 2018 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.1 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\AnimeClient\API; - -use DOMDocument, DOMNode, DOMNodeList, InvalidArgumentException; - -/** - * XML <=> PHP Array codec - */ -final class XML { - - /** - * XML representation of the data - * - * @var string - */ - private $xml; - - /** - * PHP array version of the data - * - * @var array - */ - private $data; - - /** - * XML constructor - * - * @param string $xml - * @param array $data - */ - public function __construct(string $xml = '', array $data = []) - { - $this->setXML($xml)->setData($data); - } - - /** - * Serialize the data to an xml string - * - * @return string - */ - public function __toString(): string - { - return static::toXML($this->getData()); - } - - /** - * Get the data parsed from the XML - * - * @return array - */ - public function getData(): array - { - return $this->data; - } - - /** - * Set the data to create xml from - * - * @param array $data - * @return self - */ - public function setData(array $data): self - { - $this->data = $data; - return $this; - } - - /** - * Get the xml created from the data - * - * @return string - */ - public function getXML(): string - { - return $this->xml; - } - - /** - * Set the xml to parse the data from - * - * @param string $xml - * @return self - */ - public function setXML(string $xml): self - { - $this->xml = $xml; - return $this; - } - - /** - * Parse an xml document string to a php array - * - * @param string $xml - * @return array - */ - public static function toArray(string $xml): array - { - $data = []; - - $xml = static::stripXMLWhitespace($xml); - - $dom = new DOMDocument(); - $hasLoaded = @$dom->loadXML($xml); - - if ( ! $hasLoaded) - { - throw new InvalidArgumentException('Failed to load XML'); - } - - $root = $dom->documentElement; - - $data[$root->tagName] = []; - - if ($root->hasChildNodes()) - { - static::childNodesToArray($data[$root->tagName], $root->childNodes); - } - - return $data; - } - - /** - * Transform the array into XML - * - * @param array $data - * @return string - */ - public static function toXML(array $data): string - { - $dom = new DOMDocument(); - $dom->encoding = 'UTF-8'; - - static::arrayPropertiesToXmlNodes($dom, $dom, $data); - - return $dom->saveXML(); - } - - /** - * Parse the xml document string to a php array - * - * @return array - */ - public function parse(): array - { - $xml = $this->getXML(); - $data = static::toArray($xml); - return $this->setData($data)->getData(); - } - - /** - * Transform the array into XML - * - * @return string - */ - public function createXML(): string - { - return static::toXML($this->getData()); - } - - /** - * Strip whitespace from raw xml to remove irrelevant text nodes - * - * @param string $xml - * @return string - */ - private static function stripXMLWhitespace(string $xml): string - { - // Get rid of unimportant text nodes by removing - // whitespace characters from between xml tags, - // except for the xml declaration tag, Which looks - // something like: - /* */ - return preg_replace('/([^?])>\s+<', $xml); - } - - /** - * Recursively create array structure based on xml structure - * - * @param array $root A reference to the current array location - * @param DOMNodeList $nodeList The current NodeList object - * @return void - */ - private static function childNodesToArray(array &$root, DOMNodelist $nodeList): void - { - $length = $nodeList->length; - for ($i = 0; $i < $length; $i++) - { - $el = $nodeList->item($i); - $current =& $root[$el->nodeName]; - - // It's a top level element! - if (( ! $el->hasChildNodes()) || is_a($el->childNodes->item(0), 'DomText')) - { - $current = $el->textContent; - continue; - } - - // An empty value at the current root - if ($current === NULL) - { - $current = []; - static::childNodesToArray($current, $el->childNodes); - continue; - } - - $keys = array_keys($current); - - // Wrap the array in a containing array - // if there are only string keys - if ( ! is_numeric($keys[0])) - { - // But if there is only one key, don't wrap it in - // an array, just recurse to parse the child nodes - if (count($current) === 1) - { - static::childNodesToArray($current, $el->childNodes); - continue; - } - $current = [$current]; - } - - $current[] = []; - $index = count($current) - 1; - - static::childNodesToArray($current[$index], $el->childNodes); - } - } - - /** - * Recursively create xml nodes from array properties - * - * @param DOMDocument $dom The current DOM object - * @param DOMNode $parent The parent element to append children to - * @param array $data The data for the current node - * @return void - */ - private static function arrayPropertiesToXmlNodes(DOMDocument $dom, DOMNode $parent, array $data): void - { - foreach($data as $key => $props) - { - // 'Flatten' the array as you create the xml - if (is_numeric($key)) - { - foreach($props as $key => $props) - { - break; - } - } - - $node = $dom->createElement($key); - - if (\is_array($props)) - { - static::arrayPropertiesToXmlNodes($dom, $node, $props); - } - else - { - $tNode = $dom->createTextNode((string)$props); - $node->appendChild($tNode); - } - - $parent->appendChild($node); - } - } -} \ No newline at end of file From dfdc6b7356b8f4f3687d6ed320e1ee7973c828f3 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 12 Mar 2019 09:47:59 -0400 Subject: [PATCH 11/18] Remove XML tests --- tests/API/XMLTest.php | 98 - tests/test_data/XML/MALExport.xml | 14491 ------------------ tests/test_data/XML/minifiedXmlTestFile.xml | 2 - tests/test_data/XML/xmlTestFile.xml | 22 - 4 files changed, 14613 deletions(-) delete mode 100644 tests/API/XMLTest.php delete mode 100644 tests/test_data/XML/MALExport.xml delete mode 100644 tests/test_data/XML/minifiedXmlTestFile.xml delete mode 100644 tests/test_data/XML/xmlTestFile.xml diff --git a/tests/API/XMLTest.php b/tests/API/XMLTest.php deleted file mode 100644 index 3c796c8a..00000000 --- a/tests/API/XMLTest.php +++ /dev/null @@ -1,98 +0,0 @@ - - * @copyright 2015 - 2018 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @version 4.1 - * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient - */ - -namespace Aviat\AnimeClient\Tests\API; - -use Aviat\AnimeClient\API\XML; -use PHPUnit\Framework\TestCase; - -class XMLTest extends TestCase { - - protected $malExport; - protected $xml; - protected $expectedXml; - protected $object; - protected $array; - - public function setUp() - { - $this->malExport = file_get_contents(__DIR__ . '/../test_data/XML/MALExport.xml'); - $this->xml = file_get_contents(__DIR__ . '/../test_data/XML/xmlTestFile.xml'); - $this->expectedXml = file_get_contents(__DIR__ . '/../test_data/XML/minifiedXmlTestFile.xml'); - - $this->array = [ - 'entry' => [ - 'foo' => [ - 'bar' => [ - 'baz' => 42 - ] - ], - 'episode' => '11', - 'status' => 'watching', - 'score' => '7', - 'storage_type' => '1', - 'storage_value' => '2.5', - 'times_rewatched' => '1', - 'rewatch_value' => '3', - 'date_start' => '01152015', - 'date_finish' => '10232016', - 'priority' => '2', - 'enable_discussion' => '0', - 'enable_rewatching' => '1', - 'comments' => 'Should you say something?', - 'tags' => 'test tag, 2nd tag' - ] - ]; - - $this->object = new XML(); - } - - public function testToArray() - { - $this->assertEquals($this->array, XML::toArray($this->xml)); - } - - public function testMALExport() - { - $array = XML::toArray($this->malExport); - $this->assertEquals($array['myanimelist']['myinfo']['user_total_anime'], count($array['myanimelist']['anime'])); - // $this->assertEquals($array, XML::toArray($this->malExport)); - } - - public function testParse() - { - $this->object->setXML($this->xml); - $this->assertEquals($this->array, $this->object->parse()); - } - - public function testToXML() - { - $this->assertEquals($this->expectedXml, XML::toXML($this->array)); - } - - public function testCreateXML() - { - $this->object->setData($this->array); - $this->assertEquals($this->expectedXml, $this->object->createXML()); - } - - public function testToString() - { - $this->object->setData($this->array); - $this->assertEquals($this->expectedXml, $this->object->__toString()); - $this->assertEquals($this->expectedXml, (string) $this->object); - } -} \ No newline at end of file diff --git a/tests/test_data/XML/MALExport.xml b/tests/test_data/XML/MALExport.xml deleted file mode 100644 index fdfa4046..00000000 --- a/tests/test_data/XML/MALExport.xml +++ /dev/null @@ -1,14491 +0,0 @@ - - - - - - - 315714 - timw4mail - 1 - 629 - 6 - 532 - 9 - 9 - 73 - - - - - 6682 - - TV - 12 - 26603827 - 12 - 0000-00-00 - 2010-12-10 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 49 - - OVA - 5 - 0 - 5 - 0000-00-00 - 2012-06-25 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 50 - - TV - 24 - 22401829 - 24 - 2010-07-01 - 0000-00-00 - - 10 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 304 - - Movie - 1 - 22401858 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 303 - - TV - 48 - 23881830 - 48 - 0000-00-00 - 2010-08-14 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 880 - - TV - 22 - 22401870 - 22 - 0000-00-00 - 2010-07-05 - - 10 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 2198 - - Special - 2 - 22671594 - 2 - 0000-00-00 - 2010-07-05 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 101 - - TV - 13 - 20183958 - 13 - 2010-04-10 - 2010-04-10 - - 10 - - Retail DVD - Completed - - 1 - - - 0 - 0 - 0 - - - - 656 - - Special - 2 - 20261101 - 2 - 0000-00-00 - 0000-00-00 - - 8 - - Retail DVD - Completed - - 0 - - - 0 - 0 - 0 - - - - 17082 - - TV - 12 - 0 - 12 - 2013-04-09 - 2013-06-25 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30123 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31173 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 25013 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12149 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 14941 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5112 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-04-11 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6287 - - OVA - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 47 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16201 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-05 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32828 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 591 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-07-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15085 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 6547 - - TV - 13 - 0 - 13 - 0000-00-00 - 2011-09-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9989 - - TV - 11 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 11433 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-07-13 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11111 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21995 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-25 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 54 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7647 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-06-02 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9074 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-06-16 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 477 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 962 - - TV - 26 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 3297 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 492 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12581 - - OVA - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6166 - - TV - 12 - 32005693 - 12 - 0000-00-00 - 2011-05-15 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9736 - - TV - 12 - 31307082 - 12 - 0000-00-00 - 2011-06-26 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4999 - - TV - 12 - 31000809 - 12 - 0000-00-00 - 2011-04-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 66 - - TV - 26 - 20183989 - 26 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 1 - - - 0 - 0 - 0 - - - - 659 - - Special - 1 - 23321124 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1593 - - ONA - 1 - 23320976 - 1 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21185 - - TV - 25 - 0 - 25 - 0000-00-00 - 2014-09-21 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27663 - - TV - 25 - 0 - 25 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2251 - - TV - 13 - 25136301 - 1 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 6347 - - TV - 13 - 32647833 - 13 - 0000-00-00 - 2011-06-12 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5081 - - TV - 15 - 26694491 - 15 - 2010-11-16 - 2010-11-17 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 2986 - - TV - 26 - 26300283 - 26 - 2010-11-03 - 2010-11-06 - - 8 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 375 - - TV - 12 - 33320372 - 12 - 0000-00-00 - 2011-06-30 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3232 - - Special - 2 - 33466362 - 2 - 0000-00-00 - 2011-07-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22789 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 31904 - - TV - 10 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 13535 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 348 - - TV - 13 - 24382561 - 13 - 0000-00-00 - 2010-08-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 530 - - TV - 46 - 20184330 - 46 - 0000-00-00 - 0000-00-00 - - 8 - - Hard Drive - Completed - - 1 - - - 0 - 0 - 0 - - - - 14751 - - ONA - 26 - 0 - 26 - 2014-07-06 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31733 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 740 - - TV - 43 - 20184339 - 43 - 0000-00-00 - 0000-00-00 - - 7 - - Hard Drive - Completed - - 1 - - - 0 - 0 - 0 - - - - 2937 - - Special - 1 - 20250318 - 1 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 531 - - Movie - 1 - 20184479 - 1 - 0000-00-00 - 0000-00-00 - - 6 - - Hard Drive - Completed - - 0 - - - 0 - 0 - 0 - - - - 532 - - TV - 38 - 20184342 - 38 - 0000-00-00 - 0000-00-00 - - 7 - - Hard Drive - Completed - - 1 - - - 0 - 0 - 0 - - - - 997 - - Movie - 1 - 20184498 - 1 - 0000-00-00 - 0000-00-00 - - 5 - - Hard Drive - Completed - - 0 - - - 0 - 0 - 0 - - - - 1239 - - TV - 39 - 20251523 - 39 - 0000-00-00 - 0000-00-00 - - 5 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1278 - - Special - 1 - 20250361 - 1 - 0000-00-00 - 0000-00-00 - - 5 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3076 - - Special - 3 - 20251535 - 3 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1240 - - Movie - 1 - 20184507 - 1 - 0000-00-00 - 0000-00-00 - - 5 - - Hard Drive - Completed - - 0 - - - 0 - 0 - 0 - - - - 996 - - TV - 34 - 20184548 - 34 - 0000-00-00 - 2010-04-15 - - 8 - - Hard Drive - Completed - - 0 - - - 0 - 0 - 0 - - - - 22547 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-06-26 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31043 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31964 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16405 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-03-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10719 - - TV - 12 - 0 - 12 - 2014-07-31 - 2014-10-12 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 10897 - - OVA - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 14967 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21405 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-22 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 357 - - OVA - 4 - 20184222 - 4 - 0000-00-00 - 0000-00-00 - - 7 - - Retail DVD - Completed - - 1 - - - 0 - 0 - 0 - - - - 2131 - - OVA - 2 - 20184230 - 2 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32866 - - TV - 12 - 0 - 9 - 0000-00-00 - 0000-00-00 - - 0 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 15605 - - TV - 12 - 0 - 9 - 0000-00-00 - 0000-00-00 - - 7 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 1347 - - OVA - 8 - 0 - 8 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31478 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32867 - - TV - 12 - 0 - 6 - 0000-00-00 - 0000-00-00 - - 0 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 1689 - - Movie - 3 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5356 - - TV - 13 - 26234706 - 13 - 0000-00-00 - 2010-10-30 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 694 - - TV - 24 - 29835975 - 24 - 0000-00-00 - 2011-03-17 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 232 - - TV - 70 - 0 - 70 - 2012-08-11 - 2012-10-13 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10012 - - OVA - 12 - 0 - 12 - 0000-00-00 - 2012-01-26 - - 10 - - - Completed - - 3 - - - 0 - 0 - 0 - - - - 28999 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6024 - - TV - 104 - 33566725 - 104 - 0000-00-00 - 2011-07-04 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14277 - - TV - 26 - 0 - 26 - 0000-00-00 - 2012-12-24 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 59 - - TV - 26 - 0 - 26 - 0000-00-00 - 2011-10-09 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16169 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-03-28 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 60 - - TV - 24 - 32602611 - 24 - 0000-00-00 - 2011-07-02 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6645 - - TV - 12 - 31441376 - 12 - 0000-00-00 - 2011-05-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14741 - - TV - 12 - 0 - 12 - 2013-01-26 - 2013-03-01 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18671 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2167 - - TV - 23 - 20793727 - 23 - 0000-00-00 - 2010-05-03 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 1723 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 5 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4181 - - TV - 24 - 25187604 - 24 - 0000-00-00 - 2010-09-25 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6351 - - Special - 1 - 25187605 - 1 - 0000-00-00 - 2010-09-25 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4059 - - Special - 1 - 22304652 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 30383 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1575 - - TV - 25 - 26107956 - 25 - 0000-00-00 - 2010-12-12 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2904 - - TV - 25 - 27382373 - 25 - 2010-12-14 - 2010-12-17 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31318 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 289 - - TV - 13 - 32602626 - 13 - 2011-06-04 - 2011-06-05 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10029 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 982 - - OVA - 3 - 33625874 - 3 - 0000-00-00 - 2011-07-05 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1 - - TV - 26 - 22802932 - 26 - 0000-00-00 - 2010-08-21 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5 - - Movie - 1 - 0 - 1 - 2012-09-29 - 2012-09-30 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12549 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-09-29 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29976 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 26349 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29067 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16355 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11843 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15583 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 1535 - - TV - 37 - 30307803 - 37 - 0000-00-00 - 2011-04-07 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 24031 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8086 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 295 - - TV - 13 - 0 - 5 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 22733 - - TV - 51 - 0 - 51 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9330 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 28121 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6746 - - TV - 24 - 0 - 24 - 2012-11-14 - 2012-12-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27833 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23199 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27831 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14073 - - ONA - 10 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 788 - - OVA - 2 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2759 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3784 - - Movie - 1 - 0 - 1 - 0000-00-00 - 2013-05-22 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3785 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 3167 - - ONA - 6 - 0 - 6 - 0000-00-00 - 2014-03-01 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 378 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15883 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-10-07 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14829 - - TV - 10 - 0 - 10 - 0000-00-00 - 2013-09-15 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27525 - - TV - 10 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20509 - - TV - 10 - 0 - 10 - 0000-00-00 - 2014-09-10 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12565 - - OVA - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 356 - - TV - 24 - 20184259 - 24 - 0000-00-00 - 0000-00-00 - - 10 - - Retail DVD - Completed - - 6 - - - 0 - 0 - 0 - - - - 25537 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 6922 - - Movie - 1 - 20250413 - 1 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 3 - - - 0 - 0 - 0 - - - - 22297 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27821 - - Special - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28701 - - TV - 13 - 0 - 13 - 2015-04-03 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10087 - - TV - 13 - 0 - 13 - 0000-00-00 - 2011-12-31 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11741 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-07-01 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19165 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 13183 - - Special - 2 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5973 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 227 - - OVA - 6 - 30236601 - 6 - 0000-00-00 - 2011-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 120 - - TV - 26 - 26511482 - 26 - 0000-00-00 - 2010-11-12 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32696 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 71 - - TV - 24 - 20184275 - 24 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 4 - - - 0 - 0 - 0 - - - - 73 - - TV - 13 - 20184299 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 3 - - - 0 - 0 - 0 - - - - 1015 - - Special - 1 - 20184310 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 0 - - - 0 - 0 - 0 - - - - 72 - - TV - 12 - 20184288 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 4 - - - 0 - 0 - 0 - - - - 121 - - TV - 51 - 23076095 - 51 - 0000-00-00 - 2010-07-22 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5114 - - TV - 64 - 25136332 - 64 - 0000-00-00 - 2010-10-09 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 603 - - TV - 49 - 25136277 - 49 - 2010-11-14 - 2010-12-05 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22189 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-20 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4725 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 2890 - - Movie - 1 - 23882109 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 24765 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 30544 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 383 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 653 - - TV - 26 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 655 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 13287 - - Special - 2 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 652 - - TV - 9 - 0 - 9 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2206 - - Special - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 28907 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31637 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23289 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32607 - - TV - 12 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 0 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 16918 - - TV - 11 - 0 - 11 - 0000-00-00 - 2013-10-06 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19363 - - TV - 11 - 0 - 11 - 0000-00-00 - 2014-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1140 - - Movie - 1 - 22068693 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 241 - - TV - 11 - 0 - 11 - 0000-00-00 - 2012-09-15 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 487 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14131 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-03-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14811 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-03-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23079 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-09-25 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21273 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-26 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 456 - - TV - 26 - 25136305 - 26 - 0000-00-00 - 2010-10-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21431 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-06-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 268 - - OVA - 6 - 0 - 6 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 17895 - - TV - 24 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 0 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 2494 - - TV - 12 - 29330183 - 12 - 0000-00-00 - 2011-02-19 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8425 - - TV - 24 - 0 - 24 - 0000-00-00 - 2013-02-16 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 245 - - TV - 43 - 24405846 - 43 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 17729 - - TV - 13 - 0 - 13 - 0000-00-00 - 2015-01-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29093 - - Special - 1 - 0 - 1 - 0000-00-00 - 2015-04-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29095 - - TV - 10 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 134 - - TV - 13 - 23344353 - 13 - 0000-00-00 - 2010-08-10 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31630 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3299 - - TV - 12 - 31438351 - 12 - 0000-00-00 - 2011-04-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16 - - TV - 24 - 0 - 24 - 2012-11-30 - 2012-12-13 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1142 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-12-20 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 644 - - Special - 2 - 0 - 2 - 2012-12-09 - 2012-12-11 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30721 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6574 - - TV - 12 - 26603818 - 12 - 0000-00-00 - 2010-11-14 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21855 - - TV - 5 - 0 - 5 - 0000-00-00 - 2014-09-11 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5835 - - TV - 39 - 29437750 - 39 - 0000-00-00 - 2011-03-08 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32648 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1570 - - TV - 12 - 31354140 - 12 - 0000-00-00 - 2011-04-25 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30895 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2026 - - TV - 52 - 21677098 - 52 - 2010-06-05 - 2010-06-12 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 14653 - - TV - 12 - 0 - 12 - 2012-10-03 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16982 - - TV - 12 - 0 - 12 - 2013-04-08 - 2013-07-02 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4192 - - TV - 25 - 25136341 - 25 - 0000-00-00 - 2010-10-16 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15225 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-07-01 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 379 - - TV - 26 - 20184245 - 26 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5060 - - ONA - 52 - 24964761 - 26 - 0000-00-00 - 0000-00-00 - - 8 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 27989 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31988 - - TV - 13 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 9 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 8630 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5630 - - TV - 11 - 25889880 - 11 - 0000-00-00 - 2010-10-23 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 6372 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 6637 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 31500 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 934 - - TV - 26 - 20184844 - 26 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1889 - - TV - 24 - 20251580 - 24 - 0000-00-00 - 0000-00-00 - - 8 - - Hard Drive - Completed - - 0 - - - 0 - 0 - 0 - - - - 22835 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28825 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 33421 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20853 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8426 - - TV - 11 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 10935 - - Special - 2 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 431 - - Movie - 1 - 0 - 1 - 2014-10-17 - 2014-10-17 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15377 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-06-22 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8277 - - TV - 12 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 4550 - - TV - 13 - 31309188 - 13 - 0000-00-00 - 2011-04-24 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7088 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-08-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 488 - - TV - 12 - 0 - 8 - 0000-00-00 - 0000-00-00 - - 8 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 17831 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-09-22 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22123 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 249 - - TV - 167 - 32808219 - 167 - 0000-00-00 - 2012-03-14 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6811 - - TV - 26 - 0 - 26 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21327 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-23 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9750 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-09-30 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10357 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-09-17 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29785 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14719 - - TV - 26 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 20899 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 863 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-03-24 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5680 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7791 - - TV - 26 - 0 - 26 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15391 - - OVA - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16664 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 427 - - TV - 51 - 0 - 51 - 0000-00-00 - 2012-04-07 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 428 - - OVA - 1 - 0 - 1 - 0000-00-00 - 2012-04-07 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8525 - - TV - 12 - 31395677 - 12 - 0000-00-00 - 2011-04-26 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10080 - - TV - 12 - 31434923 - 12 - 0000-00-00 - 2011-06-27 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16706 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-10-07 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21563 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-22 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10372 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 14713 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-12-28 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 25681 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16009 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-10-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5914 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-06-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3958 - - TV - 13 - 25087416 - 13 - 0000-00-00 - 2010-09-22 - - 9 - - - Completed - - 3 - - - 0 - 0 - 0 - - - - 5978 - - Special - 1 - 0 - 1 - 0000-00-00 - 2012-03-24 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19685 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-07-02 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3503 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-04-09 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2593 - - Movie - 1 - 0 - 1 - 0000-00-00 - 2012-12-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3782 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3783 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4280 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4282 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5204 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5205 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 14807 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 6954 - - Special - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 145 - - TV - 26 - 22401816 - 26 - 0000-00-00 - 2010-06-29 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 7711 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 667 - - TV - 12 - 0 - 12 - 2012-04-21 - 2012-04-23 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1691 - - TV - 24 - 0 - 24 - 2012-04-28 - 2012-04-30 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 572 - - Movie - 1 - 20249809 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16662 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6205 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-12-04 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10076 - - Special - 2 - 0 - 2 - 0000-00-00 - 2014-04-18 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3464 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 516 - - TV - 358 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 7 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 18679 - - TV - 24 - 0 - 24 - 0000-00-00 - 2014-06-27 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 6045 - - TV - 25 - 0 - 25 - 2012-11-08 - 2012-11-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9656 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-12-03 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10152 - - Special - 1 - 0 - 1 - 0000-00-00 - 2012-11-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16732 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-09-21 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18495 - - TV - 12 - 0 - 4 - 0000-00-00 - 0000-00-00 - - 4 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 31798 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9260 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5678 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 11887 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-10-19 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31091 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31952 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13367 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-09-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30831 - - TV - 10 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8841 - - TV - 12 - 29248692 - 12 - 0000-00-00 - 2011-04-04 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10790 - - TV - 10 - 0 - 10 - 0000-00-00 - 2013-01-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15379 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-03-29 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31804 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8129 - - TV - 11 - 0 - 11 - 0000-00-00 - 2012-06-29 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4898 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 24011 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 97 - - TV - 26 - 20184563 - 26 - 0000-00-00 - 0000-00-00 - - 10 - - Retail DVD - Completed - - 0 - - - 0 - 0 - 0 - - - - 13655 - - TV - 26 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 14349 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19489 - - Movie - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 17265 - - TV - 25 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 189 - - TV - 24 - 0 - 24 - 0000-00-00 - 2014-06-20 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 963 - - Special - 1 - 0 - 1 - 0000-00-00 - 2014-06-20 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16353 - - TV - 13 - 0 - 13 - 2013-11-23 - 2014-01-04 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15051 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-04-02 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19111 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-06-30 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1887 - - TV - 24 - 20184007 - 24 - 2010-04-24 - 2010-04-25 - - 10 - - Retail DVD - Completed - - 2 - - - 0 - 0 - 0 - - - - 4472 - - OVA - 1 - 20916942 - 1 - 0000-00-00 - 2010-05-08 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 193 - - TV - 24 - 30620181 - 24 - 2011-04-06 - 2011-04-08 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 157 - - TV - 26 - 29148397 - 26 - 0000-00-00 - 2011-02-13 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19769 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 76 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-06-26 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9756 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-05-02 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 33795 - - TV - 12 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 0 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 21421 - - TV - 26 - 0 - 26 - 0000-00-00 - 2014-09-30 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20785 - - TV - 26 - 0 - 26 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10213 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-12-26 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21835 - - TV - 52 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 512 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16890 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-10-12 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 860 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21863 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-23 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14045 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-03-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14833 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5030 - - TV - 12 - 34568383 - 12 - 2011-07-21 - 2011-07-23 - - 9 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 9712 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10397 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-12-24 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32438 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11761 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-10-27 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14527 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-12-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 330 - - TV - 13 - 0 - 13 - 0000-00-00 - 2011-11-08 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20541 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-28 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 26085 - - TV - 12 - 0 - 12 - 0000-00-00 - 2015-03-26 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 585 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20033 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-01-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30384 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31560 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7627 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-04-05 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9510 - - TV - 8 - 0 - 8 - 0000-00-00 - 2013-04-13 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8424 - - TV - 12 - 32481308 - 12 - 0000-00-00 - 2011-06-04 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22225 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-23 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15315 - - TV - 10 - 0 - 10 - 0000-00-00 - 2013-03-17 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 17074 - - TV - 26 - 0 - 26 - 0000-00-00 - 2014-02-12 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 164 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30307 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9181 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 8917 - - TV - 26 - 0 - 26 - 2012-01-07 - 2012-07-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31442 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1738 - - TV - 12 - 0 - 12 - 2012-11-22 - 2012-12-02 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2926 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 26351 - - TV - 16 - 0 - 16 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16910 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 776 - - TV - 12 - 24619317 - 12 - 2010-09-04 - 2010-09-06 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5865 - - Special - 1 - 24619322 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13585 - - TV - 11 - 0 - 11 - 0000-00-00 - 2012-10-08 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12467 - - TV - 13 - 0 - 13 - 2012-08-01 - 2012-08-03 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1546 - - TV - 26 - 30324894 - 26 - 0000-00-00 - 2011-04-02 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 597 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 9934 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-09-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15689 - - TV - 4 - 0 - 4 - 0000-00-00 - 2013-07-25 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30 - - TV - 26 - 20185747 - 26 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 32 - - Movie - 1 - 20185756 - 1 - 0000-00-00 - 0000-00-00 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31404 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1210 - - TV - 24 - 20185817 - 24 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10165 - - TV - 26 - 31795187 - 26 - 0000-00-00 - 2011-09-25 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 229 - - TV - 12 - 20366516 - 12 - 0000-00-00 - 2010-05-19 - - 7 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 18897 - - TV - 20 - 0 - 20 - 0000-00-00 - 2014-05-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27787 - - TV - 12 - 0 - 12 - 2015-04-11 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30514 - - ONA - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 11597 - - TV - 11 - 0 - 11 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19815 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-25 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 20507 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30503 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 615 - - OVA - 5 - 31681730 - 5 - 0000-00-00 - 2011-05-07 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 920 - - Special - 1 - 31778587 - 1 - 0000-00-00 - 2011-05-07 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6512 - - TV - 12 - 33968115 - 12 - 0000-00-00 - 2011-07-13 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5957 - - ONA - 13 - 0 - 13 - 0000-00-00 - 2012-03-07 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11933 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2152 - - TV - 26 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 28819 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6324 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-08-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21557 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30276 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20931 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-27 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14199 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-12-28 - - 8 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 31143 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12355 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23673 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2966 - - TV - 13 - 25136296 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5341 - - TV - 12 - 0 - 12 - 0000-00-00 - 2015-04-11 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32729 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28297 - - TV - 24 - 0 - 24 - 2015-04-11 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8769 - - TV - 12 - 26503760 - 12 - 0000-00-00 - 2010-12-24 - - 10 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 10020 - - ONA - 4 - 0 - 4 - 0000-00-00 - 2011-10-14 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 13659 - - TV - 13 - 0 - 13 - 2013-04-07 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18857 - - ONA - 3 - 0 - 3 - 0000-00-00 - 2013-08-19 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14749 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19221 - - TV - 10 - 0 - 10 - 0000-00-00 - 2014-01-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 24705 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32013 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 785 - - OVA - 2 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 1569 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-09-14 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 853 - - TV - 26 - 29731889 - 26 - 0000-00-00 - 2011-03-05 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29803 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31181 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11179 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1943 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 326 - - TV - 4 - 0 - 4 - 2012-11-12 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16397 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-05 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 328 - - TV - 10 - 20366535 - 10 - 0000-00-00 - 2010-05-18 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 27775 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10711 - - ONA - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 527 - - TV - 276 - 0 - 276 - 0000-00-00 - 2014-07-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20159 - - Special - 4 - 0 - 4 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 610 - - TV - 12 - 20956003 - 12 - 0000-00-00 - 2010-05-08 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12021 - - TV - 52 - 0 - 52 - 0000-00-00 - 2012-12-30 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 721 - - TV - 38 - 31019740 - 38 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 327 - - TV - 26 - 25136273 - 26 - 0000-00-00 - 2010-09-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21325 - - TV - 15 - 0 - 15 - 0000-00-00 - 2014-04-08 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32360 - - TV - 12 - 0 - 7 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 6633 - - TV - 12 - 0 - 12 - 2012-11-17 - 2013-02-26 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11859 - - TV - 12 - 0 - 12 - 2012-11-07 - 2012-11-13 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10611 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 209 - - TV - 26 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 758 - - Movie - 1 - 20249926 - 1 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23309 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-22 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30296 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 210 - - TV - 161 - 20184420 - 161 - 0000-00-00 - 0000-00-00 - - 9 - - Hard Drive - Completed - - 5 - - - 0 - 0 - 0 - - - - 1007 - - OVA - 6 - 20264461 - 6 - 2010-04-18 - 2010-04-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1008 - - OVA - 2 - 20264544 - 2 - 2010-04-19 - 2010-04-19 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1011 - - OVA - 3 - 20264473 - 3 - 2010-04-19 - 2010-04-19 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1010 - - Movie - 1 - 20264562 - 1 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 418 - - Movie - 1 - 20388710 - 1 - 0000-00-00 - 2010-04-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 792 - - Movie - 1 - 20264528 - 1 - 0000-00-00 - 2010-04-19 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 25859 - - TV - 13 - 0 - 13 - 2015-04-04 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31240 - - TV - 25 - 0 - 25 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11491 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18099 - - TV - 12 - 0 - 12 - 2013-07-12 - 2013-09-28 - - 0 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13377 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-02 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1601 - - TV - 22 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 30015 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 31716 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4618 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 980 - - TV - 26 - 0 - 26 - 0000-00-00 - 2013-04-13 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28497 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22865 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1699 - - TV - 24 - 22429108 - 24 - 0000-00-00 - 2010-07-06 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 2993 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4214 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 64 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 65 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 21561 - - TV - 11 - 0 - 11 - 0000-00-00 - 2014-06-19 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20709 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-23 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23277 - - TV - 12 - 0 - 12 - 0000-00-00 - 2015-03-26 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29317 - - Special - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30749 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 17777 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-23 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3772 - - TV - 25 - 0 - 26 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32542 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 20047 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-30 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30187 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13759 - - TV - 24 - 0 - 24 - 0000-00-00 - 2013-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11499 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 7588 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 6203 - - TV - 13 - 0 - 13 - 2012-07-02 - 2012-07-03 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1881 - - TV - 13 - 33325082 - 13 - 0000-00-00 - 2011-06-30 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1882 - - TV - 13 - 33450610 - 13 - 2011-07-02 - 2011-07-10 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22877 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-09-30 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5909 - - TV - 12 - 0 - 12 - 0000-00-00 - 2013-01-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10464 - - ONA - 10 - 0 - 10 - 0000-00-00 - 2013-03-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11763 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-01-25 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4063 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-10-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31540 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22273 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 199 - - Movie - 1 - 31610471 - 1 - 0000-00-00 - 2011-05-01 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12611 - - TV - 26 - 0 - 26 - 0000-00-00 - 2012-09-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10308 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 15119 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 533 - - TV - 13 - 0 - 13 - 2012-04-11 - 2012-04-23 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 339 - - TV - 13 - 20184794 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18119 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-09-28 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2104 - - TV - 26 - 26108242 - 26 - 0000-00-00 - 2010-10-28 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 355 - - TV - 24 - 0 - 24 - 0000-00-00 - 2012-05-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2787 - - TV - 24 - 0 - 24 - 2012-11-23 - 2013-05-19 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6773 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 23273 - - TV - 22 - 0 - 22 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 29786 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 538 - - TV - 26 - 32030015 - 26 - 0000-00-00 - 2011-05-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16498 - - TV - 25 - 0 - 25 - 0000-00-00 - 2014-07-09 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 169 - - TV - 12 - 20184809 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - Retail DVD - Completed - - 2 - - - 0 - 0 - 0 - - - - 1727 - - TV - 12 - 0 - 12 - 2012-11-13 - 2012-11-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 23233 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30363 - - TV - 10 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8557 - - TV - 12 - 29900617 - 12 - 0000-00-00 - 2011-03-15 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 9888 - - Special - 2 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10378 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-12-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13125 - - TV - 25 - 0 - 25 - 0000-00-00 - 2013-03-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 25835 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12815 - - TV - 50 - 0 - 50 - 0000-00-00 - 2013-06-08 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32175 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28735 - - TV - 13 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 79 - - TV - 24 - 25136285 - 24 - 0000-00-00 - 2010-11-09 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2923 - - TV - 51 - 27487568 - 51 - 0000-00-00 - 2010-12-23 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7082 - - TV - 25 - 27609373 - 25 - 0000-00-00 - 2011-01-01 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5262 - - TV - 51 - 27609368 - 51 - 2010-12-24 - 2010-12-31 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 836 - - TV - 26 - 25136292 - 26 - 2010-12-23 - 2011-01-15 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4722 - - TV - 25 - 28769373 - 25 - 0000-00-00 - 2011-01-30 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 534 - - TV - 26 - 27344992 - 26 - 0000-00-00 - 2011-01-11 - - 7 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 535 - - TV - 26 - 31592163 - 26 - 0000-00-00 - 2011-05-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1172 - - TV - 26 - 31592199 - 26 - 0000-00-00 - 2011-06-16 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12191 - - TV - 48 - 0 - 26 - 0000-00-00 - 0000-00-00 - - 8 - - - Watching - - 0 - - - 0 - 0 - 0 - - - - 6802 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 20555 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-25 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1816 - - TV - 78 - 20185905 - 78 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 23209 - - TV - 13 - 0 - 13 - 0000-00-00 - 2015-01-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5958 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8407 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 22101 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-06-29 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3588 - - TV - 51 - 30307813 - 51 - 2011-04-11 - 2011-04-20 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21507 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 17849 - - TV - 12 - 0 - 12 - 2013-04-09 - 2013-06-25 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 8934 - - TV - 25 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 9253 - - TV - 24 - 0 - 24 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10863 - - Special - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 17821 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-10-29 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21067 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-27 - - 6 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3667 - - TV - 12 - 23344462 - 12 - 2010-07-28 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6381 - - TV - 12 - 29293505 - 12 - 0000-00-00 - 2011-02-19 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28621 - - TV - 11 - 0 - 11 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1582 - - OVA - 2 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14289 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-12-29 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5681 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 25 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 7311 - - Movie - 1 - 20250504 - 1 - 0000-00-00 - 2010-12-29 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 849 - - TV - 14 - 20184737 - 14 - 0000-00-00 - 0000-00-00 - - 9 - - Retail DVD - Completed - - 4 - - - 0 - 0 - 0 - - - - 4382 - - TV - 14 - 20184744 - 14 - 0000-00-00 - 2010-09-19 - - 7 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 5118 - - ONA - 25 - 20279286 - 25 - 2010-04-25 - 2010-04-25 - - 7 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 11757 - - TV - 25 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 21881 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 29758 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1577 - - OVA - 4 - 21369063 - 4 - 0000-00-00 - 0000-00-00 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 1372 - - TV - 47 - 21096743 - 47 - 0000-00-00 - 2010-09-24 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 2011 - - TV - 20 - 0 - 4 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3000 - - TV - 23 - 27959173 - 23 - 2011-01-03 - 2011-01-08 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6312 - - Special - 1 - 27959177 - 1 - 0000-00-00 - 2011-01-08 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4162 - - Special - 1 - 21531554 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2014 - - TV - 26 - 27225301 - 26 - 2010-12-08 - 2010-12-10 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16417 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32093 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 13333 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-09-24 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 696 - - TV - 26 - 0 - 26 - 0000-00-00 - 2013-05-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 539 - - OVA - 6 - 31915233 - 6 - 0000-00-00 - 2011-05-12 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 540 - - OVA - 6 - 31915238 - 6 - 2011-05-12 - 2011-05-15 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10351 - - Special - 1 - 31915243 - 1 - 0000-00-00 - 2011-05-15 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 2001 - - TV - 27 - 22802923 - 27 - 2010-07-29 - 0000-00-00 - - 9 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 513 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3974 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 3455 - - TV - 26 - 22428941 - 26 - 0000-00-00 - 2010-07-04 - - 8 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 13663 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 5667 - - OVA - 6 - 0 - 6 - 2014-08-01 - 2014-08-01 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6213 - - TV - 24 - 0 - 24 - 0000-00-00 - 2013-03-02 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16049 - - TV - 24 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 4654 - - TV - 24 - 0 - 19 - 0000-00-00 - 0000-00-00 - - 8 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 2236 - - Movie - 1 - 20276937 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1043 - - OVA - 2 - 0 - 2 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 6211 - - TV - 11 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 687 - - TV - 52 - 0 - 52 - 2013-01-01 - 2013-01-25 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14227 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-12-24 - - 10 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18139 - - TV - 21 - 0 - 21 - 0000-00-00 - 2014-05-26 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 523 - - Movie - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4224 - - TV - 25 - 0 - 25 - 0000-00-00 - 2012-04-16 - - 10 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 6 - - TV - 26 - 23589390 - 26 - 0000-00-00 - 2010-10-31 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 25157 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 343 - - TV - 25 - 20184781 - 25 - 0000-00-00 - 0000-00-00 - - 10 - - Retail DVD - Completed - - 5 - - - 0 - 0 - 0 - - - - 2580 - - Special - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 32681 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12317 - - ONA - 10 - 0 - 10 - 0000-00-00 - 2012-07-07 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1293 - - TV - 195 - 0 - 195 - 0000-00-00 - 2012-08-11 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10162 - - TV - 11 - 0 - 11 - 0000-00-00 - 2012-07-18 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3457 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 4752 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 180 - - TV - 13 - 22401884 - 13 - 2010-06-29 - 2010-06-29 - - 9 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 1111 - - OVA - 1 - 22465543 - 1 - 0000-00-00 - 2010-06-30 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1112 - - OVA - 1 - 22465548 - 1 - 0000-00-00 - 2010-06-30 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 181 - - TV - 13 - 22465553 - 13 - 2010-06-30 - 2010-06-30 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 1607 - - TV - 12 - 23344486 - 12 - 2010-07-26 - 0000-00-00 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 14283 - - TV - 12 - 0 - 12 - 2013-05-23 - 2013-06-10 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31439 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 3322 - - TV - 24 - 0 - 24 - 0000-00-00 - 2013-02-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30355 - - TV - 13 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 19023 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-31 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 21189 - - Movie - 1 - 0 - 1 - 0000-00-00 - 2014-01-20 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 19151 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-02-15 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16742 - - TV - 12 - 0 - 4 - 0000-00-00 - 0000-00-00 - - 0 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 21085 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-03-28 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 22117 - - OVA - 1 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 935 - - TV - 24 - 22429124 - 24 - 0000-00-00 - 2010-07-17 - - 9 - - - Completed - - 2 - - - 0 - 0 - 0 - - - - 6956 - - TV - 13 - 30953325 - 13 - 0000-00-00 - 2011-04-14 - - 10 - - - Completed - - 3 - - - 0 - 0 - 0 - - - - 25879 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 31715 - - Special - 1 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10521 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 9 - - - Completed - - 1 - - - 0 - 0 - 0 - - - - 14813 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-05 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 28677 - - TV - 12 - 0 - 12 - 2015-04-18 - 0000-00-00 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 5454 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-08-18 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 7762 - - OVA - 4 - 0 - 4 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10216 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 16241 - - TV - 13 - 0 - 13 - 0000-00-00 - 0000-00-00 - - 7 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18179 - - TV - 38 - 0 - 10 - 0000-00-00 - 0000-00-00 - - 8 - - - Dropped - - 0 - - - 0 - 0 - 0 - - - - 550 - - TV - 27 - 0 - 27 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 10495 - - TV - 12 - 0 - 12 - 0000-00-00 - 2011-09-20 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 30279 - - TV - 12 - 0 - 12 - 0000-00-00 - 0000-00-00 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 12403 - - TV - 12 - 0 - 12 - 0000-00-00 - 2012-09-17 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 14693 - - TV - 13 - 0 - 13 - 0000-00-00 - 2012-09-27 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 18677 - - TV - 12 - 0 - 12 - 0000-00-00 - 2014-01-28 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 15911 - - TV - 12 - 0 - 12 - 2013-04-09 - 2013-06-26 - - 8 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 1195 - - TV - 13 - 0 - 13 - 0000-00-00 - 2014-04-06 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - 11319 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 1840 - - TV - 12 - 0 - 1 - 0000-00-00 - 0000-00-00 - - 0 - - - On-Hold - - 0 - - - 0 - 0 - 0 - - - - 3712 - - TV - 12 - 0 - 0 - 0000-00-00 - 0000-00-00 - - 0 - - - Plan to Watch - - 0 - - - 0 - 0 - 0 - - - - 17681 - - TV - 13 - 0 - 13 - 0000-00-00 - 2013-07-07 - - 9 - - - Completed - - 0 - - - 0 - 0 - 0 - - - - \ No newline at end of file diff --git a/tests/test_data/XML/minifiedXmlTestFile.xml b/tests/test_data/XML/minifiedXmlTestFile.xml deleted file mode 100644 index c0490c7c..00000000 --- a/tests/test_data/XML/minifiedXmlTestFile.xml +++ /dev/null @@ -1,2 +0,0 @@ - -4211watching712.5130115201510232016201Should you say something?test tag, 2nd tag diff --git a/tests/test_data/XML/xmlTestFile.xml b/tests/test_data/XML/xmlTestFile.xml deleted file mode 100644 index b37cf964..00000000 --- a/tests/test_data/XML/xmlTestFile.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - 42 - - - 11 - watching - 7 - 1 - 2.5 - 1 - 3 - 01152015 - 10232016 - 2 - 0 - 1 - Should you say something? - test tag, 2nd tag - \ No newline at end of file From 6ee198c7425eac5189a3762ca866fffa721934ff Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Mon, 1 Apr 2019 16:17:40 -0400 Subject: [PATCH 12/18] Fix some edge cases --- src/API/Kitsu/Model.php | 8 +++++++- src/Controller/Manga.php | 4 ++-- src/Model/API.php | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index fab6da52..a9919f1d 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -422,8 +422,14 @@ final class Model { $item['included'] = $included; } $transformed = $this->animeListTransformer->transformCollection($data['data']); + $keyed = []; - $cacheItem->set($transformed); + foreach($transformed as $item) + { + $keyed[$item['id']] = $item; + } + + $cacheItem->set($keyed); $cacheItem->save(); } diff --git a/src/Controller/Manga.php b/src/Controller/Manga.php index 9c97c1cb..771aeecc 100644 --- a/src/Controller/Manga.php +++ b/src/Controller/Manga.php @@ -66,7 +66,7 @@ final class Manga extends Controller { */ public function index($status = 'all', $view = ''): void { - if ( ! in_array($type, [ + if ( ! in_array($status, [ 'all', 'reading', 'plan_to_read', @@ -337,4 +337,4 @@ final class Manga extends Controller { // @TODO: implement } } -// End of MangaController.php \ No newline at end of file +// End of MangaController.php diff --git a/src/Model/API.php b/src/Model/API.php index 3f7ef776..a411b7ae 100644 --- a/src/Model/API.php +++ b/src/Model/API.php @@ -29,6 +29,11 @@ class API { */ protected function sortByName(array &$array, string $sortKey): void { + if (empty($array)) + { + return; + } + $sort = []; foreach ($array as $key => $item) @@ -37,5 +42,18 @@ class API { } array_multisort($sort, SORT_ASC, $array); + + // Re-key array items by their ids + if (array_key_exists('id', $array[0])) + { + $keyed = []; + + foreach($array as $item) + { + $keyed[$item['id']] = $item; + } + + $array = $keyed; + } } } \ No newline at end of file From 251bbadd9655ba50f0bf78d7de65d2a9ac1ef95c Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 08:50:57 -0400 Subject: [PATCH 13/18] Style tweaks. Fixes #16. --- public/css/app.min.css | 2 +- public/css/dark-override.css | 8 ++++++-- public/css/dark.min.css | 2 +- public/css/general.css | 6 +----- public/css/marx.css | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/public/css/app.min.css b/public/css/app.min.css index e0eb998c..91e53538 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%;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;-moz-text-size-adjust:100%;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.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.6rem 0;overflow:auto;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:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:.8rem;overflow:auto;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;-webkit-box-sizing:inherit;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:.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: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,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 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem}h1{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: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: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: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:1.6rem}dd{margin-left:4rem}ol,ul{margin-bottom:.8rem;padding-left:2rem}blockquote{border-left:.2rem solid #1271db;font-style:italic;margin:1.6rem 0;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:1rem 0;text-align:center}footer,hr{border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;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:.1rem solid #ccc;border-radius:0;display:inline-block;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:.8rem;text-align:left}input[type=color]{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:1px thin solid #444;outline:.1rem 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:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:.8rem 0}legend{border-bottom:.1rem solid #ccc;color:#444;display:block;margin-bottom:.8rem;padding:.8rem 0;width:100%}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:.2rem solid #444;border-radius:0;color:#444;cursor:pointer;display:inline-block;margin-bottom:.8rem;margin-right:.4rem;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{-webkit-box-shadow:none;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:.2rem solid transparent;color:#444;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:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:.8rem}td,th{border:.1rem solid #ccc;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: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{-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto}td{padding:1rem}thead td,thead th{padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}iframe{display:block;margin:0 auto}.bracketed{color:#12db18}#main-nav a,.bracketed{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-start{-ms-flex-line-pack:start;align-content:flex-start}.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-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-self-center{-ms-flex-item-align:center;align-self:center}.flex-space-evenly{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}.flex{display:inline-block;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;position:relative}.media-wrap-flex{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:space-evenly;align-content:space-evenly;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative}td .media-wrap-flex{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.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 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full-width{width:100%}.full-height{max-height:none}.toph{margin-top:0}#main-nav{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem;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}.sorting,.sorting-asc,.sorting-desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting-asc:before{content:" ↑\00a0"}.sorting-desc:before{content:" ↓\00a0"}.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}.invisible tbody>tr:nth-child(odd){background:inherit}.borderless,.borderless td,.borderless th,.borderless tr,.invisible td,.invisible th,.invisible tr{-webkit-box-shadow:none;box-shadow:none;border:0}.message,.static-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,.static-message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success,.static-message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info,.static-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:312px;margin:.25em .125em;z-index:0;background:rgba(0,0,0,.15)}.details picture.cover,picture.cover{display:inline;display:initial;width:100%}.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:2px 2px 2px #000;color:#fff;padding:.25em .125em;text-align:right;z-index:2}.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}.media>.name a{display:inline-block;-webkit-transition:none;transition:none}.media .name a:before{content:"";display:block;height:312px;left:0;position:absolute;top:0;width:220px;z-index:-1}.media-list .media:hover .name a:before{background:rgba(0,0,0,.75)}.media>.name span.canonical{font-weight:700}.media>.name small{font-weight:400}.media:hover .name{background:rgba(0,0,0,.75)}.media-list .media>.name a:hover,.media-list .media>.name a:hover small{color:#1271db}.media:hover>.edit-buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.media:hover{-webkit-transition:.25s ease;transition:.25s ease}.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:2px 2px 2px #000}.anime .name,.manga .name{background:#000;background:rgba(0,0,0,.45);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%;display:inline-block;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;z-index:2}.anime .row>div,.manga .row>div{font-size:.8em;display:inline-block;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle;z-index:2}.anime .media>button.plus-one{border-color:hsla(0,0%,100%,.65);position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px);z-index:50}.anime .media>button.plus-one:hover{color:hsla(0,0%,100%,.65);background:#888}.anime .media>button.plus-one:active{background:#444}.manga .row{padding:1px}.manga .media{height:310px;margin:.25em}.manga .media>.edit-buttons{position:absolute;top:86px;top:calc(50% - 22.4px);left:43.5px;left:calc(50% - 66.5px);z-index:40}.manga .media>.edit-buttons button{border-color:hsla(0,0%,100%,.65)}.manga .media>.edit-buttons:hover button{color:hsla(0,0%,100%,.65);background:#888}.manga .media>.edit-buttons button:active{background:#444}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.media.search>.row{z-index:6}.big-check,.mal-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%;z-index:5}#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:1.5rem auto 0;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:80%;margin:0 auto}.fixed .text{max-width:40em}.details .cover{display:block}.details .flex>*{margin:1rem}.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(2n){text-align:left}.details a h1,.details a h2{margin-top:0}.character,.person,.small-character{width:225px;height:350px;vertical-align:middle;white-space:nowrap;position:relative}.person{width:225px;height:338px}.small-person{width:200px;height:300px}.character a{height:350px}.character:hover .name,.small-character:hover .name{background:rgba(0,0,0,.8)}.small-character a{display:inline-block;width:100%;height:100%}.character .name,.small-character .name{position:absolute;bottom:0;left:0;z-index:10}.character img,.character picture,.person img,.person picture,.small-character img,.small-character picture{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5;max-height:350px;max-width:225px}.person img,.person picture{max-height:338px}.small-person img,.small-person picture{max-height:300px;max-width:200px}.min-table{min-width:0;margin-left:0}.max-table{min-width:100%;margin:0}aside.info{max-width:33%}.fixed aside.info{max-width:390px}aside.info img,aside.info picture{display:block;margin:0 auto}aside.info+article{max-width:66%}.small-character{width:160px;height:250px}.small-character img,.small-character picture{max-height:250px;max-width:160px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover-streaming-link{display:none}.media:hover .cover-streaming-link{display:block}.cover-streaming-link .streaming-logo{width:20px;height:20px;-webkit-filter:drop-shadow(0 -1px 4px #fff);filter:drop-shadow(0 -1px 4px #fff)}.settings.form .content article{margin:1em;display:inline-block;width:auto}.responsive-iframe{margin-top:1em;overflow:hidden;padding-bottom:56.25%;position:relative;height:0}.responsive-iframe iframe{left:0;top:0;height:100%;width:100%;position:absolute}.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%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%}.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 #000}.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 #000}.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 #000}@-webkit-keyframes cssload-rotate-one{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 cssload-rotate-one{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 cssload-rotate-two{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 cssload-rotate-two{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 cssload-rotate-three{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 cssload-rotate-three{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)}}#loading-shadow{background:rgba(0,0,0,.8);z-index:500}#loading-shadow,#loading-shadow .loading-wrapper{position:fixed;top:0;left:0;width:100%;height:100%}#loading-shadow .loading-wrapper{z-index:501;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#loading-shadow .loading-content{position:relative;color:#fff}.loading-content .cssload-inner.cssload-one,.loading-content .cssload-inner.cssload-three,.loading-content .cssload-inner.cssload-two{border-color:#fff}.tabs{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#efefef;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin-top:1.5em}.tabs>label{border:1px solid #e5e5e5;width:100%;padding:20px 30px;background:#e5e5e5;cursor:pointer;font-weight:700;font-size:18px;color:#7f7f7f;-webkit-transition:background .1s,color .1s;transition:background .1s,color .1s}.tabs>label:hover{background:#d8d8d8}.tabs>label:active{background:#ccc}.tabs>[type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.tabs>[type=radio]{position:absolute;opacity:0}.tabs>[type=radio]:checked+label{border-bottom:1px solid #fff;background:#fff;color:#000}.tabs>[type=radio]:checked+label+.content{display:block}.tabs .content,.tabs>[type=radio]:checked+label+.content{border:1px solid #e5e5e5;border-top:0;padding:15px;background:#fff;width:100%;margin:0 auto;overflow:auto}.tabs .content{display:none;max-height:950px}.tabs .content.full-height{max-height:none}@media (min-width:800px){.tabs>label{width:auto}.tabs .content{-webkit-box-ordinal-group:100;-ms-flex-order:99;order:99}}.vertical-tabs{border:1px solid #e5e5e5;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto;position:relative;width:100%}.vertical-tabs input[type=radio]{position:absolute;opacity:0}.vertical-tabs .tab{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.vertical-tabs .tab,.vertical-tabs .tab label{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vertical-tabs .tab label{background:#e5e5e5;border:1px solid #e5e5e5;color:#7f7f7f;cursor:pointer;font-size:18px;font-weight:700;padding:0 20px;width:28%}.vertical-tabs .tab label:hover{background:#d8d8d8}.vertical-tabs .tab label:active{background:#ccc}.vertical-tabs .tab .content{display:none;border:1px solid #e5e5e5;border-left:0;border-right:0;max-height:950px;overflow:auto}.vertical-tabs .tab .content.full-height{max-height:none}.vertical-tabs [type=radio]:checked+label{border:0;background:#fff;color:#000;width:38%}.vertical-tabs [type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.vertical-tabs [type=radio]:checked~.content{display:block}@media screen and (max-width:1100px){.flex{-ms-flex-wrap:wrap;flex-wrap:wrap}.fixed aside.info,.fixed aside.info+article,aside.info,aside.info+article{max-width:none;width:100%}}@media screen and (max-width:800px){*{max-width:none}table{-webkit-box-shadow:none;box-shadow:none}.details .flex>*,body{margin:0}table,table.align-center,table .align-right,table td,table th{border:0;margin-left:auto;margin-right:auto;text-align:left;width:100%}table td{display:inline-block}table.media-details,table tbody{width:100%}table.media-details td{display:block;text-align:left!important;width:100%}table thead{display:none}.details .media-details td:nth-child(odd){font-weight:700;width:100%}table.streaming-links tr td:not(:first-child){display:none}}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}img,picture{width:100%}main{padding:0 .5rem .5rem}.media{margin:2px 0}.details{padding:.5rem}.tabs>[type=radio]:checked+label{background:#fff}.vertical-tabs .tab{-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs .content,.tabs>[type=radio]:checked+label+.content,.vertical-tabs .tab .content{display:block;border:0;max-height:none}.tabs>[type=radio]:checked+label,.tabs>label,.tabs>label:active,.tabs>label:hover,.vertical-tabs .tab label,.vertical-tabs .tab label:active,.vertical-tabs .tab label:hover,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:focus+label{background:#fff;border:0;width:100%;cursor:default;color:#000}} \ No newline at end of file +:root{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;-moz-text-size-adjust:100%;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.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.6rem 0;overflow:auto;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:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:.8rem;overflow:auto;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;-webkit-box-sizing:inherit;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}input,select,textarea{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: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,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 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem}h1{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: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: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: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:1.6rem}dd{margin-left:4rem}ol,ul{margin-bottom:.8rem;padding-left:2rem}blockquote{border-left:.2rem solid #1271db;font-style:italic;margin:1.6rem 0;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:1rem 0;text-align:center}footer,hr{border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;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:.1rem solid #ccc;border-radius:0;display:inline-block;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:.8rem;text-align:left}input[type=color]{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:1px thin solid #444;outline:.1rem 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:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:.8rem 0}legend{border-bottom:.1rem solid #ccc;color:#444;display:block;margin-bottom:.8rem;padding:.8rem 0;width:100%}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:.2rem solid #444;border-radius:0;color:#444;cursor:pointer;display:inline-block;margin-bottom:.8rem;margin-right:.4rem;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{-webkit-box-shadow:none;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:.2rem solid transparent;color:#444;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:#000;border-color:rgba(0,0,0,.2)}nav a:active{border-color:#000;border-color:rgba(0,0,0,.56)}caption{padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:.8rem}td,th{border:.1rem solid #ccc;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: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:#fff;background:hsla(0,0%,100%,.65);border-radius:.5em;margin:0}table{-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto}td{padding:1rem}thead td,thead th{padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}iframe{display:block;margin:0 auto}.bracketed{color:#12db18}#main-nav a,.bracketed{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-start{-ms-flex-line-pack:start;align-content:flex-start}.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-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-self-center{-ms-flex-item-align:center;align-self:center}.flex-space-evenly{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}.flex{display:inline-block;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;position:relative}.media-wrap-flex{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:space-evenly;align-content:space-evenly;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative}td .media-wrap-flex{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.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 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full-width{width:100%}.full-height{max-height:none}.toph{margin-top:0}#main-nav{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem;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}.sorting,.sorting-asc,.sorting-desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting-asc:before{content:" ↑\00a0"}.sorting-desc:before{content:" ↓\00a0"}.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}.invisible tbody>tr:nth-child(odd){background:inherit}.borderless,.borderless td,.borderless th,.borderless tr,.invisible td,.invisible th,.invisible tr{-webkit-box-shadow:none;box-shadow:none;border:0}.message,.static-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,.static-message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success,.static-message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info,.static-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:312px;margin:.25em .125em;z-index:0;background:#000;background:rgba(0,0,0,.15)}.details picture.cover,picture.cover{display:inline;display:initial;width:100%}.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:2px 2px 2px #000;color:#fff;padding:.25em .125em;text-align:right;z-index:2}.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}.media>.name a{display:inline-block;-webkit-transition:none;transition:none}.media .name a:before{content:"";display:block;height:312px;left:0;position:absolute;top:0;width:220px;z-index:-1}.media-list .media:hover .name a:before{background:#000;background:rgba(0,0,0,.75)}.media>.name span.canonical{font-weight:700}.media>.name small{font-weight:400}.media:hover .name{background:#000;background:rgba(0,0,0,.75)}.media-list .media>.name a:hover,.media-list .media>.name a:hover small{color:#1271db}.media:hover>.edit-buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.media:hover{-webkit-transition:.25s ease;transition:.25s ease}.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:2px 2px 2px #000}.anime .name,.manga .name{background:#000;background:rgba(0,0,0,.45);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%;display:inline-block;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;z-index:2}.anime .row>div,.manga .row>div{font-size:.8em;display:inline-block;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle;z-index:2}.anime .media>button.plus-one{border-color:hsla(0,0%,100%,.65);position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px);z-index:50}.anime .media>button.plus-one:hover{color:hsla(0,0%,100%,.65);background:#888}.anime .media>button.plus-one:active{background:#444}.manga .row{padding:1px}.manga .media{height:310px;margin:.25em}.manga .media>.edit-buttons{position:absolute;top:86px;top:calc(50% - 22.4px);left:43.5px;left:calc(50% - 66.5px);z-index:40}.manga .media>.edit-buttons button{border-color:hsla(0,0%,100%,.65)}.manga .media>.edit-buttons:hover button{color:hsla(0,0%,100%,.65);background:#888}.manga .media>.edit-buttons button:active{background:#444}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.media.search>.row{z-index:6}.big-check,.mal-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:#000;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;width:100%;z-index:5}#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:1.5rem auto 0;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:80%;margin:0 auto}.details .cover{display:block}.details .flex>*{margin:1rem}.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(2n){text-align:left}.details a h1,.details a h2{margin-top:0}.character,.person,.small-character{width:225px;height:350px;vertical-align:middle;white-space:nowrap;position:relative}.person{width:225px;height:338px}.small-person{width:200px;height:300px}.character a{height:350px}.character:hover .name,.small-character:hover .name{background:#000;background:rgba(0,0,0,.8)}.small-character a{display:inline-block;width:100%;height:100%}.character .name,.small-character .name{position:absolute;bottom:0;left:0;z-index:10}.character img,.character picture,.person img,.person picture,.small-character img,.small-character picture{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5;max-height:350px;max-width:225px}.person img,.person picture{max-height:338px}.small-person img,.small-person picture{max-height:300px;max-width:200px}.min-table{min-width:0;margin-left:0}.max-table{min-width:100%;margin:0}aside.info{max-width:33%}.fixed aside.info{max-width:390px}aside.info img,aside.info picture{display:block;margin:0 auto}aside.info+article{max-width:66%}.small-character{width:160px;height:250px}.small-character img,.small-character picture{max-height:250px;max-width:160px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover-streaming-link{display:none}.media:hover .cover-streaming-link{display:block}.cover-streaming-link .streaming-logo{width:20px;height:20px;-webkit-filter:drop-shadow(0 -1px 4px #fff);filter:drop-shadow(0 -1px 4px #fff)}.settings.form .content article{margin:1em;display:inline-block;width:auto}.responsive-iframe{margin-top:1em;overflow:hidden;padding-bottom:56.25%;position:relative;height:0}.responsive-iframe iframe{left:0;top:0;height:100%;width:100%;position:absolute}.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%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%}.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 #000}.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 #000}.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 #000}@-webkit-keyframes cssload-rotate-one{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 cssload-rotate-one{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 cssload-rotate-two{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 cssload-rotate-two{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 cssload-rotate-three{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 cssload-rotate-three{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)}}#loading-shadow{background:#000;background:rgba(0,0,0,.8);z-index:500}#loading-shadow,#loading-shadow .loading-wrapper{position:fixed;top:0;left:0;width:100%;height:100%}#loading-shadow .loading-wrapper{z-index:501;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#loading-shadow .loading-content{position:relative;color:#fff}.loading-content .cssload-inner.cssload-one,.loading-content .cssload-inner.cssload-three,.loading-content .cssload-inner.cssload-two{border-color:#fff}.tabs{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#efefef;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin-top:1.5em}.tabs>label{border:1px solid #e5e5e5;width:100%;padding:20px 30px;background:#e5e5e5;cursor:pointer;font-weight:700;font-size:18px;color:#7f7f7f;-webkit-transition:background .1s,color .1s;transition:background .1s,color .1s}.tabs>label:hover{background:#d8d8d8}.tabs>label:active{background:#ccc}.tabs>[type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.tabs>[type=radio]{position:absolute;opacity:0}.tabs>[type=radio]:checked+label{border-bottom:1px solid #fff;background:#fff;color:#000}.tabs>[type=radio]:checked+label+.content{display:block}.tabs .content,.tabs>[type=radio]:checked+label+.content{border:1px solid #e5e5e5;border-top:0;padding:15px;background:#fff;width:100%;margin:0 auto;overflow:auto}.tabs .content{display:none;max-height:950px}.tabs .content.full-height{max-height:none}@media (min-width:800px){.tabs>label{width:auto}.tabs .content{-webkit-box-ordinal-group:100;-ms-flex-order:99;order:99}}.vertical-tabs{border:1px solid #e5e5e5;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto;position:relative;width:100%}.vertical-tabs input[type=radio]{position:absolute;opacity:0}.vertical-tabs .tab{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.vertical-tabs .tab,.vertical-tabs .tab label{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vertical-tabs .tab label{background:#e5e5e5;border:1px solid #e5e5e5;color:#7f7f7f;cursor:pointer;font-size:18px;font-weight:700;padding:0 20px;width:28%}.vertical-tabs .tab label:hover{background:#d8d8d8}.vertical-tabs .tab label:active{background:#ccc}.vertical-tabs .tab .content{display:none;border:1px solid #e5e5e5;border-left:0;border-right:0;max-height:950px;overflow:auto}.vertical-tabs .tab .content.full-height{max-height:none}.vertical-tabs [type=radio]:checked+label{border:0;background:#fff;color:#000;width:38%}.vertical-tabs [type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.vertical-tabs [type=radio]:checked~.content{display:block}@media screen and (max-width:1100px){.flex{-ms-flex-wrap:wrap;flex-wrap:wrap}.fixed aside.info,.fixed aside.info+article,aside.info,aside.info+article{max-width:none;width:100%}}@media screen and (max-width:800px){*{max-width:none}table{-webkit-box-shadow:none;box-shadow:none}.details .flex>*,body{margin:0}table,table.align-center,table .align-right,table td,table th{border:0;margin-left:auto;margin-right:auto;text-align:left;width:100%}table td{display:inline-block}table.media-details,table tbody{width:100%}table.media-details td{display:block;text-align:left!important;width:100%}table thead{display:none}.details .media-details td:nth-child(odd){font-weight:700;width:100%}table.streaming-links tr td:not(:first-child){display:none}}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}img,picture{width:100%}main{padding:0 .5rem .5rem}.media{margin:2px 0}.details{padding:.5rem}.tabs>[type=radio]:checked+label{background:#fff}.vertical-tabs .tab{-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs .content,.tabs>[type=radio]:checked+label+.content,.vertical-tabs .tab .content{display:block;border:0;max-height:none}.tabs>[type=radio]:checked+label,.tabs>label,.tabs>label:active,.tabs>label:hover,.vertical-tabs .tab label,.vertical-tabs .tab label:active,.vertical-tabs .tab label:hover,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:focus+label{background:#fff;border:0;width:100%;cursor:default;color:#000}} \ No newline at end of file diff --git a/public/css/dark-override.css b/public/css/dark-override.css index 744fc3e3..d24f18d3 100644 --- a/public/css/dark-override.css +++ b/public/css/dark-override.css @@ -53,7 +53,8 @@ small { } input, select, textarea { - color: #111; + color: #ccc; + background: #444; } .message, .static-message { @@ -131,5 +132,8 @@ input, select, textarea { border-bottom: 1px solid #444; } - +.streaming-logo { + -webkit-filter: drop-shadow(0 0 2px #fff); + filter: drop-shadow(0 0 2px #fff); +} diff --git a/public/css/dark.min.css b/public/css/dark.min.css index acfd102f..4e42362a 100644 --- a/public/css/dark.min.css +++ b/public/css/dark.min.css @@ -1 +1 @@ -a{color:#1978e2;text-shadow:var(--link-shadow)}a:hover{color:#9e34fd}body,legend,nav ul li a{background:#333;color:#eee}nav a:hover,nav li.selected a{border-color:#fff}header button{background:transparent}table{-webkit-box-shadow:none;box-shadow:none}td,th{border-color:#111}thead td,thead th{background:#333;color:#eee}tbody>tr:nth-child(2n){background:#555;color:#eee}tbody>tr:nth-child(odd){background:#333}footer,hr,legend{border-color:#ddd}small{color:#fff}input,select,textarea{color:#111}.message,.static-message{text-shadow:var(--white-link-shadow)}.message.success,.static-message.success{background:#1f8454;border-color:#70dda9}.message.error,.static-message.error{border-color:#f3e6e6;background:#924949}.message.info,.static-message.info{border-color:#ffc;background:#bfbe3a}.invisible tbody>tr:nth-child(2n),.invisible tbody>tr:nth-child(odd),.invisible td,.invisible th,.invisible tr{background:transparent}#main-nav{border-bottom:.1rem solid #ddd}.tabs,.vertical-tabs{background:#333}.tabs>label,.vertical-tabs .tab label{background:#222;border:0;color:#eee}.vertical-tabs .tab label{width:100%}.tabs>label:hover,.vertical-tabs .tab>label:hover{background:#888}.tabs>label:active,.vertical-tabs .tab>label:active{background:#999}.tabs>[type=radio]:checked+label,.tabs>[type=radio]:checked+label+.content,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:checked~.content{border:0;background:#666;color:#eee}.vertical-tabs{background:#222;border:1px solid #444}.vertical-tabs .tab{background:#666;border-bottom:1px solid #444} \ No newline at end of file +a{color:#1978e2;text-shadow:var(--link-shadow)}a:hover{color:#9e34fd}body,legend,nav ul li a{background:#333;color:#eee}nav a:hover,nav li.selected a{border-color:#fff}header button{background:transparent}table{-webkit-box-shadow:none;box-shadow:none}td,th{border-color:#111}thead td,thead th{background:#333;color:#eee}tbody>tr:nth-child(2n){background:#555;color:#eee}tbody>tr:nth-child(odd){background:#333}footer,hr,legend{border-color:#ddd}small{color:#fff}input,select,textarea{color:#ccc;background:#444}.message,.static-message{text-shadow:var(--white-link-shadow)}.message.success,.static-message.success{background:#1f8454;border-color:#70dda9}.message.error,.static-message.error{border-color:#f3e6e6;background:#924949}.message.info,.static-message.info{border-color:#ffc;background:#bfbe3a}.invisible tbody>tr:nth-child(2n),.invisible tbody>tr:nth-child(odd),.invisible td,.invisible th,.invisible tr{background:transparent}#main-nav{border-bottom:.1rem solid #ddd}.tabs,.vertical-tabs{background:#333}.tabs>label,.vertical-tabs .tab label{background:#222;border:0;color:#eee}.vertical-tabs .tab label{width:100%}.tabs>label:hover,.vertical-tabs .tab>label:hover{background:#888}.tabs>label:active,.vertical-tabs .tab>label:active{background:#999}.tabs>[type=radio]:checked+label,.tabs>[type=radio]:checked+label+.content,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:checked~.content{border:0;background:#666;color:#eee}.vertical-tabs{background:#222;border:1px solid #444}.vertical-tabs .tab{background:#666;border-bottom:1px solid #444}.streaming-logo{-webkit-filter:drop-shadow(0 0 2px #fff);filter:url('data:image/svg+xml;charset=utf-8,#filter');filter:drop-shadow(0 0 2px #fff)} \ No newline at end of file diff --git a/public/css/general.css b/public/css/general.css index 79e2e631..8889c010 100644 --- a/public/css/general.css +++ b/public/css/general.css @@ -23,6 +23,7 @@ body { button { background: rgba(255, 255, 255, 0.65); + border-radius: 0.5em; margin: 0; } @@ -617,7 +618,6 @@ picture.cover { position: absolute; top: 147px; left: 0; - height: 100%; width: 100%; z-index: 5; } @@ -660,10 +660,6 @@ picture.cover { margin: 0 auto; } -.fixed .text { - max-width: 40em; -} - .details .cover { display: block; } diff --git a/public/css/marx.css b/public/css/marx.css index db716220..6c10d304 100644 --- a/public/css/marx.css +++ b/public/css/marx.css @@ -124,7 +124,7 @@ audio,canvas,iframe,img,svg,video { vertical-align:middle; } -button,input,select,textarea { +input,select,textarea { border:.1rem solid #ccc; color:inherit; font-family:inherit; From e73326fd6ccedf3779d4f888740c1499046ca9fc Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 08:53:34 -0400 Subject: [PATCH 14/18] Update css/js dependencies --- public/package.json | 4 +- public/yarn.lock | 863 ++++++++++++++++++++++++-------------------- 2 files changed, 472 insertions(+), 395 deletions(-) diff --git a/public/package.json b/public/package.json index 3a12562f..880c97a9 100644 --- a/public/package.json +++ b/public/package.json @@ -9,13 +9,13 @@ "watch": "concurrently \"npm:watch:css\" \"npm:watch:js\" --kill-others" }, "devDependencies": { - "@ampproject/rollup-plugin-closure-compiler": "^0.8.3", + "@ampproject/rollup-plugin-closure-compiler": "^0.9.0", "concurrently": "^4.0.1", "cssnano": "^4.0.5", "postcss-cachify": "^1.3.1", "postcss-cssnext": "^3.0.0", "postcss-import": "^12.0.0", - "rollup": "^0.66.6", + "rollup": "^1.11.3", "rollup-plugin-closure-compiler-js": "^1.0.6", "watch": "^1.0.2" } diff --git a/public/yarn.lock b/public/yarn.lock index 1d7d1c22..df4ddb87 100644 --- a/public/yarn.lock +++ b/public/yarn.lock @@ -2,16 +2,16 @@ # yarn lockfile v1 -"@ampproject/rollup-plugin-closure-compiler@^0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@ampproject/rollup-plugin-closure-compiler/-/rollup-plugin-closure-compiler-0.8.3.tgz#2d1fa0f62345a50926c44d9b5ad8775cc12c6297" - integrity sha512-8pTsWQ098MJUKY3iMfIMaThhv9SNhqC/8LRDmH7Ldvc5ATgzw6aMhYdt4vlZNN1hqIGQiMpHAB2I6J7ijGDNQg== +"@ampproject/rollup-plugin-closure-compiler@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@ampproject/rollup-plugin-closure-compiler/-/rollup-plugin-closure-compiler-0.9.0.tgz#e222d99679f641dff380c94d6923149afe2eee87" + integrity sha512-7HiDToV5suZm193LhLxuuMVuTyUGsYGlpw+a49O6egqkuMHa5tCajCi5+2J06r25FRQ1LdMGEtaBQUn2Q7oByA== dependencies: - acorn "6.0.2" + acorn "6.1.1" acorn-dynamic-import "4.0.0" - acorn-walk "6.1.0" - google-closure-compiler "20181008.0.0" - magic-string "0.25.1" + acorn-walk "6.1.1" + google-closure-compiler "20190325.0.0" + magic-string "0.25.2" temp-write "3.4.0" "@types/estree@0.0.39": @@ -19,25 +19,30 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/node@*": - version "10.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.2.tgz#d77f9faa027cadad9c912cd47f4f8b07b0fb0864" - integrity sha512-53ElVDSnZeFUUFIYzI8WLQ25IhWzb6vbddNp8UHlXQyU0ET2RhV5zg0NfubzU7iNMh5bBXb0htCzfvrSVNgzaQ== +"@types/node@^11.13.9": + version "11.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.10.tgz#4df59e5966b56f512bac98898bcbee5067411f0f" + integrity sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA== + +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== acorn-dynamic-import@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== -acorn-walk@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc" - integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg== +acorn-walk@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== -acorn@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" - integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== +acorn@6.1.1, acorn@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== alphanum-sort@^1.0.0: version "1.0.2" @@ -130,23 +135,37 @@ browserslist@^2.0.0, browserslist@^2.11.3: electron-to-chromium "^1.3.30" browserslist@^4.0.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.4.tgz#4477b737db6a1b07077275b24791e680d4300425" - integrity sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA== + version "4.5.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.6.tgz#ea42e8581ca2513fa7f371d4dd66da763938163d" + integrity sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg== dependencies: - caniuse-lite "^1.0.30000899" - electron-to-chromium "^1.3.82" - node-releases "^1.0.1" + caniuse-lite "^1.0.30000963" + electron-to-chromium "^1.3.127" + node-releases "^1.1.17" -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-api@^2.0.0: version "2.0.0" @@ -168,12 +187,17 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000899: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000963: + version "1.0.30000967" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz#a5039577806fccee80a04aaafb2c0890b1ee2f73" + integrity sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ== + +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: version "1.0.30000903" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000903.tgz#86d46227759279b3db345ddbe778335dbba9e858" integrity sha512-T1XVJEpGCoaq7MDw7/6hCdYUukmSaS+1l/OQJkLtw7Cr2+/+d67tNGKEbyiqf7Ck8x6EhNFUxjYFXXka0N/w5g== -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -184,7 +208,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.4.1: +chalk@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== @@ -193,6 +217,15 @@ chalk@^2.0.1, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -231,11 +264,13 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -coa@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" - integrity sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" q "^1.1.2" code-point-at@^1.0.0: @@ -301,42 +336,37 @@ color@^2.0.1: color-string "^1.5.2" color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.1.tgz#7abf5c0d38e89378284e873c207ae2172dcc8a61" + integrity sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg== dependencies: color-convert "^1.9.1" color-string "^1.5.2" -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concurrently@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.0.1.tgz#f6310fbadf2f476dd95df952edb5c0ab789f672c" - integrity sha512-D8UI+mlI/bfvrA57SeKOht6sEpb01dKk+8Yee4fbnkk1Ue8r3S+JXoEdFZIpzQlXJGtnxo47Wvvg/kG4ba3U6Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.0.tgz#17fdf067da71210685d9ea554423ef239da30d33" + integrity sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg== dependencies: chalk "^2.4.1" date-fns "^1.23.0" lodash "^4.17.10" read-pkg "^4.0.1" - rxjs "6.2.2" + rxjs "^6.3.3" spawn-command "^0.0.2-1" supports-color "^4.5.0" tree-kill "^1.1.0" yargs "^12.0.1" -connect-cachify-static@^1.3.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-cachify-static/-/connect-cachify-static-1.6.0.tgz#f97eac98fa0ac6e6fe793fc32565f9ca028e9b38" - integrity sha512-rmBn6Xy7erXXuUtWWoxztyyuLVCp/FxF07g7MWOIWhSJJb5mv08jInLUlbFE1b7LMLEs9ff0x8j0KFOBHY8eMw== +connect-cachify-static@^1.6.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/connect-cachify-static/-/connect-cachify-static-1.6.1.tgz#dfd0233391d242a815a959aab44f05467a5a215d" + integrity sha512-oCigAEiNxj7r8pBpKElATEV5mPQ9EcYx4dJecEUnfl4aZYb2WXqR21MC1adFu2h9eIb/TXRgH3wQ3cJxmzPPiw== dependencies: debug "~2" find "~0" @@ -355,12 +385,13 @@ core-util-is@~1.0.0: integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.0: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" + integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== dependencies: + import-fresh "^2.0.0" is-directory "^0.3.1" - js-yaml "^3.9.0" + js-yaml "^3.13.0" parse-json "^4.0.0" cross-spawn@^6.0.0: @@ -397,7 +428,7 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-select-base-adapter@~0.1.0: +css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== @@ -439,49 +470,49 @@ css-url-regex@^1.1.0: integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= css-what@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== cssesc@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== -cssnano-preset-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.5.tgz#d1756c0259d98ad311e601ba76e95c60f6771ac1" - integrity sha512-f1uhya0ZAjPYtDD58QkBB0R+uYdzHPei7cDxJyQQIHt5acdhyGXaSXl2nDLzWHLwGFbZcHxQtkJS8mmNwnxTvw== +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" postcss "^7.0.0" - postcss-calc "^7.0.0" - postcss-colormin "^4.0.2" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.1" + postcss-discard-comments "^4.0.2" postcss-discard-duplicates "^4.0.2" postcss-discard-empty "^4.0.1" postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.9" - postcss-merge-rules "^4.0.2" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.1" - postcss-minify-params "^4.0.1" - postcss-minify-selectors "^4.0.1" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.1" - postcss-normalize-positions "^4.0.1" - postcss-normalize-repeat-style "^4.0.1" - postcss-normalize-string "^4.0.1" - postcss-normalize-timing-functions "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" postcss-normalize-unicode "^4.0.1" postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.1" - postcss-ordered-values "^4.1.1" - postcss-reduce-initial "^4.0.2" - postcss-reduce-transforms "^4.0.1" - postcss-svgo "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: @@ -507,16 +538,16 @@ cssnano-util-same-parent@^4.0.0: integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^4.0.5: - version "4.1.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.7.tgz#0bf112294bec103ab5f68d3f805732c8325a0b1b" - integrity sha512-AiXL90l+MDuQmRNyypG2P7ux7K4XklxYzNNUd5HXZCNcH8/N9bHPcpN97v8tXgRVeFL/Ed8iP8mVmAAu0ZpT7A== + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.5" + cssnano-preset-default "^4.0.7" is-resolvable "^1.0.0" postcss "^7.0.0" -csso@^3.5.0: +csso@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== @@ -524,16 +555,9 @@ csso@^3.5.0: css-tree "1.0.0-alpha.29" date-fns@^1.23.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw== - -debug@^2.1.2, debug@~2: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== debug@^3.1.0: version "3.2.6" @@ -542,14 +566,26 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -decamelize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" - integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== +debug@~2: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - xregexp "4.0.0" + ms "2.0.0" -define-properties@^1.1.2: +"debug@~3 || ~4": + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -557,22 +593,17 @@ define-properties@^1.1.2: object-keys "^1.0.12" dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + domelementtype "^1.3.0" + entities "^1.1.1" -domelementtype@1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479" - integrity sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA== - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= +domelementtype@1, domelementtype@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domutils@^1.7.0: version "1.7.0" @@ -589,12 +620,24 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.82: +electron-to-chromium@^1.3.127: + version "1.3.133" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz#c47639c19b91feee3e22fad69f5556142007008c" + integrity sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg== + +electron-to-chromium@^1.3.30: version "1.3.83" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.83.tgz#74584eb0972bb6777811c5d68d988c722f5e6666" integrity sha512-DqJoDarxq50dcHsOOlMLNoy+qQitlMNbYb6wwbE0oUw2veHdRkpNrhmngiUYKMErdJ8SJ48rpJsZTQgy5SoEAA== -entities@~1.1.1: +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -606,18 +649,19 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1, es-abstract@^1.6.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== +es-abstract@^1.12.0, es-abstract@^1.5.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== dependencies: - es-to-primitive "^1.1.1" + es-to-primitive "^1.2.0" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" + has "^1.0.3" + is-callable "^1.1.4" is-regex "^1.0.4" + object-keys "^1.0.12" -es-to-primitive@^1.1.1: +es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== @@ -643,13 +687,13 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" - get-stream "^3.0.0" + get-stream "^4.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" @@ -664,9 +708,9 @@ find-up@^3.0.0: locate-path "^3.0.0" find@~0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/find/-/find-0.2.9.tgz#4b73f1ff9e56ad91b76e716407fe5ffe6554bb8c" - integrity sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w= + version "0.3.0" + resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" + integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== dependencies: traverse-chain "~0.1.0" @@ -675,7 +719,7 @@ flatten@^1.0.2: resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= -function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -685,43 +729,57 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +google-closure-compiler-java@^20190325.0.0: + version "20190325.0.0" + resolved "https://registry.yarnpkg.com/google-closure-compiler-java/-/google-closure-compiler-java-20190325.0.0.tgz#e0c95ce146537b65328efe7bb3a0c501e5493fe4" + integrity sha512-waoh1nsDtm4yEban20S4yMVdpmJgc7YCahTFXR16a5tKQ3Gqw1CY3z7wmVLHtz7tBSI7iiE2CmIsQyag6MpKuQ== google-closure-compiler-js@>20170000: version "20181008.0.0" resolved "https://registry.yarnpkg.com/google-closure-compiler-js/-/google-closure-compiler-js-20181008.0.0.tgz#aa252fe9bfff47a4d1790c8af1a2adc755d7a3a7" integrity sha512-vE3v9FZf7l/RjG2rsQ2X2Ho0nkqAcfldiuBrKsPLomYQn1z9uFgWgD+kQP2TXigactA10cX9ZNddKMO81tO45Q== -google-closure-compiler-linux@^20181008.0.0: - version "20181008.0.0" - resolved "https://registry.yarnpkg.com/google-closure-compiler-linux/-/google-closure-compiler-linux-20181008.0.0.tgz#d351110b5eaa0d05ec0aadcd29a3b64e812e8e15" - integrity sha512-k8njGfH2uzWJiRPPvUxM7MJB28gPrf4kI2bbuiF0gJk/1arXcWCPGjLD6pzCU0UylMy52MUXLgsIpRorqf2brw== +google-closure-compiler-js@^20190325.0.0: + version "20190325.0.0" + resolved "https://registry.yarnpkg.com/google-closure-compiler-js/-/google-closure-compiler-js-20190325.0.0.tgz#d94e7381715b5775ebbf03578fb615149c24046d" + integrity sha512-F7cBV95GNZSbzv8dtXFfDgCYSYlo4nFl26GMvE23/fYgVmbPSFWNGu5ytD9rid25PBr+p8lvBVHN+zwH/7boxg== -google-closure-compiler-osx@^20181008.0.0: - version "20181008.0.0" - resolved "https://registry.yarnpkg.com/google-closure-compiler-osx/-/google-closure-compiler-osx-20181008.0.0.tgz#7f7a0a19afdad4fb1f40b1a44d9f08b50762e67f" - integrity sha512-xzf/yH/4MXdb6GbP84iHnpcVCOPBbH0gMVOs0JhR/KbrQh+DlJU+Y8Z/DQzTkw9HgD650R2/WZmBknURyg9OTw== +google-closure-compiler-linux@^20190325.0.0: + version "20190325.0.0" + resolved "https://registry.yarnpkg.com/google-closure-compiler-linux/-/google-closure-compiler-linux-20190325.0.0.tgz#d404eb4dce0204361f3f90ee931869852e5342c6" + integrity sha512-xsX/v5ASePMuBkqT0UbLr01mFlOEKq4Gvm6AEt56vHYCXaDIZrOBvX38WK/niyfZPJIFcq45nj/oPcYUYlKwpA== -google-closure-compiler@20181008.0.0: - version "20181008.0.0" - resolved "https://registry.yarnpkg.com/google-closure-compiler/-/google-closure-compiler-20181008.0.0.tgz#dcf02ab3a679822a0d1ded519ec8bec99d6887ba" - integrity sha512-XmJIasXHyy4kirthlsuDev2LZcXjYXWfOHwHdCLUQnfJH8T2sxWDNjFLQycaCIXwQLOyw2Kem38VgxrYfG0hzg== +google-closure-compiler-osx@^20190325.0.0: + version "20190325.0.0" + resolved "https://registry.yarnpkg.com/google-closure-compiler-osx/-/google-closure-compiler-osx-20190325.0.0.tgz#e6c66dc2c3be1a2ba53402c7026d632875b85f09" + integrity sha512-4RVMm8sZcO7i+HkDe8pzHumJVK5JtoRoQsAslJpmAhOU6050Rzbcc1Ja/9tLcwTBtxOndxetHrc7oqikT5DUHQ== + +google-closure-compiler@20190325.0.0: + version "20190325.0.0" + resolved "https://registry.yarnpkg.com/google-closure-compiler/-/google-closure-compiler-20190325.0.0.tgz#e05077827165f6f07b1bc6d019322dbbc57c9c44" + integrity sha512-VTStTIPkGKbmNwUp/jn8XF2I/qEKp/jsbOOy8ReU2QSo8IcJxbtZH0pYNTX57dY7EqUGeRpl3nYYPSyJ1XCQZA== dependencies: chalk "^1.0.0" + google-closure-compiler-java "^20190325.0.0" + google-closure-compiler-js "^20190325.0.0" minimist "^1.2.0" vinyl "^2.0.1" vinyl-sourcemaps-apply "^0.2.0" optionalDependencies: - google-closure-compiler-linux "^20181008.0.0" - google-closure-compiler-osx "^20181008.0.0" + google-closure-compiler-linux "^20190325.0.0" + google-closure-compiler-osx "^20190325.0.0" graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== has-ansi@^2.0.0: version "2.0.0" @@ -730,11 +788,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -750,7 +803,7 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has@^1.0.0, has@^1.0.1: +has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -782,6 +835,14 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -812,14 +873,7 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -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" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4: +is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== @@ -909,15 +963,10 @@ isnumeric@^0.2.0: resolved "https://registry.yarnpkg.com/isnumeric/-/isnumeric-0.2.0.tgz#a2347ba360de19e33d0ffd590fddf7755cbf2e64" integrity sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ= -js-base64@^2.1.9: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ== - -js-yaml@^3.12.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== +js-yaml@^3.13.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -977,12 +1026,12 @@ lodash@^4.17.10: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -magic-string@0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - integrity sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg== +magic-string@0.25.2: + version "0.25.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" + integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg== dependencies: - sourcemap-codec "^1.4.1" + sourcemap-codec "^1.4.4" make-dir@^1.0.0: version "1.3.0" @@ -992,9 +1041,9 @@ make-dir@^1.0.0: pify "^3.0.0" map-age-cleaner@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" - integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ== + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== dependencies: p-defer "^1.0.0" @@ -1009,23 +1058,23 @@ mdn-data@~1.1.0: integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.0" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" merge@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.0: version "3.0.4" @@ -1066,20 +1115,20 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-releases@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.2.tgz#27c296d9fca3b659c64f7d43ea47a31ad2a90e4b" - integrity sha512-zP8Asfg13lG9KDAW85rylSxXBYvaSdtjMIYKHUk8c1fM8drmFwRqbSYKYD+UlNVPUvrceSvgLUKHMOWR5jPWQg== +node-releases@^1.1.17: + version "1.1.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.18.tgz#cc98fd75598a324a77188ebddf6650e9cbd8b1d5" + integrity sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA== dependencies: semver "^5.3.0" normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" @@ -1118,9 +1167,9 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.getownpropertydescriptors@^2.0.3: version "2.0.3" @@ -1130,20 +1179,27 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" on-headers@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" onecolor@^3.0.4: version "3.1.0" @@ -1151,11 +1207,11 @@ onecolor@^3.0.4: integrity sha512-YZSypViXzu3ul5LMu/m6XjJ9ol8qAy9S2VjHl5E6UlhUH1KGKWabyEJifn0Jjpw23bYDzC2ucKMPGiH5kfwSGQ== os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" - integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - execa "^0.10.0" + execa "^1.0.0" lcid "^2.0.0" mem "^4.0.0" @@ -1169,15 +1225,15 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: p-try "^2.0.0" @@ -1189,9 +1245,9 @@ p-locate@^3.0.0: p-limit "^2.0.0" p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-json@^4.0.0: version "4.0.0" @@ -1202,9 +1258,9 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parseurl@~1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^3.0.0: version "3.0.0" @@ -1216,7 +1272,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -1266,13 +1322,13 @@ postcss-attribute-case-insensitive@^2.0.0: postcss-selector-parser "^2.2.3" postcss-cachify@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/postcss-cachify/-/postcss-cachify-1.3.2.tgz#2c34282244ee50ba217cc2959305f6198453f139" - integrity sha1-LDQoIkTuULohfMKVkwX2GYRT8Tk= + version "1.4.0" + resolved "https://registry.yarnpkg.com/postcss-cachify/-/postcss-cachify-1.4.0.tgz#0fa98d2fcd9db7c6f4ff1e1184bb9be61d55247b" + integrity sha512-y1XRXB2aaQSdyHlSGqo3lXvtOwtRkXCQEKPY0RLMb8L0Ausvo8tAanNgwCYHOkdPZteoLy6fnrBR3Qbcsgjo1w== dependencies: - connect-cachify-static "^1.3.0" - debug "^2.1.2" - postcss "^5.0.0" + connect-cachify-static "^1.6.0" + debug "~3 || ~4" + postcss "~5 || ~6 || ~7" postcss-calc@^6.0.0: version "6.0.2" @@ -1284,7 +1340,7 @@ postcss-calc@^6.0.0: postcss-selector-parser "^2.2.2" reduce-css-calc "^2.0.0" -postcss-calc@^7.0.0: +postcss-calc@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== @@ -1367,10 +1423,10 @@ postcss-color-rgba-fallback@^3.0.0: postcss-value-parser "^3.3.0" rgb-hex "^2.1.0" -postcss-colormin@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" - integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== dependencies: browserslist "^4.0.0" color "^3.0.0" @@ -1446,10 +1502,10 @@ postcss-custom-selectors@^4.0.1: postcss "^6.0.1" postcss-selector-matches "^3.0.0" -postcss-discard-comments@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" - integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== dependencies: postcss "^7.0.0" @@ -1526,20 +1582,20 @@ postcss-media-query-parser@^0.2.3: resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= -postcss-merge-longhand@^4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.9.tgz#c2428b994833ffb2a072f290ca642e75ceabcd6f" - integrity sha512-UVMXrXF5K/kIwUbK/crPFCytpWbNX2Q3dZSc8+nQUgfOHrCT4+MHncpdxVphUlQeZxlLXUJbDyXc5NBhTnS2tA== +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== dependencies: css-color-names "0.0.4" postcss "^7.0.0" postcss-value-parser "^3.0.0" stylehacks "^4.0.0" -postcss-merge-rules@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" - integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" @@ -1561,20 +1617,20 @@ postcss-minify-font-values@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-gradients@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" - integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== dependencies: cssnano-util-get-arguments "^4.0.0" is-color-stop "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-params@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" - integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== dependencies: alphanum-sort "^1.0.0" browserslist "^4.0.0" @@ -1583,10 +1639,10 @@ postcss-minify-params@^4.0.1: postcss-value-parser "^3.0.0" uniqs "^2.0.0" -postcss-minify-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" - integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== dependencies: alphanum-sort "^1.0.0" has "^1.0.0" @@ -1607,48 +1663,48 @@ postcss-normalize-charset@^4.0.1: dependencies: postcss "^7.0.0" -postcss-normalize-display-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" - integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-positions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" - integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== dependencies: cssnano-util-get-arguments "^4.0.0" has "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-repeat-style@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" - integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== dependencies: cssnano-util-get-arguments "^4.0.0" cssnano-util-get-match "^4.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-string@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" - integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== dependencies: has "^1.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-timing-functions@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" - integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== dependencies: cssnano-util-get-match "^4.0.0" postcss "^7.0.0" @@ -1673,18 +1729,18 @@ postcss-normalize-url@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-whitespace@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" - integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== dependencies: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-ordered-values@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" - integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== dependencies: cssnano-util-get-arguments "^4.0.0" postcss "^7.0.0" @@ -1705,20 +1761,20 @@ postcss-pseudoelements@^5.0.0: dependencies: postcss "^6.0.0" -postcss-reduce-initial@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" - integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== dependencies: browserslist "^4.0.0" caniuse-api "^3.0.0" has "^1.0.0" postcss "^7.0.0" -postcss-reduce-transforms@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" - integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== dependencies: cssnano-util-get-match "^4.0.0" has "^1.0.0" @@ -1767,18 +1823,18 @@ postcss-selector-parser@^3.0.0: uniq "^1.0.1" postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0-rc.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0-rc.4.tgz#ca5e77238bf152966378c13e91ad6d611568ea87" - integrity sha512-0XvfYuShrKlTk1ooUrVzMCFQRcypsdEIsGqh5IxC5rdtBi4/M/tDAJeSONwC2MTqEFsmPZYAV7Dd4X8rgAfV0A== + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== dependencies: cssesc "^2.0.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" - integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== dependencies: is-svg "^3.0.0" postcss "^7.0.0" @@ -1808,16 +1864,6 @@ postcss-values-parser@^1.5.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@^5.0.0: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.18, postcss@^6.0.22, postcss@^6.0.5, postcss@^6.0.6: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" @@ -1827,7 +1873,16 @@ postcss@^6.0, postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.14, source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.5, "postcss@~5 || ~6 || ~7": + version "7.0.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.16.tgz#48f64f1b4b558cb8b52c88987724359acb010da2" + integrity sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.2: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55" integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ== @@ -1841,6 +1896,14 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -1924,6 +1987,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve@^1.1.7: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" @@ -1931,6 +1999,13 @@ resolve@^1.1.7: dependencies: path-parse "^1.0.5" +resolve@^1.10.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" + integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== + dependencies: + path-parse "^1.0.6" + rgb-hex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-2.1.0.tgz#c773c5fe2268a25578d92539a82a7a5ce53beda6" @@ -1958,18 +2033,19 @@ rollup-plugin-closure-compiler-js@^1.0.6: dependencies: google-closure-compiler-js ">20170000" -rollup@^0.66.6: - version "0.66.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.6.tgz#ce7d6185beb7acea644ce220c25e71ae03275482" - integrity sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw== +rollup@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.11.3.tgz#6f436db2a2d6b63f808bf60ad01a177643dedb81" + integrity sha512-81MR7alHcFKxgWzGfG7jSdv+JQxSOIOD/Fa3iNUmpzbd7p+V19e1l9uffqT8/7YAHgGOzmoPGN3Fx3L2ptOf5g== dependencies: "@types/estree" "0.0.39" - "@types/node" "*" + "@types/node" "^11.13.9" + acorn "^6.1.1" -rxjs@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" - integrity sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ== +rxjs@^6.3.3: + version "6.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" + integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== dependencies: tslib "^1.9.0" @@ -1984,9 +2060,9 @@ sax@~1.2.4: integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== set-blocking@^2.0.0: version "2.0.0" @@ -2017,7 +2093,7 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6: +source-map@^0.5.1, source-map@^0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -2027,10 +2103,10 @@ source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemap-codec@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz#0ba615b73ec35112f63c2f2d9e7c3f87282b0e33" - integrity sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA== +sourcemap-codec@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" + integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg== spawn-command@^0.0.2-1: version "0.0.2-1" @@ -2038,9 +2114,9 @@ spawn-command@^0.0.2-1: integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= spdx-correct@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" - integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -2059,16 +2135,16 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" - integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -stable@~0.1.6: +stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== @@ -2117,9 +2193,9 @@ strip-eof@^1.0.0: integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= stylehacks@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" - integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== dependencies: browserslist "^4.0.0" postcss "^7.0.0" @@ -2130,13 +2206,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" @@ -2151,23 +2220,30 @@ supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -svgo@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" - integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: - coa "~2.0.1" - colors "~1.1.2" + has-flag "^3.0.0" + +svgo@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" + integrity sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" css-select "^2.0.0" - css-select-base-adapter "~0.1.0" + css-select-base-adapter "^0.1.1" css-tree "1.0.0-alpha.28" css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "^3.12.0" + csso "^3.5.1" + js-yaml "^3.13.1" mkdirp "~0.5.1" - object.values "^1.0.4" + object.values "^1.1.0" sax "~1.2.4" - stable "~0.1.6" + stable "^0.1.8" unquote "~1.1.1" util.promisify "~1.0.0" @@ -2199,9 +2275,9 @@ traverse-chain@~0.1.0: integrity sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE= tree-kill@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" - integrity sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" + integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== tslib@^1.9.0: version "1.9.3" @@ -2314,30 +2390,31 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -xregexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" - integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= "y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yargs-parser@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" yargs@^12.0.1: - version "12.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" - integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: cliui "^4.0.0" - decamelize "^2.0.0" + decamelize "^1.2.0" find-up "^3.0.0" get-caller-file "^1.0.1" os-locale "^3.0.0" @@ -2347,4 +2424,4 @@ yargs@^12.0.1: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" - yargs-parser "^10.1.0" + yargs-parser "^11.1.1" From 47d631417888bceb9b4cbc18591fb129fa0d8de7 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 08:55:58 -0400 Subject: [PATCH 15/18] Use static closures in bootstrap --- app/bootstrap.php | 48 +++++++++++++++++++----------------- app/views/person/details.php | 2 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/app/bootstrap.php b/app/bootstrap.php index fbcb9411..ef9a0d57 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -35,7 +35,7 @@ use Zend\Diactoros\{Response, ServerRequestFactory}; // ----------------------------------------------------------------------------- // Setup DI container // ----------------------------------------------------------------------------- -return function ($configArray = []) { +return static function ($configArray = []) { $container = new Container(); // ------------------------------------------------------------------------- @@ -57,36 +57,38 @@ return function ($configArray = []) { // ------------------------------------------------------------------------- // Create Config Object - $container->set('config', function() use ($configArray) { + $container->set('config', static function() use ($configArray) { return new Config($configArray); }); // Create Cache Object - $container->set('cache', function($container) { + $container->set('cache', static function($container) { $logger = $container->getLogger(); $config = $container->get('config')->get('cache'); return new Pool($config, $logger); }); + // Create List Cache + // Create Aura Router Object - $container->set('aura-router', function() { + $container->set('aura-router', static function() { return new RouterContainer; }); // Create Html helper Object - $container->set('html-helper', function($container) { + $container->set('html-helper', static function($container) { $htmlHelper = (new HelperLocatorFactory)->newInstance(); - $htmlHelper->set('menu', function() use ($container) { + $htmlHelper->set('menu', static function() use ($container) { $menuHelper = new Helper\Menu(); $menuHelper->setContainer($container); return $menuHelper; }); - $htmlHelper->set('field', function() use ($container) { + $htmlHelper->set('field', static function() use ($container) { $formHelper = new Helper\Form(); $formHelper->setContainer($container); return $formHelper; }); - $htmlHelper->set('picture', function() use ($container) { + $htmlHelper->set('picture', static function() use ($container) { $pictureHelper = new Helper\Picture(); $pictureHelper->setContainer($container); return $pictureHelper; @@ -96,7 +98,7 @@ return function ($configArray = []) { }); // Create Request/Response Objects - $container->set('request', function() { + $container->set('request', static function() { return ServerRequestFactory::fromGlobals( $_SERVER, $_GET, @@ -105,22 +107,22 @@ return function ($configArray = []) { $_FILES ); }); - $container->set('response', function() { + $container->set('response', static function() { return new Response; }); // Create session Object - $container->set('session', function() { + $container->set('session', static function() { return (new SessionFactory())->newInstance($_COOKIE); }); // Miscellaneous helper methods - $container->set('util', function($container) { + $container->set('util', static function($container) { return new Util($container); }); // Models - $container->set('kitsu-model', function($container) { + $container->set('kitsu-model', static function($container) { $requestBuilder = new KitsuRequestBuilder(); $requestBuilder->setLogger($container->getLogger('kitsu-request')); @@ -136,7 +138,7 @@ return function ($configArray = []) { $model->setCache($cache); return $model; }); - $container->set('anilist-model', function($container) { + $container->set('anilist-model', static function($container) { $requestBuilder = new Anilist\AnilistRequestBuilder(); $requestBuilder->setLogger($container->getLogger('anilist-request')); @@ -151,39 +153,39 @@ return function ($configArray = []) { return $model; }); - $container->set('api-model', function($container) { + $container->set('api-model', static function($container) { return new Model\API($container); }); - $container->set('anime-model', function($container) { + $container->set('anime-model', static function($container) { return new Model\Anime($container); }); - $container->set('manga-model', function($container) { + $container->set('manga-model', static function($container) { return new Model\Manga($container); }); - $container->set('anime-collection-model', function($container) { + $container->set('anime-collection-model', static function($container) { return new Model\AnimeCollection($container); }); - $container->set('manga-collection-model', function($container) { + $container->set('manga-collection-model', static function($container) { return new Model\MangaCollection($container); }); - $container->set('settings-model', function($container) { + $container->set('settings-model', static function($container) { $model = new Model\Settings($container->get('config')); $model->setContainer($container); return $model; }); // Miscellaneous Classes - $container->set('auth', function($container) { + $container->set('auth', static function($container) { return new Kitsu\Auth($container); }); - $container->set('url-generator', function($container) { + $container->set('url-generator', static function($container) { return new UrlGenerator($container); }); // ------------------------------------------------------------------------- // Dispatcher // ------------------------------------------------------------------------- - $container->set('dispatcher', function($container) { + $container->set('dispatcher', static function($container) { return new Dispatcher($container); }); diff --git a/app/views/person/details.php b/app/views/person/details.php index 18e9978d..98c6282d 100644 --- a/app/views/person/details.php +++ b/app/views/person/details.php @@ -32,7 +32,7 @@ use Aviat\AnimeClient\API\Kitsu; $series): ?>
generate("{$mediaType}.details", ['id' => $series['slug']]); $titles = Kitsu::filterTitles($series); ?> From 2fdca5650167fa46a229a65c3700922c5b0658ba Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 08:56:26 -0400 Subject: [PATCH 16/18] Update js sourcemaps --- public/js/scripts-authed.min.js.map | 2 +- public/js/scripts.min.js.map | 2 +- public/js/tables.min.js.map | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/js/scripts-authed.min.js.map b/public/js/scripts-authed.min.js.map index 9eaa9484..e6543c73 100644 --- a/public/js/scripts-authed.min.js.map +++ b/public/js/scripts-authed.min.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-authed.min.js.map","sources":["src/base/AnimeClient.js","src/base/events.js","src/index.js","src/template-helpers.js","src/anime.js","src/manga.js"],"sourcesContent":["// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet matches = (elm.document || elm.ownerDocument).querySelectorAll(selector),\n\t\ti = matches.length;\n\twhile (--i >= 0 && matches.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nexport const AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {object} [context]\n\t * @return {[HTMLElement]} - array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\twindow.scroll(0,0);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tsel.setAttribute('hidden', 'hidden');\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tsel.removeAttribute('hidden');\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {HTMLElement} current - the current HTMLElement\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {HTMLElement|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|HTMLElement} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|HTMLElement|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {void}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tswitch (method) {\n\t\tcase 'GET':\n\t\t\trequest.send(null);\n\t\tbreak;\n\n\t\tdefault:\n\t\t\trequest.send(config.data);\n\t\tbreak;\n\t}\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './AnimeClient.js';\n/**\n * Event handlers\n */\n// Close event for messages\n_.on('header', 'click', '.message', (e) => {\n\t_.hide(e.target);\n});\n\n// Confirm deleting of list or library items\n_.on('form.js-delete', 'submit', (event) => {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n});\n\n// Clear the api cache\n_.on('.js-clear-cache', 'click', () => {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n});\n\n// Alleviate some page jumping\n _.on('.vertical-tabs input', 'change', (event) => {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n});\n","import './base/events.js';\n\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}\n\n","import _ from './base/AnimeClient.js';\n\n// Click on hidden MAL checkbox so\n// that MAL id is passed\n_.on('main', 'change', '.big-check', (e) => {\n\tconst id = e.target.id;\n\tdocument.getElementById(`mal_${id}`).checked = true;\n});\n\nexport function renderAnimeSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.reduce((prev, current) => {\n\t\t\treturn prev + `${current}
`;\n\t\t}, []);\n\n\t\tresults.push(`\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`);\n\t});\n\n\treturn results.join('');\n}\n\nexport function renderMangaSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.reduce((prev, current) => {\n\t\t\treturn prev + `${current}
`;\n\t\t}, []);\n\n\t\tresults.push(`\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`);\n\t});\n\n\treturn results.join('');\n}","import _ from './base/AnimeClient.js'\nimport { renderAnimeSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t// Show the loader\n\t_.$('.cssload-loader')[ 0 ].removeAttribute('hidden');\n\n\t// Do the api search\n\t_.get(_.url('/anime-collection/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\n\t\t// Hide the loader\n\t\t_.$('.cssload-loader')[ 0 ].setAttribute('hidden', 'hidden');\n\n\t\t// Show the results\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderAnimeSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.anime #search')) {\n\t_.on('#search', 'keyup', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n// Action to increment episode count\n_.on('body.anime.list', 'click', '.plus-one', (e) => {\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet watchedCount = parseInt(_.$('.completed_number', parentSel)[ 0 ].textContent, 10) || 0;\n\tlet totalCount = parseInt(_.$('.total_number', parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name a', parentSel)[ 0 ].textContent;\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: watchedCount + 1\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently watching\n\tif (isNaN(watchedCount) || watchedCount === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last episode, mark as completed\n\tif ((!isNaN(watchedCount)) && (watchedCount + 1) === totalCount) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t_.show(_.$('#loading-shadow')[ 0 ]);\n\n\t// okay, lets actually make some changes!\n\t_.ajax(_.url('/anime/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tsuccess: (res) => {\n\t\t\tconst resData = JSON.parse(res);\n\n\t\t\tif (resData.errors) {\n\t\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t\t_.scrollToTop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (resData.data.attributes.status === 'completed') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\n\t\t\t_.showMessage('success', `Successfully updated ${title}`);\n\t\t\t_.$('.completed_number', parentSel)[ 0 ].textContent = ++watchedCount;\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});","import _ from './base/AnimeClient.js'\nimport { renderMangaSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t_.$('.cssload-loader')[ 0 ].removeAttribute('hidden');\n\t_.get(_.url('/manga/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\t\t_.$('.cssload-loader')[ 0 ].setAttribute('hidden', 'hidden');\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderMangaSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.manga #search')) {\n\t_.on('#search', 'keyup', _.throttle(250, (e) => {\n\t\tlet query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n/**\n * Javascript for editing manga, if logged in\n */\n_.on('.manga.list', 'click', '.edit-buttons button', (e) => {\n\tlet thisSel = e.target;\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet type = thisSel.classList.contains('plus-one-chapter') ? 'chapter' : 'volume';\n\tlet completed = parseInt(_.$(`.${type}s_read`, parentSel)[ 0 ].textContent, 10) || 0;\n\tlet total = parseInt(_.$(`.${type}_count`, parentSel)[ 0 ].textContent, 10);\n\tlet mangaName = _.$('.name', parentSel)[ 0 ].textContent;\n\n\tif (isNaN(completed)) {\n\t\tcompleted = 0;\n\t}\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: completed\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently reading\n\tif (isNaN(completed) || completed === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last chapter, mark as completed\n\tif ((!isNaN(completed)) && (completed + 1) === total) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t// Update the total count\n\tdata.data.progress = ++completed;\n\n\t_.show(_.$('#loading-shadow')[ 0 ]);\n\n\t_.ajax(_.url('/manga/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tmimeType: 'application/json',\n\t\tsuccess: () => {\n\t\t\tif (data.data.status === 'completed') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\n\t\t\t_.$(`.${type}s_read`, parentSel)[ 0 ].textContent = completed;\n\t\t\t_.showMessage('success', `Successfully updated ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t_.showMessage('error', `Failed to update ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});"],"names":["matches","elm","selector","querySelectorAll","document","ownerDocument","i","length","item","AnimeClient","noop","$","context","nodeType","elements","match","push","getElementById","split","slice","apply","hasElement","scrollToTop","window","scroll","hide","sel","setAttribute","show","removeAttribute","showMessage","type","message","template","undefined","remove","insertAdjacentHTML","closestParent","current","parentSelector","Element","prototype","closest","documentElement","parentElement","url","path","uri","location","host","charAt","throttle","interval","fn","scope","wait","args","setTimeout","addEvent","event","listener","forEach","evt","addEventListener","delegateEvent","target","e","element","call","stopPropagation","on","AnimeClient.on","el","ajaxSerialize","data","pairs","Object","keys","name","value","toString","encodeURIComponent","join","ajax","AnimeClient.ajax","config","defaultConfig","dataType","success","mimeType","error","request","XMLHttpRequest","method","String","toUpperCase","open","onreadystatechange","request.onreadystatechange","readyState","responseText","responseType","JSON","parse","status","response","stringify","setRequestHeader","send","get","AnimeClient.get","callback","_","proceed","confirm","preventDefault","currentTarget","rect","getBoundingClientRect","top","pageYOffset","scrollTo","behavior","navigator","serviceWorker","register","then","reg","console","log","catch","id","checked","renderAnimeSearchResults","results","x","attributes","titles","reduce","prev","slug","mal_id","canonicalTitle","renderMangaSearchResults","search","query","searchResults","parentSel","watchedCount","parseInt","totalCount","title","dataset","kitsuId","malId","progress","isNaN","res","resData","errors","search$1","thisSel","classList","contains","completed","total","mangaName"],"mappings":"YAIA,IAAMA,QAAUA,QAAA,CAACC,GAAD,CAAMC,QAAN,CAAmB,CAClC,IAAIF,QAAUG,CAACF,GAAAG,SAADD,EAAiBF,GAAAI,cAAjBF,kBAAA,CAAqDD,QAArD,CAAd,CACCI,EAAIN,OAAAO,OACL,OAAO,EAAED,CAAT,EAAc,CAAd,EAAmBN,OAAAQ,KAAA,CAAaF,CAAb,CAAnB,GAAuCL,GAAvC,EACA,MAAOK,EAAP,CAAY,EAJsB,CAO5B,KAAMG,YAAc,CAI1BC,KAAMA,QAAA,EAAM,EAJc,CAY1B,EAAAC,QAAC,CAACT,QAAD,CAAWU,OAAX,CAA2B,CAAhBA,OAAA,CAAAA,OAAA,GAAA,SAAA,CAAU,IAAV,CAAAA,OACX,IAAI,MAAOV,SAAX,GAAwB,QAAxB,CACC,MAAOA,SAGRU,QAAA,CAAWA,OAAD,GAAa,IAAb,EAAqBA,OAAAC,SAArB,GAA0C,CAA1C,CACPD,OADO,CAEPR,QAEH,KAAIU,SAAW,EACf,IAAIZ,QAAAa,MAAA,CAAe,YAAf,CAAJ,CACCD,QAAAE,KAAA,CAAcZ,QAAAa,eAAA,CAAwBf,QAAAgB,MAAA,CAAe,GAAf,CAAA,CAAoB,CAApB,CAAxB,CAAd,CADD;IAGCJ,SAAA,CAAW,EAAAK,MAAAC,MAAA,CAAeR,OAAAT,iBAAA,CAAyBD,QAAzB,CAAf,CAGZ,OAAOY,SAhBoB,CAZF,CAoC1B,WAAAO,QAAW,CAACnB,QAAD,CAAW,CACrB,MAAOO,YAAAE,EAAA,CAAcT,QAAd,CAAAK,OAAP,CAAwC,CADnB,CApCI,CA4C1B,YAAAe,QAAY,EAAG,CACdC,MAAAC,OAAA,CAAc,CAAd,CAAgB,CAAhB,CADc,CA5CW,CAqD1B,KAAAC,QAAK,CAACC,GAAD,CAAM,CACVA,GAAAC,aAAA,CAAiB,QAAjB,CAA2B,QAA3B,CADU,CArDe,CA8D1B,KAAAC,QAAK,CAACF,GAAD,CAAM,CACVA,GAAAG,gBAAA,CAAoB,QAApB,CADU,CA9De,CAwE1B,YAAAC,QAAY,CAACC,IAAD,CAAOC,OAAP,CAAgB,CAC3B,IAAIC,SACH,sBADGA,CACoBF,IADpBE,CACH,kDADGA,CAGAD,OAHAC,CACH,qDAMD,KAAIP,IAAMjB,WAAAE,EAAA,CAAc,UAAd,CACV;GAAIe,GAAA,CAAI,CAAJ,CAAJ,GAAeQ,SAAf,CACCR,GAAA,CAAI,CAAJ,CAAAS,OAAA,EAGD1B,YAAAE,EAAA,CAAc,QAAd,CAAA,CAAwB,CAAxB,CAAAyB,mBAAA,CAA8C,WAA9C,CAA2DH,QAA3D,CAb2B,CAxEF,CA8F1B,cAAAI,QAAc,CAACC,OAAD,CAAUC,cAAV,CAA0B,CACvC,GAAIC,OAAAC,UAAAC,QAAJ,GAAkCR,SAAlC,CACC,MAAOI,QAAAI,QAAA,CAAgBH,cAAhB,CAGR,OAAOD,OAAP,GAAmBlC,QAAAuC,gBAAnB,CAA6C,CAC5C,GAAI3C,OAAA,CAAQsC,OAAR,CAAiBC,cAAjB,CAAJ,CACC,MAAOD,QAGRA,QAAA,CAAUA,OAAAM,cALkC,CAQ7C,MAAO,KAbgC,CA9Fd,CAmH1B,IAAAC,QAAI,CAACC,IAAD,CAAO,CACV,IAAIC,IAAM,IAANA,CAAW3C,QAAA4C,SAAAC,KACfF,IAAA,EAAQD,IAAAI,OAAA,CAAY,CAAZ,CAAD,GAAoB,GAApB,CAA2BJ,IAA3B,CAAkC,GAAlC,CAAsCA,IAE7C,OAAOC,IAJG,CAnHe,CAmI1B,SAAAI,QAAS,CAACC,QAAD;AAAWC,EAAX,CAAeC,KAAf,CAAsB,CAC9B,IAAIC,KAAO,KACX,OAAO,UAAU,KAAS,CAAT,IAAS,mBAAT,EAAA,KAAA,IAAA,kBAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,OAAA,CAAA,EAAA,iBAAA,CAAS,kBAAT,CAAA,iBAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,iBAAA,CAAS,EAAA,IAAA,OAAA,kBACzB,KAAM3C,QAAU0C,KAAV1C,EAAmB,IAEzB,IAAK,CAAE2C,IAAP,CAAa,CACZF,EAAAjC,MAAA,CAASR,OAAT,CAAkB4C,MAAlB,CACAD,KAAA,CAAO,IACPE,WAAA,CAAW,UAAW,CACrBF,IAAA,CAAO,KADc,CAAtB,CAEGH,QAFH,CAHY,CAHY,CAAA,CAFI,CAnIL,CAuJ3BM,SAASA,SAAQ,CAAChC,GAAD,CAAMiC,KAAN,CAAaC,QAAb,CAAuB,CAEvC,GAAI,CAAED,KAAA5C,MAAA,CAAY,aAAZ,CAAN,CACC4C,KAAAzC,MAAA,CAAY,GAAZ,CAAA2C,QAAA,CAAyB,QAAA,CAACC,GAAD,CAAS,CACjCJ,QAAA,CAAShC,GAAT,CAAcoC,GAAd,CAAmBF,QAAnB,CADiC,CAAlC,CAKDlC;GAAAqC,iBAAA,CAAqBJ,KAArB,CAA4BC,QAA5B,CAAsC,KAAtC,CARuC,CAWxCI,QAASA,cAAa,CAACtC,GAAD,CAAMuC,MAAN,CAAcN,KAAd,CAAqBC,QAArB,CAA+B,CAEpDF,QAAA,CAAShC,GAAT,CAAciC,KAAd,CAAqB,QAAA,CAACO,CAAD,CAAO,CAE3BzD,WAAAE,EAAA,CAAcsD,MAAd,CAAsBvC,GAAtB,CAAAmC,QAAA,CAAmC,QAAA,CAACM,OAAD,CAAa,CAC/C,GAAGD,CAAAD,OAAH,EAAeE,OAAf,CAAwB,CACvBP,QAAAQ,KAAA,CAAcD,OAAd,CAAuBD,CAAvB,CACAA,EAAAG,gBAAA,EAFuB,CADuB,CAAhD,CAF2B,CAA5B,CAFoD,CAsBrD5D,WAAA6D,GAAA,CAAiBC,QAAA,CAAC7C,GAAD,CAAMiC,KAAN,CAAaM,MAAb,CAAqBL,QAArB,CAAkC,CAClD,GAAIA,QAAJ,GAAiB1B,SAAjB,CAA4B,CAC3B0B,QAAA,CAAWK,MACXxD,YAAAE,EAAA,CAAce,GAAd,CAAAmC,QAAA,CAA2B,QAAA,CAACW,EAAD,CAAQ,CAClCd,QAAA,CAASc,EAAT,CAAab,KAAb,CAAoBC,QAApB,CADkC,CAAnC,CAF2B,CAA5B,IAMCnD,YAAAE,EAAA,CAAce,GAAd,CAAAmC,QAAA,CAA2B,QAAA,CAACW,EAAD,CAAQ,CAClCR,aAAA,CAAcQ,EAAd,CAAkBP,MAAlB,CAA0BN,KAA1B,CAAiCC,QAAjC,CADkC,CAAnC,CAPiD,CAwBnDa,SAASA,cAAa,CAACC,IAAD,CAAO,CAC5B,IAAIC;AAAQ,EAEZC,OAAAC,KAAA,CAAYH,IAAZ,CAAAb,QAAA,CAA0B,QAAA,CAACiB,IAAD,CAAU,CACnC,IAAIC,MAAQL,IAAA,CAAKI,IAAL,CAAAE,SAAA,EAEZF,KAAA,CAAOG,kBAAA,CAAmBH,IAAnB,CACPC,MAAA,CAAQE,kBAAA,CAAmBF,KAAnB,CAERJ,MAAA3D,KAAA,CAAc8D,IAAd,CAAW,GAAX,CAAsBC,KAAtB,CANmC,CAApC,CASA,OAAOJ,MAAAO,KAAA,CAAW,GAAX,CAZqB,CA6B7BzE,WAAA0E,KAAA,CAAmBC,QAAA,CAACvC,GAAD,CAAMwC,MAAN,CAAiB,CAEnC,IAAMC,cAAgB,CACrBZ,KAAM,EADe,CAErB3C,KAAM,KAFe,CAGrBwD,SAAU,EAHW,CAIrBC,QAAS/E,WAAAC,KAJY,CAKrB+E,SAAU,mCALW,CAMrBC,MAAOjF,WAAAC,KANc,CAStB2E,OAAA,CAAS,MAAA,OAAA,CAAA,EAAA,CACLC,aADK,CAELD,MAFK,CAKT,KAAIM,QAAU,IAAIC,cAClB,KAAIC,OAASC,MAAA,CAAOT,MAAAtD,KAAP,CAAAgE,YAAA,EAEb,IAAIF,MAAJ;AAAe,KAAf,CACChD,GAAA,EAAQA,GAAA9B,MAAA,CAAU,IAAV,CAAD,CACJ0D,aAAA,CAAcY,MAAAX,KAAd,CADI,CAEJ,GAFI,CAEAD,aAAA,CAAcY,MAAAX,KAAd,CAGRiB,QAAAK,KAAA,CAAaH,MAAb,CAAqBhD,GAArB,CAEA8C,QAAAM,mBAAA,CAA6BC,QAAA,EAAM,CAClC,GAAIP,OAAAQ,WAAJ,GAA2B,CAA3B,CAA8B,CAC7B,IAAIC,aAAe,EAEnB,IAAIT,OAAAU,aAAJ,GAA6B,MAA7B,CACCD,YAAA,CAAeE,IAAAC,MAAA,CAAWZ,OAAAS,aAAX,CADhB,KAGCA,aAAA,CAAeT,OAAAS,aAGhB,IAAIT,OAAAa,OAAJ,CAAqB,GAArB,CACCnB,MAAAK,MAAAtB,KAAA,CAAkB,IAAlB,CAAwBuB,OAAAa,OAAxB,CAAwCJ,YAAxC,CAAsDT,OAAAc,SAAtD,CADD,KAGCpB,OAAAG,QAAApB,KAAA,CAAoB,IAApB,CAA0BgC,YAA1B,CAAwCT,OAAAa,OAAxC,CAZ4B,CADI,CAkBnC,IAAInB,MAAAE,SAAJ,GAAwB,MAAxB,CAAgC,CAC/BF,MAAAX,KAAA;AAAc4B,IAAAI,UAAA,CAAerB,MAAAX,KAAf,CACdW,OAAAI,SAAA,CAAkB,kBAFa,CAAhC,IAICJ,OAAAX,KAAA,CAAcD,aAAA,CAAcY,MAAAX,KAAd,CAGfiB,QAAAgB,iBAAA,CAAyB,cAAzB,CAAyCtB,MAAAI,SAAzC,CAEA,QAAQI,MAAR,EACC,KAAK,KAAL,CACCF,OAAAiB,KAAA,CAAa,IAAb,CACD,MAEA,SACCjB,OAAAiB,KAAA,CAAavB,MAAAX,KAAb,CACD,MAPD,CAtDmC,CAwEpCjE,YAAAoG,IAAA,CAAkBC,QAAA,CAACjE,GAAD,CAAM6B,IAAN,CAAYqC,QAAZ,CAAgC,CAApBA,QAAA,CAAAA,QAAA,GAAA,SAAA,CAAW,IAAX,CAAAA,QAC7B,IAAIA,QAAJ,GAAiB,IAAjB,CAAuB,CACtBA,QAAA,CAAWrC,IACXA,KAAA,CAAO,EAFe,CAKvB,MAAOjE,YAAA0E,KAAA,CAAiBtC,GAAjB,CAAsB,CAC5B6B,KAAAA,IAD4B,CAE5Bc,QAASuB,QAFmB,CAAtB,CAN0C,iBC3T7C,SAAU,QAAS,WAAY,QAAA,CAAC7C,CAAD,CAAO,CAC1C8C,WAAAA,KAAAA,CAAO9C,CAAAD,OAAP+C,CAD0C;eAKtC,iBAAkB,SAAU,QAAA,CAACrD,KAAD,CAAW,CAC3C,IAAMsD,QAAUC,OAAA,CAAQ,uDAAR,CAEhB,IAAID,OAAJ,GAAgB,KAAhB,CAAuB,CACtBtD,KAAAwD,eAAA,EACAxD,MAAAU,gBAAA,EAFsB,CAHoB,kBAUvC,kBAAmB,QAAS,QAAA,EAAM,CACtC2C,WAAAA,IAAAA,CAAM,cAANA,CAAsB,QAAA,EAAM,CAC3BA,WAAAA,YAAAA,CAAc,SAAdA,CAAyB,+BAAzBA,CAD2B,CAA5BA,CADsC,EAOtCA,YAAAA,GAAAA,CAAK,sBAALA,CAA6B,QAA7BA,CAAuC,QAAA,CAACrD,KAAD,CAAW,CAClD,IAAMa,GAAKb,KAAAyD,cAAAxE,cACX,KAAMyE,KAAO7C,EAAA8C,sBAAA,EAEb;IAAMC,IAAMF,IAAAE,IAANA,CAAiBhG,MAAAiG,YAEvBjG,OAAAkG,SAAA,CAAgB,CACfF,IAAAA,GADe,CAEfG,SAAU,QAFK,CAAhB,CANkD,CAAlDV,CCzBD,IAAI,eAAJ,EAAuBW,UAAvB,CACCA,SAAAC,cAAAC,SAAA,CAAiC,QAAjC,CAAAC,KAAA,CAAgD,QAAA,CAAAC,GAAA,CAAO,CACtDC,OAAAC,IAAA,CAAY,2BAAZ,CAAyCF,GAAAzE,MAAzC,CADsD,CAAvD,CAAA4E,CAEG,OAFHA,CAAA,CAES,QAAA,CAAAxC,KAAA,CAAS,CACjBsC,OAAAtC,MAAA,CAAc,mCAAd,CAAmDA,KAAnD,CADiB,CAFlB,iBCCI,OAAQ,SAAU,aAAc,QAAA,CAACxB,CAAD,CAAO,CAC3C,IAAMiE,GAAKjE,CAAAD,OAAAkE,GACX/H,SAAAa,eAAA,CAAwB,MAAxB,CAA+BkH,EAA/B,CAAAC,QAAA,CAA+C,IAFJ,EAKrCC,SAASA,0BAA0B3D,KAAM,CAC/C,IAAM4D,QAAU,EAEhB5D,KAAAb,QAAA,CAAa,QAAA,CAAA0E,CAAA,CAAK,CACjB,IAAM/H;AAAO+H,CAAAC,WACb,KAAMC,OAASjI,IAAAiI,OAAAC,OAAA,CAAmB,QAAA,CAACC,IAAD,CAAOrG,OAAP,CAAmB,CACpD,MAAOqG,KAAP,EAAiBrG,OAAjB,CAAc,QAAd,CADoD,CAAtC,CAEZ,EAFY,CAIfgG,QAAAtH,KAAA,CAAa,8HAAb,CAGmDR,IAAAoI,KAHnD,CAAa,yBAAb,CAGsFL,CAAAM,OAHtF,CAAa,4DAAb,CAI+CrI,IAAAoI,KAJ/C,CAAa,qBAAb,CAI8EL,CAAAJ,GAJ9E,CAAa,8BAAb,CAKiB3H,IAAAoI,KALjB,CAAa,4FAAb;AAO4CL,CAAAJ,GAP5C,CAAa,kFAAb,CAQ4CI,CAAAJ,GAR5C,CAAa,2EAAb,CASsCI,CAAAJ,GATtC,CAAa,oHAAb,CAaO3H,IAAAsI,eAbP,CAAa,+BAAb,CAccL,MAdd,CAAa,wNAAb;AAqBiDjI,IAAAoI,KArBjD,CAAa,gGAAb,CANiB,CAAlB,CAmCA,OAAON,QAAApD,KAAA,CAAa,EAAb,CAtCwC,CAyCzC6D,QAASA,0BAA0BrE,KAAM,CAC/C,IAAM4D,QAAU,EAEhB5D,KAAAb,QAAA,CAAa,QAAA,CAAA0E,CAAA,CAAK,CACjB,IAAM/H,KAAO+H,CAAAC,WACb,KAAMC,OAASjI,IAAAiI,OAAAC,OAAA,CAAmB,QAAA,CAACC,IAAD,CAAOrG,OAAP,CAAmB,CACpD,MAAOqG,KAAP,EAAiBrG,OAAjB,CAAc,QAAd,CADoD,CAAtC,CAEZ,EAFY,CAIfgG,QAAAtH,KAAA,CAAa,4GAAb,CAGiCR,IAAAoI,KAHjC,CAAa,yBAAb,CAGoEL,CAAAM,OAHpE,CAAa,4DAAb;AAI+CrI,IAAAoI,KAJ/C,CAAa,qBAAb,CAI8EL,CAAAJ,GAJ9E,CAAa,8BAAb,CAKiB3H,IAAAoI,KALjB,CAAa,4FAAb,CAO4CL,CAAAJ,GAP5C,CAAa,kFAAb,CAQ4CI,CAAAJ,GAR5C,CAAa,2EAAb,CASsCI,CAAAJ,GATtC,CAAa,sGAAb,CAYO3H,IAAAsI,eAZP,CAAa,+BAAb,CAacL,MAbd;AAAa,wNAAb,CAoBiDjI,IAAAoI,KApBjD,CAAa,gGAAb,CANiB,CAAlB,CAkCA,OAAON,QAAApD,KAAA,CAAa,EAAb,CArCwC,CC/ChD,IAAM8D,OAASA,QAAA,CAACC,KAAD,CAAW,CAEzBjC,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAAA,gBAAAA,CAA4C,QAA5CA,CAGAA,YAAAA,IAAAA,CAAMA,WAAAA,IAAAA,CAAM,0BAANA,CAANA,CAAyC,CAAEiC,MAAAA,KAAF,CAAzCjC;AAAoD,QAAA,CAACkC,aAAD,CAAgB1C,MAAhB,CAA2B,CAC9E0C,aAAA,CAAgB5C,IAAAC,MAAA,CAAW2C,aAAX,CAGhBlC,YAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAAA,aAAAA,CAAyC,QAAzCA,CAAmD,QAAnDA,CAGAA,YAAAA,EAAAA,CAAI,cAAJA,CAAAA,CAAqB,CAArBA,CAAAA,UAAAA,CAAqCqB,wBAAA,CAAyBa,aAAAxE,KAAzB,CAPyC,CAA/EsC,CALyB,CAgB1B,IAAIA,WAAAA,WAAAA,CAAa,gBAAbA,CAAJ,CACCA,WAAAA,GAAAA,CAAK,SAALA,CAAgB,OAAhBA,CAAyBA,WAAAA,SAAAA,CAAW,GAAXA,CAAgB,QAAA,CAAC9C,CAAD,CAAO,CAC/C,IAAM+E,MAAQhE,kBAAA,CAAmBf,CAAAD,OAAAc,MAAnB,CACd,IAAIkE,KAAJ,GAAc,EAAd,CACC,MAGDD,OAAA,CAAOC,KAAP,CAN+C,CAAvBjC,CAAzBA,iBAWI,kBAAmB,QAAS,YAAa,QAAA,CAAC9C,CAAD,CAAO,CACpD,IAAIiF;AAAYnC,WAAAA,cAAAA,CAAgB9C,CAAAD,OAAhB+C,CAA0B,SAA1BA,CAChB,KAAIoC,aAAeC,QAAA,CAASrC,WAAAA,EAAAA,CAAI,mBAAJA,CAAyBmC,SAAzBnC,CAAAA,CAAqC,CAArCA,CAAAA,YAAT,CAA+D,EAA/D,CAAfoC,EAAqF,CACzF,KAAIE,WAAaD,QAAA,CAASrC,WAAAA,EAAAA,CAAI,eAAJA,CAAqBmC,SAArBnC,CAAAA,CAAiC,CAAjCA,CAAAA,YAAT,CAA2D,EAA3D,CACjB,KAAIuC,MAAQvC,WAAAA,EAAAA,CAAI,SAAJA,CAAemC,SAAfnC,CAAAA,CAA2B,CAA3BA,CAAAA,YAGZ,KAAItC,KAAO,CACVyD,GAAIgB,SAAAK,QAAAC,QADM,CAEVZ,OAAQM,SAAAK,QAAAE,MAFE,CAGVhF,KAAM,CACLiF,SAAUP,YAAVO,CAAyB,CADpB,CAHI,CAUX,IAAIC,KAAA,CAAMR,YAAN,CAAJ,EAA2BA,YAA3B,GAA4C,CAA5C,CACC1E,IAAAA,KAAA8B,OAAA,CAAmB,SAIpB,IAAK,CAACoD,KAAA,CAAMR,YAAN,CAAN,EAA+BA,YAA/B,CAA8C,CAA9C,GAAqDE,UAArD,CACC5E,IAAAA,KAAA8B,OAAA;AAAmB,WAGpBQ,YAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CAGAA,YAAAA,KAAAA,CAAOA,WAAAA,IAAAA,CAAM,kBAANA,CAAPA,CAAkC,CACjCtC,KAAAA,IADiC,CAEjCa,SAAU,MAFuB,CAGjCxD,KAAM,MAH2B,CAIjCyD,QAASA,QAAA,CAACqE,GAAD,CAAS,CACjB,IAAMC,QAAUxD,IAAAC,MAAA,CAAWsD,GAAX,CAEhB,IAAIC,OAAAC,OAAJ,CAAoB,CACnB/C,WAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CACAA,YAAAA,YAAAA,CAAc,OAAdA,CAAuB,mBAAvBA,CAA2CuC,KAA3CvC,CAAuB,IAAvBA,CACAA,YAAAA,YAAAA,EACA,OAJmB,CAOpB,GAAI8C,OAAApF,KAAA8D,WAAAhC,OAAJ,GAAuC,WAAvC,CACCQ,WAAAA,KAAAA,CAAOmC,SAAPnC,CAGDA,YAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CAEAA;WAAAA,YAAAA,CAAc,SAAdA,CAAyB,uBAAzBA,CAAiDuC,KAAjDvC,CACAA,YAAAA,EAAAA,CAAI,mBAAJA,CAAyBmC,SAAzBnC,CAAAA,CAAqC,CAArCA,CAAAA,YAAAA,CAAuD,EAAEoC,YACzDpC,YAAAA,YAAAA,EAlBiB,CAJe,CAwBjCtB,MAAOA,QAAA,EAAM,CACZsB,WAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CACAA,YAAAA,YAAAA,CAAc,OAAdA,CAAuB,mBAAvBA,CAA2CuC,KAA3CvC,CAAuB,IAAvBA,CACAA,YAAAA,YAAAA,EAHY,CAxBoB,CAAlCA,CA7BoD,EC5BrD,KAAMgC,SAASgB,QAAA,CAACf,KAAD,CAAW,CACzBjC,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAAA,gBAAAA,CAA4C,QAA5CA,CACAA,YAAAA,IAAAA,CAAMA,WAAAA,IAAAA,CAAM,eAANA,CAANA,CAA8B,CAAEiC,MAAAA,KAAF,CAA9BjC,CAAyC,QAAA,CAACkC,aAAD;AAAgB1C,MAAhB,CAA2B,CACnE0C,aAAA,CAAgB5C,IAAAC,MAAA,CAAW2C,aAAX,CAChBlC,YAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAAA,aAAAA,CAAyC,QAAzCA,CAAmD,QAAnDA,CACAA,YAAAA,EAAAA,CAAI,cAAJA,CAAAA,CAAqB,CAArBA,CAAAA,UAAAA,CAAqC+B,wBAAA,CAAyBG,aAAAxE,KAAzB,CAH8B,CAApEsC,CAFyB,CAS1B,IAAIA,WAAAA,WAAAA,CAAa,gBAAbA,CAAJ,CACCA,WAAAA,GAAAA,CAAK,SAALA,CAAgB,OAAhBA,CAAyBA,WAAAA,SAAAA,CAAW,GAAXA,CAAgB,QAAA,CAAC9C,CAAD,CAAO,CAC/C,IAAI+E,MAAQhE,kBAAA,CAAmBf,CAAAD,OAAAc,MAAnB,CACZ,IAAIkE,KAAJ,GAAc,EAAd,CACC,MAGDD,SAAAA,CAAOC,KAAPD,CAN+C,CAAvBhC,CAAzBA,iBAaI,cAAe,QAAS,uBAAwB,QAAA,CAAC9C,CAAD,CAAO,CAC3D,IAAI+F,QAAU/F,CAAAD,OACd,KAAIkF;AAAYnC,WAAAA,cAAAA,CAAgB9C,CAAAD,OAAhB+C,CAA0B,SAA1BA,CAChB,KAAIjF,KAAOkI,OAAAC,UAAAC,SAAA,CAA2B,kBAA3B,CAAA,CAAiD,SAAjD,CAA6D,QACxE,KAAIC,UAAYf,QAAA,CAASrC,WAAAA,EAAAA,CAAI,GAAJA,CAAQjF,IAARiF,CAAI,QAAJA,CAAsBmC,SAAtBnC,CAAAA,CAAkC,CAAlCA,CAAAA,YAAT,CAA4D,EAA5D,CAAZoD,EAA+E,CACnF,KAAIC,MAAQhB,QAAA,CAASrC,WAAAA,EAAAA,CAAI,GAAJA,CAAQjF,IAARiF,CAAI,QAAJA,CAAsBmC,SAAtBnC,CAAAA,CAAkC,CAAlCA,CAAAA,YAAT,CAA4D,EAA5D,CACZ,KAAIsD,UAAYtD,WAAAA,EAAAA,CAAI,OAAJA,CAAamC,SAAbnC,CAAAA,CAAyB,CAAzBA,CAAAA,YAEhB,IAAI4C,KAAA,CAAMQ,SAAN,CAAJ,CACCA,SAAA,CAAY,CAIb,KAAI1F,KAAO,CACVyD,GAAIgB,SAAAK,QAAAC,QADM,CAEVZ,OAAQM,SAAAK,QAAAE,MAFE,CAGVhF,KAAM,CACLiF,SAAUS,SADL,CAHI,CAUX,IAAIR,KAAA,CAAMQ,SAAN,CAAJ;AAAwBA,SAAxB,GAAsC,CAAtC,CACC1F,IAAAA,KAAA8B,OAAA,CAAmB,SAIpB,IAAK,CAACoD,KAAA,CAAMQ,SAAN,CAAN,EAA4BA,SAA5B,CAAwC,CAAxC,GAA+CC,KAA/C,CACC3F,IAAAA,KAAA8B,OAAA,CAAmB,WAIpB9B,KAAAA,KAAAiF,SAAA,CAAqB,EAAES,SAEvBpD,YAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CAEAA,YAAAA,KAAAA,CAAOA,WAAAA,IAAAA,CAAM,kBAANA,CAAPA,CAAkC,CACjCtC,KAAAA,IADiC,CAEjCa,SAAU,MAFuB,CAGjCxD,KAAM,MAH2B,CAIjC0D,SAAU,kBAJuB,CAKjCD,QAASA,QAAA,EAAM,CACd,GAAId,IAAAA,KAAA8B,OAAJ,GAAyB,WAAzB,CACCQ,WAAAA,KAAAA,CAAOmC,SAAPnC,CAGDA,YAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CAEAA,YAAAA,EAAAA,CAAI,GAAJA,CAAQjF,IAARiF,CAAI,QAAJA,CAAsBmC,SAAtBnC,CAAAA,CAAkC,CAAlCA,CAAAA,YAAAA;AAAoDoD,SACpDpD,YAAAA,YAAAA,CAAc,SAAdA,CAAyB,uBAAzBA,CAAiDsD,SAAjDtD,CACAA,YAAAA,YAAAA,EATc,CALkB,CAgBjCtB,MAAOA,QAAA,EAAM,CACZsB,WAAAA,KAAAA,CAAOA,WAAAA,EAAAA,CAAI,iBAAJA,CAAAA,CAAwB,CAAxBA,CAAPA,CACAA,YAAAA,YAAAA,CAAc,OAAdA,CAAuB,mBAAvBA,CAA2CsD,SAA3CtD,CACAA,YAAAA,YAAAA,EAHY,CAhBoB,CAAlCA,CArC2D;"} \ No newline at end of file +{"version":3,"file":"scripts-authed.min.js.map","sources":["src/base/AnimeClient.js","src/base/events.js","src/index.js","src/template-helpers.js","src/anime.js","src/manga.js"],"sourcesContent":["// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet matches = (elm.document || elm.ownerDocument).querySelectorAll(selector),\n\t\ti = matches.length;\n\twhile (--i >= 0 && matches.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nexport const AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {object} [context]\n\t * @return {[HTMLElement]} - array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\twindow.scroll(0,0);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tsel.setAttribute('hidden', 'hidden');\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tsel.removeAttribute('hidden');\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {HTMLElement} current - the current HTMLElement\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {HTMLElement|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|HTMLElement} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|HTMLElement|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {void}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tswitch (method) {\n\t\tcase 'GET':\n\t\t\trequest.send(null);\n\t\tbreak;\n\n\t\tdefault:\n\t\t\trequest.send(config.data);\n\t\tbreak;\n\t}\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './AnimeClient.js';\n/**\n * Event handlers\n */\n// Close event for messages\n_.on('header', 'click', '.message', (e) => {\n\t_.hide(e.target);\n});\n\n// Confirm deleting of list or library items\n_.on('form.js-delete', 'submit', (event) => {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n});\n\n// Clear the api cache\n_.on('.js-clear-cache', 'click', () => {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n});\n\n// Alleviate some page jumping\n _.on('.vertical-tabs input', 'change', (event) => {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n});\n","import './base/events.js';\n\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}\n\n","import _ from './base/AnimeClient.js';\n\n// Click on hidden MAL checkbox so\n// that MAL id is passed\n_.on('main', 'change', '.big-check', (e) => {\n\tconst id = e.target.id;\n\tdocument.getElementById(`mal_${id}`).checked = true;\n});\n\nexport function renderAnimeSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.reduce((prev, current) => {\n\t\t\treturn prev + `${current}
`;\n\t\t}, []);\n\n\t\tresults.push(`\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`);\n\t});\n\n\treturn results.join('');\n}\n\nexport function renderMangaSearchResults (data) {\n\tconst results = [];\n\n\tdata.forEach(x => {\n\t\tconst item = x.attributes;\n\t\tconst titles = item.titles.reduce((prev, current) => {\n\t\t\treturn prev + `${current}
`;\n\t\t}, []);\n\n\t\tresults.push(`\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tInfo Page\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t`);\n\t});\n\n\treturn results.join('');\n}","import _ from './base/AnimeClient.js'\nimport { renderAnimeSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t// Show the loader\n\t_.$('.cssload-loader')[ 0 ].removeAttribute('hidden');\n\n\t// Do the api search\n\t_.get(_.url('/anime-collection/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\n\t\t// Hide the loader\n\t\t_.$('.cssload-loader')[ 0 ].setAttribute('hidden', 'hidden');\n\n\t\t// Show the results\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderAnimeSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.anime #search')) {\n\t_.on('#search', 'keyup', _.throttle(250, (e) => {\n\t\tconst query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n// Action to increment episode count\n_.on('body.anime.list', 'click', '.plus-one', (e) => {\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet watchedCount = parseInt(_.$('.completed_number', parentSel)[ 0 ].textContent, 10) || 0;\n\tlet totalCount = parseInt(_.$('.total_number', parentSel)[ 0 ].textContent, 10);\n\tlet title = _.$('.name a', parentSel)[ 0 ].textContent;\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: watchedCount + 1\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently watching\n\tif (isNaN(watchedCount) || watchedCount === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last episode, mark as completed\n\tif ((!isNaN(watchedCount)) && (watchedCount + 1) === totalCount) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t_.show(_.$('#loading-shadow')[ 0 ]);\n\n\t// okay, lets actually make some changes!\n\t_.ajax(_.url('/anime/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tsuccess: (res) => {\n\t\t\tconst resData = JSON.parse(res);\n\n\t\t\tif (resData.errors) {\n\t\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t\t_.scrollToTop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (resData.data.attributes.status === 'completed') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\n\t\t\t_.showMessage('success', `Successfully updated ${title}`);\n\t\t\t_.$('.completed_number', parentSel)[ 0 ].textContent = ++watchedCount;\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t_.showMessage('error', `Failed to update ${title}. `);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});","import _ from './base/AnimeClient.js'\nimport { renderMangaSearchResults } from './template-helpers.js'\n\nconst search = (query) => {\n\t_.$('.cssload-loader')[ 0 ].removeAttribute('hidden');\n\t_.get(_.url('/manga/search'), { query }, (searchResults, status) => {\n\t\tsearchResults = JSON.parse(searchResults);\n\t\t_.$('.cssload-loader')[ 0 ].setAttribute('hidden', 'hidden');\n\t\t_.$('#series-list')[ 0 ].innerHTML = renderMangaSearchResults(searchResults.data);\n\t});\n};\n\nif (_.hasElement('.manga #search')) {\n\t_.on('#search', 'keyup', _.throttle(250, (e) => {\n\t\tlet query = encodeURIComponent(e.target.value);\n\t\tif (query === '') {\n\t\t\treturn;\n\t\t}\n\n\t\tsearch(query);\n\t}));\n}\n\n/**\n * Javascript for editing manga, if logged in\n */\n_.on('.manga.list', 'click', '.edit-buttons button', (e) => {\n\tlet thisSel = e.target;\n\tlet parentSel = _.closestParent(e.target, 'article');\n\tlet type = thisSel.classList.contains('plus-one-chapter') ? 'chapter' : 'volume';\n\tlet completed = parseInt(_.$(`.${type}s_read`, parentSel)[ 0 ].textContent, 10) || 0;\n\tlet total = parseInt(_.$(`.${type}_count`, parentSel)[ 0 ].textContent, 10);\n\tlet mangaName = _.$('.name', parentSel)[ 0 ].textContent;\n\n\tif (isNaN(completed)) {\n\t\tcompleted = 0;\n\t}\n\n\t// Setup the update data\n\tlet data = {\n\t\tid: parentSel.dataset.kitsuId,\n\t\tmal_id: parentSel.dataset.malId,\n\t\tdata: {\n\t\t\tprogress: completed\n\t\t}\n\t};\n\n\t// If the episode count is 0, and incremented,\n\t// change status to currently reading\n\tif (isNaN(completed) || completed === 0) {\n\t\tdata.data.status = 'current';\n\t}\n\n\t// If you increment at the last chapter, mark as completed\n\tif ((!isNaN(completed)) && (completed + 1) === total) {\n\t\tdata.data.status = 'completed';\n\t}\n\n\t// Update the total count\n\tdata.data.progress = ++completed;\n\n\t_.show(_.$('#loading-shadow')[ 0 ]);\n\n\t_.ajax(_.url('/manga/increment'), {\n\t\tdata,\n\t\tdataType: 'json',\n\t\ttype: 'POST',\n\t\tmimeType: 'application/json',\n\t\tsuccess: () => {\n\t\t\tif (data.data.status === 'completed') {\n\t\t\t\t_.hide(parentSel);\n\t\t\t}\n\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\n\t\t\t_.$(`.${type}s_read`, parentSel)[ 0 ].textContent = completed;\n\t\t\t_.showMessage('success', `Successfully updated ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t},\n\t\terror: () => {\n\t\t\t_.hide(_.$('#loading-shadow')[ 0 ]);\n\t\t\t_.showMessage('error', `Failed to update ${mangaName}`);\n\t\t\t_.scrollToTop();\n\t\t}\n\t});\n});"],"names":["selector","matches","querySelectorAll","elm","document","ownerDocument","i","length","item","noop","$","context","nodeType","elements","match","push","getElementById","split","slice","apply","hasElement","AnimeClient","scrollToTop","window","scroll","hide","sel","setAttribute","show","removeAttribute","showMessage","type","message","template","undefined","remove","insertAdjacentHTML","closestParent","current","parentSelector","Element","prototype","closest","documentElement","parentElement","url","path","uri","location","host","charAt","throttle","interval","fn","scope","wait","args","setTimeout","addEvent","event","listener","forEach","evt","addEventListener","delegateEvent","target","e","element","call","stopPropagation","on","AnimeClient.on","el","ajaxSerialize","data","pairs","Object","keys","name","value","toString","encodeURIComponent","join","ajax","AnimeClient.ajax","config","dataType","success","mimeType","error","defaultConfig","request","XMLHttpRequest","method","String","toUpperCase","open","onreadystatechange","request.onreadystatechange","readyState","responseText","responseType","JSON","parse","status","response","stringify","setRequestHeader","send","get","AnimeClient.get","callback","_","proceed","preventDefault","scrollTo","top","behavior","navigator","serviceWorker","register","then","reg","console","log","catch","id","checked","renderAnimeSearchResults","x","prev","results","slug","mal_id","canonicalTitle","titles","renderMangaSearchResults","query","searchResults","search","parentSel","watchedCount","parseInt","totalCount","title","dataset","kitsuId","malId","progress","isNaN","res","resData","errors","attributes","thisSel","classList","contains","completed","total","mangaName"],"mappings":"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"} \ No newline at end of file diff --git a/public/js/scripts.min.js.map b/public/js/scripts.min.js.map index 96b75921..1c1c2120 100644 --- a/public/js/scripts.min.js.map +++ b/public/js/scripts.min.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts.min.js.map","sources":["src/base/AnimeClient.js","src/base/events.js","src/index.js"],"sourcesContent":["// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet matches = (elm.document || elm.ownerDocument).querySelectorAll(selector),\n\t\ti = matches.length;\n\twhile (--i >= 0 && matches.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nexport const AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {object} [context]\n\t * @return {[HTMLElement]} - array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\twindow.scroll(0,0);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tsel.setAttribute('hidden', 'hidden');\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tsel.removeAttribute('hidden');\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {HTMLElement} current - the current HTMLElement\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {HTMLElement|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|HTMLElement} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|HTMLElement|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {void}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tswitch (method) {\n\t\tcase 'GET':\n\t\t\trequest.send(null);\n\t\tbreak;\n\n\t\tdefault:\n\t\t\trequest.send(config.data);\n\t\tbreak;\n\t}\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './AnimeClient.js';\n/**\n * Event handlers\n */\n// Close event for messages\n_.on('header', 'click', '.message', (e) => {\n\t_.hide(e.target);\n});\n\n// Confirm deleting of list or library items\n_.on('form.js-delete', 'submit', (event) => {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n});\n\n// Clear the api cache\n_.on('.js-clear-cache', 'click', () => {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n});\n\n// Alleviate some page jumping\n _.on('.vertical-tabs input', 'change', (event) => {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n});\n","import './base/events.js';\n\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}\n\n"],"names":["matches","elm","selector","querySelectorAll","document","ownerDocument","i","length","item","AnimeClient","noop","$","context","nodeType","elements","match","push","getElementById","split","slice","apply","hasElement","scrollToTop","window","scroll","hide","sel","setAttribute","show","removeAttribute","showMessage","type","message","template","undefined","remove","insertAdjacentHTML","closestParent","current","parentSelector","Element","prototype","closest","documentElement","parentElement","url","path","uri","location","host","charAt","throttle","interval","fn","scope","wait","args","setTimeout","addEvent","event","listener","forEach","evt","addEventListener","delegateEvent","target","e","element","call","stopPropagation","on","AnimeClient.on","el","ajaxSerialize","data","pairs","Object","keys","name","value","toString","encodeURIComponent","join","ajax","AnimeClient.ajax","config","defaultConfig","dataType","success","mimeType","error","request","XMLHttpRequest","method","String","toUpperCase","open","onreadystatechange","request.onreadystatechange","readyState","responseText","responseType","JSON","parse","status","response","stringify","setRequestHeader","send","get","AnimeClient.get","callback","_","proceed","confirm","preventDefault","currentTarget","rect","getBoundingClientRect","top","pageYOffset","scrollTo","behavior","navigator","serviceWorker","register","then","reg","console","log","catch"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"scripts.min.js.map","sources":["src/base/AnimeClient.js","src/base/events.js","src/index.js"],"sourcesContent":["// -------------------------------------------------------------------------\n// ! Base\n// -------------------------------------------------------------------------\n\nconst matches = (elm, selector) => {\n\tlet matches = (elm.document || elm.ownerDocument).querySelectorAll(selector),\n\t\ti = matches.length;\n\twhile (--i >= 0 && matches.item(i) !== elm) {};\n\treturn i > -1;\n}\n\nexport const AnimeClient = {\n\t/**\n\t * Placeholder function\n\t */\n\tnoop: () => {},\n\t/**\n\t * DOM selector\n\t *\n\t * @param {string} selector - The dom selector string\n\t * @param {object} [context]\n\t * @return {[HTMLElement]} - array of dom elements\n\t */\n\t$(selector, context = null) {\n\t\tif (typeof selector !== 'string') {\n\t\t\treturn selector;\n\t\t}\n\n\t\tcontext = (context !== null && context.nodeType === 1)\n\t\t\t? context\n\t\t\t: document;\n\n\t\tlet elements = [];\n\t\tif (selector.match(/^#([\\w]+$)/)) {\n\t\t\telements.push(document.getElementById(selector.split('#')[1]));\n\t\t} else {\n\t\t\telements = [].slice.apply(context.querySelectorAll(selector));\n\t\t}\n\n\t\treturn elements;\n\t},\n\t/**\n\t * Does the selector exist on the current page?\n\t *\n\t * @param {string} selector\n\t * @returns {boolean}\n\t */\n\thasElement (selector) {\n\t\treturn AnimeClient.$(selector).length > 0;\n\t},\n\t/**\n\t * Scroll to the top of the Page\n\t *\n\t * @return {void}\n\t */\n\tscrollToTop () {\n\t\twindow.scroll(0,0);\n\t},\n\t/**\n\t * Hide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\thide (sel) {\n\t\tsel.setAttribute('hidden', 'hidden');\n\t},\n\t/**\n\t * UnHide the selected element\n\t *\n\t * @param {string|Element} sel - the selector of the element to hide\n\t * @return {void}\n\t */\n\tshow (sel) {\n\t\tsel.removeAttribute('hidden');\n\t},\n\t/**\n\t * Display a message box\n\t *\n\t * @param {string} type - message type: info, error, success\n\t * @param {string} message - the message itself\n\t * @return {void}\n\t */\n\tshowMessage (type, message) {\n\t\tlet template =\n\t\t\t`
\n\t\t\t\t\n\t\t\t\t${message}\n\t\t\t\t\n\t\t\t
`;\n\n\t\tlet sel = AnimeClient.$('.message');\n\t\tif (sel[0] !== undefined) {\n\t\t\tsel[0].remove();\n\t\t}\n\n\t\tAnimeClient.$('header')[0].insertAdjacentHTML('beforeend', template);\n\t},\n\t/**\n\t * Finds the closest parent element matching the passed selector\n\t *\n\t * @param {HTMLElement} current - the current HTMLElement\n\t * @param {string} parentSelector - selector for the parent element\n\t * @return {HTMLElement|null} - the parent element\n\t */\n\tclosestParent (current, parentSelector) {\n\t\tif (Element.prototype.closest !== undefined) {\n\t\t\treturn current.closest(parentSelector);\n\t\t}\n\n\t\twhile (current !== document.documentElement) {\n\t\t\tif (matches(current, parentSelector)) {\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tcurrent = current.parentElement;\n\t\t}\n\n\t\treturn null;\n\t},\n\t/**\n\t * Generate a full url from a relative path\n\t *\n\t * @param {string} path - url path\n\t * @return {string} - full url\n\t */\n\turl (path) {\n\t\tlet uri = `//${document.location.host}`;\n\t\turi += (path.charAt(0) === '/') ? path : `/${path}`;\n\n\t\treturn uri;\n\t},\n\t/**\n\t * Throttle execution of a function\n\t *\n\t * @see https://remysharp.com/2010/07/21/throttling-function-calls\n\t * @see https://jsfiddle.net/jonathansampson/m7G64/\n\t * @param {Number} interval - the minimum throttle time in ms\n\t * @param {Function} fn - the function to throttle\n\t * @param {Object} [scope] - the 'this' object for the function\n\t * @return {Function}\n\t */\n\tthrottle (interval, fn, scope) {\n\t\tlet wait = false;\n\t\treturn function (...args) {\n\t\t\tconst context = scope || this;\n\n\t\t\tif ( ! wait) {\n\t\t\t\tfn.apply(context, args);\n\t\t\t\twait = true;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\twait = false;\n\t\t\t\t}, interval);\n\t\t\t}\n\t\t};\n\t},\n};\n\n// -------------------------------------------------------------------------\n// ! Events\n// -------------------------------------------------------------------------\n\nfunction addEvent(sel, event, listener) {\n\t// Recurse!\n\tif (! event.match(/^([\\w\\-]+)$/)) {\n\t\tevent.split(' ').forEach((evt) => {\n\t\t\taddEvent(sel, evt, listener);\n\t\t});\n\t}\n\n\tsel.addEventListener(event, listener, false);\n}\n\nfunction delegateEvent(sel, target, event, listener) {\n\t// Attach the listener to the parent\n\taddEvent(sel, event, (e) => {\n\t\t// Get live version of the target selector\n\t\tAnimeClient.$(target, sel).forEach((element) => {\n\t\t\tif(e.target == element) {\n\t\t\t\tlistener.call(element, e);\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Add an event listener\n *\n * @param {string|HTMLElement} sel - the parent selector to bind to\n * @param {string} event - event name(s) to bind\n * @param {string|HTMLElement|function} target - the element to directly bind the event to\n * @param {function} [listener] - event listener callback\n * @return {void}\n */\nAnimeClient.on = (sel, event, target, listener) => {\n\tif (listener === undefined) {\n\t\tlistener = target;\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\taddEvent(el, event, listener);\n\t\t});\n\t} else {\n\t\tAnimeClient.$(sel).forEach((el) => {\n\t\t\tdelegateEvent(el, target, event, listener);\n\t\t});\n\t}\n};\n\n// -------------------------------------------------------------------------\n// ! Ajax\n// -------------------------------------------------------------------------\n\n/**\n * Url encoding for non-get requests\n *\n * @param data\n * @returns {string}\n * @private\n */\nfunction ajaxSerialize(data) {\n\tlet pairs = [];\n\n\tObject.keys(data).forEach((name) => {\n\t\tlet value = data[name].toString();\n\n\t\tname = encodeURIComponent(name);\n\t\tvalue = encodeURIComponent(value);\n\n\t\tpairs.push(`${name}=${value}`);\n\t});\n\n\treturn pairs.join('&');\n}\n\n/**\n * Make an ajax request\n *\n * Config:{\n * \tdata: // data to send with the request\n * \ttype: // http verb of the request, defaults to GET\n * \tsuccess: // success callback\n * \terror: // error callback\n * }\n *\n * @param {string} url - the url to request\n * @param {Object} config - the configuration object\n * @return {void}\n */\nAnimeClient.ajax = (url, config) => {\n\t// Set some sane defaults\n\tconst defaultConfig = {\n\t\tdata: {},\n\t\ttype: 'GET',\n\t\tdataType: '',\n\t\tsuccess: AnimeClient.noop,\n\t\tmimeType: 'application/x-www-form-urlencoded',\n\t\terror: AnimeClient.noop\n\t}\n\n\tconfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t}\n\n\tlet request = new XMLHttpRequest();\n\tlet method = String(config.type).toUpperCase();\n\n\tif (method === 'GET') {\n\t\turl += (url.match(/\\?/))\n\t\t\t? ajaxSerialize(config.data)\n\t\t\t: `?${ajaxSerialize(config.data)}`;\n\t}\n\n\trequest.open(method, url);\n\n\trequest.onreadystatechange = () => {\n\t\tif (request.readyState === 4) {\n\t\t\tlet responseText = '';\n\n\t\t\tif (request.responseType === 'json') {\n\t\t\t\tresponseText = JSON.parse(request.responseText);\n\t\t\t} else {\n\t\t\t\tresponseText = request.responseText;\n\t\t\t}\n\n\t\t\tif (request.status > 299) {\n\t\t\t\tconfig.error.call(null, request.status, responseText, request.response);\n\t\t\t} else {\n\t\t\t\tconfig.success.call(null, responseText, request.status);\n\t\t\t}\n\t\t}\n\t};\n\n\tif (config.dataType === 'json') {\n\t\tconfig.data = JSON.stringify(config.data);\n\t\tconfig.mimeType = 'application/json';\n\t} else {\n\t\tconfig.data = ajaxSerialize(config.data);\n\t}\n\n\trequest.setRequestHeader('Content-Type', config.mimeType);\n\n\tswitch (method) {\n\t\tcase 'GET':\n\t\t\trequest.send(null);\n\t\tbreak;\n\n\t\tdefault:\n\t\t\trequest.send(config.data);\n\t\tbreak;\n\t}\n};\n\n/**\n * Do a get request\n *\n * @param {string} url\n * @param {object|function} data\n * @param {function} [callback]\n */\nAnimeClient.get = (url, data, callback = null) => {\n\tif (callback === null) {\n\t\tcallback = data;\n\t\tdata = {};\n\t}\n\n\treturn AnimeClient.ajax(url, {\n\t\tdata,\n\t\tsuccess: callback\n\t});\n};\n\n// -------------------------------------------------------------------------\n// Export\n// -------------------------------------------------------------------------\n\nexport default AnimeClient;","import _ from './AnimeClient.js';\n/**\n * Event handlers\n */\n// Close event for messages\n_.on('header', 'click', '.message', (e) => {\n\t_.hide(e.target);\n});\n\n// Confirm deleting of list or library items\n_.on('form.js-delete', 'submit', (event) => {\n\tconst proceed = confirm('Are you ABSOLUTELY SURE you want to delete this item?');\n\n\tif (proceed === false) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n});\n\n// Clear the api cache\n_.on('.js-clear-cache', 'click', () => {\n\t_.get('/cache_purge', () => {\n\t\t_.showMessage('success', 'Successfully purged api cache');\n\t});\n});\n\n// Alleviate some page jumping\n _.on('.vertical-tabs input', 'change', (event) => {\n\tconst el = event.currentTarget.parentElement;\n\tconst rect = el.getBoundingClientRect();\n\n\tconst top = rect.top + window.pageYOffset;\n\n\twindow.scrollTo({\n\t\ttop,\n\t\tbehavior: 'smooth',\n\t});\n});\n","import './base/events.js';\n\nif ('serviceWorker' in navigator) {\n\tnavigator.serviceWorker.register('/sw.js').then(reg => {\n\t\tconsole.log('Service worker registered', reg.scope);\n\t}).catch(error => {\n\t\tconsole.error('Failed to register service worker', error);\n\t});\n}\n\n"],"names":["selector","matches","querySelectorAll","elm","document","ownerDocument","i","length","item","noop","$","context","nodeType","elements","match","push","getElementById","split","slice","apply","hasElement","AnimeClient","scrollToTop","window","scroll","hide","sel","setAttribute","show","removeAttribute","showMessage","type","message","template","undefined","remove","insertAdjacentHTML","closestParent","current","parentSelector","Element","prototype","closest","documentElement","parentElement","url","path","uri","location","host","charAt","throttle","interval","fn","scope","wait","args","setTimeout","addEvent","event","listener","forEach","evt","addEventListener","delegateEvent","target","e","element","call","stopPropagation","on","AnimeClient.on","el","ajaxSerialize","data","pairs","Object","keys","name","value","toString","encodeURIComponent","join","ajax","AnimeClient.ajax","config","dataType","success","mimeType","error","defaultConfig","request","XMLHttpRequest","method","String","toUpperCase","open","onreadystatechange","request.onreadystatechange","readyState","responseText","responseType","JSON","parse","status","response","stringify","setRequestHeader","send","get","AnimeClient.get","callback","_","proceed","preventDefault","scrollTo","top","behavior","navigator","serviceWorker","register","then","reg","console","log","catch"],"mappings":"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"} \ No newline at end of file diff --git a/public/js/tables.min.js.map b/public/js/tables.min.js.map index 58f9a385..f7093bb8 100644 --- a/public/js/tables.min.js.map +++ b/public/js/tables.min.js.map @@ -1 +1 @@ -{"version":3,"file":"tables.min.js.map","sources":["src/base/sort_tables.js"],"sourcesContent":["const LightTableSorter = (() => {\n\tlet th = null;\n\tlet cellIndex = null;\n\tlet order = '';\n\tconst text = (row) => row.cells.item(cellIndex).textContent.toLowerCase();\n\tconst sort = (a, b) => {\n\t\tlet textA = text(a);\n\t\tlet textB = text(b);\n\t\tconst n = parseInt(textA, 10);\n\t\tif (n) {\n\t\t\ttextA = n;\n\t\t\ttextB = parseInt(textB, 10);\n\t\t}\n\t\tif (textA > textB) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (textA < textB) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst toggle = () => {\n\t\tconst c = order !== 'sorting-asc' ? 'sorting-asc' : 'sorting-desc';\n\t\tth.className = (th.className.replace(order, '') + ' ' + c).trim();\n\t\treturn order = c;\n\t};\n\tconst reset = () => {\n\t\tth.classList.remove('sorting-asc', 'sorting-desc');\n\t\tth.classList.add('sorting');\n\t\treturn order = '';\n\t};\n\tconst onClickEvent = (e) => {\n\t\tif (th && (cellIndex !== e.target.cellIndex)) {\n\t\t\treset();\n\t\t}\n\t\tth = e.target;\n\t\tif (th.nodeName.toLowerCase() === 'th') {\n\t\t\tcellIndex = th.cellIndex;\n\t\t\tconst tbody = th.offsetParent.getElementsByTagName('tbody')[0];\n\t\t\tlet rows = Array.from(tbody.rows);\n\t\t\tif (rows) {\n\t\t\t\trows.sort(sort);\n\t\t\t\tif (order === 'sorting-asc') {\n\t\t\t\t\trows.reverse();\n\t\t\t\t}\n\t\t\t\ttoggle();\n\t\t\t\ttbody.innerHtml = '';\n\n\t\t\t\trows.forEach(row => {\n\t\t\t\t\ttbody.appendChild(row);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tinit: () => {\n\t\t\tlet ths = document.getElementsByTagName('th');\n\t\t\tlet results = [];\n\t\t\tfor (let i = 0, len = ths.length; i < len; i++) {\n\t\t\t\tlet th = ths[i];\n\t\t\t\tth.classList.add('sorting');\n\t\t\t\tresults.push(th.onclick = onClickEvent);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t};\n})();\n\nLightTableSorter.init();"],"names":["LightTableSorter","th","cellIndex","order","text","row","cells","item","textContent","toLowerCase","sort","a","b","textA","textB","n","parseInt","toggle","c","className","trim","replace","reset","classList","remove","add","onClickEvent","e","target","nodeName","tbody","offsetParent","getElementsByTagName","rows","Array","from","reverse","innerHtml","forEach","appendChild","init","ths","document","results","i","len","length","push","onclick"],"mappings":"YAAA,IAAMA,iBAAoB,QAAA,EAAM,CAC/B,IAAIC,GAAK,IACT,KAAIC,UAAY,IAChB,KAAIC,MAAQ,EACZ,KAAMC,KAAOA,QAAA,CAACC,GAAD,CAAS,CAAA,MAAAA,IAAAC,MAAAC,KAAA,CAAeL,SAAf,CAAAM,YAAAC,YAAA,EAAA,CACtB,KAAMC,KAAOA,QAAA,CAACC,CAAD,CAAIC,CAAJ,CAAU,CACtB,IAAIC,MAAQT,IAAA,CAAKO,CAAL,CACZ,KAAIG,MAAQV,IAAA,CAAKQ,CAAL,CACZ,KAAMG,EAAIC,QAAA,CAASH,KAAT,CAAgB,EAAhB,CACV,IAAIE,CAAJ,CAAO,CACNF,KAAA,CAAQE,CACRD,MAAA,CAAQE,QAAA,CAASF,KAAT,CAAgB,EAAhB,CAFF,CAIP,GAAID,KAAJ,CAAYC,KAAZ,CACC,MAAO,EAER,IAAID,KAAJ,CAAYC,KAAZ,CACC,MAAQ,EAET,OAAO,EAde,CAgBvB,KAAMG,OAASA,QAAA,EAAM,CACpB,IAAMC,EAAIf,KAAA,GAAU,aAAV,CAA0B,aAA1B,CAA0C,cACpDF,GAAAkB,UAAA,CAAeC,CAACnB,EAAAkB,UAAAE,QAAA,CAAqBlB,KAArB,CAA4B,EAA5B,CAADiB,CAAmC,GAAnCA,CAAyCF,CAAzCE,MAAA,EACf,OAAOjB,MAAP;AAAee,CAHK,CAKrB,KAAMI,MAAQA,QAAA,EAAM,CACnBrB,EAAAsB,UAAAC,OAAA,CAAoB,aAApB,CAAmC,cAAnC,CACAvB,GAAAsB,UAAAE,IAAA,CAAiB,SAAjB,CACA,OAAOtB,MAAP,CAAe,EAHI,CAKpB,KAAMuB,aAAeA,QAAA,CAACC,CAAD,CAAO,CAC3B,GAAI1B,EAAJ,EAAWC,SAAX,GAAyByB,CAAAC,OAAA1B,UAAzB,CACCoB,KAAA,EAEDrB,GAAA,CAAK0B,CAAAC,OACL,IAAI3B,EAAA4B,SAAApB,YAAA,EAAJ,GAAkC,IAAlC,CAAwC,CACvCP,SAAA,CAAYD,EAAAC,UACZ,KAAM4B,MAAQ7B,EAAA8B,aAAAC,qBAAA,CAAqC,OAArC,CAAA,CAA8C,CAA9C,CACd,KAAIC,KAAOC,KAAAC,KAAA,CAAWL,KAAAG,KAAX,CACX,IAAIA,IAAJ,CAAU,CACTA,IAAAvB,KAAA,CAAUA,IAAV,CACA,IAAIP,KAAJ,GAAc,aAAd,CACC8B,IAAAG,QAAA,EAEDnB,OAAA,EACAa,MAAAO,UAAA,CAAkB,EAElBJ,KAAAK,QAAA,CAAa,QAAA,CAAAjC,GAAA,CAAO,CACnByB,KAAAS,YAAA,CAAkBlC,GAAlB,CADmB,CAApB,CARS,CAJ6B,CALb,CAuB5B;MAAO,CACNmC,KAAMA,QAAA,EAAM,CACX,IAAIC,IAAMC,QAAAV,qBAAA,CAA8B,IAA9B,CACV,KAAIW,QAAU,EACd,KAAK,IAAIC,EAAI,CAAR,CAAWC,IAAMJ,GAAAK,OAAtB,CAAkCF,CAAlC,CAAsCC,GAAtC,CAA2CD,CAAA,EAA3C,CAAgD,CAC/C,IAAI3C,KAAKwC,GAAA,CAAIG,CAAJ,CACT3C,KAAAsB,UAAAE,IAAA,CAAiB,SAAjB,CACAkB,QAAAI,KAAA,CAAa9C,IAAA+C,QAAb,CAA0BtB,YAA1B,CAH+C,CAKhD,MAAOiB,QARI,CADN,CAtDwB,CAAP,EAoEzB3C,iBAAAwC,KAAA;"} \ No newline at end of file +{"version":3,"file":"tables.min.js.map","sources":["src/base/sort_tables.js"],"sourcesContent":["const LightTableSorter = (() => {\n\tlet th = null;\n\tlet cellIndex = null;\n\tlet order = '';\n\tconst text = (row) => row.cells.item(cellIndex).textContent.toLowerCase();\n\tconst sort = (a, b) => {\n\t\tlet textA = text(a);\n\t\tlet textB = text(b);\n\t\tconst n = parseInt(textA, 10);\n\t\tif (n) {\n\t\t\ttextA = n;\n\t\t\ttextB = parseInt(textB, 10);\n\t\t}\n\t\tif (textA > textB) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (textA < textB) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst toggle = () => {\n\t\tconst c = order !== 'sorting-asc' ? 'sorting-asc' : 'sorting-desc';\n\t\tth.className = (th.className.replace(order, '') + ' ' + c).trim();\n\t\treturn order = c;\n\t};\n\tconst reset = () => {\n\t\tth.classList.remove('sorting-asc', 'sorting-desc');\n\t\tth.classList.add('sorting');\n\t\treturn order = '';\n\t};\n\tconst onClickEvent = (e) => {\n\t\tif (th && (cellIndex !== e.target.cellIndex)) {\n\t\t\treset();\n\t\t}\n\t\tth = e.target;\n\t\tif (th.nodeName.toLowerCase() === 'th') {\n\t\t\tcellIndex = th.cellIndex;\n\t\t\tconst tbody = th.offsetParent.getElementsByTagName('tbody')[0];\n\t\t\tlet rows = Array.from(tbody.rows);\n\t\t\tif (rows) {\n\t\t\t\trows.sort(sort);\n\t\t\t\tif (order === 'sorting-asc') {\n\t\t\t\t\trows.reverse();\n\t\t\t\t}\n\t\t\t\ttoggle();\n\t\t\t\ttbody.innerHtml = '';\n\n\t\t\t\trows.forEach(row => {\n\t\t\t\t\ttbody.appendChild(row);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tinit: () => {\n\t\t\tlet ths = document.getElementsByTagName('th');\n\t\t\tlet results = [];\n\t\t\tfor (let i = 0, len = ths.length; i < len; i++) {\n\t\t\t\tlet th = ths[i];\n\t\t\t\tth.classList.add('sorting');\n\t\t\t\tresults.push(th.onclick = onClickEvent);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\t};\n})();\n\nLightTableSorter.init();"],"names":["th","cellIndex","order","text","row","cells","item","textContent","toLowerCase","sort","a","b","textA","textB","n","parseInt","toggle","c","className","trim","replace","reset","classList","remove","add","onClickEvent","e","target","nodeName","tbody","offsetParent","getElementsByTagName","rows","Array","from","reverse","innerHtml","forEach","appendChild","init","ths","document","results","i","len","length","push","onclick","LightTableSorter"],"mappings":"YAAA,gCACC,IAAIA,GAAK,IACT,KAAIC,UAAY,IAChB,KAAIC,MAAQ,EACZ,KAAMC,KAAOA,QAAA,CAACC,GAAD,CAAS,CAAA,MAAAA,IAAAC,MAAAC,KAAA,CAAeL,SAAf,CAAAM,YAAAC,YAAA,EAAA,CACtB,KAAMC,KAAOA,QAAA,CAACC,CAAD,CAAIC,CAAJ,CAAU,CACtB,IAAIC,MAAQT,IAAA,CAAKO,CAAL,CACZ,KAAIG,MAAQV,IAAA,CAAKQ,CAAL,CACZ,KAAMG,EAAIC,QAAA,CAASH,KAAT,CAAgB,EAAhB,CACV,IAAIE,CAAJ,CAAO,CACNF,KAAA,CAAQE,CACRD,MAAA,CAAQE,QAAA,CAASF,KAAT,CAAgB,EAAhB,CAFF,CAIP,GAAID,KAAJ,CAAYC,KAAZ,CACC,MAAO,EAER,IAAID,KAAJ,CAAYC,KAAZ,CACC,MAAQ,EAET,OAAO,EAde,CAgBvB,KAAMG,OAASA,QAAA,EAAM,CACpB,IAAMC,EAAIf,KAAA,GAAU,aAAV,CAA0B,aAA1B,CAA0C,cACpDF,GAAAkB,UAAA,CAAeC,CAACnB,EAAAkB,UAAAE,QAAA,CAAqBlB,KAArB,CAA4B,EAA5B,CAADiB,CAAmC,GAAnCA,CAAyCF,CAAzCE,MAAA,EACf,OAAOjB,MAAP;AAAee,CAHK,CAKrB,KAAMI,MAAQA,QAAA,EAAM,CACnBrB,EAAAsB,UAAAC,OAAA,CAAoB,aAApB,CAAmC,cAAnC,CACAvB,GAAAsB,UAAAE,IAAA,CAAiB,SAAjB,CACA,OAAOtB,MAAP,CAAe,EAHI,CAKpB,KAAMuB,aAAeA,QAAA,CAACC,CAAD,CAAO,CAC3B,GAAI1B,EAAJ,EAAWC,SAAX,GAAyByB,CAAAC,OAAA1B,UAAzB,CACCoB,KAAA,EAEDrB,GAAA,CAAK0B,CAAAC,OACL,IAAI3B,EAAA4B,SAAApB,YAAA,EAAJ,GAAkC,IAAlC,CAAwC,CACvCP,SAAA,CAAYD,EAAAC,UACZ,KAAM4B,MAAQ7B,EAAA8B,aAAAC,qBAAA,CAAqC,OAArC,CAAA,CAA8C,CAA9C,CACd,KAAIC,KAAOC,KAAAC,KAAA,CAAWL,KAAAG,KAAX,CACX,IAAIA,IAAJ,CAAU,CACTA,IAAAvB,KAAA,CAAUA,IAAV,CACA,IAAIP,KAAJ,GAAc,aAAd,CACC8B,IAAAG,QAAA,EAEDnB,OAAA,EACAa,MAAAO,UAAA,CAAkB,EAElBJ,KAAAK,QAAA,CAAa,QAAA,CAAAjC,GAAA,CAAO,CACnByB,KAAAS,YAAA,CAAkBlC,GAAlB,CADmB,CAApB,CARS,CAJ6B,CALb,CAuB5B;MAAO,CACNmC,KAAMA,QAAA,EAAM,CACX,IAAIC,IAAMC,QAAAV,qBAAA,CAA8B,IAA9B,CACV,KAAIW,QAAU,EACd,KAAK,IAAIC,EAAI,CAAR,CAAWC,IAAMJ,GAAAK,OAAtB,CAAkCF,CAAlC,CAAsCC,GAAtC,CAA2CD,CAAA,EAA3C,CAAgD,CAC/C,IAAI3C,KAAKwC,GAAA,CAAIG,CAAJ,CACT3C,KAAAsB,UAAAE,IAAA,CAAiB,SAAjB,CACAkB,QAAAI,KAAA,CAAa9C,IAAA+C,QAAb,CAA0BtB,YAA1B,CAH+C,CAKhD,MAAOiB,QARI,CADN,IAcRM,iBAAAT,KAAA;"} \ No newline at end of file From 6c81ddbfd4eafab22705148916a774e2af178625 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 08:57:15 -0400 Subject: [PATCH 17/18] Add polyfill for older browsers, so Opera 12 works --- app/views/footer.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/footer.php b/app/views/footer.php index bd549b88..9ac073f0 100644 --- a/app/views/footer.php +++ b/app/views/footer.php @@ -10,6 +10,7 @@ + isAuthenticated()): ?> @@ -18,4 +19,4 @@ - \ No newline at end of file + From d1a0147ae2575073a339fe9ed7b8799afa913692 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 8 May 2019 11:14:11 -0400 Subject: [PATCH 18/18] Button and Select style tweaks --- public/css/app.min.css | 2 +- public/css/dark-override.css | 36 +++++++++++++++++-- public/css/dark.min.css | 2 +- public/css/general.css | 67 ++++++++++++++++++++++-------------- public/css/marx.css | 20 +++++------ 5 files changed, 87 insertions(+), 40 deletions(-) diff --git a/public/css/app.min.css b/public/css/app.min.css index 91e53538..25f564b9 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%;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;-moz-text-size-adjust:100%;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.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.6rem 0;overflow:auto;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:.1rem solid #ccc;border-radius:0;display:block;margin-bottom:.8rem;overflow:auto;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;-webkit-box-sizing:inherit;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}input,select,textarea{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: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,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 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem}h1{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: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: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: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:1.6rem}dd{margin-left:4rem}ol,ul{margin-bottom:.8rem;padding-left:2rem}blockquote{border-left:.2rem solid #1271db;font-style:italic;margin:1.6rem 0;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:1rem 0;text-align:center}footer,hr{border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;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:.1rem solid #ccc;border-radius:0;display:inline-block;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:.8rem;text-align:left}input[type=color]{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:1px thin solid #444;outline:.1rem 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:.1rem solid #ccc}select[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:.8rem 0}legend{border-bottom:.1rem solid #ccc;color:#444;display:block;margin-bottom:.8rem;padding:.8rem 0;width:100%}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:.2rem solid #444;border-radius:0;color:#444;cursor:pointer;display:inline-block;margin-bottom:.8rem;margin-right:.4rem;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{-webkit-box-shadow:none;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:.2rem solid transparent;color:#444;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:#000;border-color:rgba(0,0,0,.2)}nav a:active{border-color:#000;border-color:rgba(0,0,0,.56)}caption{padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:.8rem}td,th{border:.1rem solid #ccc;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: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:#fff;background:hsla(0,0%,100%,.65);border-radius:.5em;margin:0}table{-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto}td{padding:1rem}thead td,thead th{padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}iframe{display:block;margin:0 auto}.bracketed{color:#12db18}#main-nav a,.bracketed{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-start{-ms-flex-line-pack:start;align-content:flex-start}.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-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-self-center{-ms-flex-item-align:center;align-self:center}.flex-space-evenly{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}.flex{display:inline-block;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;position:relative}.media-wrap-flex{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:space-evenly;align-content:space-evenly;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative}td .media-wrap-flex{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.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 .5rem}.user-btn:active,.user-btn:hover{border-color:#db7d12;background-color:#db7d12}.full-width{width:100%}.full-height{max-height:none}.toph{margin-top:0}#main-nav{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem;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}.sorting,.sorting-asc,.sorting-desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting-asc:before{content:" ↑\00a0"}.sorting-desc:before{content:" ↓\00a0"}.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}.invisible tbody>tr:nth-child(odd){background:inherit}.borderless,.borderless td,.borderless th,.borderless tr,.invisible td,.invisible th,.invisible tr{-webkit-box-shadow:none;box-shadow:none;border:0}.message,.static-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,.static-message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success,.static-message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info,.static-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:312px;margin:.25em .125em;z-index:0;background:#000;background:rgba(0,0,0,.15)}.details picture.cover,picture.cover{display:inline;display:initial;width:100%}.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:2px 2px 2px #000;color:#fff;padding:.25em .125em;text-align:right;z-index:2}.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}.media>.name a{display:inline-block;-webkit-transition:none;transition:none}.media .name a:before{content:"";display:block;height:312px;left:0;position:absolute;top:0;width:220px;z-index:-1}.media-list .media:hover .name a:before{background:#000;background:rgba(0,0,0,.75)}.media>.name span.canonical{font-weight:700}.media>.name small{font-weight:400}.media:hover .name{background:#000;background:rgba(0,0,0,.75)}.media-list .media>.name a:hover,.media-list .media>.name a:hover small{color:#1271db}.media:hover>.edit-buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.media:hover{-webkit-transition:.25s ease;transition:.25s ease}.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:2px 2px 2px #000}.anime .name,.manga .name{background:#000;background:rgba(0,0,0,.45);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%;display:inline-block;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;z-index:2}.anime .row>div,.manga .row>div{font-size:.8em;display:inline-block;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle;z-index:2}.anime .media>button.plus-one{border-color:hsla(0,0%,100%,.65);position:absolute;top:138px;top:calc(50% - 21.5px);left:44px;left:calc(50% - 66.5px);z-index:50}.anime .media>button.plus-one:hover{color:hsla(0,0%,100%,.65);background:#888}.anime .media>button.plus-one:active{background:#444}.manga .row{padding:1px}.manga .media{height:310px;margin:.25em}.manga .media>.edit-buttons{position:absolute;top:86px;top:calc(50% - 22.4px);left:43.5px;left:calc(50% - 66.5px);z-index:40}.manga .media>.edit-buttons button{border-color:hsla(0,0%,100%,.65)}.manga .media>.edit-buttons:hover button{color:hsla(0,0%,100%,.65);background:#888}.manga .media>.edit-buttons button:active{background:#444}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.media.search>.row{z-index:6}.big-check,.mal-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:#000;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;width:100%;z-index:5}#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:1.5rem auto 0;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:80%;margin:0 auto}.details .cover{display:block}.details .flex>*{margin:1rem}.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(2n){text-align:left}.details a h1,.details a h2{margin-top:0}.character,.person,.small-character{width:225px;height:350px;vertical-align:middle;white-space:nowrap;position:relative}.person{width:225px;height:338px}.small-person{width:200px;height:300px}.character a{height:350px}.character:hover .name,.small-character:hover .name{background:#000;background:rgba(0,0,0,.8)}.small-character a{display:inline-block;width:100%;height:100%}.character .name,.small-character .name{position:absolute;bottom:0;left:0;z-index:10}.character img,.character picture,.person img,.person picture,.small-character img,.small-character picture{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5;max-height:350px;max-width:225px}.person img,.person picture{max-height:338px}.small-person img,.small-person picture{max-height:300px;max-width:200px}.min-table{min-width:0;margin-left:0}.max-table{min-width:100%;margin:0}aside.info{max-width:33%}.fixed aside.info{max-width:390px}aside.info img,aside.info picture{display:block;margin:0 auto}aside.info+article{max-width:66%}.small-character{width:160px;height:250px}.small-character img,.small-character picture{max-height:250px;max-width:160px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover-streaming-link{display:none}.media:hover .cover-streaming-link{display:block}.cover-streaming-link .streaming-logo{width:20px;height:20px;-webkit-filter:drop-shadow(0 -1px 4px #fff);filter:drop-shadow(0 -1px 4px #fff)}.settings.form .content article{margin:1em;display:inline-block;width:auto}.responsive-iframe{margin-top:1em;overflow:hidden;padding-bottom:56.25%;position:relative;height:0}.responsive-iframe iframe{left:0;top:0;height:100%;width:100%;position:absolute}.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%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%}.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 #000}.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 #000}.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 #000}@-webkit-keyframes cssload-rotate-one{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 cssload-rotate-one{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 cssload-rotate-two{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 cssload-rotate-two{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 cssload-rotate-three{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 cssload-rotate-three{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)}}#loading-shadow{background:#000;background:rgba(0,0,0,.8);z-index:500}#loading-shadow,#loading-shadow .loading-wrapper{position:fixed;top:0;left:0;width:100%;height:100%}#loading-shadow .loading-wrapper{z-index:501;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#loading-shadow .loading-content{position:relative;color:#fff}.loading-content .cssload-inner.cssload-one,.loading-content .cssload-inner.cssload-three,.loading-content .cssload-inner.cssload-two{border-color:#fff}.tabs{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#efefef;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin-top:1.5em}.tabs>label{border:1px solid #e5e5e5;width:100%;padding:20px 30px;background:#e5e5e5;cursor:pointer;font-weight:700;font-size:18px;color:#7f7f7f;-webkit-transition:background .1s,color .1s;transition:background .1s,color .1s}.tabs>label:hover{background:#d8d8d8}.tabs>label:active{background:#ccc}.tabs>[type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.tabs>[type=radio]{position:absolute;opacity:0}.tabs>[type=radio]:checked+label{border-bottom:1px solid #fff;background:#fff;color:#000}.tabs>[type=radio]:checked+label+.content{display:block}.tabs .content,.tabs>[type=radio]:checked+label+.content{border:1px solid #e5e5e5;border-top:0;padding:15px;background:#fff;width:100%;margin:0 auto;overflow:auto}.tabs .content{display:none;max-height:950px}.tabs .content.full-height{max-height:none}@media (min-width:800px){.tabs>label{width:auto}.tabs .content{-webkit-box-ordinal-group:100;-ms-flex-order:99;order:99}}.vertical-tabs{border:1px solid #e5e5e5;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto;position:relative;width:100%}.vertical-tabs input[type=radio]{position:absolute;opacity:0}.vertical-tabs .tab{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.vertical-tabs .tab,.vertical-tabs .tab label{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vertical-tabs .tab label{background:#e5e5e5;border:1px solid #e5e5e5;color:#7f7f7f;cursor:pointer;font-size:18px;font-weight:700;padding:0 20px;width:28%}.vertical-tabs .tab label:hover{background:#d8d8d8}.vertical-tabs .tab label:active{background:#ccc}.vertical-tabs .tab .content{display:none;border:1px solid #e5e5e5;border-left:0;border-right:0;max-height:950px;overflow:auto}.vertical-tabs .tab .content.full-height{max-height:none}.vertical-tabs [type=radio]:checked+label{border:0;background:#fff;color:#000;width:38%}.vertical-tabs [type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.vertical-tabs [type=radio]:checked~.content{display:block}@media screen and (max-width:1100px){.flex{-ms-flex-wrap:wrap;flex-wrap:wrap}.fixed aside.info,.fixed aside.info+article,aside.info,aside.info+article{max-width:none;width:100%}}@media screen and (max-width:800px){*{max-width:none}table{-webkit-box-shadow:none;box-shadow:none}.details .flex>*,body{margin:0}table,table.align-center,table .align-right,table td,table th{border:0;margin-left:auto;margin-right:auto;text-align:left;width:100%}table td{display:inline-block}table.media-details,table tbody{width:100%}table.media-details td{display:block;text-align:left!important;width:100%}table thead{display:none}.details .media-details td:nth-child(odd){font-weight:700;width:100%}table.streaming-links tr td:not(:first-child){display:none}}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}img,picture{width:100%}main{padding:0 .5rem .5rem}.media{margin:2px 0}.details{padding:.5rem}.tabs>[type=radio]:checked+label{background:#fff}.vertical-tabs .tab{-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs .content,.tabs>[type=radio]:checked+label+.content,.vertical-tabs .tab .content{display:block;border:0;max-height:none}.tabs>[type=radio]:checked+label,.tabs>label,.tabs>label:active,.tabs>label:hover,.vertical-tabs .tab label,.vertical-tabs .tab label:active,.vertical-tabs .tab label:hover,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:focus+label{background:#fff;border:0;width:100%;cursor:default;color:#000}} \ No newline at end of file +:root{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:default;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;line-height:1.4;overflow-y:scroll;-moz-text-size-adjust:100%;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.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.6rem 0;overflow:auto;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-radius:0;display:block;margin-bottom:.8rem;overflow:auto;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{-webkit-box-sizing:inherit;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}textarea{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: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,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 1.6rem}h1,h2,h3,h4,h5,h6{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem}h1{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: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: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: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:1.6rem}dd{margin-left:4rem}ol,ul{margin-bottom:.8rem;padding-left:2rem}blockquote{border-left:.2rem solid #1271db;font-style:italic;margin:1.6rem 0;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:1rem 0;text-align:center}footer,hr{border-top:.1rem solid rgba(0,0,0,.2)}hr{display:block;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]{border:.1rem solid #ccc;border-radius:0;display:inline-block;padding:.8rem;vertical-align:middle}input:not([type]){-webkit-appearance:none;background-clip:padding-box;background-color:#fff;border:.1rem solid #ccc;border-radius:0;color:#444;display:inline-block;padding:.8rem;text-align:left}input[type=color]{padding:.8rem 1.6rem}input:not([type]):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:1px thin solid #444;outline:.1rem thin solid #444}input:not([type])[disabled],textarea[disabled]{background-color:#efefef;color:#777;cursor:not-allowed}textarea[readonly]{background-color:#efefef;border-color:#ccc;color:#777}input: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[multiple]{height:auto}label{line-height:2}fieldset{border:0;margin:0;padding:.8rem 0}legend{border-bottom:.1rem solid #ccc;color:#444;display:block;margin-bottom:.8rem;padding:.8rem 0;width:100%}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:.2rem solid #444;border-radius:0;color:#444;cursor:pointer;display:inline-block;margin-bottom:.8rem;margin-right:.4rem;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{-webkit-box-shadow:none;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:.2rem solid transparent;color:#444;padding:.8rem 1.6rem;text-decoration:none;transition:.25s ease}nav a:hover,nav li.selected a{border-color:#000;border-color:rgba(0,0,0,.2)}nav a:active{border-color:#000;border-color:rgba(0,0,0,.56)}caption{padding:.8rem 0}thead th{background:#efefef;color:#444}tr{background:#fff;margin-bottom:.8rem}td,th{border:.1rem solid #ccc;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: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:#fff;background:-webkit-gradient(linear,left top,left bottom,from(#ddd),color-stop(#eee),color-stop(#fff),color-stop(#eee),to(#ddd));background:linear-gradient(#ddd,#eee,#fff,#eee,#ddd);border-radius:.5em;margin:0;text-transform:none}button,button:hover{border-color:#555;color:#555}button:hover{background:#bbb;background:-webkit-gradient(linear,left top,left bottom,from(#cfcfcf),color-stop(#dfdfdf),color-stop(#efefef),color-stop(#dfdfdf),to(#cfcfcf));background:linear-gradient(#cfcfcf,#dfdfdf,#efefef,#dfdfdf,#cfcfcf)}button:active{background:#ddd;background:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#ddd));background:linear-gradient(#ddd,#ddd)}.media:hover button{background:-webkit-gradient(linear,left top,left bottom,from(#bbb),color-stop(#ccc),color-stop(#ddd),color-stop(#ccc),to(#bbb));background:linear-gradient(#bbb,#ccc,#ddd,#ccc,#bbb)}.media:hover button:hover{background:-webkit-gradient(linear,left top,left bottom,from(#afafaf),color-stop(#bfbfbf),color-stop(#cfcfcf),color-stop(#bfbfbf),to(#afafaf));background:linear-gradient(#afafaf,#bfbfbf,#cfcfcf,#bfbfbf,#afafaf)}table{-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto}td{padding:1rem}thead td,thead th{padding:.5rem}input[type=number]{width:4em}tbody>tr:nth-child(odd){background:#ddd}a:active,a:hover{color:#7d12db}iframe{display:block;margin:0 auto}.bracketed{color:#12db18}#main-nav a,.bracketed{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-start{-ms-flex-line-pack:start;align-content:flex-start}.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-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.flex-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.flex-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-self-center{-ms-flex-item-align:center;align-self:center}.flex-space-evenly{-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly}.flex{display:inline-block;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;position:relative}.media-wrap-flex{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:space-evenly;align-content:space-evenly;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative}td .media-wrap-flex{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.danger{background-color:#ff4136;border-color:#924949;color:#924949}.danger:active,.danger:hover{background-color:#924949;border-color:#ff4136;color:#ff4136}.user-btn{background:transparent;border-color:#12db18;color:#12db18;text-shadow:1px 1px 1px #000;padding:0 .5rem}.user-btn:active,.user-btn:hover{background:transparent;border-color:#db7d12;color:#db7d12}.user-btn:active{background:#db7d12;color:#fff}.full-width{width:100%}.full-height{max-height:none}.toph{margin-top:0}#main-nav{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Droid Sans,Helvetica Neue,sans-serif;margin:2rem 0 1.6rem;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}.sorting,.sorting-asc,.sorting-desc{vertical-align:text-bottom}.sorting:before{content:" ↕\00a0"}.sorting-asc:before{content:" ↑\00a0"}.sorting-desc:before{content:" ↓\00a0"}.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}.invisible tbody>tr:nth-child(odd){background:inherit}.borderless,.borderless td,.borderless th,.borderless tr,.invisible td,.invisible th,.invisible tr{-webkit-box-shadow:none;box-shadow:none;border:0}.message,.static-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,.static-message.error{border:1px solid #924949;background:#f3e6e6}.message.error .icon:after{content:"✘"}.message.success,.static-message.success{border:1px solid #1f8454;background:#70dda9}.message.success .icon:after{content:"✔"}.message.info,.static-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:312px;margin:.25em .125em;z-index:0;background:#000;background:rgba(0,0,0,.15)}.details picture.cover,picture.cover{display:inline;display:initial;width:100%}.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:2px 2px 2px #000;color:#fff;padding:.25em .125em;text-align:right;z-index:2}.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}.media>.name a{display:inline-block;-webkit-transition:none;transition:none}.media .name a:before{content:"";display:block;height:312px;left:0;position:absolute;top:0;width:220px;z-index:-1}.media-list .media:hover .name a:before{background:#000;background:rgba(0,0,0,.75)}.media>.name span.canonical{font-weight:700}.media>.name small{font-weight:400}.media:hover .name{background:#000;background:rgba(0,0,0,.75)}.media-list .media>.name a:hover,.media-list .media>.name a:hover small{color:#1271db}.media:hover>.edit-buttons[hidden],.media:hover>button[hidden]{-webkit-transition:.25s ease;transition:.25s ease;display:block}.media:hover{-webkit-transition:.25s ease;transition:.25s ease}.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:2px 2px 2px #000}.anime .name,.manga .name{background:#000;background:rgba(0,0,0,.45);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%;display:inline-block;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;z-index:2}.anime .row>div,.manga .row>div{font-size:.8em;display:inline-block;display:flex-item;-ms-flex-item-align:center;align-self:center;text-align:center;vertical-align:middle;z-index:2}.anime .media>button.plus-one{border-color:hsla(0,0%,100%,.65);position:absolute;top:138px;top:calc(50% - 21.2px);left:44px;left:calc(50% - 57.8px);z-index:50}.manga .row{padding:1px}.manga .media{height:310px;margin:.25em}.manga .media>.edit-buttons{position:absolute;top:86px;top:calc(50% - 21.2px);left:43.5px;left:calc(50% - 57.8px);z-index:40}.manga .media>.edit-buttons button{border-color:hsla(0,0%,100%,.65)}.media.search>.name{background-color:#555;background-color:rgba(0,0,0,.35);background-size:cover;background-size:contain;background-repeat:no-repeat}.media.search>.row{z-index:6}.big-check,.mal-check{display:none}.big-check:checked+label{-webkit-transition:.25s ease;transition:.25s ease;background:#000;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;width:100%;z-index:5}#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:1.5rem auto 0;padding:1rem;font-size:inherit}.description{max-width:800px;max-width:80rem}.fixed{max-width:80%;margin:0 auto}.details .cover{display:block}.details .flex>*{margin:1rem}.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(2n){text-align:left}.details a h1,.details a h2{margin-top:0}.character,.person,.small-character{width:225px;height:350px;vertical-align:middle;white-space:nowrap;position:relative}.person{width:225px;height:338px}.small-person{width:200px;height:300px}.character a{height:350px}.character:hover .name,.small-character:hover .name{background:#000;background:rgba(0,0,0,.8)}.small-character a{display:inline-block;width:100%;height:100%}.character .name,.small-character .name{position:absolute;bottom:0;left:0;z-index:10}.character img,.character picture,.person img,.person picture,.small-character img,.small-character picture{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5;max-height:350px;max-width:225px}.person img,.person picture{max-height:338px}.small-person img,.small-person picture{max-height:300px;max-width:200px}.min-table{min-width:0;margin-left:0}.max-table{min-width:100%;margin:0}aside.info{max-width:33%}.fixed aside.info{max-width:390px}aside.info img,aside.info picture{display:block;margin:0 auto}aside.info+article{max-width:66%}.small-character{width:160px;height:250px}.small-character img,.small-character picture{max-height:250px;max-width:160px}.user-page .media-wrap{text-align:left}.media a{display:inline-block;width:100%;height:100%}.streaming-logo{width:50px;height:50px;vertical-align:middle}.cover-streaming-link{display:none}.media:hover .cover-streaming-link{display:block}.cover-streaming-link .streaming-logo{width:20px;height:20px;-webkit-filter:drop-shadow(0 -1px 4px #fff);filter:drop-shadow(0 -1px 4px #fff)}.settings.form .content article{margin:1em;display:inline-block;width:auto}.responsive-iframe{margin-top:1em;overflow:hidden;padding-bottom:56.25%;position:relative;height:0}.responsive-iframe iframe{left:0;top:0;height:100%;width:100%;position:absolute}.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%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%}.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 #000}.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 #000}.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 #000}@-webkit-keyframes cssload-rotate-one{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 cssload-rotate-one{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 cssload-rotate-two{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 cssload-rotate-two{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 cssload-rotate-three{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 cssload-rotate-three{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)}}#loading-shadow{background:#000;background:rgba(0,0,0,.8);z-index:500}#loading-shadow,#loading-shadow .loading-wrapper{position:fixed;top:0;left:0;width:100%;height:100%}#loading-shadow .loading-wrapper{z-index:501;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#loading-shadow .loading-content{position:relative;color:#fff}.loading-content .cssload-inner.cssload-one,.loading-content .cssload-inner.cssload-three,.loading-content .cssload-inner.cssload-two{border-color:#fff}.tabs{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#efefef;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin-top:1.5em}.tabs>label{border:1px solid #e5e5e5;width:100%;padding:20px 30px;background:#e5e5e5;cursor:pointer;font-weight:700;font-size:18px;color:#7f7f7f;-webkit-transition:background .1s,color .1s;transition:background .1s,color .1s}.tabs>label:hover{background:#d8d8d8}.tabs>label:active{background:#ccc}.tabs>[type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.tabs>[type=radio]{position:absolute;opacity:0}.tabs>[type=radio]:checked+label{border-bottom:1px solid #fff;background:#fff;color:#000}.tabs>[type=radio]:checked+label+.content{display:block}.tabs .content,.tabs>[type=radio]:checked+label+.content{border:1px solid #e5e5e5;border-top:0;padding:15px;background:#fff;width:100%;margin:0 auto;overflow:auto}.tabs .content{display:none;max-height:950px}.tabs .content.full-height{max-height:none}@media (min-width:800px){.tabs>label{width:auto}.tabs .content{-webkit-box-ordinal-group:100;-ms-flex-order:99;order:99}}.vertical-tabs{border:1px solid #e5e5e5;-webkit-box-shadow:0 48px 80px -32px rgba(0,0,0,.3);box-shadow:0 48px 80px -32px rgba(0,0,0,.3);margin:0 auto;position:relative;width:100%}.vertical-tabs input[type=radio]{position:absolute;opacity:0}.vertical-tabs .tab{display:inline-block;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.vertical-tabs .tab,.vertical-tabs .tab label{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.vertical-tabs .tab label{background:#e5e5e5;border:1px solid #e5e5e5;color:#7f7f7f;cursor:pointer;font-size:18px;font-weight:700;padding:0 20px;width:28%}.vertical-tabs .tab label:hover{background:#d8d8d8}.vertical-tabs .tab label:active{background:#ccc}.vertical-tabs .tab .content{display:none;border:1px solid #e5e5e5;border-left:0;border-right:0;max-height:950px;overflow:auto}.vertical-tabs .tab .content.full-height{max-height:none}.vertical-tabs [type=radio]:checked+label{border:0;background:#fff;color:#000;width:38%}.vertical-tabs [type=radio]:focus+label{-webkit-box-shadow:inset 0 0 0 3px #2aa1c0;box-shadow:inset 0 0 0 3px #2aa1c0;z-index:1}.vertical-tabs [type=radio]:checked~.content{display:block}@media screen and (max-width:1100px){.flex{-ms-flex-wrap:wrap;flex-wrap:wrap}.fixed aside.info,.fixed aside.info+article,aside.info,aside.info+article{max-width:none;width:100%}}@media screen and (max-width:800px){*{max-width:none}table{-webkit-box-shadow:none;box-shadow:none}.details .flex>*,body{margin:0}table,table.align-center,table .align-right,table td,table th{border:0;margin-left:auto;margin-right:auto;text-align:left;width:100%}table td{display:inline-block}table.media-details,table tbody{width:100%}table.media-details td{display:block;text-align:left!important;width:100%}table thead{display:none}.details .media-details td:nth-child(odd){font-weight:700;width:100%}table.streaming-links tr td:not(:first-child){display:none}}@media screen and (max-width:40em){nav a{line-height:4em;line-height:4rem}img,picture{width:100%}main{padding:0 .5rem .5rem}.media{margin:2px 0}.details{padding:.5rem}.tabs>[type=radio]:checked+label{background:#fff}.vertical-tabs .tab{-ms-flex-wrap:wrap;flex-wrap:wrap}.tabs .content,.tabs>[type=radio]:checked+label+.content,.vertical-tabs .tab .content{display:block;border:0;max-height:none}.tabs>[type=radio]:checked+label,.tabs>label,.tabs>label:active,.tabs>label:hover,.vertical-tabs .tab label,.vertical-tabs .tab label:active,.vertical-tabs .tab label:hover,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:focus+label{background:#fff;border:0;width:100%;cursor:default;color:#000}} \ No newline at end of file diff --git a/public/css/dark-override.css b/public/css/dark-override.css index d24f18d3..03297473 100644 --- a/public/css/dark-override.css +++ b/public/css/dark-override.css @@ -52,9 +52,41 @@ small { color: #fff; } -input, select, textarea { - color: #ccc; +input, input[type], select, textarea { + border-color: #eee; + color: #eee; + background: #666; + padding:.8em; +} + +button { background: #444; + background: linear-gradient(#666, #555, #444, #555, #666); + border-radius: 0.5em; + margin: 0; + text-transform: none; + border-color: #ddd; + color: #ddd; +} + +button:hover { + background: #222; + background: linear-gradient(#444, #333, #222, #333, #444); + border-color: #ddd; + color: #ddd; +} + +button:active { + background: #333; + background: linear-gradient(#333, #333); +} + +.media:hover button { + background: linear-gradient(#666, #555, #444, #555, #666); +} + +.media:hover button:hover { + background: linear-gradient(#444, #555, #666, #555, #444); } .message, .static-message { diff --git a/public/css/dark.min.css b/public/css/dark.min.css index 4e42362a..1c0fd2d6 100644 --- a/public/css/dark.min.css +++ b/public/css/dark.min.css @@ -1 +1 @@ -a{color:#1978e2;text-shadow:var(--link-shadow)}a:hover{color:#9e34fd}body,legend,nav ul li a{background:#333;color:#eee}nav a:hover,nav li.selected a{border-color:#fff}header button{background:transparent}table{-webkit-box-shadow:none;box-shadow:none}td,th{border-color:#111}thead td,thead th{background:#333;color:#eee}tbody>tr:nth-child(2n){background:#555;color:#eee}tbody>tr:nth-child(odd){background:#333}footer,hr,legend{border-color:#ddd}small{color:#fff}input,select,textarea{color:#ccc;background:#444}.message,.static-message{text-shadow:var(--white-link-shadow)}.message.success,.static-message.success{background:#1f8454;border-color:#70dda9}.message.error,.static-message.error{border-color:#f3e6e6;background:#924949}.message.info,.static-message.info{border-color:#ffc;background:#bfbe3a}.invisible tbody>tr:nth-child(2n),.invisible tbody>tr:nth-child(odd),.invisible td,.invisible th,.invisible tr{background:transparent}#main-nav{border-bottom:.1rem solid #ddd}.tabs,.vertical-tabs{background:#333}.tabs>label,.vertical-tabs .tab label{background:#222;border:0;color:#eee}.vertical-tabs .tab label{width:100%}.tabs>label:hover,.vertical-tabs .tab>label:hover{background:#888}.tabs>label:active,.vertical-tabs .tab>label:active{background:#999}.tabs>[type=radio]:checked+label,.tabs>[type=radio]:checked+label+.content,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:checked~.content{border:0;background:#666;color:#eee}.vertical-tabs{background:#222;border:1px solid #444}.vertical-tabs .tab{background:#666;border-bottom:1px solid #444}.streaming-logo{-webkit-filter:drop-shadow(0 0 2px #fff);filter:url('data:image/svg+xml;charset=utf-8,#filter');filter:drop-shadow(0 0 2px #fff)} \ No newline at end of file +a{color:#1978e2;text-shadow:var(--link-shadow)}a:hover{color:#9e34fd}body,legend,nav ul li a{background:#333;color:#eee}nav a:hover,nav li.selected a{border-color:#fff}header button{background:transparent}table{-webkit-box-shadow:none;box-shadow:none}td,th{border-color:#111}thead td,thead th{background:#333;color:#eee}tbody>tr:nth-child(2n){background:#555;color:#eee}tbody>tr:nth-child(odd){background:#333}footer,hr,legend{border-color:#ddd}small{color:#fff}input,input[type],select,textarea{border-color:#eee;color:#eee;background:#666;padding:.8em}button{background:#444;background:-webkit-gradient(linear,left top,left bottom,from(#666),color-stop(#555),color-stop(#444),color-stop(#555),to(#666));background:linear-gradient(#666,#555,#444,#555,#666);border-radius:.5em;margin:0;text-transform:none}button,button:hover{border-color:#ddd;color:#ddd}button:hover{background:#222;background:-webkit-gradient(linear,left top,left bottom,from(#444),color-stop(#333),color-stop(#222),color-stop(#333),to(#444));background:linear-gradient(#444,#333,#222,#333,#444)}button:active{background:#333;background:-webkit-gradient(linear,left top,left bottom,from(#333),to(#333));background:linear-gradient(#333,#333)}.media:hover button{background:-webkit-gradient(linear,left top,left bottom,from(#666),color-stop(#555),color-stop(#444),color-stop(#555),to(#666));background:linear-gradient(#666,#555,#444,#555,#666)}.media:hover button:hover{background:-webkit-gradient(linear,left top,left bottom,from(#444),color-stop(#555),color-stop(#666),color-stop(#555),to(#444));background:linear-gradient(#444,#555,#666,#555,#444)}.message,.static-message{text-shadow:var(--white-link-shadow)}.message.success,.static-message.success{background:#1f8454;border-color:#70dda9}.message.error,.static-message.error{border-color:#f3e6e6;background:#924949}.message.info,.static-message.info{border-color:#ffc;background:#bfbe3a}.invisible tbody>tr:nth-child(2n),.invisible tbody>tr:nth-child(odd),.invisible td,.invisible th,.invisible tr{background:transparent}#main-nav{border-bottom:.1rem solid #ddd}.tabs,.vertical-tabs{background:#333}.tabs>label,.vertical-tabs .tab label{background:#222;border:0;color:#eee}.vertical-tabs .tab label{width:100%}.tabs>label:hover,.vertical-tabs .tab>label:hover{background:#888}.tabs>label:active,.vertical-tabs .tab>label:active{background:#999}.tabs>[type=radio]:checked+label,.tabs>[type=radio]:checked+label+.content,.vertical-tabs [type=radio]:checked+label,.vertical-tabs [type=radio]:checked~.content{border:0;background:#666;color:#eee}.vertical-tabs{background:#222;border:1px solid #444}.vertical-tabs .tab{background:#666;border-bottom:1px solid #444}.streaming-logo{-webkit-filter:drop-shadow(0 0 2px #fff);filter:url('data:image/svg+xml;charset=utf-8,#filter');filter:drop-shadow(0 0 2px #fff)} \ No newline at end of file diff --git a/public/css/general.css b/public/css/general.css index 8889c010..5c0ebafb 100644 --- a/public/css/general.css +++ b/public/css/general.css @@ -22,9 +22,33 @@ body { } button { - background: rgba(255, 255, 255, 0.65); + background: #fff; + background: linear-gradient(#ddd, #eee, #fff, #eee, #ddd); border-radius: 0.5em; margin: 0; + text-transform: none; + border-color: #555; + color: #555; +} + +button:hover { + background: #bbb; + background: linear-gradient(#cfcfcf, #dfdfdf, #efefef, #dfdfdf, #cfcfcf); + border-color: #555; + color: #555; +} + +button:active { + background: #ddd; + background: linear-gradient(#ddd, #ddd); +} + +.media:hover button { + background: linear-gradient(#bbb, #ccc, #ddd, #ccc, #bbb); +} + +.media:hover button:hover { + background: linear-gradient(#afafaf, #bfbfbf, #cfcfcf, #bfbfbf, #afafaf); } table { @@ -183,16 +207,19 @@ td .media-wrap-flex { .danger { background-color: #ff4136; border-color: #924949; - color: #fff; + color: #924949; + /* color: #fff; */ } .danger:hover, .danger:active { background-color: #924949; border-color: #ff4136; - color: #fff; + color: #ff4136; + /* color: #fff; */ } .user-btn { + background: transparent; border-color: var(--edit-link-color); color: var(--edit-link-color); text-shadow: var(--link-shadow); @@ -201,8 +228,14 @@ td .media-wrap-flex { } .user-btn:hover, .user-btn:active { + background: transparent; border-color: var(--edit-link-hover-color); - background-color: var(--edit-link-hover-color); + color: var(--edit-link-hover-color); +} + +.user-btn:active { + background: var(--edit-link-hover-color); + color: #fff; } .full-width { @@ -534,21 +567,12 @@ picture.cover { border-color: hsla(0, 0%, 100%, .65); position: absolute; top: 138px; - top: calc(50% - 21.5px); + top: calc(50% - 21.2px); left: 44px; - left: calc(50% - 66.5px); + left: calc(50% - 57.8px); z-index: 50; } -.anime .media > button.plus-one:hover { - color: hsla(0, 0%, 100%, .65); - background: #888; -} - -.anime .media > button.plus-one:active { - background: #444; -} - /* ----------------------------------------------------------------------------- Manga-list-specific styles ------------------------------------------------------------------------------*/ @@ -566,9 +590,9 @@ picture.cover { position: absolute; top: 86px; /* top: calc(50% - 58.5px); */ - top: calc(50% - 22.4px); + top: calc(50% - 21.2px); left: 43.5px; - left: calc(50% - 66.5px); + left: calc(50% - 57.8px); z-index: 40; } @@ -576,15 +600,6 @@ picture.cover { border-color: hsla(0, 0%, 100%, .65); } -.manga .media > .edit-buttons:hover button { - color: hsla(0, 0%, 100%, .65); - background: #888; -} - -.manga .media > .edit-buttons button:active { - background: #444; -} - /* ----------------------------------------------------------------------------- Search page styles ------------------------------------------------------------------------------*/ diff --git a/public/css/marx.css b/public/css/marx.css index 6c10d304..78e9cc52 100644 --- a/public/css/marx.css +++ b/public/css/marx.css @@ -96,8 +96,8 @@ textarea { } *,::before,::after { - border-style:solid; - border-width:0; + /* border-style:solid; + border-width:0; */ box-sizing:inherit; } @@ -124,7 +124,7 @@ audio,canvas,iframe,img,svg,video { vertical-align:middle; } -input,select,textarea { +input,/*select*/,textarea { border:.1rem solid #ccc; color:inherit; font-family:inherit; @@ -296,7 +296,7 @@ img { 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; @@ -320,7 +320,7 @@ 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; } @@ -336,7 +336,7 @@ 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; @@ -348,13 +348,13 @@ input:not([type])[disabled] { 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; } @@ -363,10 +363,10 @@ input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus,input outline-color:#ff4136; } -select { +/* select { background-color:#fff; border:.1rem solid #ccc; -} +}*/ select[multiple] { height:auto;