From 1beb41105090f24370c77f3c88c1471348a2fcea Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 1 Mar 2019 03:41:35 +0900
Subject: [PATCH 01/61] =?UTF-8?q?PlurkResolver=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/MetadataResolver.php |  1 +
 app/MetadataResolver/PlurkResolver.php    | 44 +++++++++++++++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 app/MetadataResolver/PlurkResolver.php

diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php
index ace71c2..dc7fc08 100644
--- a/app/MetadataResolver/MetadataResolver.php
+++ b/app/MetadataResolver/MetadataResolver.php
@@ -23,6 +23,7 @@ class MetadataResolver implements Resolver
         '~www\.deviantart\.com/.*/art/.*~' => DeviantArtResolver::class,
         '~\.syosetu\.com/n\d+[a-z]{2,}~' => NarouResolver::class,
         '~ci-en\.jp/creator/\d+/article/\d+~' => CienResolver::class,
+        '~www\.plurk\.com\/p\/.*~' => PlurkResolver::class,
     ];
 
     public $mimeTypes = [
diff --git a/app/MetadataResolver/PlurkResolver.php b/app/MetadataResolver/PlurkResolver.php
new file mode 100644
index 0000000..3301cdd
--- /dev/null
+++ b/app/MetadataResolver/PlurkResolver.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\MetadataResolver;
+
+use GuzzleHttp\Client;
+
+class PlurkResolver implements Resolver
+{
+    /**
+     * @var Client
+     */
+    private $client;
+    /**
+     * @var OGPResolver
+     */
+    private $ogpResolver;
+
+    public function __construct(Client $client, OGPResolver $ogpResolver)
+    {
+        $this->client = $client;
+        $this->ogpResolver = $ogpResolver;
+    }
+
+    public function resolve(string $url): Metadata
+    {
+        $res = $this->client->get($url);
+        if ($res->getStatusCode() === 200) {
+            $metadata = $this->ogpResolver->parse($res->getBody());
+
+            $dom = new \DOMDocument();
+            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
+            $xpath = new \DOMXPath($dom);
+            $imageNode = $xpath->query('//div[@class="text_holder"]/a[1]')->item(0);
+
+            if($imageNode) {
+                $metadata->image = $imageNode->getAttribute('href');
+            }
+
+            return $metadata;
+        } else {
+            throw new \RuntimeException("{$res->getStatusCode()}: $url");
+        }
+    }
+}

From a364de7d038420fb7a084388138e18b51ea26c91 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 03:41:04 +0900
Subject: [PATCH 02/61] =?UTF-8?q?token-time=E3=81=8C=E3=81=82=E3=82=8B?=
 =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AE=E3=81=BFexpires=5Fat=E3=82=92?=
 =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
 =?UTF-8?q?=E5=A4=89=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/PatreonResolver.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/MetadataResolver/PatreonResolver.php b/app/MetadataResolver/PatreonResolver.php
index 5ce28e7..82ce6dd 100644
--- a/app/MetadataResolver/PatreonResolver.php
+++ b/app/MetadataResolver/PatreonResolver.php
@@ -28,11 +28,11 @@ class PatreonResolver implements Resolver
         if ($res->getStatusCode() === 200) {
             $metadata = $this->ogpResolver->parse($res->getBody());
 
-            parse_str(parse_url($metadata->image, PHP_URL_QUERY), $temp);
-            $expires_at_unixtime = $temp['token-time'];
-            $expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
-
-            $metadata->expires_at = $expires_at;
+            parse_str(parse_url($metadata->image, PHP_URL_QUERY), $query);
+            if(isset($query['token-time'])){
+                $expires_at_unixtime = $query['token-time'];
+                $metadata->expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
+            }
 
             return $metadata;
         } else {

From b29bb23b406a7f7957a323f6670dc9bf37f33502 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 03:58:45 +0900
Subject: [PATCH 03/61] =?UTF-8?q?PlurkResolver=E3=81=AE=E3=83=86=E3=82=B9?=
 =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../MetadataResolver/PlurkResolverTest.php    | 35 ++++++++++++++++
 tests/fixture/Plurk/test.html                 | 42 +++++++++++++++++++
 2 files changed, 77 insertions(+)
 create mode 100644 tests/Unit/MetadataResolver/PlurkResolverTest.php
 create mode 100644 tests/fixture/Plurk/test.html

diff --git a/tests/Unit/MetadataResolver/PlurkResolverTest.php b/tests/Unit/MetadataResolver/PlurkResolverTest.php
new file mode 100644
index 0000000..e2f3abe
--- /dev/null
+++ b/tests/Unit/MetadataResolver/PlurkResolverTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Tests\Unit\MetadataResolver;
+
+use App\MetadataResolver\PlurkResolver;
+use Tests\TestCase;
+
+class PlurkResolverTest extends TestCase
+{
+    use CreateMockedResolver;
+
+    public function setUp()
+    {
+        parent::setUp();
+
+        if (!$this->shouldUseMock()) {
+            sleep(1);
+        }
+    }
+
+    public function test()
+    {
+        $responseText = file_get_contents(__DIR__.'/../../fixture/Plurk/test.html');
+
+        $this->createResolver(PlurkResolver::class, $responseText);
+
+        $metadata = $this->resolver->resolve('https://www.plurk.com/p/n0awli/');
+        $this->assertEquals('[R18]FC2實況中', $metadata->title);
+        $this->assertEquals('Plurk by 小虫/ムシ@台中種 - 71 response(s)', $metadata->description);
+        $this->assertEquals('https://images.plurk.com/5cT15Sf9OOFYk9fEQ759bZ.jpg', $metadata->image);
+        if ($this->shouldUseMock()) {
+            $this->assertSame('https://www.plurk.com/p/n0awli/', (string) $this->handler->getLastRequest()->getUri());
+        }
+    }
+}
diff --git a/tests/fixture/Plurk/test.html b/tests/fixture/Plurk/test.html
new file mode 100644
index 0000000..be70c95
--- /dev/null
+++ b/tests/fixture/Plurk/test.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>小虫/ムシ@台中種 - [R18]FC2實況中 - Plurk</title>
+        <link rel="shortcut icon" type="image/png" href="//s.plurk.com/936ddc656e104792b651240cdafeb7aa.png">
+        <link rel="dns-prefetch" href="//avatars.plurk.com">
+        <link rel="dns-prefetch" href="//emos.plurk.com">
+        <link rel="dns-prefetch" href="//images.plurk.com">
+        <link rel="dns-prefetch" href="//imgs.plurk.com">
+        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0" />
+        <meta name="mobile-web-app-capable" content="yes" />
+        <meta name="apple-mobile-web-app-capable" content="yes" />
+        <meta name="fragment" content="!">
+        <meta property="og:type" content="article" />
+        <meta property="og:title" content="[R18]FC2實況中" />
+        <meta property="og:site_name" content="Plurk" />
+        <meta property="og:url" content="https://www.plurk.com/p/n0awli" />
+        <meta property="og:description" content="Plurk by 小虫/ムシ@台中種 - 71 response(s)" />
+        <meta property="og:image" content="https://s.plurk.com/6c6e2fb987651802af50e5f6a3853b40.png" />
+        <meta property="fb:app_id" content="47804741521"/>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
+        <meta name="verify-v1" content="iBRwaQ/3d4NoF1uaa2SAfCJ962ORry1TE8/4XxtIbHk=" />
+        <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <meta name="application-name" content="Plurk"/>
+        <meta name="msapplication-TileColor" content="#AA460F"/>
+        <meta name="msapplication-TileImage" content="//s.plurk.com/0964d8f7301cc4ee38b343ed154d2369.png"/>
+    </head>
+
+    <body>
+        <div class="content">
+            <div class="text_holder">
+                <a href="https://images.plurk.com/5cT15Sf9OOFYk9fEQ759bZ.jpg" class="ex_link pictureservices" rel="nofollow">
+                    <img src="https://images.plurk.com/mx_5cT15Sf9OOFYk9fEQ759bZ.jpg" alt="https://images.plurk.com/5cT15Sf9OOFYk9fEQ759bZ.jpg" height="48">
+                </a>
+                <a href="https://images.plurk.com/2HdBlulzzXMZB7vITj4uOG.jpg" class="ex_link pictureservices" rel="nofollow">
+                    <img src="https://images.plurk.com/mx_2HdBlulzzXMZB7vITj4uOG.jpg" alt="https://images.plurk.com/2HdBlulzzXMZB7vITj4uOG.jpg" height="48">
+                </a> [R18]FC2實況中
+            </div>
+        </div>
+    </body>
+</html>
\ No newline at end of file

From 41778844b88d370e30c9b6a30b65ce27422fda9f Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 05:09:26 +0900
Subject: [PATCH 04/61] =?UTF-8?q?dlsite.jp=E3=81=AE=E5=BD=A2=E5=BC=8F?=
 =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/MetadataResolver.php         |  1 +
 .../Unit/MetadataResolver/DLsiteResolverTest.php  | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php
index 5bf195f..adf3706 100644
--- a/app/MetadataResolver/MetadataResolver.php
+++ b/app/MetadataResolver/MetadataResolver.php
@@ -16,6 +16,7 @@ class MetadataResolver implements Resolver
         '~ec\.toranoana\.jp/tora_r/ec/item/.*~' => ToranoanaResolver::class,
         '~iwara\.tv/videos/.*~' => IwaraResolver::class,
         '~www\.dlsite\.com/.*/work/=/product_id/..\d+\.html~' => DLsiteResolver::class,
+        '~dlsite\.jp/mawtw/..\d+~' => DLsiteResolver::class,
         '~www\.pixiv\.net/member_illust\.php\?illust_id=\d+~' => PixivResolver::class,
         '~fantia\.jp/posts/\d+~' => FantiaResolver::class,
         '~dmm\.co\.jp/~' => FanzaResolver::class,
diff --git a/tests/Unit/MetadataResolver/DLsiteResolverTest.php b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
index 066bfec..49221bd 100644
--- a/tests/Unit/MetadataResolver/DLsiteResolverTest.php
+++ b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
@@ -47,4 +47,19 @@ class DLsiteResolverTest extends TestCase
             $this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ234446.html', (string) $this->handler->getLastRequest()->getUri());
         }
     }
+
+    public function testProductShortLink()
+    {
+        $responseText = file_get_contents(__DIR__.'/../../fixture/DLsite/testProduct.html');
+
+        $this->createResolver(DLsiteResolver::class, $responseText);
+
+        $metadata = $this->resolver->resolve('https://dlsite.jp/mawtw/RJ171695.html');
+        $this->assertEquals('【骨伝導風】道草屋 たびらこ-一緒にはみがき【耳かき&はみがき】 [桃色CODE] | DLsite', $metadata->title);
+        $this->assertStringStartsWith('少しお母さんっぽい店員さんに、歯磨きからおやすみまでお世話されます。はみがきで興奮しちゃった旦那様のも、しっかりお世話してくれます。歯磨き音は特殊なマイクを使用、骨伝導風ハイレゾバイノーラル音声です。', $metadata->description);
+        $this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ172000/RJ171695_img_main.jpg', $metadata->image);
+        if ($this->shouldUseMock()) {
+            $this->assertSame('https://dlsite.jp/mawtw/RJ171695.html', (string) $this->handler->getLastRequest()->getUri());
+        }
+    }
 }

From a2f0beb3cbb7416db76870eb249734f2929dd970 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 05:30:55 +0900
Subject: [PATCH 05/61] =?UTF-8?q?description=E3=81=AB=E3=81=82=E3=82=8B?=
 =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA`<>`=E3=82=92=E5=89=8A=E9=99=A4?=
 =?UTF-8?q?=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/FanzaResolver.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/MetadataResolver/FanzaResolver.php b/app/MetadataResolver/FanzaResolver.php
index cfb73db..0124770 100644
--- a/app/MetadataResolver/FanzaResolver.php
+++ b/app/MetadataResolver/FanzaResolver.php
@@ -27,6 +27,7 @@ class FanzaResolver implements Resolver
         if ($res->getStatusCode() === 200) {
             $metadata = $this->ogpResolver->parse($res->getBody());
             $metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
+            $metadata->description = str_replace('<>', "", $metadata->description);
 
             return $metadata;
         } else {

From d571ff1a5bd8af7cb63d2b1928bfe8d8765a1d55 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 06:21:33 +0900
Subject: [PATCH 06/61] =?UTF-8?q?=E4=BD=99=E5=88=86=E3=81=AA=E6=96=87?=
 =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=83=BB=E6=95=B4=E5=BD=A2=E3=81=99?=
 =?UTF-8?q?=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/DLsiteResolver.php | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/app/MetadataResolver/DLsiteResolver.php b/app/MetadataResolver/DLsiteResolver.php
index 99aae49..f50859e 100644
--- a/app/MetadataResolver/DLsiteResolver.php
+++ b/app/MetadataResolver/DLsiteResolver.php
@@ -26,6 +26,17 @@ class DLsiteResolver implements Resolver
         $res = $this->client->get($url);
         if ($res->getStatusCode() === 200) {
             $metadata = $this->ogpResolver->parse($res->getBody());
+
+            // 抽出
+            preg_match('~\[(.+)\] \| DLsite$~', $metadata->title, $match);
+            $maker = $match[1];
+
+            // 余分な文を消す
+            $metadata->title = preg_replace('~\[.+\] \| DLsite$~', '', $metadata->title);
+            $metadata->description = preg_replace('~「DLsite.+」は同人誌・同人ゲーム・同人音声のダウンロードショップ。お気に入りの作品をすぐダウンロードできてすぐ楽しめる!毎日更新しているのであなたが探している作品にきっと出会えます。国内最大級の二次元総合ダウンロードショップ「DLsite」!$~', '', $metadata->description);
+
+            // 整形
+            $metadata->description = 'サークル: ' . $maker . PHP_EOL . $metadata->description;
             $metadata->image = str_replace('img_sam.jpg', 'img_main.jpg', $metadata->image);
 
             return $metadata;

From d561ee66c2c56d3967f29739d98d3348f2e922e5 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 06:29:16 +0900
Subject: [PATCH 07/61] =?UTF-8?q?trim=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/DLsiteResolver.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/MetadataResolver/DLsiteResolver.php b/app/MetadataResolver/DLsiteResolver.php
index f50859e..9f6d6e7 100644
--- a/app/MetadataResolver/DLsiteResolver.php
+++ b/app/MetadataResolver/DLsiteResolver.php
@@ -32,8 +32,8 @@ class DLsiteResolver implements Resolver
             $maker = $match[1];
 
             // 余分な文を消す
-            $metadata->title = preg_replace('~\[.+\] \| DLsite$~', '', $metadata->title);
-            $metadata->description = preg_replace('~「DLsite.+」は同人誌・同人ゲーム・同人音声のダウンロードショップ。お気に入りの作品をすぐダウンロードできてすぐ楽しめる!毎日更新しているのであなたが探している作品にきっと出会えます。国内最大級の二次元総合ダウンロードショップ「DLsite」!$~', '', $metadata->description);
+            $metadata->title = trim(preg_replace('~ \[.+\] \| DLsite$~', '', $metadata->title));
+            $metadata->description = trim(preg_replace('~「DLsite.+」は同人誌・同人ゲーム・同人音声のダウンロードショップ。お気に入りの作品をすぐダウンロードできてすぐ楽しめる!毎日更新しているのであなたが探している作品にきっと出会えます。国内最大級の二次元総合ダウンロードショップ「DLsite」!$~', '', $metadata->description));
 
             // 整形
             $metadata->description = 'サークル: ' . $maker . PHP_EOL . $metadata->description;

From da0fc3f3bf51b795d1e7b09c20b00c598c7f3f5b Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 06:29:33 +0900
Subject: [PATCH 08/61] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?=
 =?UTF-8?q?=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 tests/Unit/MetadataResolver/DLsiteResolverTest.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/Unit/MetadataResolver/DLsiteResolverTest.php b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
index 066bfec..c6209e1 100644
--- a/tests/Unit/MetadataResolver/DLsiteResolverTest.php
+++ b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
@@ -25,8 +25,8 @@ class DLsiteResolverTest extends TestCase
         $this->createResolver(DLsiteResolver::class, $responseText);
 
         $metadata = $this->resolver->resolve('https://www.dlsite.com/maniax/work/=/product_id/RJ171695.html');
-        $this->assertEquals('【骨伝導風】道草屋 たびらこ-一緒にはみがき【耳かき&はみがき】 [桃色CODE] | DLsite', $metadata->title);
-        $this->assertStringStartsWith('少しお母さんっぽい店員さんに、歯磨きからおやすみまでお世話されます。はみがきで興奮しちゃった旦那様のも、しっかりお世話してくれます。歯磨き音は特殊なマイクを使用、骨伝導風ハイレゾバイノーラル音声です。', $metadata->description);
+        $this->assertEquals('【骨伝導風】道草屋 たびらこ-一緒にはみがき【耳かき&はみがき】', $metadata->title);
+        $this->assertStringEndsWith('少しお母さんっぽい店員さんに、歯磨きからおやすみまでお世話されます。はみがきで興奮しちゃった旦那様のも、しっかりお世話してくれます。歯磨き音は特殊なマイクを使用、骨伝導風ハイレゾバイノーラル音声です。', $metadata->description);
         $this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ172000/RJ171695_img_main.jpg', $metadata->image);
         if ($this->shouldUseMock()) {
             $this->assertSame('https://www.dlsite.com/maniax/work/=/product_id/RJ171695.html', (string) $this->handler->getLastRequest()->getUri());
@@ -40,8 +40,8 @@ class DLsiteResolverTest extends TestCase
         $this->createResolver(DLsiteResolver::class, $responseText);
 
         $metadata = $this->resolver->resolve('https://www.dlsite.com/home/work/=/product_id/RJ234446.html');
-        $this->assertEquals('【大人向け耳かき】道草屋 はこべら5 時計修理のはこべらさん。他【汗の匂い】 [桃色CODE] | DLsite', $metadata->title);
-        $this->assertStringStartsWith('夏の終わり、二人で遠くの花火を眺めます。耳かきの他、クラシックシェービング、氷を含んだあまがみ、冷紅茶、ジャズ、時計の修理、それから大人向けの汗の匂い。色々な事のある、二泊三日の田舎宿音声です。', $metadata->description);
+        $this->assertEquals('【大人向け耳かき】道草屋 はこべら5 時計修理のはこべらさん。他【汗の匂い】', $metadata->title);
+        $this->assertStringEndsWith('夏の終わり、二人で遠くの花火を眺めます。耳かきの他、クラシックシェービング、氷を含んだあまがみ、冷紅茶、ジャズ、時計の修理、それから大人向けの汗の匂い。色々な事のある、二泊三日の田舎宿音声です。', $metadata->description);
         $this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ235000/RJ234446_img_main.jpg', $metadata->image);
         if ($this->shouldUseMock()) {
             $this->assertSame('https://www.dlsite.com/home/work/=/product_id/RJ234446.html', (string) $this->handler->getLastRequest()->getUri());

From e8438a78a1b4684bd386fe08705b262b15f19864 Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Fri, 8 Mar 2019 06:52:29 +0900
Subject: [PATCH 09/61] Add bundle analyzer

---
 package.json   |   1 +
 webpack.mix.js |  11 +++--
 yarn.lock      | 110 ++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 117 insertions(+), 5 deletions(-)

diff --git a/package.json b/package.json
index c43f1b0..4fc0b49 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
     "jquery": "^3.2.1",
     "js-cookie": "^2.2.0",
     "laravel-mix": "^4.0.0",
+    "laravel-mix-bundle-analyzer": "^1.0.2",
     "open-iconic": "^1.1.1",
     "popper.js": "^1.14.7",
     "resolve-url-loader": "^2.3.1",
diff --git a/webpack.mix.js b/webpack.mix.js
index c8f632c..47be8d2 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -1,4 +1,5 @@
-let mix = require('laravel-mix');
+const mix = require('laravel-mix');
+require('laravel-mix-bundle-analyzer')
 
 /*
  |--------------------------------------------------------------------------
@@ -13,10 +14,14 @@ let mix = require('laravel-mix');
 
 mix.js('resources/assets/js/app.js', 'public/js')
     .js('resources/assets/js/home.js', 'public/js')
-    .js('resources/assets/js/checkin.js', 'public/js')
     .js('resources/assets/js/user/stats.js', 'public/js/user')
     .js('resources/assets/js/setting/privacy.js', 'public/js/setting')
+    .js('resources/assets/js/checkin.js', 'public/js')
     .sass('resources/assets/sass/app.scss', 'public/css')
     .autoload({
         'jquery': ['$', 'jQuery', 'window.jQuery']
-    });
\ No newline at end of file
+    })
+
+if (process.argv.includes('-a')) {
+    mix.bundleAnalyzer({analyzerMode: 'static'});
+}
diff --git a/yarn.lock b/yarn.lock
index eff7d9e..0f9439d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -808,11 +808,21 @@ acorn-dynamic-import@^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.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.5:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818"
   integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==
 
+acorn@^6.0.7:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
+  integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+
 adjust-sourcemap-loader@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz#e33fde95e50db9f2a802e3647e311d2fc5000c69"
@@ -989,6 +999,11 @@ async-each@^1.0.1:
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
   integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
 
+async-limiter@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+  integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+
 async@^1.5.2:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@@ -1074,6 +1089,16 @@ batch@0.6.1:
   resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
   integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
 
+bfj@^6.1.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48"
+  integrity sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==
+  dependencies:
+    bluebird "^3.5.1"
+    check-types "^7.3.0"
+    hoopy "^0.1.2"
+    tryer "^1.0.0"
+
 big.js@^5.2.2:
   version "5.2.2"
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
@@ -1084,7 +1109,7 @@ binary-extensions@^1.0.0:
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1"
   integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==
 
-bluebird@^3.1.1, bluebird@^3.5.3:
+bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
   integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
@@ -1415,6 +1440,11 @@ chartjs-color@^2.1.0:
     chartjs-color-string "^0.5.0"
     color-convert "^0.5.3"
 
+check-types@^7.3.0:
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
+  integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==
+
 chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184"
@@ -1575,6 +1605,11 @@ commander@2.17.x, commander@~2.17.1:
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
   integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
 
+commander@^2.18.0:
+  version "2.19.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+  integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
 commondir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -2223,6 +2258,11 @@ dotenv@^6.2.0:
   resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
   integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
 
+duplexer@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+  integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
 duplexify@^3.4.2, duplexify@^3.6.0:
   version "3.7.1"
   resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
@@ -2238,6 +2278,11 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
+ejs@^2.6.1:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
+  integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
+
 electron-to-chromium@^1.3.103:
   version "1.3.113"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9"
@@ -2458,7 +2503,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
   dependencies:
     homedir-polyfill "^1.0.1"
 
-express@^4.16.2:
+express@^4.16.2, express@^4.16.3:
   version "4.16.4"
   resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
   integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
@@ -2592,6 +2637,11 @@ file-type@^10.7.0:
   resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.7.1.tgz#bcfdd618fddfa7f7e5fc504e08b62cfec7bda8f2"
   integrity sha512-kUc4EE9q3MH6kx70KumPOvXLZLEJZzY9phEVg/bKWyGZ+OA9KoKZzFR4HS0yDmNv31sJkdf4hbTERIfplF9OxQ==
 
+filesize@^3.6.1:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
+  integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
+
 fill-range@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -2878,6 +2928,14 @@ growly@^1.3.0:
   resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
   integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
 
+gzip-size@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"
+  integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==
+  dependencies:
+    duplexer "^0.1.1"
+    pify "^3.0.0"
+
 handle-thing@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754"
@@ -2990,6 +3048,11 @@ homedir-polyfill@^1.0.1:
   dependencies:
     parse-passwd "^1.0.0"
 
+hoopy@^0.1.2:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
+  integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+
 hpack.js@^2.1.6:
   version "2.1.6"
   resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -3627,6 +3690,13 @@ kind-of@^6.0.0, kind-of@^6.0.2:
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
   integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
 
+laravel-mix-bundle-analyzer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/laravel-mix-bundle-analyzer/-/laravel-mix-bundle-analyzer-1.0.2.tgz#b26fc1a7e99134d0317ddde469ebe2de94c75409"
+  integrity sha512-+URmDawC3jR9BWtB7mFMeKFV4G28qLl4Xmvt3x9NLKs78kJT5w4YX7EP+xYoaVpymAfPuCAtcvJRE87kkHK4Wg==
+  dependencies:
+    webpack-bundle-analyzer "^3.0.3"
+
 laravel-mix@^4.0.0:
   version "4.0.14"
   resolved "https://registry.yarnpkg.com/laravel-mix/-/laravel-mix-4.0.14.tgz#949374650d39f2c937257ad2749dab039b848f28"
@@ -4407,6 +4477,11 @@ open-iconic@^1.1.1:
   resolved "https://registry.yarnpkg.com/open-iconic/-/open-iconic-1.1.1.tgz#9dcfc8c7cd3c61cdb4a236b1a347894c97adc0c6"
   integrity sha1-nc/Ix808Yc20ojaxo0eJTJetwMY=
 
+opener@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
+  integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
+
 opn@^5.1.0:
   version "5.4.0"
   resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
@@ -6062,6 +6137,11 @@ trim-right@^1.0.1:
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
   integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
 
+tryer@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
+  integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
+
 tslib@^1.9.0:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
@@ -6328,6 +6408,25 @@ wbuf@^1.1.0, wbuf@^1.7.3:
   dependencies:
     minimalistic-assert "^1.0.0"
 
+webpack-bundle-analyzer@^3.0.3:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.1.0.tgz#2f19cbb87bb6d4f3cb4e59cb67c837bd9436e89d"
+  integrity sha512-nyDyWEs7C6DZlgvu1pR1zzJfIWSiGPbtaByZr8q+Fd2xp70FuM/8ngCJzj3Er1TYRLSFmp1F1OInbEm4DZH8NA==
+  dependencies:
+    acorn "^6.0.7"
+    acorn-walk "^6.1.1"
+    bfj "^6.1.1"
+    chalk "^2.4.1"
+    commander "^2.18.0"
+    ejs "^2.6.1"
+    express "^4.16.3"
+    filesize "^3.6.1"
+    gzip-size "^5.0.0"
+    lodash "^4.17.10"
+    mkdirp "^0.5.1"
+    opener "^1.5.1"
+    ws "^6.0.0"
+
 webpack-cli@^3.1.2:
   version "3.2.3"
   resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.2.3.tgz#13653549adfd8ccd920ad7be1ef868bacc22e346"
@@ -6511,6 +6610,13 @@ wrappy@1:
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
+ws@^6.0.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.0.tgz#13806d9913b2a5f3cbb9ba47b563c002cbc7c526"
+  integrity sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==
+  dependencies:
+    async-limiter "~1.0.0"
+
 xregexp@4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"

From 94c19235b607478d1494cd407f40af0a4430227c Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Fri, 8 Mar 2019 06:53:13 +0900
Subject: [PATCH 10/61] =?UTF-8?q?=E8=A4=87=E6=95=B0=E3=81=AE=E3=82=A8?=
 =?UTF-8?q?=E3=83=B3=E3=83=88=E3=83=AA=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88?=
 =?UTF-8?q?=E3=81=8B=E3=82=89=E5=85=B1=E9=80=9A=E3=81=97=E3=81=A6=E5=88=A9?=
 =?UTF-8?q?=E7=94=A8=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E3=83=99?=
 =?UTF-8?q?=E3=83=B3=E3=83=80=E3=83=A2=E3=82=B8=E3=83=A5=E3=83=BC=E3=83=AB?=
 =?UTF-8?q?=E3=82=92=E5=A4=96=E5=87=BA=E3=81=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/views/home.blade.php         | 3 ++-
 resources/views/layouts/base.blade.php | 4 +++-
 resources/views/user/stats.blade.php   | 5 +++--
 webpack.mix.js                         | 2 ++
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index 9bf2128..ed06b4b 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -104,5 +104,6 @@
 @push('script')
     <script id="global-count-labels" type="application/json">@json(array_keys($globalEjaculationCounts))</script>
     <script id="global-count-data" type="application/json">@json(array_values($globalEjaculationCounts))</script>
+    <script src="{{ mix('js/vendor/chart.js') }}"></script>
     <script src="{{ mix('js/home.js') }}"></script>
-@endpush
\ No newline at end of file
+@endpush
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php
index 3947745..3aabcb2 100644
--- a/resources/views/layouts/base.blade.php
+++ b/resources/views/layouts/base.blade.php
@@ -217,7 +217,9 @@
   </div>
 </div>
 @endguest
+<script src="{{ mix('js/manifest.js') }}"></script>
+<script src="{{ mix('js/vendor.js') }}"></script>
 <script src="{{ mix('js/app.js') }}"></script>
 @stack('script')
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/resources/views/user/stats.blade.php b/resources/views/user/stats.blade.php
index 997a1de..e6e7658 100644
--- a/resources/views/user/stats.blade.php
+++ b/resources/views/user/stats.blade.php
@@ -30,6 +30,7 @@
 @endsection
 
 @push('script')
-<script id="graph-data" type="application/javascript">@json($graphData)</script>
+<script id="graph-data" type="application/json">@json($graphData)</script>
+<script src="{{ mix('js/vendor/chart.js') }}"></script>
 <script src="{{ mix('js/user/stats.js') }}"></script>
-@endpush
\ No newline at end of file
+@endpush
diff --git a/webpack.mix.js b/webpack.mix.js
index 47be8d2..6b228e5 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -21,6 +21,8 @@ mix.js('resources/assets/js/app.js', 'public/js')
     .autoload({
         'jquery': ['$', 'jQuery', 'window.jQuery']
     })
+    .extract(['jquery', 'bootstrap'])
+    .extract(['chart.js', 'moment'], 'public/js/vendor/chart')
 
 if (process.argv.includes('-a')) {
     mix.bundleAnalyzer({analyzerMode: 'static'});

From 1ba7df6e82976ca21b2c7aebbbcde239c4c5592a Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Fri, 8 Mar 2019 06:54:13 +0900
Subject: [PATCH 11/61] versioning script

---
 webpack.mix.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/webpack.mix.js b/webpack.mix.js
index 6b228e5..58f74df 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -23,6 +23,7 @@ mix.js('resources/assets/js/app.js', 'public/js')
     })
     .extract(['jquery', 'bootstrap'])
     .extract(['chart.js', 'moment'], 'public/js/vendor/chart')
+    .version();
 
 if (process.argv.includes('-a')) {
     mix.bundleAnalyzer({analyzerMode: 'static'});

From 5561f0785cb6eeba4d14127bf24a65c3692378e7 Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Fri, 8 Mar 2019 08:49:29 +0900
Subject: [PATCH 12/61] =?UTF-8?q?=E4=B8=AD=E9=80=94=E5=8D=8A=E7=AB=AF?=
 =?UTF-8?q?=E3=81=AB=E9=87=8D=E8=A4=87=E3=81=97=E3=81=A6=E3=81=9F=E3=81=AE?=
 =?UTF-8?q?=E3=82=92=E3=81=BE=E3=81=A8=E3=82=81=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 webpack.mix.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/webpack.mix.js b/webpack.mix.js
index 58f74df..703398c 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -22,7 +22,7 @@ mix.js('resources/assets/js/app.js', 'public/js')
         'jquery': ['$', 'jQuery', 'window.jQuery']
     })
     .extract(['jquery', 'bootstrap'])
-    .extract(['chart.js', 'moment'], 'public/js/vendor/chart')
+    .extract(['chart.js', 'chartjs-color', 'color-name', 'moment'], 'public/js/vendor/chart')
     .version();
 
 if (process.argv.includes('-a')) {

From 0b87a35fba085c1aab41b91a526387e2159641e1 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Fri, 8 Mar 2019 22:52:42 +0900
Subject: [PATCH 13/61] fix style

---
 app/MetadataResolver/PatreonResolver.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/MetadataResolver/PatreonResolver.php b/app/MetadataResolver/PatreonResolver.php
index 82ce6dd..7ba3235 100644
--- a/app/MetadataResolver/PatreonResolver.php
+++ b/app/MetadataResolver/PatreonResolver.php
@@ -29,7 +29,7 @@ class PatreonResolver implements Resolver
             $metadata = $this->ogpResolver->parse($res->getBody());
 
             parse_str(parse_url($metadata->image, PHP_URL_QUERY), $query);
-            if(isset($query['token-time'])){
+            if (isset($query['token-time'])) {
                 $expires_at_unixtime = $query['token-time'];
                 $metadata->expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
             }

From 61498133d5ad4a73bb6992c927aff3570753b2ec Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Fri, 8 Mar 2019 23:02:24 +0900
Subject: [PATCH 14/61] fix style

---
 app/MetadataResolver/FanzaResolver.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/MetadataResolver/FanzaResolver.php b/app/MetadataResolver/FanzaResolver.php
index 0124770..b1e1c66 100644
--- a/app/MetadataResolver/FanzaResolver.php
+++ b/app/MetadataResolver/FanzaResolver.php
@@ -27,7 +27,7 @@ class FanzaResolver implements Resolver
         if ($res->getStatusCode() === 200) {
             $metadata = $this->ogpResolver->parse($res->getBody());
             $metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
-            $metadata->description = str_replace('<>', "", $metadata->description);
+            $metadata->description = str_replace('<>', '', $metadata->description);
 
             return $metadata;
         } else {

From cd56e1bff32804dd0343c99eaaf2c7f35c84f46d Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sat, 9 Mar 2019 01:34:58 +0900
Subject: [PATCH 15/61] =?UTF-8?q?=E3=83=A1=E3=82=BF=E3=83=87=E3=83=BC?=
 =?UTF-8?q?=E3=82=BF=E3=81=AEdescription=E3=81=AB=E5=90=AB=E3=81=BE?=
 =?UTF-8?q?=E3=82=8C=E3=82=8B=E6=94=B9=E8=A1=8C=E3=82=92=E8=A1=A8=E7=A4=BA?=
 =?UTF-8?q?=E3=81=AB=E5=8F=8D=E6=98=A0=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

refs #87
---
 resources/assets/sass/tissue.css | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/resources/assets/sass/tissue.css b/resources/assets/sass/tissue.css
index f7dfd0c..6f5d485 100644
--- a/resources/assets/sass/tissue.css
+++ b/resources/assets/sass/tissue.css
@@ -96,4 +96,24 @@
     width: 100%;
     border-top-right-radius: calc(.25rem - 1px);
     border-bottom-right-radius: calc(.25rem - 1px);
+}
+
+.link-card .row > div:last-child {
+    max-height: 400px;
+    overflow: hidden;
+}
+
+/* 省略を表す影を付けるやつ */
+.link-card .row > div:last-child::before {
+    content: '';
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    left: 0;
+    top: 0;
+    background: linear-gradient(transparent 320px, white);
+}
+
+.link-card .card-text {
+    white-space: pre-line;
 }
\ No newline at end of file

From ed1cfe94f0fb7ed1ad819c01b8a74af959011357 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sat, 9 Mar 2019 03:42:45 +0900
Subject: [PATCH 16/61] =?UTF-8?q?Bootstrap=E3=81=AE=E3=82=AB=E3=82=B9?=
 =?UTF-8?q?=E3=82=BF=E3=83=A0=E3=82=92=E5=88=A5=E3=81=AE=E3=83=95=E3=82=A1?=
 =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AB=E7=A7=BB=E5=8B=95=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/app.scss             |  1 +
 resources/assets/sass/boostrap-custom.scss | 11 +++++++++++
 resources/assets/sass/tissue.css           | 12 ------------
 3 files changed, 12 insertions(+), 12 deletions(-)
 create mode 100644 resources/assets/sass/boostrap-custom.scss

diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index 42fa070..1584650 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -1,5 +1,6 @@
 // Bootstrap
 @import "~bootstrap/scss/bootstrap";
+@import "boostrap-custom.scss";
 
 // Open Iconic
 @import "~open-iconic/font/css/open-iconic-bootstrap";
diff --git a/resources/assets/sass/boostrap-custom.scss b/resources/assets/sass/boostrap-custom.scss
new file mode 100644
index 0000000..cd03a90
--- /dev/null
+++ b/resources/assets/sass/boostrap-custom.scss
@@ -0,0 +1,11 @@
+.card-img-left {
+    width: 100%;
+    border-top-left-radius: calc(.25rem - 1px);
+    border-bottom-left-radius: calc(.25rem - 1px);
+}
+
+.card-img-right {
+    width: 100%;
+    border-top-right-radius: calc(.25rem - 1px);
+    border-bottom-right-radius: calc(.25rem - 1px);
+}
\ No newline at end of file
diff --git a/resources/assets/sass/tissue.css b/resources/assets/sass/tissue.css
index f7dfd0c..fa57ff3 100644
--- a/resources/assets/sass/tissue.css
+++ b/resources/assets/sass/tissue.css
@@ -84,16 +84,4 @@
 
 #navbarAccountDropdownSp {
     max-width: calc(100vw - 5em);
-}
-
-.card-img-left {
-    width: 100%;
-    border-top-left-radius: calc(.25rem - 1px);
-    border-bottom-left-radius: calc(.25rem - 1px);
-}
-
-.card-img-right {
-    width: 100%;
-    border-top-right-radius: calc(.25rem - 1px);
-    border-bottom-right-radius: calc(.25rem - 1px);
 }
\ No newline at end of file

From e983a3da0b1d48680d52e2823dd9b3452101cf09 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sat, 9 Mar 2019 03:49:47 +0900
Subject: [PATCH 17/61] =?UTF-8?q?border-radius=E3=81=AEmixin=E3=82=92?=
 =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/boostrap-custom.scss | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/resources/assets/sass/boostrap-custom.scss b/resources/assets/sass/boostrap-custom.scss
index cd03a90..a56818a 100644
--- a/resources/assets/sass/boostrap-custom.scss
+++ b/resources/assets/sass/boostrap-custom.scss
@@ -1,11 +1,9 @@
 .card-img-left {
     width: 100%;
-    border-top-left-radius: calc(.25rem - 1px);
-    border-bottom-left-radius: calc(.25rem - 1px);
+    @include border-left-radius($card-inner-border-radius);
 }
 
 .card-img-right {
     width: 100%;
-    border-top-right-radius: calc(.25rem - 1px);
-    border-bottom-right-radius: calc(.25rem - 1px);
+    @include border-right-radius($card-inner-border-radius);
 }
\ No newline at end of file

From 1a7d958a1ef23eb7e0dfed23204dd429a2dbf506 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sat, 9 Mar 2019 17:07:00 +0900
Subject: [PATCH 18/61] =?UTF-8?q?Sass=E5=85=A5=E3=81=A3=E3=81=A6=E3=82=8B?=
 =?UTF-8?q?=E3=81=AE=E3=81=AB=E7=94=9FCSS=E3=81=A7=E6=9B=B8=E3=81=93?=
 =?UTF-8?q?=E3=81=86=E3=81=A8=E3=81=97=E3=81=9F=E3=82=84=E3=81=A4=E3=81=8C?=
 =?UTF-8?q?=E3=81=84=E3=82=8B=E3=82=89=E3=81=97=E3=81=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/app.scss                |  5 ++++-
 .../assets/sass/components/_link-card.scss    | 21 +++++++++++++++++++
 resources/assets/sass/tissue.css              | 20 ------------------
 3 files changed, 25 insertions(+), 21 deletions(-)
 create mode 100644 resources/assets/sass/components/_link-card.scss

diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index 42fa070..2e8a67c 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -5,4 +5,7 @@
 @import "~open-iconic/font/css/open-iconic-bootstrap";
 
 // Legacy app styles
-@import "tissue.css";
\ No newline at end of file
+@import "tissue.css";
+
+// Components
+@import "components/link-card";
\ No newline at end of file
diff --git a/resources/assets/sass/components/_link-card.scss b/resources/assets/sass/components/_link-card.scss
new file mode 100644
index 0000000..db5bf43
--- /dev/null
+++ b/resources/assets/sass/components/_link-card.scss
@@ -0,0 +1,21 @@
+.link-card {
+  .row > div:last-child {
+    max-height: 400px;
+    overflow: hidden;
+
+    // 省略を表す影を付けるやつ
+    &::before {
+      content: '';
+      width: 100%;
+      height: 100%;
+      position: absolute;
+      left: 0;
+      top: 0;
+      background: linear-gradient(transparent 320px, white);
+    }
+  }
+
+  .card-text {
+    white-space: pre-line;
+  }
+}
\ No newline at end of file
diff --git a/resources/assets/sass/tissue.css b/resources/assets/sass/tissue.css
index 6f5d485..f7dfd0c 100644
--- a/resources/assets/sass/tissue.css
+++ b/resources/assets/sass/tissue.css
@@ -96,24 +96,4 @@
     width: 100%;
     border-top-right-radius: calc(.25rem - 1px);
     border-bottom-right-radius: calc(.25rem - 1px);
-}
-
-.link-card .row > div:last-child {
-    max-height: 400px;
-    overflow: hidden;
-}
-
-/* 省略を表す影を付けるやつ */
-.link-card .row > div:last-child::before {
-    content: '';
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    left: 0;
-    top: 0;
-    background: linear-gradient(transparent 320px, white);
-}
-
-.link-card .card-text {
-    white-space: pre-line;
 }
\ No newline at end of file

From b430ba71628a87f46a8bced4549b80fd8f57564e Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 15:36:55 +0900
Subject: [PATCH 19/61] =?UTF-8?q?partial=E3=81=AB=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../assets/sass/{boostrap-custom.scss => _boostrap-custom.scss} | 0
 resources/assets/sass/app.scss                                  | 2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename resources/assets/sass/{boostrap-custom.scss => _boostrap-custom.scss} (100%)

diff --git a/resources/assets/sass/boostrap-custom.scss b/resources/assets/sass/_boostrap-custom.scss
similarity index 100%
rename from resources/assets/sass/boostrap-custom.scss
rename to resources/assets/sass/_boostrap-custom.scss
diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index 1584650..63484cc 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -1,6 +1,6 @@
 // Bootstrap
 @import "~bootstrap/scss/bootstrap";
-@import "boostrap-custom.scss";
+@import "boostrap-custom";
 
 // Open Iconic
 @import "~open-iconic/font/css/open-iconic-bootstrap";

From 7c70e6db7e735648c5633064425953ee3120914c Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 15:41:34 +0900
Subject: [PATCH 20/61] =?UTF-8?q?typo=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../sass/{_boostrap-custom.scss => _bootstrap-custom.scss}      | 0
 resources/assets/sass/app.scss                                  | 2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename resources/assets/sass/{_boostrap-custom.scss => _bootstrap-custom.scss} (100%)

diff --git a/resources/assets/sass/_boostrap-custom.scss b/resources/assets/sass/_bootstrap-custom.scss
similarity index 100%
rename from resources/assets/sass/_boostrap-custom.scss
rename to resources/assets/sass/_bootstrap-custom.scss
diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index 63484cc..097ddd0 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -1,6 +1,6 @@
 // Bootstrap
 @import "~bootstrap/scss/bootstrap";
-@import "boostrap-custom";
+@import "bootstrap-custom";
 
 // Open Iconic
 @import "~open-iconic/font/css/open-iconic-bootstrap";

From 57b10d98ac4b4305be72d688d91f688ecd9aabfa Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 16:16:25 +0900
Subject: [PATCH 21/61] =?UTF-8?q?Bootstrap=204.3.1=E3=81=AB=E3=82=A2?=
 =?UTF-8?q?=E3=83=83=E3=83=97=E3=83=87=E3=83=BC=E3=83=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md    | 2 +-
 package.json | 2 +-
 yarn.lock    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 7953628..7fdf3bb 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ a.k.a. shikorism.net
 ## 構成
 
 - Laravel 5.5
-- Bootstrap 4.2.1
+- Bootstrap 4.3.1
 
 ## 実行環境
 
diff --git a/package.json b/package.json
index 4fc0b49..fdf890e 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
     "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
   },
   "devDependencies": {
-    "bootstrap": "^4.2.1",
+    "bootstrap": "^4.3.1",
     "cal-heatmap": "^3.3.10",
     "chart.js": "^2.7.1",
     "cross-env": "^5.2.0",
diff --git a/yarn.lock b/yarn.lock
index 0f9439d..35f3f22 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1152,7 +1152,7 @@ boolbase@^1.0.0, boolbase@~1.0.0:
   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
   integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
 
-bootstrap@^4.2.1:
+bootstrap@^4.3.1:
   version "4.3.1"
   resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
   integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==

From e1eb3598877078b0d0919df3a28c4865bf7c4107 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 16:28:38 +0900
Subject: [PATCH 22/61] =?UTF-8?q?.tis-word-wrap=E3=82=92=E5=BB=83=E6=AD=A2?=
 =?UTF-8?q?=E3=81=97=E3=81=A6.text-break=E3=82=92=E4=BD=BF=E7=94=A8?=
 =?UTF-8?q?=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/tissue.css           | 4 ----
 resources/views/ejaculation/show.blade.php | 2 +-
 resources/views/home.blade.php             | 4 ++--
 resources/views/search/index.blade.php     | 4 ++--
 resources/views/timeline/public.blade.php  | 4 ++--
 resources/views/user/profile.blade.php     | 4 ++--
 6 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/resources/assets/sass/tissue.css b/resources/assets/sass/tissue.css
index f7dfd0c..a6a4d13 100644
--- a/resources/assets/sass/tissue.css
+++ b/resources/assets/sass/tissue.css
@@ -7,10 +7,6 @@
     background: linear-gradient(to bottom, #f8f9fa, #fff)
 }
 
-.tis-word-wrap {
-    word-wrap: break-word;
-}
-
 .tis-contribution-graph {
     overflow-x: auto;
 }
diff --git a/resources/views/ejaculation/show.blade.php b/resources/views/ejaculation/show.blade.php
index 2be6b4a..2eda57f 100644
--- a/resources/views/ejaculation/show.blade.php
+++ b/resources/views/ejaculation/show.blade.php
@@ -63,7 +63,7 @@
                         @endif
                         <!-- note -->
                         @if (!empty($ejaculation->note))
-                            <p class="mb-0 tis-word-wrap">
+                            <p class="mb-0 text-break">
                                 {!! Formatter::linkify(nl2br(e($ejaculation->note))) !!}
                             </p>
                         @endif
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index ed06b4b..1f5c39a 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -54,7 +54,7 @@
                 <p class="text-secondary">最近の公開チェックインから、オカズリンク付きのものを表示しています。</p>
                 <ul class="list-group">
                     @foreach ($publicLinkedEjaculations as $ejaculation)
-                        <li class="list-group-item no-side-border pt-3 pb-3 tis-word-wrap">
+                        <li class="list-group-item no-side-border pt-3 pb-3 text-break">
                             <!-- span -->
                             <div class="d-flex justify-content-between">
                                 <h5>
@@ -85,7 +85,7 @@
                             @endif
                             <!-- note -->
                             @if (!empty($ejaculation->note))
-                                <p class="mb-0 tis-word-wrap">
+                                <p class="mb-0 text-break">
                                     {!! Formatter::linkify(nl2br(e($ejaculation->note))) !!}
                                 </p>
                             @endif
diff --git a/resources/views/search/index.blade.php b/resources/views/search/index.blade.php
index 65af48b..f88cfce 100644
--- a/resources/views/search/index.blade.php
+++ b/resources/views/search/index.blade.php
@@ -6,7 +6,7 @@
     @else
         <ul class="list-group">
         @foreach($results as $ejaculation)
-            <li class="list-group-item border-bottom-only pt-3 pb-3 tis-word-wrap">
+            <li class="list-group-item border-bottom-only pt-3 pb-3 text-break">
                 <!-- span -->
                 <div class="d-flex justify-content-between">
                     <h5>
@@ -44,7 +44,7 @@
                 @endif
                 <!-- note -->
                 @if (!empty($ejaculation->note))
-                    <p class="mb-0 tis-word-wrap">
+                    <p class="mb-0 text-break">
                         {!! Formatter::linkify(nl2br(e($ejaculation->note))) !!}
                     </p>
                 @endif
diff --git a/resources/views/timeline/public.blade.php b/resources/views/timeline/public.blade.php
index a725b1c..6fc270e 100644
--- a/resources/views/timeline/public.blade.php
+++ b/resources/views/timeline/public.blade.php
@@ -10,7 +10,7 @@
     <div class="container-fluid">
         <div class="row mx-1">
             @foreach($ejaculations as $ejaculation)
-                <div class="col-12 col-lg-6 col-xl-4 py-3 tis-word-wrap border-top">
+                <div class="col-12 col-lg-6 col-xl-4 py-3 text-break border-top">
                     <!-- span -->
                     <div class="d-flex justify-content-between">
                         <h5>
@@ -44,7 +44,7 @@
                     @endif
                     <!-- note -->
                     @if (!empty($ejaculation->note))
-                        <p class="mb-0 tis-word-wrap">
+                        <p class="mb-0 text-break">
                             {!! Formatter::linkify(nl2br(e($ejaculation->note))) !!}
                         </p>
                     @endif
diff --git a/resources/views/user/profile.blade.php b/resources/views/user/profile.blade.php
index 9baa2b5..66ef3a0 100644
--- a/resources/views/user/profile.blade.php
+++ b/resources/views/user/profile.blade.php
@@ -34,7 +34,7 @@
 @else
     <ul class="list-group">
         @forelse ($ejaculations as $ejaculation)
-            <li class="list-group-item border-bottom-only pt-3 pb-3 tis-word-wrap">
+            <li class="list-group-item border-bottom-only pt-3 pb-3 text-break">
                 <!-- span -->
                 <div class="d-flex justify-content-between">
                     <h5>{{ $ejaculation->ejaculated_span ?? '精通' }} <a href="{{ route('checkin.show', ['id' => $ejaculation->id]) }}" class="text-muted"><small>{{ $ejaculation->before_date }}{{ !empty($ejaculation->before_date) ? ' ~ ' : '' }}{{ $ejaculation->ejaculated_date->format('Y/m/d H:i') }}</small></a></h5>
@@ -69,7 +69,7 @@
                 @endif
                 <!-- note -->
                 @if (!empty($ejaculation->note))
-                    <p class="mb-0 tis-word-wrap">
+                    <p class="mb-0 text-break">
                         {!! Formatter::linkify(nl2br(e($ejaculation->note))) !!}
                     </p>
                 @endif

From 7190367936ec0651277b8ec7d364f5e4af13174e Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 16:40:16 +0900
Subject: [PATCH 23/61] =?UTF-8?q?/.vscode=E3=82=92.gitignore=E3=81=AB?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 55d3da6..323d21f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
 /storage/*.key
 /vendor
 /.idea
+/.vscode
 /.vagrant
 Homestead.json
 Homestead.yaml

From a674195db986459cdc9129255c81d96682e39736 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 17:58:29 +0900
Subject: [PATCH 24/61] =?UTF-8?q?=E3=82=82=E3=81=A3=E3=81=A8=E8=A6=8B?=
 =?UTF-8?q?=E3=82=8B=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92Stretched=20link?=
 =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

リンク範囲が広いとうれしい
---
 resources/views/home.blade.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index 1f5c39a..34128ce 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -92,7 +92,7 @@
                         </li>
                     @endforeach
                     <li class="list-group-item no-side-border text-right">
-                        <a href="{{ route('timeline.public') }}">もっと見る &raquo;</a>
+                        <a href="{{ route('timeline.public') }}" class="stretched-link">もっと見る &raquo;</a>
                     </li>
                 </ul>
             @endif

From 51fc65e66fe56d54c9c519f2037a0f6a2f60856d Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 18:10:20 +0900
Subject: [PATCH 25/61] =?UTF-8?q?Stylelint=E3=82=92=E5=B0=8E=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json |    1 +
 yarn.lock    | 1095 ++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 1073 insertions(+), 23 deletions(-)

diff --git a/package.json b/package.json
index 4fc0b49..2df39fa 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
     "resolve-url-loader": "^2.3.1",
     "sass": "^1.17.0",
     "sass-loader": "^7.1.0",
+    "stylelint": "^9.10.1",
     "vue-template-compiler": "^2.6.6"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 0f9439d..ae560e3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,6 +9,26 @@
   dependencies:
     "@babel/highlight" "^7.0.0"
 
+"@babel/core@>=7.1.0":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b"
+  integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/generator" "^7.3.4"
+    "@babel/helpers" "^7.2.0"
+    "@babel/parser" "^7.3.4"
+    "@babel/template" "^7.2.2"
+    "@babel/traverse" "^7.3.4"
+    "@babel/types" "^7.3.4"
+    convert-source-map "^1.1.0"
+    debug "^4.1.0"
+    json5 "^2.1.0"
+    lodash "^4.17.11"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
 "@babel/core@^7.0.0-beta.49", "@babel/core@^7.2.0":
   version "7.3.3"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.3.tgz#d090d157b7c5060d05a05acaebc048bd2b037947"
@@ -40,6 +60,17 @@
     source-map "^0.5.0"
     trim-right "^1.0.1"
 
+"@babel/generator@^7.3.4":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e"
+  integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==
+  dependencies:
+    "@babel/types" "^7.3.4"
+    jsesc "^2.5.1"
+    lodash "^4.17.11"
+    source-map "^0.5.0"
+    trim-right "^1.0.1"
+
 "@babel/helper-annotate-as-pure@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
@@ -218,6 +249,11 @@
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87"
   integrity sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==
 
+"@babel/parser@^7.3.4":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c"
+  integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==
+
 "@babel/plugin-proposal-async-generator-functions@^7.2.0":
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
@@ -600,6 +636,21 @@
     globals "^11.1.0"
     lodash "^4.17.10"
 
+"@babel/traverse@^7.3.4":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06"
+  integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/generator" "^7.3.4"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-split-export-declaration" "^7.0.0"
+    "@babel/parser" "^7.3.4"
+    "@babel/types" "^7.3.4"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.11"
+
 "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
   version "7.3.3"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.3.tgz#6c44d1cdac2a7625b624216657d5bc6c107ab436"
@@ -609,6 +660,15 @@
     lodash "^4.17.11"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.3.4":
+  version "7.3.4"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed"
+  integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.17.11"
+    to-fast-properties "^2.0.0"
+
 "@mrmlnc/readdir-enhanced@^2.2.1":
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -622,11 +682,57 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
   integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
 
+"@types/events@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+  integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/glob@^7.1.1":
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+  integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+  dependencies:
+    "@types/events" "*"
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/minimatch@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+  version "11.11.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.0.tgz#070e9ce7c90e727aca0e0c14e470f9a93ffe9390"
+  integrity sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==
+
 "@types/q@^1.5.1":
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18"
   integrity sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==
 
+"@types/unist@*", "@types/unist@^2.0.0":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+  integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/vfile-message@*":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-1.0.1.tgz#e1e9895cc6b36c462d4244e64e6d0b6eaf65355a"
+  integrity sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==
+  dependencies:
+    "@types/node" "*"
+    "@types/unist" "*"
+
+"@types/vfile@^3.0.0":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9"
+  integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==
+  dependencies:
+    "@types/node" "*"
+    "@types/unist" "*"
+    "@types/vfile-message" "*"
+
 "@vue/component-compiler-utils@^2.5.1":
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.5.2.tgz#a8d57e773354ab10e4742c7d6a8dd86184d4d7be"
@@ -856,6 +962,16 @@ ajv@^6.1.0:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
+ajv@^6.9.1:
+  version "6.10.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
+  integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+  dependencies:
+    fast-deep-equal "^2.0.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
 alphanum-sort@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -881,12 +997,17 @@ ansi-regex@^3.0.0:
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
   integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
 
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
   integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
 
-ansi-styles@^3.2.1:
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
   integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -936,6 +1057,11 @@ arr-union@^3.1.0:
   resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
   integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
 
+array-find-index@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -946,7 +1072,7 @@ array-flatten@^2.1.0:
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
   integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
 
-array-union@^1.0.1:
+array-union@^1.0.1, array-union@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
   integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
@@ -994,6 +1120,11 @@ ast-types@0.9.6:
   resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
   integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=
 
+astral-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
 async-each@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
@@ -1021,6 +1152,18 @@ atob@^2.1.1:
   resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
   integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
 
+autoprefixer@^9.0.0:
+  version "9.4.10"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.10.tgz#e1be61fc728bacac8f4252ed242711ec0dcc6a7b"
+  integrity sha512-XR8XZ09tUrrSzgSlys4+hy5r2/z4Jp7Ag3pHm31U4g/CTccYPOVe19AkaJ4ey/vRd1sfj+5TtuD6I0PXtutjvQ==
+  dependencies:
+    browserslist "^4.4.2"
+    caniuse-lite "^1.0.30000940"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    postcss "^7.0.14"
+    postcss-value-parser "^3.3.1"
+
 autoprefixer@^9.4.2:
   version "9.4.7"
   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.7.tgz#f997994f9a810eae47b38fa6d8a119772051c4ff"
@@ -1061,6 +1204,11 @@ babel-merge@^2.0.1:
     deepmerge "^2.1.0"
     object.omit "^3.0.0"
 
+bail@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
+  integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==
+
 balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -1254,6 +1402,15 @@ browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.4.1:
     electron-to-chromium "^1.3.103"
     node-releases "^1.1.3"
 
+browserslist@^4.4.2:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.2.tgz#6ea8a74d6464bb0bd549105f659b41197d8f0ba2"
+  integrity sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==
+  dependencies:
+    caniuse-lite "^1.0.30000939"
+    electron-to-chromium "^1.3.113"
+    node-releases "^1.1.8"
+
 buffer-from@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -1362,6 +1519,15 @@ camel-case@3.0.x:
     no-case "^2.2.0"
     upper-case "^1.1.1"
 
+camelcase-keys@^4.0.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+  integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+  dependencies:
+    camelcase "^4.1.0"
+    map-obj "^2.0.0"
+    quick-lru "^1.0.0"
+
 camelcase@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -1392,6 +1558,16 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000932:
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz#b64bf1427438df40183fce910fe24e34feda7a3f"
   integrity sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==
 
+caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30000940:
+  version "1.0.30000943"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000943.tgz#00b25bd5808edc2ed1cfb53533a6a6ff6ca014ee"
+  integrity sha512-nJMjU4UaesbOHTcmz6VS+qaog++Fdepg4KAya5DL/AZrL/aaAZDGOOQ0AECtsJa09r4cJBdHZMive5mw8lnQ5A==
+
+ccount@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
+  integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
+
 chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1403,7 +1579,7 @@ chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
-chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, 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==
@@ -1412,6 +1588,26 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
+character-entities-html4@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610"
+  integrity sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==
+
+character-entities-legacy@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c"
+  integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==
+
+character-entities@^1.0.0:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363"
+  integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==
+
+character-reference-invalid@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed"
+  integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==
+
 charenc@~0.0.1:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
@@ -1530,6 +1726,14 @@ clone-deep@^2.0.1:
     kind-of "^6.0.0"
     shallow-clone "^1.0.0"
 
+clone-regexp@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f"
+  integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==
+  dependencies:
+    is-regexp "^1.0.0"
+    is-supported-regexp-flag "^1.0.0"
+
 coa@~2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
@@ -1544,6 +1748,11 @@ code-point-at@^1.0.0:
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
   integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
 
+collapse-white-space@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091"
+  integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==
+
 collection-visit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -2018,6 +2227,13 @@ csso@^3.5.0:
   dependencies:
     css-tree "1.0.0-alpha.29"
 
+currently-unhandled@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+  integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+  dependencies:
+    array-find-index "^1.0.1"
+
 cyclist@~0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
@@ -2052,14 +2268,22 @@ debug@^3.1.0, debug@^3.2.5, debug@^3.2.6:
   dependencies:
     ms "^2.1.1"
 
-debug@^4.1.0:
+debug@^4.0.0, debug@^4.1.0:
   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:
+decamelize-keys@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+  integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+  dependencies:
+    decamelize "^1.1.0"
+    map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
   integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -2195,6 +2419,13 @@ dir-glob@2.0.0:
     arrify "^1.0.1"
     path-type "^3.0.0"
 
+dir-glob@^2.2.1:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+  dependencies:
+    path-type "^3.0.0"
+
 dns-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -2228,12 +2459,19 @@ domain-browser@^1.1.1:
   resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
   integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
 
-domelementtype@1, domelementtype@^1.3.0:
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
   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:
+domhandler@^2.3.0:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+  integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+  dependencies:
+    domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
   integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
@@ -2283,7 +2521,7 @@ ejs@^2.6.1:
   resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
   integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
 
-electron-to-chromium@^1.3.103:
+electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.113:
   version "1.3.113"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9"
   integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==
@@ -2301,6 +2539,11 @@ elliptic@^6.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.0"
 
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
 emojis-list@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -2483,6 +2726,13 @@ execa@^1.0.0:
     signal-exit "^3.0.0"
     strip-eof "^1.0.0"
 
+execall@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73"
+  integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=
+  dependencies:
+    clone-regexp "^1.0.0"
+
 expand-brackets@^2.1.4:
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@@ -2554,6 +2804,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
     assign-symbols "^1.0.0"
     is-extendable "^1.0.1"
 
+extend@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
 extglob@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -2583,7 +2838,7 @@ fast-deep-equal@^2.0.1:
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
   integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
 
-fast-glob@^2.0.2:
+fast-glob@^2.0.2, fast-glob@^2.2.6:
   version "2.2.6"
   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295"
   integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
@@ -2624,6 +2879,13 @@ figgy-pudding@^3.5.1:
   resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
   integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
 
+file-entry-cache@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-4.0.0.tgz#633567d15364aefe0b299e1e217735e8f3a9f6e8"
+  integrity sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==
+  dependencies:
+    flat-cache "^2.0.1"
+
 file-loader@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde"
@@ -2674,6 +2936,13 @@ find-cache-dir@^2.0.0:
     make-dir "^1.0.0"
     pkg-dir "^3.0.0"
 
+find-up@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
 find-up@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -2691,6 +2960,20 @@ findup-sync@^2.0.0:
     micromatch "^3.0.4"
     resolve-dir "^1.0.1"
 
+flat-cache@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+  integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+  dependencies:
+    flatted "^2.0.0"
+    rimraf "2.6.3"
+    write "1.0.3"
+
+flatted@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
+  integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
+
 flush-write-stream@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
@@ -2820,6 +3103,11 @@ 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-stdin@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+  integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
 get-stream@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -2871,6 +3159,13 @@ global-modules@^1.0.0:
     is-windows "^1.0.1"
     resolve-dir "^1.0.0"
 
+global-modules@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+  integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+  dependencies:
+    global-prefix "^3.0.0"
+
 global-prefix@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
@@ -2882,6 +3177,15 @@ global-prefix@^1.0.1:
     is-windows "^1.0.1"
     which "^1.2.14"
 
+global-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+  integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+  dependencies:
+    ini "^1.3.5"
+    kind-of "^6.0.2"
+    which "^1.3.1"
+
 globals@^11.1.0:
   version "11.11.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
@@ -2911,6 +3215,25 @@ globby@^8.0.1:
     pify "^3.0.0"
     slash "^1.0.0"
 
+globby@^9.0.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-9.1.0.tgz#e90f4d5134109e6d855abdd31bdb1b085428592e"
+  integrity sha512-VtYjhHr7ncls724Of5W6Kaahz0ag7dB4G62/2HsN+xEKG6SrPzM1AJMerGxQTwJGnN9reeyxdvXbuZYpfssCvg==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    array-union "^1.0.2"
+    dir-glob "^2.2.1"
+    fast-glob "^2.2.6"
+    glob "^7.1.3"
+    ignore "^4.0.3"
+    pify "^4.0.1"
+    slash "^2.0.0"
+
+globjoin@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
+  integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=
+
 globs@^0.1.2:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/globs/-/globs-0.1.4.tgz#1d13639f6174e4ae73a7f936da7d9a079f657c1c"
@@ -2918,6 +3241,13 @@ globs@^0.1.2:
   dependencies:
     glob "^7.1.1"
 
+gonzales-pe@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2"
+  integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==
+  dependencies:
+    minimist "1.1.x"
+
 graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
   version "4.1.15"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
@@ -3053,6 +3383,11 @@ hoopy@^0.1.2:
   resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
   integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
 
+hosted-git-info@^2.1.4:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+  integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+
 hpack.js@^2.1.6:
   version "2.1.6"
   resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -3107,6 +3442,23 @@ html-minifier@^3.5.8:
     relateurl "0.2.x"
     uglify-js "3.4.x"
 
+html-tags@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b"
+  integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=
+
+htmlparser2@^3.10.0:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+  integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+  dependencies:
+    domelementtype "^1.3.1"
+    domhandler "^2.3.0"
+    domutils "^1.5.1"
+    entities "^1.1.1"
+    inherits "^2.0.1"
+    readable-stream "^3.1.1"
+
 http-deceiver@^1.2.7:
   version "1.2.7"
   resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
@@ -3199,6 +3551,16 @@ ignore@^3.3.5:
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
   integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
 
+ignore@^4.0.3:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.4:
+  version "5.0.5"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.5.tgz#c663c548d6ce186fb33616a8ccb5d46e56bdbbf9"
+  integrity sha512-kOC8IUb8HSDMVcYrDVezCxpJkzSQWTAzf3olpKM6o9rM5zpojx23O0Fl8Wr4+qJ6ZbPEHqf1fdwev/DS7v7pmA==
+
 imagemin@^6.0.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-6.1.0.tgz#62508b465728fea36c03cdc07d915fe2d8cf9e13"
@@ -3240,6 +3602,11 @@ import-from@^2.1.0:
   dependencies:
     resolve-from "^3.0.0"
 
+import-lazy@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc"
+  integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
+
 import-local@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -3253,6 +3620,11 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
+indent-string@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+  integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -3281,7 +3653,7 @@ inherits@2.0.1:
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
   integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
 
-ini@^1.3.4, ini@~1.3.0:
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
   integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
@@ -3350,6 +3722,24 @@ is-accessor-descriptor@^1.0.0:
   dependencies:
     kind-of "^6.0.0"
 
+is-alphabetical@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41"
+  integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==
+
+is-alphanumeric@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+  integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40"
+  integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==
+  dependencies:
+    is-alphabetical "^1.0.0"
+    is-decimal "^1.0.0"
+
 is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -3371,6 +3761,11 @@ is-buffer@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
 
+is-buffer@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
+  integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
+
 is-buffer@~1.1.1:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -3412,6 +3807,11 @@ is-date-object@^1.0.1:
   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
   integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
 
+is-decimal@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff"
+  integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==
+
 is-descriptor@^0.1.0:
   version "0.1.6"
   resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
@@ -3478,6 +3878,11 @@ is-glob@^4.0.0:
   dependencies:
     is-extglob "^2.1.1"
 
+is-hexadecimal@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835"
+  integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==
+
 is-number@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -3509,6 +3914,11 @@ is-path-inside@^1.0.0:
   dependencies:
     path-is-inside "^1.0.1"
 
+is-plain-obj@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
 is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -3523,6 +3933,11 @@ is-regex@^1.0.4:
   dependencies:
     has "^1.0.1"
 
+is-regexp@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
 is-resolvable@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
@@ -3533,6 +3948,11 @@ is-stream@^1.1.0:
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
   integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
 
+is-supported-regexp-flag@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
+  integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==
+
 is-svg@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
@@ -3547,6 +3967,11 @@ is-symbol@^1.0.2:
   dependencies:
     has-symbols "^1.0.0"
 
+is-whitespace-character@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed"
+  integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==
+
 is-windows@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
@@ -3556,6 +3981,11 @@ is-windows@^1.0.1, is-windows@^1.0.2:
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
   integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
 
+is-word-character@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553"
+  integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==
+
 is-wsl@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
@@ -3690,6 +4120,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
   integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
 
+known-css-properties@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.11.0.tgz#0da784f115ea77c76b81536d7052e90ee6c86a8a"
+  integrity sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==
+
 laravel-mix-bundle-analyzer@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/laravel-mix-bundle-analyzer/-/laravel-mix-bundle-analyzer-1.0.2.tgz#b26fc1a7e99134d0317ddde469ebe2de94c75409"
@@ -3754,6 +4189,21 @@ lcid@^2.0.0:
   dependencies:
     invert-kv "^2.0.0"
 
+leven@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+  integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+load-json-file@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+  integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+  dependencies:
+    graceful-fs "^4.1.2"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
+    strip-bom "^3.0.0"
+
 loader-runner@^2.3.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
@@ -3768,6 +4218,14 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
     emojis-list "^2.0.0"
     json5 "^1.0.1"
 
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
 locate-path@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
@@ -3879,11 +4337,18 @@ lodash.uniq@^4.5.0:
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
   integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
 
-lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5:
+lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5:
   version "4.17.11"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
   integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
 
+log-symbols@^2.0.0, log-symbols@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+  dependencies:
+    chalk "^2.0.1"
+
 loglevel@^1.4.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
@@ -3893,6 +4358,11 @@ loglevel@^1.4.1:
   version "4.0.1"
   resolved "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69"
 
+longest-streak@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e"
+  integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==
+
 loose-envify@^1.0.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -3900,6 +4370,14 @@ loose-envify@^1.0.0:
   dependencies:
     js-tokens "^3.0.0 || ^4.0.0"
 
+loud-rejection@^1.0.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+  integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+  dependencies:
+    currently-unhandled "^0.4.1"
+    signal-exit "^3.0.0"
+
 lower-case@^1.1.1:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
@@ -3939,6 +4417,16 @@ map-cache@^0.2.2:
   resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
   integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
 
+map-obj@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+  integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+  integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
 map-visit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -3946,6 +4434,21 @@ map-visit@^1.0.0:
   dependencies:
     object-visit "^1.0.0"
 
+markdown-escapes@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122"
+  integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==
+
+markdown-table@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786"
+  integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==
+
+mathml-tag-names@^2.0.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c"
+  integrity sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==
+
 md5.js@^1.3.4:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -3964,6 +4467,13 @@ md5@^2.2.1:
     crypt "~0.0.1"
     is-buffer "~1.1.1"
 
+mdast-util-compact@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649"
+  integrity sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==
+  dependencies:
+    unist-util-visit "^1.1.0"
+
 mdn-data@~1.1.0:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
@@ -3991,6 +4501,21 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
     errno "^0.1.3"
     readable-stream "^2.0.1"
 
+meow@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4"
+  integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==
+  dependencies:
+    camelcase-keys "^4.0.0"
+    decamelize-keys "^1.0.0"
+    loud-rejection "^1.0.0"
+    minimist-options "^3.0.1"
+    normalize-package-data "^2.3.4"
+    read-pkg-up "^3.0.0"
+    redent "^2.0.0"
+    trim-newlines "^2.0.0"
+    yargs-parser "^10.0.0"
+
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -4084,11 +4609,24 @@ minimatch@^3.0.4:
   dependencies:
     brace-expansion "^1.1.7"
 
+minimist-options@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+  integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
+  dependencies:
+    arrify "^1.0.1"
+    is-plain-obj "^1.1.0"
+
 minimist@0.0.8:
   version "0.0.8"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
   integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
 
+minimist@1.1.x:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
+  integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
+
 minimist@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@@ -4308,6 +4846,13 @@ node-releases@^1.1.3:
   dependencies:
     semver "^5.3.0"
 
+node-releases@^1.1.8:
+  version "1.1.10"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.10.tgz#5dbeb6bc7f4e9c85b899e2e7adcc0635c9b2adf7"
+  integrity sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ==
+  dependencies:
+    semver "^5.3.0"
+
 nopt@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
@@ -4316,6 +4861,16 @@ nopt@^4.0.1:
     abbrev "1"
     osenv "^0.1.4"
 
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+  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"
+    resolve "^1.10.0"
+    semver "2 || 3 || 4 || 5"
+    validate-npm-package-license "^3.0.1"
+
 normalize-path@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
@@ -4333,6 +4888,11 @@ normalize-range@^0.1.2:
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
   integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
 
+normalize-selector@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
+  integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
+
 normalize-url@^3.0.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
@@ -4551,6 +5111,13 @@ p-is-promise@^2.0.0:
   resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5"
   integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==
 
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
 p-limit@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68"
@@ -4558,6 +5125,13 @@ p-limit@^2.0.0:
   dependencies:
     p-try "^2.0.0"
 
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
 p-locate@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
@@ -4575,6 +5149,11 @@ p-pipe@^1.1.0:
   resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
   integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k=
 
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
 p-try@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
@@ -4613,6 +5192,18 @@ parse-asn1@^5.0.0:
     pbkdf2 "^3.0.3"
     safe-buffer "^5.1.1"
 
+parse-entities@^1.0.2, parse-entities@^1.1.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69"
+  integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg==
+  dependencies:
+    character-entities "^1.0.0"
+    character-entities-legacy "^1.0.0"
+    character-reference-invalid "^1.0.0"
+    is-alphanumerical "^1.0.0"
+    is-decimal "^1.0.0"
+    is-hexadecimal "^1.0.0"
+
 parse-json@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -4704,7 +5295,7 @@ pify@^3.0.0:
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
   integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
 
-pify@^4.0.1:
+pify@^4.0.0, pify@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
   integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
@@ -4804,6 +5395,27 @@ postcss-discard-overridden@^4.0.1:
   dependencies:
     postcss "^7.0.0"
 
+postcss-html@^0.36.0:
+  version "0.36.0"
+  resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204"
+  integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==
+  dependencies:
+    htmlparser2 "^3.10.0"
+
+postcss-jsx@^0.36.0:
+  version "0.36.0"
+  resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.0.tgz#b7685ed3d070a175ef0aa48f83d9015bd772c82d"
+  integrity sha512-/lWOSXSX5jlITCKFkuYU2WLFdrncZmjSVyNpHAunEgirZXLwI8RjU556e3Uz4mv0WVHnJA9d3JWb36lK9Yx99g==
+  dependencies:
+    "@babel/core" ">=7.1.0"
+
+postcss-less@^3.1.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.2.tgz#fb67e7ba351dbdf69de3c52eebd1184c52bfaea6"
+  integrity sha512-66ZBVo1JGkQ7r13M97xcHcyarWpgg21RaqIZWZXHE3XOtb5+ywK1uZWeY1DYkYRkIX/l8Hvxnx9iSKB68nFr+w==
+  dependencies:
+    postcss "^7.0.14"
+
 postcss-load-config@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484"
@@ -4822,6 +5434,19 @@ postcss-loader@^3.0.0:
     postcss-load-config "^2.0.0"
     schema-utils "^1.0.0"
 
+postcss-markdown@^0.36.0:
+  version "0.36.0"
+  resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560"
+  integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==
+  dependencies:
+    remark "^10.0.1"
+    unist-util-find-all-after "^1.0.2"
+
+postcss-media-query-parser@^0.2.3:
+  version "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.11:
   version "4.0.11"
   resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
@@ -5025,7 +5650,44 @@ postcss-reduce-transforms@^4.0.2:
     postcss "^7.0.0"
     postcss-value-parser "^3.0.0"
 
-postcss-selector-parser@^3.0.0:
+postcss-reporter@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f"
+  integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==
+  dependencies:
+    chalk "^2.4.1"
+    lodash "^4.17.11"
+    log-symbols "^2.2.0"
+    postcss "^7.0.7"
+
+postcss-resolve-nested-selector@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
+  integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
+
+postcss-safe-parser@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea"
+  integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-sass@^0.3.5:
+  version "0.3.5"
+  resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c"
+  integrity sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==
+  dependencies:
+    gonzales-pe "^4.2.3"
+    postcss "^7.0.1"
+
+postcss-scss@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1"
+  integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
   integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
@@ -5053,6 +5715,11 @@ postcss-svgo@^4.0.2:
     postcss-value-parser "^3.0.0"
     svgo "^1.0.0"
 
+postcss-syntax@^0.36.2:
+  version "0.36.2"
+  resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
+  integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==
+
 postcss-unique-selectors@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
@@ -5076,7 +5743,7 @@ postcss@^6.0.1, postcss@^6.0.23:
     source-map "^0.6.1"
     supports-color "^5.4.0"
 
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5:
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.7:
   version "7.0.14"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
   integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
@@ -5204,6 +5871,11 @@ querystringify@^2.0.0:
   resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"
   integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==
 
+quick-lru@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+  integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
@@ -5244,6 +5916,23 @@ rc@^1.2.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
+read-pkg-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+  integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^3.0.0"
+
+read-pkg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+  integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+  dependencies:
+    load-json-file "^4.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^3.0.0"
+
 "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -5266,6 +5955,15 @@ readable-stream@^3.0.6:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
+readable-stream@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d"
+  integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
 readdirp@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -5285,6 +5983,14 @@ recast@~0.11.12:
     private "~0.1.5"
     source-map "~0.5.0"
 
+redent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+  integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
+  dependencies:
+    indent-string "^3.0.0"
+    strip-indent "^2.0.0"
+
 regenerate-unicode-properties@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"
@@ -5381,6 +6087,56 @@ relateurl@0.2.x:
   resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
   integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
 
+remark-parse@^6.0.0:
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a"
+  integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==
+  dependencies:
+    collapse-white-space "^1.0.2"
+    is-alphabetical "^1.0.0"
+    is-decimal "^1.0.0"
+    is-whitespace-character "^1.0.0"
+    is-word-character "^1.0.0"
+    markdown-escapes "^1.0.0"
+    parse-entities "^1.1.0"
+    repeat-string "^1.5.4"
+    state-toggle "^1.0.0"
+    trim "0.0.1"
+    trim-trailing-lines "^1.0.0"
+    unherit "^1.0.4"
+    unist-util-remove-position "^1.0.0"
+    vfile-location "^2.0.0"
+    xtend "^4.0.1"
+
+remark-stringify@^6.0.0:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088"
+  integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==
+  dependencies:
+    ccount "^1.0.0"
+    is-alphanumeric "^1.0.0"
+    is-decimal "^1.0.0"
+    is-whitespace-character "^1.0.0"
+    longest-streak "^2.0.1"
+    markdown-escapes "^1.0.0"
+    markdown-table "^1.1.0"
+    mdast-util-compact "^1.0.0"
+    parse-entities "^1.0.2"
+    repeat-string "^1.5.4"
+    state-toggle "^1.0.0"
+    stringify-entities "^1.0.1"
+    unherit "^1.0.4"
+    xtend "^4.0.1"
+
+remark@^10.0.1:
+  version "10.0.1"
+  resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df"
+  integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==
+  dependencies:
+    remark-parse "^6.0.0"
+    remark-stringify "^6.0.0"
+    unified "^7.0.0"
+
 remove-trailing-separator@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@@ -5391,12 +6147,12 @@ repeat-element@^1.1.2:
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
   integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
 
-repeat-string@^1.6.1:
+repeat-string@^1.5.4, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
   integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
 
-replace-ext@^1.0.0:
+replace-ext@1.0.0, replace-ext@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
   integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
@@ -5441,6 +6197,11 @@ resolve-from@^3.0.0:
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
   integrity sha1-six699nWiBvItuZTM17rywoYh0g=
 
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
 resolve-url-loader@^2.3.1:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-2.3.2.tgz#83bb9ebc392b66c563795eef22f078970357a26e"
@@ -5461,7 +6222,7 @@ resolve-url@^0.2.1:
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
   integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
 
-resolve@^1.3.2, resolve@^1.8.1:
+resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
   integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
@@ -5496,7 +6257,7 @@ rgba-regex@^1.0.0:
   resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
   integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
 
-rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
   integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
@@ -5588,7 +6349,7 @@ selfsigned@^1.9.1:
   dependencies:
     node-forge "0.7.5"
 
-semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
   version "5.6.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
   integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
@@ -5707,7 +6468,7 @@ shellwords@^0.1.1:
   resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
   integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
 
-signal-exit@^3.0.0:
+signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
   integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
@@ -5724,6 +6485,20 @@ slash@^1.0.0:
   resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
   integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
 
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slice-ansi@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+  dependencies:
+    ansi-styles "^3.2.0"
+    astral-regex "^1.0.0"
+    is-fullwidth-code-point "^2.0.0"
+
 snapdragon-node@^2.0.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -5813,6 +6588,32 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
   integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
 
+spdx-correct@^3.0.0:
+  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"
+
+spdx-exceptions@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+  integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+  integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"
+  integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
+
 spdy-transport@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@@ -5836,6 +6637,11 @@ spdy@^4.0.0:
     select-hose "^2.0.0"
     spdy-transport "^3.0.0"
 
+specificity@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
+  integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
+
 split-string@^3.0.1, split-string@^3.0.2:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
@@ -5865,6 +6671,11 @@ stackframe@^1.0.4:
   resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
   integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==
 
+state-toggle@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a"
+  integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==
+
 static-extend@^0.1.1:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -5932,6 +6743,15 @@ string-width@^1.0.1:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^4.0.0"
 
+string-width@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
 string_decoder@^1.0.0, string_decoder@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
@@ -5946,6 +6766,16 @@ string_decoder@~1.1.1:
   dependencies:
     safe-buffer "~5.1.0"
 
+stringify-entities@^1.0.1:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7"
+  integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==
+  dependencies:
+    character-entities-html4 "^1.0.0"
+    character-entities-legacy "^1.0.0"
+    is-alphanumerical "^1.0.0"
+    is-hexadecimal "^1.0.0"
+
 strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -5960,11 +6790,28 @@ strip-ansi@^4.0.0:
   dependencies:
     ansi-regex "^3.0.0"
 
+strip-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4"
+  integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
 strip-eof@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
   integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
 
+strip-indent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+  integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+
 strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -5978,6 +6825,11 @@ style-loader@^0.23.1:
     loader-utils "^1.1.0"
     schema-utils "^1.0.0"
 
+style-search@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
+  integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
+
 stylehacks@^4.0.0:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@@ -5987,6 +6839,66 @@ stylehacks@^4.0.0:
     postcss "^7.0.0"
     postcss-selector-parser "^3.0.0"
 
+stylelint@^9.10.1:
+  version "9.10.1"
+  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"
+  integrity sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==
+  dependencies:
+    autoprefixer "^9.0.0"
+    balanced-match "^1.0.0"
+    chalk "^2.4.1"
+    cosmiconfig "^5.0.0"
+    debug "^4.0.0"
+    execall "^1.0.0"
+    file-entry-cache "^4.0.0"
+    get-stdin "^6.0.0"
+    global-modules "^2.0.0"
+    globby "^9.0.0"
+    globjoin "^0.1.4"
+    html-tags "^2.0.0"
+    ignore "^5.0.4"
+    import-lazy "^3.1.0"
+    imurmurhash "^0.1.4"
+    known-css-properties "^0.11.0"
+    leven "^2.1.0"
+    lodash "^4.17.4"
+    log-symbols "^2.0.0"
+    mathml-tag-names "^2.0.1"
+    meow "^5.0.0"
+    micromatch "^3.1.10"
+    normalize-selector "^0.2.0"
+    pify "^4.0.0"
+    postcss "^7.0.13"
+    postcss-html "^0.36.0"
+    postcss-jsx "^0.36.0"
+    postcss-less "^3.1.0"
+    postcss-markdown "^0.36.0"
+    postcss-media-query-parser "^0.2.3"
+    postcss-reporter "^6.0.0"
+    postcss-resolve-nested-selector "^0.1.1"
+    postcss-safe-parser "^4.0.0"
+    postcss-sass "^0.3.5"
+    postcss-scss "^2.0.0"
+    postcss-selector-parser "^3.1.0"
+    postcss-syntax "^0.36.2"
+    postcss-value-parser "^3.3.0"
+    resolve-from "^4.0.0"
+    signal-exit "^3.0.2"
+    slash "^2.0.0"
+    specificity "^0.4.1"
+    string-width "^3.0.0"
+    style-search "^0.1.0"
+    sugarss "^2.0.0"
+    svg-tags "^1.0.0"
+    table "^5.0.0"
+
+sugarss@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
+  integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==
+  dependencies:
+    postcss "^7.0.2"
+
 supports-color@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -6006,6 +6918,11 @@ supports-color@^6.1.0:
   dependencies:
     has-flag "^3.0.0"
 
+svg-tags@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+  integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
+
 svgo@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985"
@@ -6026,6 +6943,16 @@ svgo@^1.0.0:
     unquote "~1.1.1"
     util.promisify "~1.0.0"
 
+table@^5.0.0:
+  version "5.2.3"
+  resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
+  integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
+  dependencies:
+    ajv "^6.9.1"
+    lodash "^4.17.11"
+    slice-ansi "^2.1.0"
+    string-width "^3.0.0"
+
 tapable@^1.0.0, tapable@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e"
@@ -6132,11 +7059,31 @@ to-regex@^3.0.1, to-regex@^3.0.2:
     regex-not "^1.0.2"
     safe-regex "^1.1.0"
 
+trim-newlines@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+  integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+
 trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
   integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
 
+trim-trailing-lines@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9"
+  integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==
+
+trim@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+  integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24"
+  integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==
+
 tryer@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
@@ -6173,6 +7120,14 @@ uglify-js@3.4.x:
     commander "~2.17.1"
     source-map "~0.6.1"
 
+unherit@^1.0.4:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c"
+  integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==
+  dependencies:
+    inherits "^2.0.1"
+    xtend "^4.0.1"
+
 unicode-canonical-property-names-ecmascript@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -6196,6 +7151,20 @@ unicode-property-aliases-ecmascript@^1.0.4:
   resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0"
   integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==
 
+unified@^7.0.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13"
+  integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==
+  dependencies:
+    "@types/unist" "^2.0.0"
+    "@types/vfile" "^3.0.0"
+    bail "^1.0.0"
+    extend "^3.0.0"
+    is-plain-obj "^1.1.0"
+    trough "^1.0.0"
+    vfile "^3.0.0"
+    x-is-string "^0.1.0"
+
 union-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
@@ -6230,6 +7199,44 @@ unique-slug@^2.0.0:
   dependencies:
     imurmurhash "^0.1.4"
 
+unist-util-find-all-after@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d"
+  integrity sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==
+  dependencies:
+    unist-util-is "^2.0.0"
+
+unist-util-is@^2.0.0, unist-util-is@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db"
+  integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==
+
+unist-util-remove-position@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb"
+  integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==
+  dependencies:
+    unist-util-visit "^1.1.0"
+
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+  integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
+unist-util-visit-parents@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217"
+  integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==
+  dependencies:
+    unist-util-is "^2.1.2"
+
+unist-util-visit@^1.1.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1"
+  integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==
+  dependencies:
+    unist-util-visit-parents "^2.0.0"
+
 universalify@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -6338,6 +7345,14 @@ v8-compile-cache@^2.0.2:
   resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
   integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==
 
+validate-npm-package-license@^3.0.1:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  dependencies:
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
+
 vary@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -6348,6 +7363,28 @@ vendors@^1.0.0:
   resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
   integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==
 
+vfile-location@^2.0.0:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55"
+  integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==
+
+vfile-message@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+  integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+  dependencies:
+    unist-util-stringify-position "^1.1.1"
+
+vfile@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803"
+  integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==
+  dependencies:
+    is-buffer "^2.0.0"
+    replace-ext "1.0.0"
+    unist-util-stringify-position "^1.0.0"
+    vfile-message "^1.0.0"
+
 vm-browserify@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
@@ -6570,7 +7607,7 @@ which-module@^2.0.0:
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
   integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
 
-which@^1.2.14, which@^1.3.0:
+which@^1.2.14, which@^1.3.0, which@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -6610,6 +7647,13 @@ wrappy@1:
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
+write@1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+  integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+  dependencies:
+    mkdirp "^0.5.1"
+
 ws@^6.0.0:
   version "6.2.0"
   resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.0.tgz#13806d9913b2a5f3cbb9ba47b563c002cbc7c526"
@@ -6617,12 +7661,17 @@ ws@^6.0.0:
   dependencies:
     async-limiter "~1.0.0"
 
+x-is-string@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+  integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
+
 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==
 
-xtend@^4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
   integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
@@ -6641,7 +7690,7 @@ yallist@^3.0.0, yallist@^3.0.2:
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
   integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
 
-yargs-parser@^10.1.0:
+yargs-parser@^10.0.0, 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==

From b8f7b5dfe0aa2aa45cbd440e8f68830dbf0dd3b8 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 18:21:15 +0900
Subject: [PATCH 26/61] =?UTF-8?q?stylelint-config-recess-order=E3=82=92?=
 =?UTF-8?q?=E5=B0=8E=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json |  4 ++++
 yarn.lock    | 24 ++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/package.json b/package.json
index 2df39fa..76255f2 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,10 @@
     "sass": "^1.17.0",
     "sass-loader": "^7.1.0",
     "stylelint": "^9.10.1",
+    "stylelint-config-recess-order": "^2.0.1",
     "vue-template-compiler": "^2.6.6"
+  },
+  "stylelint": {
+    "extends": "stylelint-config-recess-order"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index ae560e3..fd5e231 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5705,6 +5705,14 @@ postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4:
     indexes-of "^1.0.1"
     uniq "^1.0.1"
 
+postcss-sorting@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-4.1.0.tgz#a107f0bf3852977fa64e4442bc340c88d5aacdb3"
+  integrity sha512-r4T2oQd1giURJdHQ/RMb72dKZCuLOdWx2B/XhXN1Y1ZdnwXsKH896Qz6vD4tFy9xSjpKNYhlZoJmWyhH/7JUQw==
+  dependencies:
+    lodash "^4.17.4"
+    postcss "^7.0.0"
+
 postcss-svgo@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258"
@@ -6839,6 +6847,22 @@ stylehacks@^4.0.0:
     postcss "^7.0.0"
     postcss-selector-parser "^3.0.0"
 
+stylelint-config-recess-order@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/stylelint-config-recess-order/-/stylelint-config-recess-order-2.0.1.tgz#749d4d07b77d81ac8a144ed1898a9108d6170879"
+  integrity sha512-U0yPCURIJB+aAySMzcdY47nexkaTOUR8mTSwSmNp14iJ9JeMbvFT+fsWq/jmZdcGRb47zk+iX9bbHEnpvD8P/w==
+  dependencies:
+    stylelint-order "^2.0.0"
+
+stylelint-order@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-2.1.0.tgz#fc64625c26b93755773bd67c1203381194aded04"
+  integrity sha512-8oX4Y3Bh4e3s9e7nnYJkeyYg5yx8Fa7wwTNXJcabPrNqavK9FqZ3zNJFvCJFn+v5qTngvVWsh33DpOP2BdroBg==
+  dependencies:
+    lodash "^4.17.10"
+    postcss "^7.0.2"
+    postcss-sorting "^4.1.0"
+
 stylelint@^9.10.1:
   version "9.10.1"
   resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"

From 83d0fb3a7a977112c8efa569c93add2d60efd2e6 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 18:22:16 +0900
Subject: [PATCH 27/61] =?UTF-8?q?npm=20script=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

npm run stylelintで実行可能
---
 package.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 76255f2..6c03b25 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,8 @@
     "watch-poll": "npm run watch -- --watch-poll",
     "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
     "prod": "npm run production",
-    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
+    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+    "stylelint": "stylelint resources/assets/sass/*"
   },
   "devDependencies": {
     "bootstrap": "^4.2.1",

From cf0d370e6148f6d689741516c6f1803d3a8b3a97 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sun, 10 Mar 2019 18:52:03 +0900
Subject: [PATCH 28/61] fix style

---
 app/MetadataResolver/PlurkResolver.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/MetadataResolver/PlurkResolver.php b/app/MetadataResolver/PlurkResolver.php
index 3301cdd..7422fef 100644
--- a/app/MetadataResolver/PlurkResolver.php
+++ b/app/MetadataResolver/PlurkResolver.php
@@ -32,7 +32,7 @@ class PlurkResolver implements Resolver
             $xpath = new \DOMXPath($dom);
             $imageNode = $xpath->query('//div[@class="text_holder"]/a[1]')->item(0);
 
-            if($imageNode) {
+            if ($imageNode) {
                 $metadata->image = $imageNode->getAttribute('href');
             }
 

From 5d1ffca1eecc5bf85a6c45203de5e3038bf6ed4d Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 19:09:20 +0900
Subject: [PATCH 29/61] =?UTF-8?q?CircleCI=E3=81=ABstylelint=E3=81=AB?=
 =?UTF-8?q?=E3=82=88=E3=82=8Blint=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .circleci/config.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4307bf0..0c04d93 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -57,6 +57,12 @@ jobs:
       - store_test_results:
           path: /tmp/php-cs-fixer
 
+      # Run stylelint
+      - run:
+          name: stylelint
+          command: yarn run stylelint
+          when: always
+
       # Run unit test
       - run:
           command: |

From a2ee4ef5058424070e9088146f9d100feac0af98 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Sun, 10 Mar 2019 19:37:41 +0900
Subject: [PATCH 30/61] =?UTF-8?q?husky=E3=81=A8lint-staged=E3=82=92?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=A6=E3=82=B3=E3=83=9F=E3=83=83?=
 =?UTF-8?q?=E3=83=88=E5=89=8D=E3=81=ABcss=E3=82=92lint=E3=81=99=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json |  10 ++
 yarn.lock    | 403 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 405 insertions(+), 8 deletions(-)

diff --git a/package.json b/package.json
index 6c03b25..e4a2939 100644
--- a/package.json
+++ b/package.json
@@ -15,10 +15,12 @@
     "cal-heatmap": "^3.3.10",
     "chart.js": "^2.7.1",
     "cross-env": "^5.2.0",
+    "husky": "^1.3.1",
     "jquery": "^3.2.1",
     "js-cookie": "^2.2.0",
     "laravel-mix": "^4.0.0",
     "laravel-mix-bundle-analyzer": "^1.0.2",
+    "lint-staged": "^8.1.5",
     "open-iconic": "^1.1.1",
     "popper.js": "^1.14.7",
     "resolve-url-loader": "^2.3.1",
@@ -30,5 +32,13 @@
   },
   "stylelint": {
     "extends": "stylelint-config-recess-order"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  },
+  "lint-staged": {
+    "*.{css,scss}": ["stylelint --fix", "git add"]
   }
 }
diff --git a/yarn.lock b/yarn.lock
index fd5e231..5bd602d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -605,6 +605,13 @@
     js-levenshtein "^1.1.3"
     semver "^5.3.0"
 
+"@babel/runtime@7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c"
+  integrity sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==
+  dependencies:
+    regenerator-runtime "^0.12.0"
+
 "@babel/runtime@^7.2.0":
   version "7.3.1"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.1.tgz#574b03e8e8a9898eaf4a872a92ea20b7846f6f2a"
@@ -682,6 +689,13 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
   integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
 
+"@samverschueren/stream-to-observable@^0.3.0":
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+  integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+  dependencies:
+    any-observable "^0.3.0"
+
 "@types/events@*":
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
@@ -982,6 +996,11 @@ ansi-colors@^3.0.0:
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
   integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
 
+ansi-escapes@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
 ansi-html@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
@@ -1014,6 +1033,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
   dependencies:
     color-convert "^1.9.0"
 
+any-observable@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+  integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
 anymatch@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@@ -1568,7 +1592,7 @@ ccount@^1.0.0:
   resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
   integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
 
-chalk@^1.1.3:
+chalk@^1.0.0, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -1579,7 +1603,7 @@ chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, 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==
@@ -1672,6 +1696,11 @@ chrome-trace-event@^1.0.0:
   dependencies:
     tslib "^1.9.0"
 
+ci-info@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
 cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
@@ -1697,6 +1726,13 @@ clean-css@4.2.x, clean-css@^4.1.3:
   dependencies:
     source-map "~0.6.0"
 
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+  dependencies:
+    restore-cursor "^2.0.0"
+
 cli-table3@^0.5.0:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
@@ -1707,6 +1743,14 @@ cli-table3@^0.5.0:
   optionalDependencies:
     colors "^1.1.2"
 
+cli-truncate@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+  integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+  dependencies:
+    slice-ansi "0.0.4"
+    string-width "^1.0.1"
+
 cliui@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -1814,7 +1858,7 @@ commander@2.17.x, commander@~2.17.1:
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
   integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
 
-commander@^2.18.0:
+commander@^2.14.1, commander@^2.18.0, commander@^2.9.0:
   version "2.19.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
   integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
@@ -1974,6 +2018,17 @@ cosmiconfig@^5.0.0:
     js-yaml "^3.9.0"
     parse-json "^4.0.0"
 
+cosmiconfig@^5.0.2, cosmiconfig@^5.0.7:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.1.0.tgz#6c5c35e97f37f985061cdf653f114784231185cf"
+  integrity sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.9.0"
+    lodash.get "^4.4.2"
+    parse-json "^4.0.0"
+
 create-ecdh@^4.0.0:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -2244,6 +2299,11 @@ d3@^3.0.6:
   resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
   integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=
 
+date-fns@^1.27.2:
+  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==
+
 date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
@@ -2268,7 +2328,7 @@ debug@^3.1.0, debug@^3.2.5, debug@^3.2.6:
   dependencies:
     ms "^2.1.1"
 
-debug@^4.0.0, debug@^4.1.0:
+debug@^4.0.0, debug@^4.0.1, debug@^4.1.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
   integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -2300,6 +2360,11 @@ decode-uri-component@^0.2.0:
   resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
   integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
 
+dedent@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
 deep-equal@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -2526,6 +2591,11 @@ electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.113:
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9"
   integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==
 
+elegant-spinner@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+  integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
 elliptic@^6.0.0:
   version "6.4.1"
   resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
@@ -2630,7 +2700,7 @@ escape-html@~1.0.3:
   resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
   integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
 
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
   integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
@@ -2879,6 +2949,21 @@ figgy-pudding@^3.5.1:
   resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
   integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
 
+figures@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+    object-assign "^4.1.0"
+
+figures@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+  dependencies:
+    escape-string-regexp "^1.0.5"
+
 file-entry-cache@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-4.0.0.tgz#633567d15364aefe0b299e1e217735e8f3a9f6e8"
@@ -2936,6 +3021,11 @@ find-cache-dir@^2.0.0:
     make-dir "^1.0.0"
     pkg-dir "^3.0.0"
 
+find-parent-dir@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
+  integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=
+
 find-up@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
@@ -2982,6 +3072,11 @@ flush-write-stream@^1.0.0:
     inherits "^2.0.3"
     readable-stream "^2.3.6"
 
+fn-name@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+  integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
 follow-redirects@^1.0.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
@@ -3084,6 +3179,15 @@ function-bind@^1.1.1:
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
   integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 
+g-status@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+  integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+  dependencies:
+    arrify "^1.0.1"
+    matcher "^1.0.0"
+    simple-git "^1.85.0"
+
 gauge@~2.7.3:
   version "2.7.4"
   resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -3103,6 +3207,11 @@ 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-own-enumerable-property-symbols@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
+  integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==
+
 get-stdin@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
@@ -3503,6 +3612,22 @@ https-browserify@^1.0.0:
   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
   integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
 
+husky@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0"
+  integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==
+  dependencies:
+    cosmiconfig "^5.0.7"
+    execa "^1.0.0"
+    find-up "^3.0.0"
+    get-stdin "^6.0.0"
+    is-ci "^2.0.0"
+    pkg-dir "^3.0.0"
+    please-upgrade-node "^3.1.1"
+    read-pkg "^4.0.1"
+    run-node "^1.0.0"
+    slash "^2.0.0"
+
 iconv-lite@0.4.23:
   version "0.4.23"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
@@ -3776,6 +3901,13 @@ is-callable@^1.1.4:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
   integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
 
+is-ci@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+  dependencies:
+    ci-info "^2.0.0"
+
 is-color-stop@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
@@ -3890,11 +4022,18 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
-is-obj@^1.0.0:
+is-obj@^1.0.0, is-obj@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
   integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
 
+is-observable@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+  integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+  dependencies:
+    symbol-observable "^1.1.0"
+
 is-path-cwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
@@ -3926,6 +4065,11 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   dependencies:
     isobject "^3.0.1"
 
+is-promise@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+  integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
 is-regex@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -4194,6 +4338,81 @@ leven@^2.1.0:
   resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
   integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
 
+lint-staged@^8.1.5:
+  version "8.1.5"
+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79"
+  integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==
+  dependencies:
+    chalk "^2.3.1"
+    commander "^2.14.1"
+    cosmiconfig "^5.0.2"
+    debug "^3.1.0"
+    dedent "^0.7.0"
+    del "^3.0.0"
+    execa "^1.0.0"
+    find-parent-dir "^0.3.0"
+    g-status "^2.0.2"
+    is-glob "^4.0.0"
+    is-windows "^1.0.2"
+    listr "^0.14.2"
+    listr-update-renderer "^0.5.0"
+    lodash "^4.17.11"
+    log-symbols "^2.2.0"
+    micromatch "^3.1.8"
+    npm-which "^3.0.1"
+    p-map "^1.1.1"
+    path-is-inside "^1.0.2"
+    pify "^3.0.0"
+    please-upgrade-node "^3.0.2"
+    staged-git-files "1.1.2"
+    string-argv "^0.0.2"
+    stringify-object "^3.2.2"
+    yup "^0.26.10"
+
+listr-silent-renderer@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+  integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+  integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+  dependencies:
+    chalk "^1.1.3"
+    cli-truncate "^0.2.1"
+    elegant-spinner "^1.0.1"
+    figures "^1.7.0"
+    indent-string "^3.0.0"
+    log-symbols "^1.0.2"
+    log-update "^2.3.0"
+    strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+  integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+  dependencies:
+    chalk "^2.4.1"
+    cli-cursor "^2.1.0"
+    date-fns "^1.27.2"
+    figures "^2.0.0"
+
+listr@^0.14.2:
+  version "0.14.3"
+  resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+  integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+  dependencies:
+    "@samverschueren/stream-to-observable" "^0.3.0"
+    is-observable "^1.1.0"
+    is-promise "^2.1.0"
+    is-stream "^1.1.0"
+    listr-silent-renderer "^1.1.1"
+    listr-update-renderer "^0.5.0"
+    listr-verbose-renderer "^0.5.0"
+    p-map "^2.0.0"
+    rxjs "^6.3.3"
+
 load-json-file@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -4298,6 +4517,11 @@ lodash.defaults@^4.0.0:
   resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
   integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
 
+lodash.get@^4.4.2:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+  integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
 lodash.isarguments@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@@ -4342,6 +4566,13 @@ lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5:
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
   integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
 
+log-symbols@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+  integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+  dependencies:
+    chalk "^1.0.0"
+
 log-symbols@^2.0.0, log-symbols@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@@ -4349,6 +4580,15 @@ log-symbols@^2.0.0, log-symbols@^2.2.0:
   dependencies:
     chalk "^2.0.1"
 
+log-update@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+  integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+  dependencies:
+    ansi-escapes "^3.0.0"
+    cli-cursor "^2.0.0"
+    wrap-ansi "^3.0.1"
+
 loglevel@^1.4.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
@@ -4444,6 +4684,13 @@ markdown-table@^1.1.0:
   resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786"
   integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==
 
+matcher@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+  integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+  dependencies:
+    escape-string-regexp "^1.0.4"
+
 mathml-tag-names@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c"
@@ -4911,6 +5158,13 @@ npm-packlist@^1.1.6:
     ignore-walk "^3.0.1"
     npm-bundled "^1.0.1"
 
+npm-path@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+  integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+  dependencies:
+    which "^1.2.10"
+
 npm-run-path@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -4918,6 +5172,15 @@ npm-run-path@^2.0.0:
   dependencies:
     path-key "^2.0.0"
 
+npm-which@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+  integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+  dependencies:
+    commander "^2.9.0"
+    npm-path "^2.0.2"
+    which "^1.2.10"
+
 npmlog@^4.0.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -5032,6 +5295,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
   dependencies:
     wrappy "1"
 
+onetime@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+  dependencies:
+    mimic-fn "^1.0.0"
+
 open-iconic@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/open-iconic/-/open-iconic-1.1.1.tgz#9dcfc8c7cd3c61cdb4a236b1a347894c97adc0c6"
@@ -5144,6 +5414,11 @@ p-map@^1.1.1:
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
   integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
 
+p-map@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50"
+  integrity sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==
+
 p-pipe@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
@@ -5247,7 +5522,7 @@ path-is-absolute@^1.0.0:
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
   integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
-path-is-inside@^1.0.1:
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
   integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
@@ -5319,6 +5594,13 @@ pkg-dir@^3.0.0:
   dependencies:
     find-up "^3.0.0"
 
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
+  integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
+  dependencies:
+    semver-compare "^1.0.0"
+
 popper.js@^1.14.7:
   version "1.14.7"
   resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e"
@@ -5785,6 +6067,11 @@ promise-inflight@^1.0.1:
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
   integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
 
+property-expr@^1.5.0:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+  integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
 proxy-addr@~2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
@@ -5941,6 +6228,15 @@ read-pkg@^3.0.0:
     normalize-package-data "^2.3.2"
     path-type "^3.0.0"
 
+read-pkg@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
+  integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc=
+  dependencies:
+    normalize-package-data "^2.3.2"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
+
 "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -6237,6 +6533,14 @@ resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1:
   dependencies:
     path-parse "^1.0.6"
 
+restore-cursor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+  dependencies:
+    onetime "^2.0.0"
+    signal-exit "^3.0.2"
+
 ret@~0.1.10:
   version "0.1.15"
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -6280,6 +6584,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
     hash-base "^3.0.0"
     inherits "^2.0.1"
 
+run-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+  integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
 run-queue@^1.0.0, run-queue@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@@ -6287,6 +6596,13 @@ run-queue@^1.0.0, run-queue@^1.0.3:
   dependencies:
     aproba "^1.1.1"
 
+rxjs@^6.3.3:
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
+  integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
+  dependencies:
+    tslib "^1.9.0"
+
 safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -6357,6 +6673,11 @@ selfsigned@^1.9.1:
   dependencies:
     node-forge "0.7.5"
 
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
 "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
   version "5.6.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
@@ -6481,6 +6802,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
   integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
 
+simple-git@^1.85.0:
+  version "1.107.0"
+  resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383"
+  integrity sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==
+  dependencies:
+    debug "^4.0.1"
+
 simple-swizzle@^0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
@@ -6498,6 +6826,11 @@ slash@^2.0.0:
   resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
   integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
 
+slice-ansi@0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+  integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
 slice-ansi@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
@@ -6679,6 +7012,11 @@ stackframe@^1.0.4:
   resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
   integrity sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==
 
+staged-git-files@1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+  integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
 state-toggle@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a"
@@ -6734,6 +7072,11 @@ stream-shift@^1.0.0:
   resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
   integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
 
+string-argv@^0.0.2:
+  version "0.0.2"
+  resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+  integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
 string-width@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -6784,6 +7127,15 @@ stringify-entities@^1.0.1:
     is-alphanumerical "^1.0.0"
     is-hexadecimal "^1.0.0"
 
+stringify-object@^3.2.2:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+  dependencies:
+    get-own-enumerable-property-symbols "^3.0.0"
+    is-obj "^1.0.1"
+    is-regexp "^1.0.0"
+
 strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -6967,6 +7319,16 @@ svgo@^1.0.0:
     unquote "~1.1.1"
     util.promisify "~1.0.0"
 
+symbol-observable@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.5:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.6.tgz#de76e0ea2b3558c1e673942e47e714a930fa64aa"
+  integrity sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==
+
 table@^5.0.0:
   version "5.2.3"
   resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
@@ -7083,6 +7445,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
     regex-not "^1.0.2"
     safe-regex "^1.1.0"
 
+toposort@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+  integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
 trim-newlines@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
@@ -7631,7 +7998,7 @@ which-module@^2.0.0:
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
   integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
 
-which@^1.2.14, which@^1.3.0, which@^1.3.1:
+which@^1.2.10, which@^1.2.14, which@^1.3.0, which@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -7666,6 +8033,14 @@ wrap-ansi@^2.0.0:
     string-width "^1.0.1"
     strip-ansi "^3.0.1"
 
+wrap-ansi@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+  integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+  dependencies:
+    string-width "^2.1.1"
+    strip-ansi "^4.0.0"
+
 wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -7764,3 +8139,15 @@ yargs@^12.0.4, yargs@^12.0.5:
     which-module "^2.0.0"
     y18n "^3.2.1 || ^4.0.0"
     yargs-parser "^11.1.1"
+
+yup@^0.26.10:
+  version "0.26.10"
+  resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1"
+  integrity sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==
+  dependencies:
+    "@babel/runtime" "7.0.0"
+    fn-name "~2.0.1"
+    lodash "^4.17.10"
+    property-expr "^1.5.0"
+    synchronous-promise "^2.0.5"
+    toposort "^2.0.2"

From ad747577e43ed1bed721625e3eeb6551a50f9970 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sun, 10 Mar 2019 20:43:38 +0900
Subject: [PATCH 31/61] fix style

---
 resources/assets/sass/tissue.css | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/resources/assets/sass/tissue.css b/resources/assets/sass/tissue.css
index fa57ff3..c69f77e 100644
--- a/resources/assets/sass/tissue.css
+++ b/resources/assets/sass/tissue.css
@@ -1,10 +1,10 @@
 @charset "UTF-8";
 
 .tis-footer {
-    color: #a2a2a2;
     font-size: small;
-    border-top: 1px solid #eee;
-    background: linear-gradient(to bottom, #f8f9fa, #fff)
+    color: #a2a2a2;
+    background: linear-gradient(to bottom, #f8f9fa, #fff);
+    border-top: 1px solid #eee
 }
 
 .tis-word-wrap {
@@ -16,8 +16,8 @@
 }
 
 .tis-need-agecheck .container {
-    filter: blur(45px);
     pointer-events: none;
+    filter: blur(45px);
 }
 
 .container {
@@ -25,8 +25,8 @@
 }
 
 .list-group-item.no-side-border {
-    border-left: none;
     border-right: none;
+    border-left: none;
     border-radius: 0;
 }
 
@@ -35,8 +35,8 @@
 }
 
 .list-group-item.border-bottom-only {
-    border-left: none;
     border-right: none;
+    border-left: none;
     border-radius: 0;
 }
 
@@ -54,12 +54,12 @@
 }
 
 .tis-page-selector {
-    margin-left: -1px;
     width: calc(100% + 2px);
     height: 100%;
+    margin-left: -1px;
+    line-height: 1.25;
     border: 1px solid #dee2e6;
     border-radius: 0;
-    line-height: 1.25;
 }
 
 @media (min-width: 992px) {
@@ -69,13 +69,13 @@
 }
 
 #navbarNav > .d-lg-none > .row > div:first-of-type {
-    padding-left: 15px;
     padding-right: 7.5px;
+    padding-left: 15px;
 }
 
 #navbarNav > .d-lg-none > .row > div {
-    padding-left: 7.5px;
     padding-right: 15px;
+    padding-left: 7.5px;
 }
 
 #navbarNav > .d-lg-none > .row > .col .btn {

From 89c0b3975512122ff5d98b19e6d864294d24a7e4 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sun, 10 Mar 2019 21:38:50 +0900
Subject: [PATCH 32/61] =?UTF-8?q?stylelint=E3=81=AE=E5=AF=BE=E8=B1=A1?=
 =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=83=91=E3=82=BF=E3=83=BC?=
 =?UTF-8?q?=E3=83=B3=E3=82=92=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 15a5d71..01fce83 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,7 @@
     "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
     "prod": "npm run production",
     "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
-    "stylelint": "stylelint resources/assets/sass/*"
+    "stylelint": "stylelint resources/assets/sass/**/*"
   },
   "devDependencies": {
     "bootstrap": "^4.3.1",

From 16005931fc001607fb7184969d147cf3189d7dd0 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sun, 10 Mar 2019 21:49:23 +0900
Subject: [PATCH 33/61] fix style

---
 resources/assets/sass/components/_link-card.scss | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/resources/assets/sass/components/_link-card.scss b/resources/assets/sass/components/_link-card.scss
index db5bf43..846fde9 100644
--- a/resources/assets/sass/components/_link-card.scss
+++ b/resources/assets/sass/components/_link-card.scss
@@ -5,12 +5,12 @@
 
     // 省略を表す影を付けるやつ
     &::before {
-      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
       width: 100%;
       height: 100%;
-      position: absolute;
-      left: 0;
-      top: 0;
+      content: '';
       background: linear-gradient(transparent 320px, white);
     }
   }

From 4f559cd1d4d654c43c8ba568a1ff40b839b4668e Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Mon, 11 Mar 2019 21:26:34 +0900
Subject: [PATCH 34/61] =?UTF-8?q?=E3=83=97=E3=83=A9=E3=82=A4=E3=83=9E?=
 =?UTF-8?q?=E3=83=AA=E3=82=AB=E3=83=A9=E3=83=BC=E3=82=92=E5=A4=89=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/app.scss         |  3 +++
 resources/views/layouts/base.blade.php | 12 ++++++------
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index 6545a13..e691a70 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -1,3 +1,6 @@
+// Bootstrap Variable Overlide
+$primary: #e53fb1;
+
 // Bootstrap
 @import "~bootstrap/scss/bootstrap";
 @import "bootstrap-custom";
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php
index 3aabcb2..340f9e3 100644
--- a/resources/views/layouts/base.blade.php
+++ b/resources/views/layouts/base.blade.php
@@ -89,7 +89,7 @@
                         </div>
                     </form>
                     <form class="form-inline mr-2">
-                        <a href="{{ route('checkin') }}" class="btn btn-outline-success">チェックイン</a>
+                        <a href="{{ route('checkin') }}" class="btn btn-outline-primary">チェックイン</a>
                     </form>
                     <ul class="navbar-nav">
                         <li class="nav-item dropdown">
@@ -114,18 +114,18 @@
                 <div class="d-lg-none">
                     <div class="row mt-2">
                         <div class="col">
-                            <a class="btn btn-outline-{{ stripos(Route::currentRouteName(), 'home') === 0 ? 'primary' : 'secondary'}}" href="{{ route('home') }}" role="button">ホーム</a>
+                            <a class="btn btn-{{ stripos(Route::currentRouteName(), 'home') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('home') }}" role="button">ホーム</a>
                         </div>
                         <div class="col">
-                            <a class="btn btn-outline-{{ stripos(Route::currentRouteName(), 'user.profile') === 0 ? 'primary' : 'secondary'}}" href="{{ route('user.profile', ['name' => Auth::user()->name]) }}" role="button">タイムライン</a>
+                            <a class="btn btn-{{ stripos(Route::currentRouteName(), 'user.profile') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('user.profile', ['name' => Auth::user()->name]) }}" role="button">タイムライン</a>
                         </div>
                     </div>
                     <div class="row mt-2">
                         <div class="col">
-                            <a class="btn btn-outline-{{ stripos(Route::currentRouteName(), 'user.stats') === 0 ? 'primary' : 'secondary'}}" href="{{ route('user.stats', ['name' => Auth::user()->name]) }}" role="button">グラフ</a>
+                            <a class="btn btn-{{ stripos(Route::currentRouteName(), 'user.stats') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('user.stats', ['name' => Auth::user()->name]) }}" role="button">グラフ</a>
                         </div>
                         <div class="col">
-                            <a class="btn btn-outline-{{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'primary' : 'secondary'}}" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}" role="button">オカズ</a>
+                            <a class="btn btn-{{ stripos(Route::currentRouteName(), 'user.okazu') === 0 ? 'primary' : 'outline-secondary'}}" href="{{ route('user.okazu', ['name' => Auth::user()->name]) }}" role="button">オカズ</a>
                         </div>
                     </div>
                     {{-- <div class="row mt-2">
@@ -145,7 +145,7 @@
                     </div>
                     <div class="row mt-2">
                         <form class="form-inline col">
-                            <a class="btn btn-outline-success" href="{{ route('checkin') }}">チェックイン</a>
+                            <a class="btn btn-outline-primary" href="{{ route('checkin') }}">チェックイン</a>
                         </form>
                     </div>
                 </div>

From 00a819de23895f094bdd086020cc808eb115884d Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Mar 2019 22:55:32 +0900
Subject: [PATCH 35/61] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=83=A2=E3=83=BC?=
 =?UTF-8?q?=E3=83=80=E3=83=AB=E3=81=AE=E5=88=9D=E6=9C=9F=E5=8C=96=E3=81=8C?=
 =?UTF-8?q?=E5=AE=8C=E4=BA=86=E3=81=97=E3=81=A6=E3=81=8B=E3=82=89=E5=89=8A?=
 =?UTF-8?q?=E9=99=A4=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=AF=E3=83=AA=E3=83=83?=
 =?UTF-8?q?=E3=82=AF=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E3=82=92=E4=BB=95?=
 =?UTF-8?q?=E6=8E=9B=E3=81=91=E3=82=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/js/app.js                 | 6 +++++-
 resources/views/ejaculation/show.blade.php | 2 +-
 resources/views/user/profile.blade.php     | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js
index 0af3853..c990e71 100644
--- a/resources/assets/js/app.js
+++ b/resources/assets/js/app.js
@@ -28,5 +28,9 @@ $(() => {
     }
 
     $('.link-card').linkCard();
-    $('#deleteCheckinModal').deleteCheckinModal();
+    const $deleteCheckinModal = $('#deleteCheckinModal').deleteCheckinModal();
+    $(document).on('click', '[data-target="#deleteCheckinModal"]', function (event) {
+        event.preventDefault();
+        $deleteCheckinModal.modal('show', this);
+    });
 });
\ No newline at end of file
diff --git a/resources/views/ejaculation/show.blade.php b/resources/views/ejaculation/show.blade.php
index 2eda57f..0f2c78a 100644
--- a/resources/views/ejaculation/show.blade.php
+++ b/resources/views/ejaculation/show.blade.php
@@ -36,7 +36,7 @@
                                 <a class="text-secondary timeline-action-item" href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン"></span></a>
                                 @if ($user->isMe())
                                     <a class="text-secondary timeline-action-item" href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil" data-toggle="tooltip" data-placement="bottom" title="修正"></span></a>
-                                    <a class="text-secondary timeline-action-item" href="#" data-toggle="modal" data-target="#deleteCheckinModal" data-id="{{ $ejaculation->id }}" data-date="{{ $ejaculation->ejaculated_date }}"><span class="oi oi-trash" data-toggle="tooltip" data-placement="bottom" title="削除"></span></a>
+                                    <a class="text-secondary timeline-action-item" href="#" data-target="#deleteCheckinModal" data-id="{{ $ejaculation->id }}" data-date="{{ $ejaculation->ejaculated_date }}"><span class="oi oi-trash" data-toggle="tooltip" data-placement="bottom" title="削除"></span></a>
                                 @endif
                             </div>
                         </div>
diff --git a/resources/views/user/profile.blade.php b/resources/views/user/profile.blade.php
index 66ef3a0..7182f7e 100644
--- a/resources/views/user/profile.blade.php
+++ b/resources/views/user/profile.blade.php
@@ -42,7 +42,7 @@
                         <a class="text-secondary timeline-action-item" href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン"></span></a>
                         @if ($user->isMe())
                             <a class="text-secondary timeline-action-item" href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil" data-toggle="tooltip" data-placement="bottom" title="修正"></span></a>
-                            <a class="text-secondary timeline-action-item" href="#" data-toggle="modal" data-target="#deleteCheckinModal" data-id="{{ $ejaculation->id }}" data-date="{{ $ejaculation->ejaculated_date }}"><span class="oi oi-trash" data-toggle="tooltip" data-placement="bottom" title="削除"></span></a>
+                            <a class="text-secondary timeline-action-item" href="#" data-target="#deleteCheckinModal" data-id="{{ $ejaculation->id }}" data-date="{{ $ejaculation->ejaculated_date }}"><span class="oi oi-trash" data-toggle="tooltip" data-placement="bottom" title="削除"></span></a>
                         @endif
                     </div>
                 </div>

From 2db45951f405a7de35e5e2191437927e2cc22ca3 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Tue, 12 Mar 2019 03:30:38 +0900
Subject: [PATCH 36/61] =?UTF-8?q?FC2ContentsResolver=E3=82=92=E8=BF=BD?=
 =?UTF-8?q?=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/FC2ContentsResolver.php | 44 ++++++++++++++++++++
 app/MetadataResolver/MetadataResolver.php    |  1 +
 2 files changed, 45 insertions(+)
 create mode 100644 app/MetadataResolver/FC2ContentsResolver.php

diff --git a/app/MetadataResolver/FC2ContentsResolver.php b/app/MetadataResolver/FC2ContentsResolver.php
new file mode 100644
index 0000000..76497ee
--- /dev/null
+++ b/app/MetadataResolver/FC2ContentsResolver.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\MetadataResolver;
+
+use GuzzleHttp\Client;
+
+class FC2ContentsResolver implements Resolver
+{
+    /**
+     * @var Client
+     */
+    private $client;
+    /**
+     * @var OGPResolver
+     */
+    private $ogpResolver;
+
+    public function __construct(Client $client, OGPResolver $ogpResolver)
+    {
+        $this->client = $client;
+        $this->ogpResolver = $ogpResolver;
+    }
+
+    public function resolve(string $url): Metadata
+    {
+        $res = $this->client->get($url);
+        if ($res->getStatusCode() === 200) {
+            $metadata = $this->ogpResolver->parse($res->getBody());
+
+            $dom = new \DOMDocument();
+            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
+            $xpath = new \DOMXPath($dom);
+
+            $thumbnailNode = $xpath->query('//*[@class="main_thum_img"]/a')->item(0);
+            if ($thumbnailNode) {
+                $metadata->image = preg_replace('~^http:~', "https:", $thumbnailNode->getAttribute('href'));
+            }
+
+            return $metadata;
+        } else {
+            throw new \RuntimeException("{$res->getStatusCode()}: $url");
+        }
+    }
+}
diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php
index 1a8c6fe..181aab3 100644
--- a/app/MetadataResolver/MetadataResolver.php
+++ b/app/MetadataResolver/MetadataResolver.php
@@ -25,6 +25,7 @@ class MetadataResolver implements Resolver
         '~\.syosetu\.com/n\d+[a-z]{2,}~' => NarouResolver::class,
         '~ci-en\.jp/creator/\d+/article/\d+~' => CienResolver::class,
         '~www\.plurk\.com\/p\/.*~' => PlurkResolver::class,
+        '~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class,
     ];
 
     public $mimeTypes = [

From ec5a78db38e9b89f874f2d8573e3c992f1746223 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Tue, 12 Mar 2019 03:31:16 +0900
Subject: [PATCH 37/61] =?UTF-8?q?FC2ContentsResolver=E3=81=AE=E3=83=86?=
 =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../FC2ContentsResolverTest.php               | 50 +++++++++++++++++++
 tests/fixture/FC2Contents/adult.html          | 15 ++++++
 tests/fixture/FC2Contents/general.html        | 15 ++++++
 3 files changed, 80 insertions(+)
 create mode 100644 tests/Unit/MetadataResolver/FC2ContentsResolverTest.php
 create mode 100644 tests/fixture/FC2Contents/adult.html
 create mode 100644 tests/fixture/FC2Contents/general.html

diff --git a/tests/Unit/MetadataResolver/FC2ContentsResolverTest.php b/tests/Unit/MetadataResolver/FC2ContentsResolverTest.php
new file mode 100644
index 0000000..2cce224
--- /dev/null
+++ b/tests/Unit/MetadataResolver/FC2ContentsResolverTest.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Tests\Unit\MetadataResolver;
+
+use App\MetadataResolver\FC2ContentsResolver;
+use Tests\TestCase;
+
+class FC2ContentsResolverTest extends TestCase
+{
+    use CreateMockedResolver;
+
+    public function setUp()
+    {
+        parent::setUp();
+
+        if (!$this->shouldUseMock()) {
+            sleep(1);
+        }
+    }
+
+    public function testAdult()
+    {
+        $responseText = file_get_contents(__DIR__.'/../../fixture/FC2Contents/adult.html');
+
+        $this->createResolver(FC2ContentsResolver::class, $responseText);
+
+        $metadata = $this->resolver->resolve('https://adult.contents.fc2.com/article_search.php?id=401545');
+        $this->assertEquals('個人撮影@「ぱいずりオアトリート♡」Jカップ魔女っ子の3連挟射しても続けちゃうパイズリ!', $metadata->title);
+        $this->assertEquals('個人撮影@「ぱいずりオアトリート♡」Jカップ魔女っ子の3連挟射しても続けちゃうパイズリ! -         イベントコスチュームということもあり、大ボリュームだった前回、前々回の パイズリ役Jcupメイド と ナースパイズリを超え 今回さらに超ボリューム&超密度の内容になってます!   --------             …', $metadata->description);
+        $this->assertEquals('https://storage2000.contents.fc2.com/file/104/10362633/1477676255.72.png', $metadata->image);
+        if ($this->shouldUseMock()) {
+            $this->assertSame('https://adult.contents.fc2.com/article_search.php?id=401545', (string) $this->handler->getLastRequest()->getUri());
+        }
+    }
+
+    public function testGeneral()
+    {
+        $responseText = file_get_contents(__DIR__.'/../../fixture/FC2Contents/general.html');
+
+        $this->createResolver(FC2ContentsResolver::class, $responseText);
+
+        $metadata = $this->resolver->resolve('https://contents.fc2.com/article_search.php?id=336610');
+        $this->assertEquals('ゆかいなどうぶつたち ~オオカミ・キツネ・タヌキ~', $metadata->title);
+        $this->assertEquals('ゆかいなどうぶつたち ~オオカミ・キツネ・タヌキ~ - 今回のおともだちは、オオカミ・キツネ・タヌキだよ。地球上に住んでいるたくさんのおともだち、みんなにどんどん紹介するからたのしみにしてね!', $metadata->description);
+        $this->assertEquals('https://storage6000.contents.fc2.com/file/300/29917555/1519118184.65.jpg', $metadata->image);
+        if ($this->shouldUseMock()) {
+            $this->assertSame('https://contents.fc2.com/article_search.php?id=336610', (string) $this->handler->getLastRequest()->getUri());
+        }
+    }
+}
diff --git a/tests/fixture/FC2Contents/adult.html b/tests/fixture/FC2Contents/adult.html
new file mode 100644
index 0000000..781163f
--- /dev/null
+++ b/tests/fixture/FC2Contents/adult.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="ja">
+    <head>
+        <title>個人撮影@「ぱいずりオアトリート♡」Jカップ魔女っ子の3連挟射しても続けちゃうパイズリ!</title>
+        <meta charset="UTF-8">
+        <meta name="description" content="個人撮影@「ぱいずりオアトリート♡」Jカップ魔女っ子の3連挟射しても続けちゃうパイズリ! -         イベントコスチュームということもあり、大ボリュームだった前回、前々回の パイズリ役Jcupメイド と ナースパイズリを超え 今回さらに超ボリューム&超密度の内容になってます!   --------             …">
+    </head>
+    <body>
+        <div class="main_thum_img">
+            <a class="analyticsLinkClick_mainThum" href="http://storage2000.contents.fc2.com/file/104/10362633/1477676255.72.png">
+                <img src="//contents-thumbnail2.fc2.com/w276/storage2000.contents.fc2.com/file/104/10362633/1477676255.72.png">
+            </a>
+        </div>
+    </body>
+</html>
\ No newline at end of file
diff --git a/tests/fixture/FC2Contents/general.html b/tests/fixture/FC2Contents/general.html
new file mode 100644
index 0000000..8510488
--- /dev/null
+++ b/tests/fixture/FC2Contents/general.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="ja">
+    <head>
+        <title>ゆかいなどうぶつたち ~オオカミ・キツネ・タヌキ~</title>
+        <meta charset="UTF-8" />
+        <meta name="description" content="ゆかいなどうぶつたち ~オオカミ・キツネ・タヌキ~ - 今回のおともだちは、オオカミ・キツネ・タヌキだよ。地球上に住んでいるたくさんのおともだち、みんなにどんどん紹介するからたのしみにしてね!"/>
+    </head>
+    <body>
+        <div class="main_thum_img">
+            <a class="analyticsLinkClick_mainThum" href="http://storage6000.contents.fc2.com/file/300/29917555/1519118184.65.jpg">
+                <img src="//contents-thumbnail2.fc2.com/w276/storage6000.contents.fc2.com/file/300/29917555/1519118184.65.jpg"/>
+            </a>
+        </div>
+    </body>
+</html>

From 3fa2d8050715285f4c65bdcb3153f99df057a585 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Tue, 12 Mar 2019 03:38:05 +0900
Subject: [PATCH 38/61] Fix style

---
 app/MetadataResolver/FC2ContentsResolver.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/MetadataResolver/FC2ContentsResolver.php b/app/MetadataResolver/FC2ContentsResolver.php
index 76497ee..36a3b8b 100644
--- a/app/MetadataResolver/FC2ContentsResolver.php
+++ b/app/MetadataResolver/FC2ContentsResolver.php
@@ -33,7 +33,7 @@ class FC2ContentsResolver implements Resolver
 
             $thumbnailNode = $xpath->query('//*[@class="main_thum_img"]/a')->item(0);
             if ($thumbnailNode) {
-                $metadata->image = preg_replace('~^http:~', "https:", $thumbnailNode->getAttribute('href'));
+                $metadata->image = preg_replace('~^http:~', 'https:', $thumbnailNode->getAttribute('href'));
             }
 
             return $metadata;

From bd1976c4cf6960e207354204a4ef37b5baff4d9c Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Tue, 12 Mar 2019 03:44:35 +0900
Subject: [PATCH 39/61] =?UTF-8?q?=E3=82=A2=E3=83=A9=E3=83=BC=E3=83=88?=
 =?UTF-8?q?=E3=81=AE=E8=87=AA=E5=8B=95=E5=89=8A=E9=99=A4=E3=82=92=E5=89=8A?=
 =?UTF-8?q?=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

close #146
---
 resources/assets/js/app.js | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js
index 0af3853..7ab0903 100644
--- a/resources/assets/js/app.js
+++ b/resources/assets/js/app.js
@@ -21,12 +21,6 @@ $(() => {
     $('.alert').alert();
     $('.tis-page-selector').pageSelector();
 
-    if (document.getElementById('status')) {
-        setTimeout(function () {
-            $('#status').alert('close');
-        }, 5000);
-    }
-
     $('.link-card').linkCard();
     $('#deleteCheckinModal').deleteCheckinModal();
 });
\ No newline at end of file

From 8a39feff297c9262df8fa6b33e5627a79cf1cb0a Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Tue, 12 Mar 2019 20:32:37 +0900
Subject: [PATCH 40/61] =?UTF-8?q?=E3=82=BF=E3=82=B0=E6=A4=9C=E7=B4=A2?=
 =?UTF-8?q?=E7=B5=90=E6=9E=9C=E3=81=8B=E3=82=89=E7=B7=A8=E9=9B=86=E3=83=BB?=
 =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E6=B6=88?=
 =?UTF-8?q?=E3=81=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

fix #151
---
 resources/views/search/index.blade.php | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/resources/views/search/index.blade.php b/resources/views/search/index.blade.php
index f88cfce..5395334 100644
--- a/resources/views/search/index.blade.php
+++ b/resources/views/search/index.blade.php
@@ -15,10 +15,6 @@
                     </h5>
                     <div>
                         <a class="text-secondary timeline-action-item" href="{{ route('checkin', ['link' => $ejaculation->link, 'tags' => $ejaculation->textTags()]) }}"><span class="oi oi-reload" data-toggle="tooltip" data-placement="bottom" title="同じオカズでチェックイン"></span></a>
-                        @if ($ejaculation->user->isMe())
-                            <a class="text-secondary timeline-action-item" href="{{ route('checkin.edit', ['id' => $ejaculation->id]) }}"><span class="oi oi-pencil" data-toggle="tooltip" data-placement="bottom" title="修正"></span></a>
-                            <a class="text-secondary timeline-action-item" href="#" data-toggle="modal" data-target="#deleteCheckinModal" data-id="{{ $ejaculation->id }}" data-date="{{ $ejaculation->ejaculated_date }}"><span class="oi oi-trash" data-toggle="tooltip" data-placement="bottom" title="削除"></span></a>
-                        @endif
                     </div>
                 </div>
                 <!-- tags -->

From 8e366870b1c3ac32965891cf384c4f25f8d5e8db Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Tue, 12 Mar 2019 20:43:34 +0900
Subject: [PATCH 41/61] =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E7=94=BB?=
 =?UTF-8?q?=E5=83=8F=E3=81=AE=E8=A7=92=E4=B8=B8=E3=81=AE=E4=BD=8D=E7=BD=AE?=
 =?UTF-8?q?=E3=82=92=E3=83=A1=E3=83=87=E3=82=A3=E3=82=A2=E3=82=AF=E3=82=A8?=
 =?UTF-8?q?=E3=83=AA=E3=81=A7=E5=8F=AF=E5=A4=89=E3=81=AB=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/assets/sass/_bootstrap-custom.scss   | 10 ++++++++++
 resources/views/components/link-card.blade.php |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/resources/assets/sass/_bootstrap-custom.scss b/resources/assets/sass/_bootstrap-custom.scss
index a56818a..bafdd03 100644
--- a/resources/assets/sass/_bootstrap-custom.scss
+++ b/resources/assets/sass/_bootstrap-custom.scss
@@ -6,4 +6,14 @@
 .card-img-right {
     width: 100%;
     @include border-right-radius($card-inner-border-radius);
+}
+
+.card-img-top-to-left {
+    width: 100%;
+    @include media-breakpoint-down(md) {
+        @include border-top-radius($card-inner-border-radius);
+    }
+    @include media-breakpoint-up(lg) {
+        @include border-left-radius($card-inner-border-radius);
+    }
 }
\ No newline at end of file
diff --git a/resources/views/components/link-card.blade.php b/resources/views/components/link-card.blade.php
index 5b99fd4..94c17f9 100644
--- a/resources/views/components/link-card.blade.php
+++ b/resources/views/components/link-card.blade.php
@@ -2,7 +2,7 @@
     <a class="text-dark card-link" href="{{ $link }}" target="_blank" rel="noopener">
         <div class="row no-gutters">
             <div class="col-12 col-md-6">
-                <img src="" alt="Thumbnail" class="card-img-left bg-secondary">
+                <img src="" alt="Thumbnail" class="card-img-top-to-left bg-secondary">
             </div>
             <div class="col-12 col-md-6">
                 <div class="card-body">

From e98ed0c3ca8ac5cfd63fd6ee6b6d8d24cd5d2c39 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Feb 2019 14:11:34 +0900
Subject: [PATCH 42/61] =?UTF-8?q?users.is=5Fadmin=20=E5=88=97=E3=81=AE?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ...019_02_11_140657_add_is_admin_to_users.php | 32 +++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 database/migrations/2019_02_11_140657_add_is_admin_to_users.php

diff --git a/database/migrations/2019_02_11_140657_add_is_admin_to_users.php b/database/migrations/2019_02_11_140657_add_is_admin_to_users.php
new file mode 100644
index 0000000..b45ea47
--- /dev/null
+++ b/database/migrations/2019_02_11_140657_add_is_admin_to_users.php
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddIsAdminToUsers extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->boolean('is_admin')->default(false);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('is_admin');
+        });
+    }
+}

From 82ccd623a62259ec2409549048f7cf31d3a247df Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Feb 2019 14:46:43 +0900
Subject: [PATCH 43/61] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E6=98=87?=
 =?UTF-8?q?=E6=A0=BC/=E9=99=8D=E6=A0=BC=20CLI=E3=82=B3=E3=83=9E=E3=83=B3?=
 =?UTF-8?q?=E3=83=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Console/Commands/DemoteUser.php  | 59 ++++++++++++++++++++++++++++
 app/Console/Commands/PromoteUser.php | 59 ++++++++++++++++++++++++++++
 app/Console/Kernel.php               |  4 ++
 3 files changed, 122 insertions(+)
 create mode 100644 app/Console/Commands/DemoteUser.php
 create mode 100644 app/Console/Commands/PromoteUser.php

diff --git a/app/Console/Commands/DemoteUser.php b/app/Console/Commands/DemoteUser.php
new file mode 100644
index 0000000..2d2081e
--- /dev/null
+++ b/app/Console/Commands/DemoteUser.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\User;
+use Illuminate\Console\Command;
+
+class DemoteUser extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'tissue:user:demote {username}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Demote admin to user';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $user = User::where('name', $this->argument('username'))->first();
+        if ($user === null) {
+            $this->error('No user with such username');
+            return 1;
+        }
+
+        if (!$user->is_admin) {
+            $this->info('@' . $user->name . ' is already an user.');
+            return 0;
+        }
+
+        $user->is_admin = false;
+        if ($user->save()) {
+            $this->info('@' . $user->name . ' is an user now.');
+        } else {
+            $this->error('Something happened.');
+        }
+    }
+}
diff --git a/app/Console/Commands/PromoteUser.php b/app/Console/Commands/PromoteUser.php
new file mode 100644
index 0000000..8cfa452
--- /dev/null
+++ b/app/Console/Commands/PromoteUser.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\User;
+use Illuminate\Console\Command;
+
+class PromoteUser extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'tissue:user:promote {username}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Promote user to admin';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $user = User::where('name', $this->argument('username'))->first();
+        if ($user === null) {
+            $this->error('No user with such username');
+            return 1;
+        }
+
+        if ($user->is_admin) {
+            $this->info('@' . $user->name . ' is already an administrator.');
+            return 0;
+        }
+
+        $user->is_admin = true;
+        if ($user->save()) {
+            $this->info('@' . $user->name . ' is an administrator now.');
+        } else {
+            $this->error('Something happened.');
+        }
+    }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 622e774..da3f264 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -2,6 +2,8 @@
 
 namespace App\Console;
 
+use App\Console\Commands\DemoteUser;
+use App\Console\Commands\PromoteUser;
 use Illuminate\Console\Scheduling\Schedule;
 use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
 
@@ -35,6 +37,8 @@ class Kernel extends ConsoleKernel
      */
     protected function commands()
     {
+        $this->load(__DIR__.'/Commands');
+
         require base_path('routes/console.php');
     }
 }

From f5fab4b3c15f69a485f0f848b037b05a37fdc21c Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Feb 2019 14:50:55 +0900
Subject: [PATCH 44/61] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E6=A8=A9?=
 =?UTF-8?q?=E9=99=90=E3=82=B2=E3=83=BC=E3=83=88=E3=81=AE=E5=AE=9A=E7=BE=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Providers/AuthServiceProvider.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index e12ff88..600ff72 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -25,6 +25,8 @@ class AuthServiceProvider extends ServiceProvider
     {
         $this->registerPolicies();
 
-        //
+        Gate::define('admin', function ($user) {
+            return $user->is_admin;
+        });
     }
 }

From e69adbfbc3ebb657f451c8d97ca75a71797d9a31 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Feb 2019 15:35:31 +0900
Subject: [PATCH 45/61] =?UTF-8?q?=E3=83=80=E3=83=83=E3=82=B7=E3=83=A5?=
 =?UTF-8?q?=E3=83=9C=E3=83=BC=E3=83=89=E7=94=BB=E9=9D=A2=E3=81=AE=E8=BF=BD?=
 =?UTF-8?q?=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Controllers/Admin/DashboardController.php |  14 ++++++++++++
 public/dashboard.png                          | Bin 0 -> 51400 bytes
 resources/views/admin/dashboard.blade.php     |  10 +++++++++
 resources/views/layouts/admin.blade.php       |  20 ++++++++++++++++++
 resources/views/layouts/base.blade.php        |   3 +++
 routes/web.php                                |   8 +++++++
 6 files changed, 55 insertions(+)
 create mode 100644 app/Http/Controllers/Admin/DashboardController.php
 create mode 100644 public/dashboard.png
 create mode 100644 resources/views/admin/dashboard.blade.php
 create mode 100644 resources/views/layouts/admin.blade.php

diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php
new file mode 100644
index 0000000..2cda6de
--- /dev/null
+++ b/app/Http/Controllers/Admin/DashboardController.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+
+class DashboardController extends Controller
+{
+    public function index()
+    {
+        return view('admin.dashboard');
+    }
+}
diff --git a/public/dashboard.png b/public/dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..c85ca1c9c962fb27d7a14ab694f14dc808242594
GIT binary patch
literal 51400
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

literal 0
HcmV?d00001

diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php
new file mode 100644
index 0000000..beb9602
--- /dev/null
+++ b/resources/views/admin/dashboard.blade.php
@@ -0,0 +1,10 @@
+@extends('layouts.admin')
+
+@section('title', 'ダッシュボード')
+
+@section('tab-content')
+    <div class="container d-flex flex-column align-items-center">
+        <img src="{{ asset('dashboard.png') }}" class="w-50"/>
+        <p class="text-muted">TODO: 役に立つ情報を表示する</p>
+    </div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php
new file mode 100644
index 0000000..d81794c
--- /dev/null
+++ b/resources/views/layouts/admin.blade.php
@@ -0,0 +1,20 @@
+@extends('layouts.base')
+
+@section('content')
+    <div class="container">
+        <div class="row">
+            <div class="col-lg-3">
+                <div class="list-group">
+                    <div class="list-group-item disabled font-weight-bold">管理</div>
+                    <a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'admin.dashboard' ? 'active' : '' }}"
+                       href="{{ route('admin.dashboard') }}"><span class="oi oi-dashboard mr-1"></span> ダッシュボード</a>
+                    <a class="list-group-item list-group-item-action"
+                       href=""><span class="oi oi-bullhorn mr-1"></span> お知らせ</a>
+                </div>
+            </div>
+            <div class="tab-content col-lg-9">
+                @yield('tab-content')
+            </div>
+        </div>
+    </div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php
index 3aabcb2..1c524af 100644
--- a/resources/views/layouts/base.blade.php
+++ b/resources/views/layouts/base.blade.php
@@ -105,6 +105,9 @@
                                 </a>
                                 <div class="dropdown-divider"></div>
                                 <a href="{{ route('setting') }}" class="dropdown-item">設定</a>
+                                @can ('admin')
+                                    <a href="{{ route('admin.dashboard') }}" class="dropdown-item">管理</a>
+                                @endcan
                                 <a href="{{ route('logout') }}" class="dropdown-item" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">ログアウト</a>
                             </div>
                         </li>
diff --git a/routes/web.php b/routes/web.php
index a772f46..121eba5 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -44,3 +44,11 @@ Route::get('/info/{id}', 'InfoController@show')->where('id', '[0-9]+')->name('in
 Route::redirect('/search', '/search/checkin', 301);
 Route::get('/search/checkin', 'SearchController@index')->name('search');
 Route::get('/search/related-tag', 'SearchController@relatedTag')->name('search.related-tag');
+
+Route::middleware('can:admin')
+    ->namespace('Admin')
+    ->prefix('admin')
+    ->name('admin.')
+    ->group(function () {
+        Route::get('/', 'DashboardController@index')->name('dashboard');
+    });

From 53ac4c9b8f951009957a991efd3270a885931ca8 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 11 Feb 2019 23:25:46 +0900
Subject: [PATCH 46/61] =?UTF-8?q?=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B?=
 =?UTF-8?q?=E7=B7=A8=E9=9B=86=E7=94=BB=E9=9D=A2=E3=81=AE=E8=A1=A8=E7=A4=BA?=
 =?UTF-8?q?=E3=81=AE=E3=81=BF=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/Admin/InfoController.php | 44 ++++++++++++++
 resources/views/admin/info/edit.blade.php     | 48 ++++++++++++++++
 resources/views/admin/info/index.blade.php    | 57 +++++++++++++++++++
 resources/views/layouts/admin.blade.php       |  8 +--
 routes/web.php                                |  4 ++
 5 files changed, 157 insertions(+), 4 deletions(-)
 create mode 100644 app/Http/Controllers/Admin/InfoController.php
 create mode 100644 resources/views/admin/info/edit.blade.php
 create mode 100644 resources/views/admin/info/index.blade.php

diff --git a/app/Http/Controllers/Admin/InfoController.php b/app/Http/Controllers/Admin/InfoController.php
new file mode 100644
index 0000000..6a1c7c7
--- /dev/null
+++ b/app/Http/Controllers/Admin/InfoController.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Information;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+
+class InfoController extends Controller
+{
+    public function index()
+    {
+        $informations = Information::query()
+            ->select('id', 'category', 'pinned', 'title', 'created_at')
+            ->orderByDesc('pinned')
+            ->orderByDesc('created_at')
+            ->paginate(20);
+
+        return view('admin.info.index')->with([
+            'informations' => $informations,
+            'categories' => Information::CATEGORIES
+        ]);
+    }
+
+    public function create()
+    {
+        // TODO
+    }
+
+    public function edit($id)
+    {
+        $information = Information::findOrFail($id);
+
+        return view('admin.info.edit')->with([
+            'info' => $information,
+            'categories' => Information::CATEGORIES
+        ]);
+    }
+
+    public function update(Request $request)
+    {
+        // TODO
+    }
+}
diff --git a/resources/views/admin/info/edit.blade.php b/resources/views/admin/info/edit.blade.php
new file mode 100644
index 0000000..ff3e588
--- /dev/null
+++ b/resources/views/admin/info/edit.blade.php
@@ -0,0 +1,48 @@
+@extends('layouts.admin')
+
+@section('title', 'お知らせ')
+
+@section('tab-content')
+    <div class="container">
+        <h2>お知らせの編集</h2>
+        <hr>
+        <form action="{{ route('admin.info.update', ['id' => $info->id]) }}" method="post">
+            {{ method_field('PUT') }}
+            {{ csrf_field() }}
+
+            <div class="row">
+                <div class="form-group col-12 col-lg-6">
+                    <label for="category">カテゴリ</label>
+                    <select id="category" name="category" class="form-control">
+                        @foreach($categories as $id => $category)
+                            <option value="{{ $id }}" {{ (old('category') ?? $info->category) == $id ? 'checked' : '' }}>{{ $category['label'] }}</option>
+                        @endforeach
+                    </select>
+                </div>
+                <div class="form-group col-12 col-lg-6 d-flex flex-column justify-content-center">
+                    <div class="custom-control custom-checkbox">
+                        <input id="pinned" type="checkbox" class="custom-control-input"
+                                {{ (is_bool(old('pinned')) ? old('pinned') : $info->pinned) ? 'checked' : ''}}>
+                        <label for="pinned" class="custom-control-label">ピン留め (常に優先表示) する</label>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="title">タイトル</label>
+                <input id="title" name="title" type="text" class="form-control" value="{{ old('title') ?? $info->title }}">
+            </div>
+            <div class="form-group mt-3">
+                <label for="content">本文</label>
+                <textarea id="content" name="content" rows="15" class="form-control" maxlength="10000">{{ old('content') ?? $info->content }}</textarea>
+                <small class="form-text text-muted">
+                    最大 10000 文字、Markdown 形式
+                </small>
+            </div>
+
+            <div class="d-flex justify-content-between">
+                <button type="submit" class="btn btn-primary">更新</button>
+                <button type="button" class="btn btn-danger">削除</button>
+            </div>
+        </form>
+    </div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/info/index.blade.php b/resources/views/admin/info/index.blade.php
new file mode 100644
index 0000000..8d5ae40
--- /dev/null
+++ b/resources/views/admin/info/index.blade.php
@@ -0,0 +1,57 @@
+@extends('layouts.admin')
+
+@section('title', 'お知らせ')
+
+@section('tab-content')
+    <div class="container">
+        <h2>お知らせ</h2>
+        <hr>
+        <div class="d-flex mb-3">
+            <a href="{{ route('admin.info.create') }}" class="btn btn-primary">新規作成</a>
+        </div>
+        <table class="table table-sm">
+            <thead>
+            <tr>
+                <th>カテゴリ</th>
+                <th>タイトル</th>
+                <th>作成日</th>
+            </tr>
+            </thead>
+            <tbody>
+            @foreach($informations as $info)
+                <tr>
+                    <td>
+                        @if ($info->pinned)
+                            <span class="badge badge-secondary"><span class="oi oi-pin"></span>ピン留め</span>
+                        @endif
+                        <span class="badge {{ $categories[$info->category]['class'] }}">{{ $categories[$info->category]['label'] }}</span>
+                    </td>
+                    <td>
+                        <a href="{{ route('admin.info.edit', ['id' => $info->id]) }}">{{ $info->title }}</a>
+                    </td>
+                    <td>
+                        {{ $info->created_at->format('Y年n月j日') }}
+                    </td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+        <ul class="pagination mt-4 justify-content-center">
+            <li class="page-item {{ $informations->currentPage() === 1 ? 'disabled' : '' }}">
+                <a class="page-link" href="{{ $informations->previousPageUrl() }}" aria-label="Previous">
+                    <span aria-hidden="true">&laquo;</span>
+                    <span class="sr-only">Previous</span>
+                </a>
+            </li>
+            @for ($i = 1; $i <= $informations->lastPage(); $i++)
+                <li class="page-item {{ $i === $informations->currentPage() ? 'active' : '' }}"><a href="{{ $informations->url($i) }}" class="page-link">{{ $i }}</a></li>
+            @endfor
+            <li class="page-item {{ $informations->currentPage() === $informations->lastPage() ? 'disabled' : '' }}">
+                <a class="page-link" href="{{ $informations->nextPageUrl() }}" aria-label="Next">
+                    <span aria-hidden="true">&raquo;</span>
+                    <span class="sr-only">Next</span>
+                </a>
+            </li>
+        </ul>
+    </div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php
index d81794c..45fa2b5 100644
--- a/resources/views/layouts/admin.blade.php
+++ b/resources/views/layouts/admin.blade.php
@@ -4,12 +4,12 @@
     <div class="container">
         <div class="row">
             <div class="col-lg-3">
-                <div class="list-group">
+                <div class="list-group mb-4">
                     <div class="list-group-item disabled font-weight-bold">管理</div>
-                    <a class="list-group-item list-group-item-action {{ Route::currentRouteName() === 'admin.dashboard' ? 'active' : '' }}"
+                    <a class="list-group-item list-group-item-action {{ Route::is('admin.dashboard') ? 'active' : '' }}"
                        href="{{ route('admin.dashboard') }}"><span class="oi oi-dashboard mr-1"></span> ダッシュボード</a>
-                    <a class="list-group-item list-group-item-action"
-                       href=""><span class="oi oi-bullhorn mr-1"></span> お知らせ</a>
+                    <a class="list-group-item list-group-item-action {{ Route::is('admin.info*') ? 'active' : '' }}"
+                       href="{{ route('admin.info') }}"><span class="oi oi-bullhorn mr-1"></span> お知らせ</a>
                 </div>
             </div>
             <div class="tab-content col-lg-9">
diff --git a/routes/web.php b/routes/web.php
index 121eba5..6f9bfb4 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -51,4 +51,8 @@ Route::middleware('can:admin')
     ->name('admin.')
     ->group(function () {
         Route::get('/', 'DashboardController@index')->name('dashboard');
+        Route::get('/info', 'InfoController@index')->name('info');
+        Route::get('/info/create', 'InfoController@create')->name('info.create');
+        Route::get('/info/{id}', 'InfoController@edit')->name('info.edit');
+        Route::put('/info/{id}', 'InfoController@update')->name('info.update');
     });

From be700ab81b662a8459237f1bf9572a235b69a531 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Thu, 14 Mar 2019 00:04:53 +0900
Subject: [PATCH 47/61] =?UTF-8?q?=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B?=
 =?UTF-8?q?=E7=99=BB=E9=8C=B2=E3=83=BB=E7=B7=A8=E9=9B=86=E3=83=BB=E5=89=8A?=
 =?UTF-8?q?=E9=99=A4=E3=82=92=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/Admin/InfoController.php | 57 ++++++++++++++++++-
 app/Information.php                           |  4 ++
 resources/views/admin/info/create.blade.php   | 46 +++++++++++++++
 resources/views/admin/info/edit.blade.php     | 12 ++--
 routes/web.php                                |  6 +-
 5 files changed, 116 insertions(+), 9 deletions(-)
 create mode 100644 resources/views/admin/info/create.blade.php

diff --git a/app/Http/Controllers/Admin/InfoController.php b/app/Http/Controllers/Admin/InfoController.php
index 6a1c7c7..744da19 100644
--- a/app/Http/Controllers/Admin/InfoController.php
+++ b/app/Http/Controllers/Admin/InfoController.php
@@ -5,6 +5,8 @@ namespace App\Http\Controllers\Admin;
 use App\Information;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\Rule;
 
 class InfoController extends Controller
 {
@@ -24,7 +26,32 @@ class InfoController extends Controller
 
     public function create()
     {
-        // TODO
+        return view('admin.info.create')->with([
+            'categories' => Information::CATEGORIES
+        ]);
+    }
+
+    public function store(Request $request)
+    {
+        $inputs = $request->all();
+        if ($request->has('content')) {
+            $inputs['content'] = str_replace(["\r\n", "\r"], "\n", $inputs['content']);
+        }
+        if (!$request->has('pinned')) {
+            $inputs['pinned'] = false;
+        }
+
+        // TODO: #updateと全く同じだし、フォームリクエストにしたほうがよいのでは?
+        Validator::make($inputs, [
+            'category' => ['required', Rule::in(array_keys(Information::CATEGORIES))],
+            'pinned' => 'nullable|boolean',
+            'title' => 'required|string|max:255',
+            'content' => 'required|string|max:10000'
+        ])->validate();
+
+        $info = Information::create($inputs);
+
+        return redirect()->route('admin.info.edit', ['info' => $info])->with('status', 'お知らせを更新しました。');
     }
 
     public function edit($id)
@@ -37,8 +64,32 @@ class InfoController extends Controller
         ]);
     }
 
-    public function update(Request $request)
+    public function update(Request $request, Information $info)
     {
-        // TODO
+        $inputs = $request->all();
+        if ($request->has('content')) {
+            $inputs['content'] = str_replace(["\r\n", "\r"], "\n", $inputs['content']);
+        }
+        if (!$request->has('pinned')) {
+            $inputs['pinned'] = false;
+        }
+
+        Validator::make($inputs, [
+            'category' => ['required', Rule::in(array_keys(Information::CATEGORIES))],
+            'pinned' => 'nullable|boolean',
+            'title' => 'required|string|max:255',
+            'content' => 'required|string|max:10000'
+        ])->validate();
+
+        $info->fill($inputs)->save();
+
+        return redirect()->route('admin.info.edit', ['info' => $info])->with('status', 'お知らせを更新しました。');
+    }
+
+    public function destroy(Information $info)
+    {
+        $info->delete();
+
+        return redirect()->route('admin.info')->with('status', 'お知らせを削除しました。');
     }
 }
diff --git a/app/Information.php b/app/Information.php
index e0ae6ed..2b237fb 100644
--- a/app/Information.php
+++ b/app/Information.php
@@ -16,5 +16,9 @@ class Information extends Model
         3 => ['label' => 'メンテナンス', 'class' => 'badge-warning']
     ];
 
+    protected $fillable = [
+        'category', 'pinned', 'title', 'content'
+    ];
+
     protected $dates = ['deleted_at'];
 }
diff --git a/resources/views/admin/info/create.blade.php b/resources/views/admin/info/create.blade.php
new file mode 100644
index 0000000..4bdb53e
--- /dev/null
+++ b/resources/views/admin/info/create.blade.php
@@ -0,0 +1,46 @@
+@extends('layouts.admin')
+
+@section('title', 'お知らせ')
+
+@section('tab-content')
+    <div class="container">
+        <h2>お知らせの作成</h2>
+        <hr>
+        <form action="{{ route('admin.info.store') }}" method="post">
+            {{ csrf_field() }}
+
+            <div class="row">
+                <div class="form-group col-12 col-lg-6">
+                    <label for="category">カテゴリ</label>
+                    <select id="category" name="category" class="form-control">
+                        @foreach($categories as $id => $category)
+                            <option value="{{ $id }}" {{ old('category') == $id ? 'selected' : '' }}>{{ $category['label'] }}</option>
+                        @endforeach
+                    </select>
+                </div>
+                <div class="form-group col-12 col-lg-6 d-flex flex-column justify-content-center">
+                    <div class="custom-control custom-checkbox">
+                        <input id="pinned" name="pinned" type="checkbox" class="custom-control-input" value="1"
+                                {{ old('pinned') ? 'checked' : ''}}>
+                        <label for="pinned" class="custom-control-label">ピン留め (常に優先表示) する</label>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <label for="title">タイトル</label>
+                <input id="title" name="title" type="text" class="form-control" value="{{ old('title') }}">
+            </div>
+            <div class="form-group mt-3">
+                <label for="content">本文</label>
+                <textarea id="content" name="content" rows="15" class="form-control" maxlength="10000">{{ old('content') }}</textarea>
+                <small class="form-text text-muted">
+                    最大 10000 文字、Markdown 形式
+                </small>
+            </div>
+
+            <div class="d-flex justify-content-between">
+                <button type="submit" class="btn btn-primary">登録</button>
+            </div>
+        </form>
+    </div>
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/info/edit.blade.php b/resources/views/admin/info/edit.blade.php
index ff3e588..dc56cea 100644
--- a/resources/views/admin/info/edit.blade.php
+++ b/resources/views/admin/info/edit.blade.php
@@ -6,7 +6,7 @@
     <div class="container">
         <h2>お知らせの編集</h2>
         <hr>
-        <form action="{{ route('admin.info.update', ['id' => $info->id]) }}" method="post">
+        <form action="{{ route('admin.info.update', ['info' => $info]) }}" method="post">
             {{ method_field('PUT') }}
             {{ csrf_field() }}
 
@@ -15,13 +15,13 @@
                     <label for="category">カテゴリ</label>
                     <select id="category" name="category" class="form-control">
                         @foreach($categories as $id => $category)
-                            <option value="{{ $id }}" {{ (old('category') ?? $info->category) == $id ? 'checked' : '' }}>{{ $category['label'] }}</option>
+                            <option value="{{ $id }}" {{ (old('category') ?? $info->category) == $id ? 'selected' : '' }}>{{ $category['label'] }}</option>
                         @endforeach
                     </select>
                 </div>
                 <div class="form-group col-12 col-lg-6 d-flex flex-column justify-content-center">
                     <div class="custom-control custom-checkbox">
-                        <input id="pinned" type="checkbox" class="custom-control-input"
+                        <input id="pinned" name="pinned" type="checkbox" class="custom-control-input" value="1"
                                 {{ (is_bool(old('pinned')) ? old('pinned') : $info->pinned) ? 'checked' : ''}}>
                         <label for="pinned" class="custom-control-label">ピン留め (常に優先表示) する</label>
                     </div>
@@ -41,8 +41,12 @@
 
             <div class="d-flex justify-content-between">
                 <button type="submit" class="btn btn-primary">更新</button>
-                <button type="button" class="btn btn-danger">削除</button>
+                <button type="submit" class="btn btn-danger" form="delete-form">削除</button>
             </div>
         </form>
+        <form id="delete-form" action="{{ route('admin.info.destroy', ['info' => $info]) }}" method="post">
+            {{ method_field('DELETE') }}
+            {{ csrf_field() }}
+        </form>
     </div>
 @endsection
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index 6f9bfb4..23eca8e 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -53,6 +53,8 @@ Route::middleware('can:admin')
         Route::get('/', 'DashboardController@index')->name('dashboard');
         Route::get('/info', 'InfoController@index')->name('info');
         Route::get('/info/create', 'InfoController@create')->name('info.create');
-        Route::get('/info/{id}', 'InfoController@edit')->name('info.edit');
-        Route::put('/info/{id}', 'InfoController@update')->name('info.update');
+        Route::post('/info', 'InfoController@store')->name('info.store');
+        Route::get('/info/{info}', 'InfoController@edit')->name('info.edit');
+        Route::put('/info/{info}', 'InfoController@update')->name('info.update');
+        Route::delete('/info/{info}', 'InfoController@destroy')->name('info.destroy');
     });

From 27fc5ee6e8263b6b32b2ebbe747e819c81d1cc3a Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Thu, 14 Mar 2019 00:05:11 +0900
Subject: [PATCH 48/61] fix style

---
 app/Console/Commands/DemoteUser.php                           | 2 ++
 app/Console/Commands/PromoteUser.php                          | 2 ++
 app/Http/Controllers/Admin/DashboardController.php            | 2 +-
 app/Http/Controllers/Admin/InfoController.php                 | 2 +-
 .../migrations/2019_02_11_140657_add_is_admin_to_users.php    | 4 ++--
 5 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/app/Console/Commands/DemoteUser.php b/app/Console/Commands/DemoteUser.php
index 2d2081e..94dfe58 100644
--- a/app/Console/Commands/DemoteUser.php
+++ b/app/Console/Commands/DemoteUser.php
@@ -41,11 +41,13 @@ class DemoteUser extends Command
         $user = User::where('name', $this->argument('username'))->first();
         if ($user === null) {
             $this->error('No user with such username');
+
             return 1;
         }
 
         if (!$user->is_admin) {
             $this->info('@' . $user->name . ' is already an user.');
+
             return 0;
         }
 
diff --git a/app/Console/Commands/PromoteUser.php b/app/Console/Commands/PromoteUser.php
index 8cfa452..b737ca5 100644
--- a/app/Console/Commands/PromoteUser.php
+++ b/app/Console/Commands/PromoteUser.php
@@ -41,11 +41,13 @@ class PromoteUser extends Command
         $user = User::where('name', $this->argument('username'))->first();
         if ($user === null) {
             $this->error('No user with such username');
+
             return 1;
         }
 
         if ($user->is_admin) {
             $this->info('@' . $user->name . ' is already an administrator.');
+
             return 0;
         }
 
diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php
index 2cda6de..b09d0c8 100644
--- a/app/Http/Controllers/Admin/DashboardController.php
+++ b/app/Http/Controllers/Admin/DashboardController.php
@@ -2,8 +2,8 @@
 
 namespace App\Http\Controllers\Admin;
 
-use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
+use Illuminate\Http\Request;
 
 class DashboardController extends Controller
 {
diff --git a/app/Http/Controllers/Admin/InfoController.php b/app/Http/Controllers/Admin/InfoController.php
index 744da19..37fde5b 100644
--- a/app/Http/Controllers/Admin/InfoController.php
+++ b/app/Http/Controllers/Admin/InfoController.php
@@ -2,9 +2,9 @@
 
 namespace App\Http\Controllers\Admin;
 
+use App\Http\Controllers\Controller;
 use App\Information;
 use Illuminate\Http\Request;
-use App\Http\Controllers\Controller;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Validation\Rule;
 
diff --git a/database/migrations/2019_02_11_140657_add_is_admin_to_users.php b/database/migrations/2019_02_11_140657_add_is_admin_to_users.php
index b45ea47..2b37986 100644
--- a/database/migrations/2019_02_11_140657_add_is_admin_to_users.php
+++ b/database/migrations/2019_02_11_140657_add_is_admin_to_users.php
@@ -1,8 +1,8 @@
 <?php
 
-use Illuminate\Support\Facades\Schema;
-use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 class AddIsAdminToUsers extends Migration
 {

From a35b58eb4741ce43b8582b69d7addd71b71041bf Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Thu, 14 Mar 2019 00:43:31 +0900
Subject: [PATCH 49/61] =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=82=92=E6=AD=A3=E8=A6=8F=E5=8C=96=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E3=83=9F=E3=83=89=E3=83=AB=E3=82=A6?=
 =?UTF-8?q?=E3=82=A7=E3=82=A2=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Kernel.php                         |  1 +
 app/Http/Middleware/NormalizeLineEnding.php | 30 +++++++++++++++++++++
 2 files changed, 31 insertions(+)
 create mode 100644 app/Http/Middleware/NormalizeLineEnding.php

diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 93bf68b..95714cf 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -35,6 +35,7 @@ class Kernel extends HttpKernel
             \Illuminate\View\Middleware\ShareErrorsFromSession::class,
             \App\Http\Middleware\VerifyCsrfToken::class,
             \Illuminate\Routing\Middleware\SubstituteBindings::class,
+            \App\Http\Middleware\NormalizeLineEnding::class,
         ],
 
         'api' => [
diff --git a/app/Http/Middleware/NormalizeLineEnding.php b/app/Http/Middleware/NormalizeLineEnding.php
new file mode 100644
index 0000000..e0ec87e
--- /dev/null
+++ b/app/Http/Middleware/NormalizeLineEnding.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+
+/**
+ * リクエスト内の改行コードを正規化する。
+ * @package App\Http\Middleware
+ */
+class NormalizeLineEnding
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $newInput = [];
+        foreach ($request->input() as $key => $value) {
+            $newInput[$key] = str_replace(["\r\n", "\r"], "\n", $value);
+        }
+        $request->replace($newInput);
+
+        return $next($request);
+    }
+}

From df3826a6d47c1a3a5bd44c25a1ac339d76342a0e Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Thu, 14 Mar 2019 00:47:52 +0900
Subject: [PATCH 50/61] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD?=
 =?UTF-8?q?=E3=83=BC=E3=83=A9=E5=86=85=E3=81=A7=E5=AE=9F=E8=A3=85=E3=81=95?=
 =?UTF-8?q?=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F=E6=94=B9=E8=A1=8C=E3=82=B3?=
 =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E6=AD=A3=E8=A6=8F=E5=8C=96=E3=82=92?=
 =?UTF-8?q?=E5=89=8A=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/EjaculationController.php | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/app/Http/Controllers/EjaculationController.php b/app/Http/Controllers/EjaculationController.php
index 4490677..d2292e0 100644
--- a/app/Http/Controllers/EjaculationController.php
+++ b/app/Http/Controllers/EjaculationController.php
@@ -30,9 +30,6 @@ class EjaculationController extends Controller
     public function store(Request $request)
     {
         $inputs = $request->all();
-        if ($request->has('note')) {
-            $inputs['note'] = str_replace(["\r\n", "\r"], "\n", $inputs['note']);
-        }
 
         $validator = Validator::make($inputs, [
             'date' => 'required|date_format:Y/m/d',
@@ -113,9 +110,6 @@ class EjaculationController extends Controller
         $ejaculation = Ejaculation::findOrFail($id);
 
         $inputs = $request->all();
-        if ($request->has('note')) {
-            $inputs['note'] = str_replace(["\r\n", "\r"], "\n", $inputs['note']);
-        }
 
         $validator = Validator::make($inputs, [
             'date' => 'required|date_format:Y/m/d',

From 9e786a54694398d96331bd98c61014f07decd4bb Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Thu, 14 Mar 2019 00:56:17 +0900
Subject: [PATCH 51/61] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?=
 =?UTF-8?q?=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Middleware/NormalizeLineEndingTest.php    | 80 +++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 tests/Unit/Http/Middleware/NormalizeLineEndingTest.php

diff --git a/tests/Unit/Http/Middleware/NormalizeLineEndingTest.php b/tests/Unit/Http/Middleware/NormalizeLineEndingTest.php
new file mode 100644
index 0000000..7d16f0b
--- /dev/null
+++ b/tests/Unit/Http/Middleware/NormalizeLineEndingTest.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Tests\Unit\Http\Middleware;
+
+use App\Http\Middleware\NormalizeLineEnding;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Http\Request;
+use Tests\TestCase;
+
+class NormalizeLineEndingTest extends TestCase
+{
+    public function testCRLFtoLF()
+    {
+        $request = Request::create('/');
+        $request->replace([
+            'test' => "foo\r\nbar"
+        ]);
+
+        $middleware = new NormalizeLineEnding();
+
+        $middleware->handle($request, function (Request $request) {
+            $this->assertEquals("foo\nbar", $request->input('test'));
+        });
+    }
+
+    public function testCRtoLF()
+    {
+        $request = Request::create('/');
+        $request->replace([
+            'test' => "foo\rbar"
+        ]);
+
+        $middleware = new NormalizeLineEnding();
+
+        $middleware->handle($request, function (Request $request) {
+            $this->assertEquals("foo\nbar", $request->input('test'));
+        });
+    }
+
+    public function testLFtoLF()
+    {
+        $request = Request::create('/');
+        $request->replace([
+            'test' => "foo\nbar"
+        ]);
+
+        $middleware = new NormalizeLineEnding();
+
+        $middleware->handle($request, function (Request $request) {
+            $this->assertEquals("foo\nbar", $request->input('test'));
+        });
+    }
+
+    public function testArrayRequest()
+    {
+        $request = Request::create('/');
+        $request->replace([
+            'test' => "foo\r\nbar",
+            'hash' => [
+                'yuzuki' => "yuzuki\r\nyukari",
+                'miku' => "hatsune\r\nmiku",
+            ],
+            'array' => [
+                "kagamine\r\nrin",
+                "kagamine\r\nlen"
+            ]
+        ]);
+
+        $middleware = new NormalizeLineEnding();
+
+        $middleware->handle($request, function (Request $request) {
+            $this->assertEquals("foo\nbar", $request->input('test'));
+            $this->assertEquals("yuzuki\nyukari", $request->input('hash.yuzuki'));
+            $this->assertEquals("hatsune\nmiku", $request->input('hash.miku'));
+            $this->assertEquals("kagamine\nrin", $request->input('array.0'));
+            $this->assertEquals("kagamine\nlen", $request->input('array.1'));
+        });
+    }
+}

From dd4837ef7b6ac9a1a4908780724b94ab02fc9c5a Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Thu, 14 Mar 2019 20:45:01 +0900
Subject: [PATCH 52/61] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?=
 =?UTF-8?q?=E3=81=9ADockerfile=E3=81=ABnode=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Dockerfile | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/Dockerfile b/Dockerfile
index 65d49a8..565fba1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,5 @@
+FROM node:10-jessie as node
+
 FROM php:7.1-apache
 
 ENV APACHE_DOCUMENT_ROOT /var/www/html/public
@@ -15,6 +17,16 @@ RUN apt-get update \
 COPY dist/bin /usr/local/bin/
 COPY dist/php.d /usr/local/etc/php/php.d/
 
+COPY --from=node /usr/local/bin/node /usr/local/bin/
+COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
+COPY --from=node /opt/yarn-* /opt/yarn
+
+RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
+    && ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
+    && ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
+
+
+
 ENTRYPOINT ["tissue-entrypoint.sh"]
 CMD ["apache2-foreground"]
 

From 176ccef20f3b1d8d44d9dd0f68c8e122f76f8c4f Mon Sep 17 00:00:00 2001
From: hina <hina@hinaloe.net>
Date: Thu, 14 Mar 2019 21:21:31 +0900
Subject: [PATCH 53/61] =?UTF-8?q?mix=E5=91=A8=E3=82=8A=E3=81=AEREADME?=
 =?UTF-8?q?=E8=8D=89=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 7fdf3bb..8bd1e80 100644
--- a/README.md
+++ b/README.md
@@ -33,10 +33,11 @@ docker-compose build
 docker-compose up -d
 ```
 
-4. Composer を使い必要なライブラリをインストールします。
+4. Composer と yarn を使い必要なライブラリをインストールします。
 
 ```
 docker-compose exec web composer install
+docker-compose exec web yarn install
 ```
 
 5. 暗号化キーの作成と、データベースのマイグレーションを行います。
@@ -52,7 +53,14 @@ docker-compose exec web php artisan migrate
 docker-compose exec web chown -R www-data /var/www/html
 ```
 
-7. 最後に `.env` を読み込み直すために起動し直します。
+7. アセットをビルドします。
+
+```
+docker-compose exec web yarn dev
+```
+
+
+8. 最後に `.env` を読み込み直すために起動し直します。
 
 ```
 docker-compose up -d
@@ -68,6 +76,16 @@ docker-compose -f docker-compose.yml -f docker-compose.debug.yml up -d
 
 で起動することにより、DB のポート`5432`を開放してホストマシンから接続できるようになります。
 
+## アセットのリアルタイムビルド
+`yarn watch`を使うとソースファイルを監視して差分があると差分ビルドしてくれます。フロント開発時は活用しましょう。
+```
+docker-compose run --rm web yarn watch
+```
+
+もしファイル変更時に更新されない場合は`yarn watch-poll`を試してみてください。  
+現在Docker環境でのHMRはサポートしてません。Docker外ならおそらく動くでしょう。  
+その他詳しくはlaravel-mixのドキュメントなどを当たってください。
+
 ## 環境構築上の諸注意
 
 - 初版時点では、DB サーバとして PostgreSQL を使うよう .env ファイルを設定するくらいです。

From 54477bb214be65b429acad9f5102ffe6e3d57273 Mon Sep 17 00:00:00 2001
From: eai04191 <eai@mizle.net>
Date: Fri, 8 Mar 2019 06:58:30 +0900
Subject: [PATCH 54/61] =?UTF-8?q?=E4=BD=99=E5=88=86=E3=81=AA=E6=96=87?=
 =?UTF-8?q?=E3=81=AE=E5=89=8A=E9=99=A4=E3=83=BB=E6=95=B4=E5=BD=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/MetadataResolver/MelonbooksResolver.php | 29 +++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/app/MetadataResolver/MelonbooksResolver.php b/app/MetadataResolver/MelonbooksResolver.php
index 5cc3669..b94b719 100644
--- a/app/MetadataResolver/MelonbooksResolver.php
+++ b/app/MetadataResolver/MelonbooksResolver.php
@@ -30,11 +30,40 @@ class MelonbooksResolver implements Resolver
         if ($res->getStatusCode() === 200) {
             $metadata = $this->ogpResolver->parse($res->getBody());
 
+            $dom = new \DOMDocument();
+            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
+            $xpath = new \DOMXPath($dom);
+            $descriptionNodelist = $xpath->query('//div[@id="description"]//p');
+            $specialDescriptionNodelist = $xpath->query('//div[@id="special_description"]//p');
+
             // censoredフラグの除去
             if (mb_strpos($metadata->image, '&c=1') !== false) {
                 $metadata->image = preg_replace('/&c=1/u', '', $metadata->image);
             }
 
+            // 抽出
+            preg_match('~^(.+)((.+))の通販・購入はメロンブックス$~', $metadata->title, $match);
+            $title = $match[1];
+            $maker = $match[2];
+
+            // 整形
+            $description = 'サークル: ' . $maker . "\n";
+
+            if ($specialDescriptionNodelist->length !== 0) {
+                $description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(0)->nodeValue)) . "\n";
+                if ($specialDescriptionNodelist->length === 2) {
+                    $description .= "\n";
+                    $description .= trim(str_replace('<br>', "\n", $specialDescriptionNodelist->item(1)->nodeValue)) . "\n";
+                }
+            }
+
+            if ($descriptionNodelist->length !== 0) {
+                $description .= trim(str_replace('<br>', "\n", $descriptionNodelist->item(0)->nodeValue));
+            }
+
+            $metadata->title = $title;
+            $metadata->description = trim($description);
+
             return $metadata;
         } else {
             throw new \RuntimeException("{$res->getStatusCode()}: $url");

From 74c8a1b6cbfa9bc7a27c05206326c6b95a373ec9 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sat, 16 Mar 2019 10:45:51 +0900
Subject: [PATCH 55/61] =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=B3=E3=83=BC?=
 =?UTF-8?q?=E3=83=89=E3=81=AE=E6=AD=A3=E8=A6=8F=E5=8C=96=E3=82=92=E5=89=8A?=
 =?UTF-8?q?=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/Admin/InfoController.php | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/app/Http/Controllers/Admin/InfoController.php b/app/Http/Controllers/Admin/InfoController.php
index 37fde5b..a11bf74 100644
--- a/app/Http/Controllers/Admin/InfoController.php
+++ b/app/Http/Controllers/Admin/InfoController.php
@@ -34,9 +34,6 @@ class InfoController extends Controller
     public function store(Request $request)
     {
         $inputs = $request->all();
-        if ($request->has('content')) {
-            $inputs['content'] = str_replace(["\r\n", "\r"], "\n", $inputs['content']);
-        }
         if (!$request->has('pinned')) {
             $inputs['pinned'] = false;
         }
@@ -67,9 +64,6 @@ class InfoController extends Controller
     public function update(Request $request, Information $info)
     {
         $inputs = $request->all();
-        if ($request->has('content')) {
-            $inputs['content'] = str_replace(["\r\n", "\r"], "\n", $inputs['content']);
-        }
         if (!$request->has('pinned')) {
             $inputs['pinned'] = false;
         }

From a998d7132f2ddfadf5a6c7ad185b766f0feac9bb Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sat, 16 Mar 2019 12:22:07 +0900
Subject: [PATCH 56/61] =?UTF-8?q?=E3=83=90=E3=83=AA=E3=83=87=E3=83=BC?=
 =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92FormRequest=E3=81=A7?=
 =?UTF-8?q?=E8=A1=8C=E3=81=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/Admin/InfoController.php | 20 ++---------
 app/Http/Requests/AdminInfoStoreRequest.php   | 35 +++++++++++++++++++
 2 files changed, 38 insertions(+), 17 deletions(-)
 create mode 100644 app/Http/Requests/AdminInfoStoreRequest.php

diff --git a/app/Http/Controllers/Admin/InfoController.php b/app/Http/Controllers/Admin/InfoController.php
index a11bf74..faf2909 100644
--- a/app/Http/Controllers/Admin/InfoController.php
+++ b/app/Http/Controllers/Admin/InfoController.php
@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
+use App\Http\Requests\AdminInfoStoreRequest;
 use App\Information;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
@@ -31,21 +32,13 @@ class InfoController extends Controller
         ]);
     }
 
-    public function store(Request $request)
+    public function store(AdminInfoStoreRequest $request)
     {
         $inputs = $request->all();
         if (!$request->has('pinned')) {
             $inputs['pinned'] = false;
         }
 
-        // TODO: #updateと全く同じだし、フォームリクエストにしたほうがよいのでは?
-        Validator::make($inputs, [
-            'category' => ['required', Rule::in(array_keys(Information::CATEGORIES))],
-            'pinned' => 'nullable|boolean',
-            'title' => 'required|string|max:255',
-            'content' => 'required|string|max:10000'
-        ])->validate();
-
         $info = Information::create($inputs);
 
         return redirect()->route('admin.info.edit', ['info' => $info])->with('status', 'お知らせを更新しました。');
@@ -61,20 +54,13 @@ class InfoController extends Controller
         ]);
     }
 
-    public function update(Request $request, Information $info)
+    public function update(AdminInfoStoreRequest $request, Information $info)
     {
         $inputs = $request->all();
         if (!$request->has('pinned')) {
             $inputs['pinned'] = false;
         }
 
-        Validator::make($inputs, [
-            'category' => ['required', Rule::in(array_keys(Information::CATEGORIES))],
-            'pinned' => 'nullable|boolean',
-            'title' => 'required|string|max:255',
-            'content' => 'required|string|max:10000'
-        ])->validate();
-
         $info->fill($inputs)->save();
 
         return redirect()->route('admin.info.edit', ['info' => $info])->with('status', 'お知らせを更新しました。');
diff --git a/app/Http/Requests/AdminInfoStoreRequest.php b/app/Http/Requests/AdminInfoStoreRequest.php
new file mode 100644
index 0000000..45b3d2e
--- /dev/null
+++ b/app/Http/Requests/AdminInfoStoreRequest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Http\Requests;
+
+use App\Information;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Rule;
+
+class AdminInfoStoreRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'category' => ['required', Rule::in(array_keys(Information::CATEGORIES))],
+            'pinned' => 'nullable|boolean',
+            'title' => 'required|string|max:255',
+            'content' => 'required|string|max:10000'
+        ];
+    }
+}

From 1fd43b5e38ed80ab6ee8857baa95932780fea86b Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sat, 16 Mar 2019 12:29:33 +0900
Subject: [PATCH 57/61] =?UTF-8?q?=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B?=
 =?UTF-8?q?=E7=99=BB=E9=8C=B2=E3=83=BB=E7=B7=A8=E9=9B=86=E3=81=AE=E3=83=90?=
 =?UTF-8?q?=E3=83=AA=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=A8?=
 =?UTF-8?q?=E3=83=A9=E3=83=BC=E8=A1=A8=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/lang/ja/validation.php            |  2 ++
 resources/views/admin/info/create.blade.php | 12 ++++++++++--
 resources/views/admin/info/edit.blade.php   | 12 ++++++++++--
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/resources/lang/ja/validation.php b/resources/lang/ja/validation.php
index ecf3a03..d154816 100644
--- a/resources/lang/ja/validation.php
+++ b/resources/lang/ja/validation.php
@@ -119,6 +119,8 @@ return [
     'attributes' => [
         'email' => 'メールアドレス',
         'password' => 'パスワード',
+        'title' => 'タイトル',
+        'content' => '本文',
     ],
 
 ];
diff --git a/resources/views/admin/info/create.blade.php b/resources/views/admin/info/create.blade.php
index 4bdb53e..576b7ab 100644
--- a/resources/views/admin/info/create.blade.php
+++ b/resources/views/admin/info/create.blade.php
@@ -28,14 +28,22 @@
             </div>
             <div class="form-group">
                 <label for="title">タイトル</label>
-                <input id="title" name="title" type="text" class="form-control" value="{{ old('title') }}">
+                <input id="title" name="title" type="text" class="form-control {{ $errors->has('title') ? ' is-invalid' : '' }}" value="{{ old('title') }}">
+                
+                @if ($errors->has('title'))
+                    <div class="invalid-feedback">{{ $errors->first('title') }}</div>
+                @endif
             </div>
             <div class="form-group mt-3">
                 <label for="content">本文</label>
-                <textarea id="content" name="content" rows="15" class="form-control" maxlength="10000">{{ old('content') }}</textarea>
+                <textarea id="content" name="content" rows="15" class="form-control  {{ $errors->has('content') ? ' is-invalid' : '' }}" maxlength="10000">{{ old('content') }}</textarea>
                 <small class="form-text text-muted">
                     最大 10000 文字、Markdown 形式
                 </small>
+
+                @if ($errors->has('content'))
+                    <div class="invalid-feedback">{{ $errors->first('content') }}</div>
+                @endif
             </div>
 
             <div class="d-flex justify-content-between">
diff --git a/resources/views/admin/info/edit.blade.php b/resources/views/admin/info/edit.blade.php
index dc56cea..d5eb513 100644
--- a/resources/views/admin/info/edit.blade.php
+++ b/resources/views/admin/info/edit.blade.php
@@ -29,14 +29,22 @@
             </div>
             <div class="form-group">
                 <label for="title">タイトル</label>
-                <input id="title" name="title" type="text" class="form-control" value="{{ old('title') ?? $info->title }}">
+                <input id="title" name="title" type="text" class="form-control {{ $errors->has('title') ? ' is-invalid' : '' }}" value="{{ old('title') ?? $info->title }}">
+
+                @if ($errors->has('title'))
+                    <div class="invalid-feedback">{{ $errors->first('title') }}</div>
+                @endif
             </div>
             <div class="form-group mt-3">
                 <label for="content">本文</label>
-                <textarea id="content" name="content" rows="15" class="form-control" maxlength="10000">{{ old('content') ?? $info->content }}</textarea>
+                <textarea id="content" name="content" rows="15" class="form-control {{ $errors->has('content') ? ' is-invalid' : '' }}" maxlength="10000">{{ old('content') ?? $info->content }}</textarea>
                 <small class="form-text text-muted">
                     最大 10000 文字、Markdown 形式
                 </small>
+
+                @if ($errors->has('content'))
+                    <div class="invalid-feedback">{{ $errors->first('content') }}</div>
+                @endif
             </div>
 
             <div class="d-flex justify-content-between">

From 14b57bf9f505f0e3ea20dc140f559975e4f86240 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Sun, 17 Mar 2019 20:07:44 +0900
Subject: [PATCH 58/61] fix DLsiteResolver test

refs #132
---
 tests/Unit/MetadataResolver/DLsiteResolverTest.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/Unit/MetadataResolver/DLsiteResolverTest.php b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
index 2fb79d6..3640602 100644
--- a/tests/Unit/MetadataResolver/DLsiteResolverTest.php
+++ b/tests/Unit/MetadataResolver/DLsiteResolverTest.php
@@ -55,8 +55,8 @@ class DLsiteResolverTest extends TestCase
         $this->createResolver(DLsiteResolver::class, $responseText);
 
         $metadata = $this->resolver->resolve('https://dlsite.jp/mawtw/RJ171695.html');
-        $this->assertEquals('【骨伝導風】道草屋 たびらこ-一緒にはみがき【耳かき&はみがき】 [桃色CODE] | DLsite', $metadata->title);
-        $this->assertStringStartsWith('少しお母さんっぽい店員さんに、歯磨きからおやすみまでお世話されます。はみがきで興奮しちゃった旦那様のも、しっかりお世話してくれます。歯磨き音は特殊なマイクを使用、骨伝導風ハイレゾバイノーラル音声です。', $metadata->description);
+        $this->assertEquals('【骨伝導風】道草屋 たびらこ-一緒にはみがき【耳かき&はみがき】', $metadata->title);
+        $this->assertStringEndsWith('少しお母さんっぽい店員さんに、歯磨きからおやすみまでお世話されます。はみがきで興奮しちゃった旦那様のも、しっかりお世話してくれます。歯磨き音は特殊なマイクを使用、骨伝導風ハイレゾバイノーラル音声です。', $metadata->description);
         $this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ172000/RJ171695_img_main.jpg', $metadata->image);
         if ($this->shouldUseMock()) {
             $this->assertSame('https://dlsite.jp/mawtw/RJ171695.html', (string) $this->handler->getLastRequest()->getUri());

From 80fe53cf20f67abdfc8b7222f6d7047be3820820 Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Mon, 18 Mar 2019 23:22:28 +0900
Subject: [PATCH 59/61] =?UTF-8?q?Linux+Docker=E3=81=AA=E9=96=8B=E7=99=BA?=
 =?UTF-8?q?=E7=92=B0=E5=A2=83=E3=81=A7xdebug=E3=81=8C=E4=BD=BF=E3=81=88?=
 =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=80=81=E3=82=B3=E3=83=BC?=
 =?UTF-8?q?=E3=83=AB=E3=83=90=E3=83=83=E3=82=AF=E5=85=88IP=E3=82=A2?=
 =?UTF-8?q?=E3=83=89=E3=83=AC=E3=82=B9=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92?=
 =?UTF-8?q?=E8=AA=BF=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dist/bin/tissue-entrypoint.sh | 1 +
 dist/php.d/99-xdebug.ini      | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/dist/bin/tissue-entrypoint.sh b/dist/bin/tissue-entrypoint.sh
index 49280f5..d4689db 100755
--- a/dist/bin/tissue-entrypoint.sh
+++ b/dist/bin/tissue-entrypoint.sh
@@ -3,6 +3,7 @@ set -e
 
 if [[ "$APP_DEBUG" == "true" ]]; then
   export PHP_INI_SCAN_DIR=":/usr/local/etc/php/php.d"
+  export PHP_XDEBUG_REMOTE_HOST=$(cat /etc/hosts | awk 'END{print $1}' | sed -r -e 's/[0-9]+$/1/g')
 fi
 
 exec docker-php-entrypoint "$@"
diff --git a/dist/php.d/99-xdebug.ini b/dist/php.d/99-xdebug.ini
index 007daa1..f2a7c9d 100644
--- a/dist/php.d/99-xdebug.ini
+++ b/dist/php.d/99-xdebug.ini
@@ -1,4 +1,4 @@
 ; Dockerでのデバッグ用設定
 zend_extension=xdebug.so
 xdebug.remote_enable=true
-xdebug.remote_host=host.docker.internal
\ No newline at end of file
+xdebug.remote_host=${PHP_XDEBUG_REMOTE_HOST}
\ No newline at end of file

From 34df704fdbbb10cc9bef8840310a6c010208d04e Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Tue, 19 Mar 2019 00:35:23 +0900
Subject: [PATCH 60/61] =?UTF-8?q?host.docker.internal=E3=81=8C=E4=BD=BF?=
 =?UTF-8?q?=E3=81=88=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AF=E4=BD=BF=E3=81=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dist/bin/tissue-entrypoint.sh | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/dist/bin/tissue-entrypoint.sh b/dist/bin/tissue-entrypoint.sh
index d4689db..f17bcec 100755
--- a/dist/bin/tissue-entrypoint.sh
+++ b/dist/bin/tissue-entrypoint.sh
@@ -3,7 +3,15 @@ set -e
 
 if [[ "$APP_DEBUG" == "true" ]]; then
   export PHP_INI_SCAN_DIR=":/usr/local/etc/php/php.d"
-  export PHP_XDEBUG_REMOTE_HOST=$(cat /etc/hosts | awk 'END{print $1}' | sed -r -e 's/[0-9]+$/1/g')
+
+  php -r "if (gethostbyname('host.docker.internal') === 'host.docker.internal') exit(1);" &> /dev/null
+  if [[ $? -eq 0 ]]; then
+    # Docker for Windows/Mac
+    export PHP_XDEBUG_REMOTE_HOST='host.docker.internal'
+  else
+    # Docker for Linux
+    export PHP_XDEBUG_REMOTE_HOST=$(cat /etc/hosts | awk 'END{print $1}' | sed -r -e 's/[0-9]+$/1/g')
+  fi
 fi
 
 exec docker-php-entrypoint "$@"

From a7859fdda6e0b4627ded5a27ee85ae2dc61a069a Mon Sep 17 00:00:00 2001
From: shibafu <shibafu528@gmail.com>
Date: Tue, 19 Mar 2019 00:56:31 +0900
Subject: [PATCH 61/61] =?UTF-8?q?set=20-e=E3=81=97=E3=81=A6=E3=82=8B?=
 =?UTF-8?q?=E3=82=93=E3=81=A0=E3=81=8B=E3=82=89=E8=90=BD=E3=81=A1=E3=82=8B?=
 =?UTF-8?q?=E3=81=A0=E3=82=8D=E3=81=86=E3=81=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dist/bin/tissue-entrypoint.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dist/bin/tissue-entrypoint.sh b/dist/bin/tissue-entrypoint.sh
index f17bcec..5878f2f 100755
--- a/dist/bin/tissue-entrypoint.sh
+++ b/dist/bin/tissue-entrypoint.sh
@@ -4,7 +4,7 @@ set -e
 if [[ "$APP_DEBUG" == "true" ]]; then
   export PHP_INI_SCAN_DIR=":/usr/local/etc/php/php.d"
 
-  php -r "if (gethostbyname('host.docker.internal') === 'host.docker.internal') exit(1);" &> /dev/null
+  php -r "if (gethostbyname('host.docker.internal') === 'host.docker.internal') exit(1);" &> /dev/null && :
   if [[ $? -eq 0 ]]; then
     # Docker for Windows/Mac
     export PHP_XDEBUG_REMOTE_HOST='host.docker.internal'