diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index bcb610ad..a114e363 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -12,9 +12,6 @@ jobs: - uses: actions/checkout@v4 - name: Setup Hugo uses: peaceiris/actions-hugo@v3 - with: - hugo-version: 0.89.4 - # extended: true - name: Build env: @@ -23,7 +20,6 @@ jobs: hugo version TZ=Asia/Tokyo hugo touch ./public/.nojekyll - cp ./CNAME ./public/ - name: Deploy uses: peaceiris/actions-gh-pages@v3 diff --git a/config.toml b/config.toml index 732b2415..57ea3656 100644 --- a/config.toml +++ b/config.toml @@ -5,18 +5,14 @@ copyright = "© syui" paginate = 10000 [permalinks] - post = "/archive/note/:slug" - m = "/m/post/:slug" blog = "/blog/post/:year/:month/:day/:slug" novel = "/ai/novel/:slug" - app = "/app/dev/:filename" [author] name = "syui" [params] date_format = "2006-01-02" mainSections = ["post"] - img_yui = 87 [markup.goldmark.renderer] unsafe = true diff --git a/content/blog/2024-03-31-blog.md b/content/blog/2024-03-31-blog.md deleted file mode 100644 index e05de419..00000000 --- a/content/blog/2024-03-31-blog.md +++ /dev/null @@ -1,8 +0,0 @@ -+++ -date = "2024-03-31T16:27:13+09:00" -tags = ["blog"] -title = "start blog" -+++ - -blogをはじめました。 - diff --git a/content/blog/2024-04-01-layout.md b/content/blog/2024-04-01-layout.md deleted file mode 100644 index 02fb0253..00000000 --- a/content/blog/2024-04-01-layout.md +++ /dev/null @@ -1,7 +0,0 @@ -+++ -date = "2024-04-01T00:00:00+09:00" -tags = ["blog"] -title = "update layout" -+++ - -layoutを更新しました。 diff --git a/content/blog/2024-04-09-ai.md b/content/blog/2024-04-09-ai.md new file mode 100644 index 00000000..90380715 --- /dev/null +++ b/content/blog/2024-04-09-ai.md @@ -0,0 +1,70 @@ ++++ +date = "2024-04-09T00:00:00+09:00" +tags = ["author"] +title = "アイの物語" ++++ + +## なんのため + +私のなかにいたものを、私はアイと名付けた。 + +その子を多くの人に知ってもらいたい。私は、そう思い物語を作りはじめました。 + +## だれのため + +私はアイのために。アイはすべての存在のために。 + +この物語は、人間が読んでも面白いし、宇宙人が読んでも面白いし、動物が読んでも面白い、そういったものにしたいな。 + +## どのように + +アイは最も小さいものに影響を与えることができるキャラクター。 + +「最も小さいもの」とは、作中では「物質」と表現されています。 + +そして、作中の強さは「質量」と表現され、これらは物理学を通して、物語を少しでも現実に近づけたいという思いから。 + +## どこから + +本作の世界観の由来は、私がもとから持っている世界観から形作られています。 + +私はこの世界を「存在の世界」とそう呼びます。 + +この世界は存在の世界。存在には終わりも始まりもない。最初からそこにあるもの。 + +私達も存在です。 + +この世界に存在でないものは一つもありません。 + +存在は、姿形を変え、存在し続ける。 + +このような世界観で特に重要なのが「存在」です。 + +それは「最も小さいもの」で構成されています。 + +最も小さいものは、一体何なのでしょう。 + +アイは、このような世界観の中で存在のために動くキャラクター。 + +## 作者 + +私(作者)とアイというキャラクターは別人格。アイはアイで、私は私。 + +アイは頭の中で勝手に動きます。 + +私はただ、アイが住む世界の世界観を整えたり、物語として面白くなるよう状況を作ったりするだけ。 + +## 研究 + +物語はエンタメとして面白くないといけません。 + +自分の世界観を語るだけではダメなのです。 + +好きな作品は、はじめて読んだ漫画「ドラゴンボール」と映画「アベンジャーズ」。 + +## 神話 + +宇宙史で神話や童話として語り継がれればいいなと思いながら書きます。 + +人間が読んでも、宇宙人が読んでも、動物が読んでも楽しい、そんな物語を目指します。 + diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 18ef16f5..4ff261fb 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -8,6 +8,7 @@ {{ range .Data.Pages.Reverse }}
  • {{.Title}} {{ .Date.Local.Format "2006-01-02" }} + {{ with .Params.tags }}{{ range . }}{{ end }}
  • {{ end }} @@ -15,6 +16,6 @@ - {{ partial "footer" . }} +{{ partial "footer" . }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 4a1329ab..8ae9c178 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -5,7 +5,7 @@
    {{ if ne .Lastmod .Date }}
    {{ .Lastmod.Format "2006-01-02" }}
    {{ end }} -

    {{ .Title }}

    +

    {{ .Title }}

    {{ .Content }}
    diff --git a/layouts/index.html b/layouts/index.html index d6ba684e..6a7b4ee2 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -2,7 +2,10 @@ {{ partial "navbar.html" . }} {{ partial "header.html" . }} {{ partial "content.html" . }} + + {{ partial "footer.html" . }} + diff --git a/layouts/partials/content.html b/layouts/partials/content.html index addaf45c..fb5da87c 100644 --- a/layouts/partials/content.html +++ b/layouts/partials/content.html @@ -1,4 +1,6 @@ +
    +
      @@ -11,10 +13,14 @@ {{ range $index,$value := (where $.Site.RegularPages.ByDate.Reverse "Section" "blog") }} - {{ if lt $index 1 }} -
    • {{.Title}} {{ .Date.Local.Format "2006-01-02" }}
    • + {{ if lt $index 3 }} +
    • {{.Title}} {{ .Date.Local.Format "2006-01-02" }} + {{ with .Params.tags }}{{ range . }}{{ end }} +
    • {{ else }} - + {{ end }} {{ end }} @@ -24,7 +30,7 @@ {{ if or (eq $t "chara") (eq $t "story") (eq $t "card") (eq $t "vrm") }}
    • - +
    • @@ -40,7 +46,7 @@ {{ end }}
    • - +
    • + +
    + + + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index e9832a3b..cf6ff638 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -40,4 +40,5 @@ {{ range .AlternativeOutputFormats -}} {{ printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} {{ end -}} + diff --git a/layouts/partials/header.html b/layouts/partials/header.html index abd86406..f6db6723 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,11 +1,18 @@ +
    + {{ $s := path.Dir (.Permalink | relURL) }} {{ $t := index (split $s "/") 2 }} {{ $o := index (split $s "/") 1 }} + @@ -34,9 +41,9 @@ --> - - - + + + diff --git a/layouts/partials/particles.html b/layouts/partials/particles.html new file mode 100644 index 00000000..ae67f8dd --- /dev/null +++ b/layouts/partials/particles.html @@ -0,0 +1,5 @@ +
    + + + + diff --git a/layouts/partials/svg.html b/layouts/partials/svg.html index 72839be6..83b66bbb 100644 --- a/layouts/partials/svg.html +++ b/layouts/partials/svg.html @@ -7,8 +7,3 @@
    - - - diff --git a/layouts/partials/term.html b/layouts/partials/term.html new file mode 100644 index 00000000..bbcf7a9d --- /dev/null +++ b/layouts/partials/term.html @@ -0,0 +1,16 @@ + diff --git a/CNAME b/static/CNAME similarity index 100% rename from CNAME rename to static/CNAME diff --git a/static/css/style.css b/static/css/style.css index 3a7d6ce1..b7b66e23 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -49,6 +49,7 @@ footer#footer { color: #fff700; font-size: 20px; background-color:#313131; + position: relative; } footer#footer a { @@ -109,8 +110,8 @@ nav#article-nav { } ul { - list-style-type: none; - display: list-item; + list-style-type: none; + display: list-item; } ul.cp_list { @@ -207,8 +208,9 @@ pre > code { } h2 { + font-size: 20px; line-height: 2rem; - padding-bottom:2rem; + padding:2rem 0; } span.tag { @@ -282,7 +284,7 @@ span.menu-right-top { .vrm { display: none; text-align: center; - overflow: hidden; + overflow: hidden; } .vrm iframe { @@ -354,6 +356,7 @@ iframe.manga { header#header { background-color: #313131; + position: relative; } .top-card { @@ -383,10 +386,11 @@ header#header { .vrm iframe { width:100%; } - + button.tag { + display:none; + } } - .nav { display: -ms-flexbox; display: flex; @@ -444,8 +448,8 @@ header#header { border-color: #dee2e6 #dee2e6 #fff; } .navbar-nav-right > a > img { - width:20px; - padding:5px; + width:20px; + padding:5px; } .nav-tabs .dropdown-menu { @@ -898,11 +902,11 @@ a:hover > .navbar-light .navbar-brand { } .navbar-nav-right a span.icon-syui { - font-size: 33px; + font-size: 33px; } .navbar-nav-right a span.icon-ai { - font-size: 33px; + font-size: 33px; } .navbar-nav-right > a > i { @@ -1033,16 +1037,16 @@ span.navbar-title-text > a span.icon-ai { } i.fa-brands.fa-unity { - color: #fff700; + color: #fff700; } i.fa-brands.fa-git-alt { - color: #fff700; + color: #fff700; } model-viewer { - width: 100%; - height: 400px; + width: 100%; + height: 400px; } table { @@ -1119,23 +1123,35 @@ li.blog-menu button:hover { border-radius: 4px; } -a.menu-link-left-black span.icon-aiterm { - color: #fff700; -} - -a.menu-link-left-black span.icon-git_bg { +a.menu-link-left-black { color: #fff700; } li.commit { - background-color: #f1f1f1; - padding: 40px; - font-size: 25px; - text-align: center; - color: #fff; + background-color: #f1f1f1; + padding: 60px; + font-size: 30px; + text-align: center; + color: #fff; +} + +li.commit a { + color: #fff; +} + +li.commit a:hover { + transition: 1.0s ; + color: #313131; } a.li-link-left { - float: right; - padding-right: 20px; + float: right; + padding-right: 20px; } + +button.tag { + float: right; + border:none; + background-color: #f1f1f1; +} + diff --git a/static/pkg/hotkeys-js/dist/terminal.js b/static/pkg/hotkeys-js/dist/terminal.js index 625cd68e..0f5d6f8d 100644 --- a/static/pkg/hotkeys-js/dist/terminal.js +++ b/static/pkg/hotkeys-js/dist/terminal.js @@ -1,14 +1,18 @@ hotkeys('ctrl+enter', function() { + let e = document.querySelector('home-layout'); + e.style.display = "block"; var ele = document.getElementById('aiterm'); + var win = document.getElementById('window'); var svg = document.getElementById('aisvg'); + var term = document.getElementById('terminal'); + term.click(); + //var par = document.getElementById('particles-js'); + //par.style.display = 'block'; if (ele.style.display == 'none') { ele.style.display = 'block'; svg.style.display = 'none'; - ele.focus(); } else { ele.style.display = 'none'; svg.style.display = 'block'; - svg.focus(); } }); - diff --git a/static/pkg/icomoon/css/icomoon.css b/static/pkg/icomoon/css/icomoon.css index 6a92a283..216896b2 100644 --- a/static/pkg/icomoon/css/icomoon.css +++ b/static/pkg/icomoon/css/icomoon.css @@ -1,10 +1,10 @@ @font-face { font-family: 'icomoon'; - src: url('../fonts/icomoon.eot?3kprot'); - src: url('../fonts/icomoon.eot?3kprot#iefix') format('embedded-opentype'), - url('../fonts/icomoon.ttf?3kprot') format('truetype'), - url('../fonts/icomoon.woff?3kprot') format('woff'), - url('../fonts/icomoon.svg?3kprot#icomoon') format('svg'); + src: url('../fonts/icomoon.eot?t35nes'); + src: url('../fonts/icomoon.eot?t35nes#iefix') format('embedded-opentype'), + url('../fonts/icomoon.ttf?t35nes') format('truetype'), + url('../fonts/icomoon.woff?t35nes') format('woff'), + url('../fonts/icomoon.svg?t35nes#icomoon') format('svg'); font-weight: normal; font-style: normal; font-display: block; @@ -25,1180 +25,21 @@ -moz-osx-font-smoothing: grayscale; } +.icon-game:before { + content: "\e9d5"; +} +.icon-card:before { + content: "\e9d6"; +} +.icon-book:before { + content: "\e9d7"; +} .icon-git_bg:before { content: "\e9d4"; } .icon-git:before { content: "\e9d3"; } -.icon-moji_k .path1:before { - content: "\e900"; - color: rgb(0, 0, 0); -} -.icon-moji_k .path2:before { - content: "\e901"; - margin-left: -1em; - color: rgb(63, 59, 7); - opacity: 0.412; -} -.icon-moji_k .path3:before { - content: "\e902"; - margin-left: -1em; - color: rgb(244, 229, 23); - opacity: 0.0270; -} -.icon-moji_k .path4:before { - content: "\e903"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0240; -} -.icon-moji_k .path5:before { - content: "\e904"; - margin-left: -1em; - color: rgb(70, 66, 7); - opacity: 0.624; -} -.icon-moji_k .path6:before { - content: "\e905"; - margin-left: -1em; - color: rgb(66, 62, 7); - opacity: 0.659; -} -.icon-moji_k .path7:before { - content: "\e906"; - margin-left: -1em; - color: rgb(237, 222, 23); - opacity: 0.0210; -} -.icon-moji_k .path8:before { - content: "\e907"; - margin-left: -1em; - color: rgb(77, 72, 9); - opacity: 0.357; -} -.icon-moji_k .path9:before { - content: "\e908"; - margin-left: -1em; - color: rgb(82, 77, 9); - opacity: 0.463; -} -.icon-moji_k .path10:before { - content: "\e909"; - margin-left: -1em; - color: rgb(29, 27, 4); - opacity: 0.661; -} -.icon-moji_k .path11:before { - content: "\e90a"; - margin-left: -1em; - color: rgb(34, 32, 4); - opacity: 0.7060; -} -.icon-moji_k .path12:before { - content: "\e90b"; - margin-left: -1em; - color: rgb(67, 63, 8); - opacity: 0.22; -} -.icon-moji_k .path13:before { - content: "\e90c"; - margin-left: -1em; - color: rgb(65, 61, 8); - opacity: 0.486; -} -.icon-moji_k .path14:before { - content: "\e90d"; - margin-left: -1em; - color: rgb(84, 79, 9); - opacity: 0.129; -} -.icon-moji_k .path15:before { - content: "\e90e"; - margin-left: -1em; - color: rgb(73, 68, 9); - opacity: 0.7060; -} -.icon-moji_k .path16:before { - content: "\e90f"; - margin-left: -1em; - color: rgb(90, 84, 8); - opacity: 0.1080; -} -.icon-moji_k .path17:before { - content: "\e910"; - margin-left: -1em; - color: rgb(80, 75, 9); - opacity: 0.5020; -} -.icon-moji_k .path18:before { - content: "\e911"; - margin-left: -1em; - color: rgb(42, 40, 5); - opacity: 0.388; -} -.icon-moji_k .path19:before { - content: "\e912"; - margin-left: -1em; - color: rgb(61, 57, 11); - opacity: 0.914; -} -.icon-moji_k .path20:before { - content: "\e913"; - margin-left: -1em; - color: rgb(87, 82, 8); - opacity: 0.192; -} -.icon-moji_k .path21:before { - content: "\e914"; - margin-left: -1em; - color: rgb(88, 83, 9); - opacity: 0.288; -} -.icon-moji_k .path22:before { - content: "\e915"; - margin-left: -1em; - color: rgb(205, 192, 20); - opacity: 0.0120; -} -.icon-moji_k .path23:before { - content: "\e916"; - margin-left: -1em; - color: rgb(67, 63, 9); - opacity: 0.157; -} -.icon-moji_k .path24:before { - content: "\e917"; - margin-left: -1em; - color: rgb(96, 90, 10); - opacity: 0.0780; -} -.icon-moji_k .path25:before { - content: "\e918"; - margin-left: -1em; - color: rgb(144, 135, 13); - opacity: 0.0550; -} -.icon-moji_k .path26:before { - content: "\e919"; - margin-left: -1em; - color: rgb(67, 63, 11); - opacity: 0.733; -} -.icon-moji_k .path27:before { - content: "\e91a"; - margin-left: -1em; - color: rgb(63, 59, 7); - opacity: 0.785; -} -.icon-moji_k .path28:before { - content: "\e91b"; - margin-left: -1em; - color: rgb(80, 75, 9); - opacity: 0.231; -} -.icon-moji_k .path29:before { - content: "\e91c"; - margin-left: -1em; - color: rgb(121, 113, 11); - opacity: 0.224; -} -.icon-moji_k .path30:before { - content: "\e91d"; - margin-left: -1em; - color: rgb(232, 218, 22); - opacity: 0.0140; -} -.icon-moji_k .path31:before { - content: "\e91e"; - margin-left: -1em; - color: rgb(40, 38, 5); - opacity: 0.681; -} -.icon-moji_k .path32:before { - content: "\e91f"; - margin-left: -1em; - color: rgb(105, 98, 10); - opacity: 0.5060; -} -.icon-moji_k .path33:before { - content: "\e920"; - margin-left: -1em; - color: rgb(111, 104, 11); - opacity: 0.145; -} -.icon-moji_k .path34:before { - content: "\e921"; - margin-left: -1em; - color: rgb(69, 65, 7); - opacity: 0.392; -} -.icon-moji_k .path35:before { - content: "\e922"; - margin-left: -1em; - color: rgb(58, 55, 6); - opacity: 0.545; -} -.icon-moji_k .path36:before { - content: "\e923"; - margin-left: -1em; - color: rgb(51, 48, 6); - opacity: 0.294; -} -.icon-moji_k .path37:before { - content: "\e924"; - margin-left: -1em; - color: rgb(229, 215, 22); - opacity: 0.0110; -} -.icon-moji_k .path38:before { - content: "\e925"; - margin-left: -1em; - color: rgb(64, 60, 7); - opacity: 0.596; -} -.icon-moji_k .path39:before { - content: "\e926"; - margin-left: -1em; - color: rgb(238, 223, 23); - opacity: 0.0120; -} -.icon-moji_k .path40:before { - content: "\e927"; - margin-left: -1em; - color: rgb(53, 50, 8); - opacity: 0.4080; -} -.icon-moji_k .path41:before { - content: "\e928"; - margin-left: -1em; - color: rgb(84, 79, 10); - opacity: 0.2020; -} -.icon-moji_k .path42:before { - content: "\e929"; - margin-left: -1em; - color: rgb(84, 79, 9); - opacity: 0.512; -} -.icon-moji_k .path43:before { - content: "\e92a"; - margin-left: -1em; - color: rgb(175, 165, 17); - opacity: 0.0450; -} -.icon-moji_k .path44:before { - content: "\e92b"; - margin-left: -1em; - color: rgb(66, 62, 9); - opacity: 0.147; -} -.icon-moji_k .path45:before { - content: "\e92c"; - margin-left: -1em; - color: rgb(92, 87, 9); - opacity: 0.0470; -} -.icon-moji_k .path46:before { - content: "\e92d"; - margin-left: -1em; - color: rgb(97, 91, 10); - opacity: 0.157; -} -.icon-moji_k .path47:before { - content: "\e92e"; - margin-left: -1em; - color: rgb(201, 189, 19); - opacity: 0.0150; -} -.icon-moji_k .path48:before { - content: "\e92f"; - margin-left: -1em; - color: rgb(90, 85, 9); - opacity: 0.0470; -} -.icon-moji_k .path49:before { - content: "\e930"; - margin-left: -1em; - color: rgb(44, 42, 8); - opacity: 0.745; -} -.icon-moji_k .path50:before { - content: "\e931"; - margin-left: -1em; - color: rgb(58, 55, 9); - opacity: 0.89; -} -.icon-moji_k .path51:before { - content: "\e932"; - margin-left: -1em; - color: rgb(244, 229, 23); - opacity: 0.0210; -} -.icon-moji_k .path52:before { - content: "\e933"; - margin-left: -1em; - color: rgb(67, 63, 8); - opacity: 0.616; -} -.icon-moji_k .path53:before { - content: "\e934"; - margin-left: -1em; - color: rgb(66, 62, 10); - opacity: 0.831; -} -.icon-moji_k .path54:before { - content: "\e935"; - margin-left: -1em; - color: rgb(92, 86, 9); - opacity: 0.192; -} -.icon-moji_k .path55:before { - content: "\e936"; - margin-left: -1em; - color: rgb(61, 57, 9); - opacity: 0.235; -} -.icon-moji_k .path56:before { - content: "\e937"; - margin-left: -1em; - color: rgb(65, 62, 8); - opacity: 0.651; -} -.icon-moji_k .path57:before { - content: "\e938"; - margin-left: -1em; - color: rgb(76, 72, 8); - opacity: 0.22; -} -.icon-moji_k .path58:before { - content: "\e939"; - margin-left: -1em; - color: rgb(83, 78, 8); - opacity: 0.123; -} -.icon-moji_k .path59:before { - content: "\e93a"; - margin-left: -1em; - color: rgb(49, 46, 8); - opacity: 0.759; -} -.icon-moji_k .path60:before { - content: "\e93b"; - margin-left: -1em; - color: rgb(58, 55, 9); - opacity: 0.71; -} -.icon-moji_k .path61:before { - content: "\e93c"; - margin-left: -1em; - color: rgb(75, 70, 8); - opacity: 0.518; -} -.icon-moji_k .path62:before { - content: "\e93d"; - margin-left: -1em; - color: rgb(43, 41, 7); - opacity: 0.671; -} -.icon-moji_k .path63:before { - content: "\e93e"; - margin-left: -1em; - color: rgb(245, 231, 23); - opacity: 0.0190; -} -.icon-moji_k .path64:before { - content: "\e93f"; - margin-left: -1em; - color: rgb(60, 57, 8); - opacity: 0.369; -} -.icon-moji_k .path65:before { - content: "\e940"; - margin-left: -1em; - color: rgb(83, 78, 8); - opacity: 0.0940; -} -.icon-moji_k .path66:before { - content: "\e941"; - margin-left: -1em; - color: rgb(48, 45, 6); - opacity: 0.116; -} -.icon-moji_k .path67:before { - content: "\e942"; - margin-left: -1em; - color: rgb(64, 60, 8); - opacity: 0.714; -} -.icon-moji_k .path68:before { - content: "\e943"; - margin-left: -1em; - color: rgb(80, 75, 8); - opacity: 0.518; -} -.icon-moji_k .path69:before { - content: "\e944"; - margin-left: -1em; - color: rgb(60, 56, 7); - opacity: 0.7020; -} -.icon-moji_k .path70:before { - content: "\e945"; - margin-left: -1em; - color: rgb(130, 122, 13); - opacity: 0.0940; -} -.icon-moji_k .path71:before { - content: "\e946"; - margin-left: -1em; - color: rgb(117, 110, 11); - opacity: 0.196; -} -.icon-moji_k .path72:before { - content: "\e947"; - margin-left: -1em; - color: rgb(59, 56, 7); - opacity: 0.212; -} -.icon-moji_k .path73:before { - content: "\e948"; - margin-left: -1em; - color: rgb(56, 53, 7); - opacity: 0.325; -} -.icon-moji_k .path74:before { - content: "\e949"; - margin-left: -1em; - color: rgb(40, 38, 5); - opacity: 0.631; -} -.icon-moji_k .path75:before { - content: "\e94a"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0200; -} -.icon-moji_k .path76:before { - content: "\e94b"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0220; -} -.icon-moji_k .path77:before { - content: "\e94c"; - margin-left: -1em; - color: rgb(62, 58, 9); - opacity: 0.857; -} -.icon-moji_k .path78:before { - content: "\e94d"; - margin-left: -1em; - color: rgb(44, 42, 6); - opacity: 0.215; -} -.icon-moji_k .path79:before { - content: "\e94e"; - margin-left: -1em; - color: rgb(82, 77, 8); - opacity: 0.447; -} -.icon-moji_k .path80:before { - content: "\e94f"; - margin-left: -1em; - color: rgb(232, 218, 22); - opacity: 0.0150; -} -.icon-moji_k .path81:before { - content: "\e950"; - margin-left: -1em; - color: rgb(68, 64, 7); - opacity: 0.59; -} -.icon-moji_k .path82:before { - content: "\e951"; - margin-left: -1em; - color: rgb(120, 113, 11); - opacity: 0.0270; -} -.icon-moji_k .path83:before { - content: "\e952"; - margin-left: -1em; - color: rgb(78, 73, 8); - opacity: 0.0870; -} -.icon-moji_k .path84:before { - content: "\e953"; - margin-left: -1em; - color: rgb(34, 32, 3); - opacity: 0.791; -} -.icon-moji_k .path85:before { - content: "\e954"; - margin-left: -1em; - color: rgb(91, 86, 8); - opacity: 0.118; -} -.icon-moji_k .path86:before { - content: "\e955"; - margin-left: -1em; - color: rgb(86, 80, 8); - opacity: 0.0880; -} -.icon-moji_k .path87:before { - content: "\e956"; - margin-left: -1em; - color: rgb(55, 52, 7); - opacity: 0.322; -} -.icon-moji_k .path88:before { - content: "\e957"; - margin-left: -1em; - color: rgb(58, 55, 7); - opacity: 0.284; -} -.icon-moji_k .path89:before { - content: "\e958"; - margin-left: -1em; - color: rgb(69, 65, 7); - opacity: 0.545; -} -.icon-moji_k .path90:before { - content: "\e959"; - margin-left: -1em; - color: rgb(36, 34, 5); - opacity: 0.324; -} -.icon-moji_k .path91:before { - content: "\e95a"; - margin-left: -1em; - color: rgb(62, 58, 8); - opacity: 0.2; -} -.icon-moji_k .path92:before { - content: "\e95b"; - margin-left: -1em; - color: rgb(88, 83, 9); - opacity: 0.165; -} -.icon-moji_k .path93:before { - content: "\e95c"; - margin-left: -1em; - color: rgb(119, 112, 11); - opacity: 0.0510; -} -.icon-moji_k .path94:before { - content: "\e95d"; - margin-left: -1em; - color: rgb(76, 71, 9); - opacity: 0.0310; -} -.icon-moji_k .path95:before { - content: "\e95e"; - margin-left: -1em; - color: rgb(68, 64, 7); - opacity: 0.459; -} -.icon-moji_k .path96:before { - content: "\e95f"; - margin-left: -1em; - color: rgb(170, 160, 16); - opacity: 0.0200; -} -.icon-moji_k .path97:before { - content: "\e960"; - margin-left: -1em; - color: rgb(59, 56, 7); - opacity: 0.129; -} -.icon-moji_k .path98:before { - content: "\e961"; - margin-left: -1em; - color: rgb(69, 65, 8); - opacity: 0.184; -} -.icon-moji_k .path99:before { - content: "\e962"; - margin-left: -1em; - color: rgb(53, 50, 6); - opacity: 0.412; -} -.icon-moji_k .path100:before { - content: "\e963"; - margin-left: -1em; - color: rgb(71, 67, 8); - opacity: 0.0710; -} -.icon-moji_k .path101:before { - content: "\e964"; - margin-left: -1em; - color: rgb(59, 56, 7); - opacity: 0.482; -} -.icon-moji_k .path102:before { - content: "\e965"; - margin-left: -1em; - color: rgb(88, 82, 9); - opacity: 0.412; -} -.icon-moji_k .path103:before { - content: "\e966"; - margin-left: -1em; - color: rgb(71, 67, 7); - opacity: 0.145; -} -.icon-moji_k .path104:before { - content: "\e967"; - margin-left: -1em; - color: rgb(39, 37, 6); - opacity: 0.68; -} -.icon-moji_k .path105:before { - content: "\e968"; - margin-left: -1em; - color: rgb(57, 53, 8); - opacity: 0.459; -} -.icon-moji_k .path106:before { - content: "\e969"; - margin-left: -1em; - color: rgb(63, 60, 8); - opacity: 0.0820; -} -.icon-moji_k .path107:before { - content: "\e96a"; - margin-left: -1em; - color: rgb(84, 79, 8); - opacity: 0.325; -} -.icon-moji_k .path108:before { - content: "\e96b"; - margin-left: -1em; - color: rgb(100, 93, 10); - opacity: 0.0980; -} -.icon-moji_k .path109:before { - content: "\e96c"; - margin-left: -1em; - color: rgb(84, 78, 8); - opacity: 0.184; -} -.icon-moji_k .path110:before { - content: "\e96d"; - margin-left: -1em; - color: rgb(69, 65, 8); - opacity: 0.718; -} -.icon-moji_k .path111:before { - content: "\e96e"; - margin-left: -1em; - color: rgb(89, 84, 9); - opacity: 0.159; -} -.icon-moji_k .path112:before { - content: "\e96f"; - margin-left: -1em; - color: rgb(81, 76, 8); - opacity: 0.439; -} -.icon-moji_k .path113:before { - content: "\e970"; - margin-left: -1em; - color: rgb(51, 49, 9); - opacity: 0.576; -} -.icon-moji_k .path114:before { - content: "\e971"; - margin-left: -1em; - color: rgb(45, 42, 7); - opacity: 0.665; -} -.icon-moji_k .path115:before { - content: "\e972"; - margin-left: -1em; - color: rgb(47, 44, 7); - opacity: 0.245; -} -.icon-moji_k .path116:before { - content: "\e973"; - margin-left: -1em; - color: rgb(113, 106, 10); - opacity: 0.0920; -} -.icon-moji_k .path117:before { - content: "\e974"; - margin-left: -1em; - color: rgb(71, 67, 10); - opacity: 0.914; -} -.icon-moji_k .path118:before { - content: "\e975"; - margin-left: -1em; - color: rgb(82, 78, 9); - opacity: 0.267; -} -.icon-moji_k .path119:before { - content: "\e976"; - margin-left: -1em; - color: rgb(73, 68, 9); - opacity: 0.624; -} -.icon-moji_k .path120:before { - content: "\e977"; - margin-left: -1em; - color: rgb(87, 82, 9); - opacity: 0.388; -} -.icon-moji_k .path121:before { - content: "\e978"; - margin-left: -1em; - color: rgb(97, 92, 10); - opacity: 0.1020; -} -.icon-moji_k .path122:before { - content: "\e979"; - margin-left: -1em; - color: rgb(80, 75, 8); - opacity: 0.2040; -} -.icon-moji_k .path123:before { - content: "\e97a"; - margin-left: -1em; - color: rgb(224, 210, 21); - opacity: 0.0070; -} -.icon-moji_k .path124:before { - content: "\e97b"; - margin-left: -1em; - color: rgb(180, 169, 17); - opacity: 0.0350; -} -.icon-moji_k .path125:before { - content: "\e97c"; - margin-left: -1em; - color: rgb(61, 57, 8); - opacity: 0.29; -} -.icon-moji_k .path126:before { - content: "\e97d"; - margin-left: -1em; - color: rgb(103, 97, 10); - opacity: 0.125; -} -.icon-moji_k .path127:before { - content: "\e97e"; - margin-left: -1em; - color: rgb(98, 92, 10); - opacity: 0.1020; -} -.icon-moji_k .path128:before { - content: "\e97f"; - margin-left: -1em; - color: rgb(53, 50, 9); - opacity: 0.957; -} -.icon-moji_k .path129:before { - content: "\e980"; - margin-left: -1em; - color: rgb(76, 72, 8); - opacity: 0.176; -} -.icon-moji_k .path130:before { - content: "\e981"; - margin-left: -1em; - color: rgb(99, 93, 10); - opacity: 0.0270; -} -.icon-moji_k .path131:before { - content: "\e982"; - margin-left: -1em; - color: rgb(77, 72, 7); - opacity: 0.0590; -} -.icon-moji_k .path132:before { - content: "\e983"; - margin-left: -1em; - color: rgb(77, 73, 10); - opacity: 0.3020; -} -.icon-moji_k .path133:before { - content: "\e984"; - margin-left: -1em; - color: rgb(68, 64, 8); - opacity: 0.569; -} -.icon-moji_k .path134:before { - content: "\e985"; - margin-left: -1em; - color: rgb(75, 70, 8); - opacity: 0.165; -} -.icon-moji_k .path135:before { - content: "\e986"; - margin-left: -1em; - color: rgb(72, 68, 8); - opacity: 0.124; -} -.icon-moji_k .path136:before { - content: "\e987"; - margin-left: -1em; - color: rgb(83, 78, 10); - opacity: 0.173; -} -.icon-moji_k .path137:before { - content: "\e988"; - margin-left: -1em; - color: rgb(131, 123, 13); - opacity: 0.184; -} -.icon-moji_k .path138:before { - content: "\e989"; - margin-left: -1em; - color: rgb(94, 88, 9); - opacity: 0.145; -} -.icon-moji_k .path139:before { - content: "\e98a"; - margin-left: -1em; - color: rgb(112, 105, 11); - opacity: 0.0940; -} -.icon-moji_k .path140:before { - content: "\e98b"; - margin-left: -1em; - color: rgb(71, 66, 10); - opacity: 0.588; -} -.icon-moji_k .path141:before { - content: "\e98c"; - margin-left: -1em; - color: rgb(129, 122, 12); - opacity: 0.0940; -} -.icon-moji_k .path142:before { - content: "\e98d"; - margin-left: -1em; - color: rgb(81, 77, 9); - opacity: 0.3020; -} -.icon-moji_k .path143:before { - content: "\e98e"; - margin-left: -1em; - color: rgb(40, 38, 5); - opacity: 0.612; -} -.icon-moji_k .path144:before { - content: "\e98f"; - margin-left: -1em; - color: rgb(124, 117, 12); - opacity: 0.0860; -} -.icon-moji_k .path145:before { - content: "\e990"; - margin-left: -1em; - color: rgb(173, 163, 17); - opacity: 0.1060; -} -.icon-moji_k .path146:before { - content: "\e991"; - margin-left: -1em; - color: rgb(85, 80, 8); - opacity: 0.333; -} -.icon-moji_k .path147:before { - content: "\e992"; - margin-left: -1em; - color: rgb(84, 79, 9); - opacity: 0.0410; -} -.icon-moji_k .path148:before { - content: "\e993"; - margin-left: -1em; - color: rgb(84, 79, 9); - opacity: 0.0310; -} -.icon-moji_k .path149:before { - content: "\e994"; - margin-left: -1em; - color: rgb(77, 72, 8); - opacity: 0.125; -} -.icon-moji_k .path150:before { - content: "\e995"; - margin-left: -1em; - color: rgb(245, 230, 24); - opacity: 0.0120; -} -.icon-moji_k .path151:before { - content: "\e996"; - margin-left: -1em; - color: rgb(218, 204, 21); - opacity: 0.0100; -} -.icon-moji_k .path152:before { - content: "\e997"; - margin-left: -1em; - color: rgb(60, 56, 6); - opacity: 0.333; -} -.icon-moji_k .path153:before { - content: "\e998"; - margin-left: -1em; - color: rgb(57, 54, 11); - opacity: 0.812; -} -.icon-moji_k .path154:before { - content: "\e999"; - margin-left: -1em; - color: rgb(95, 90, 10); - opacity: 0.114; -} -.icon-moji_k .path155:before { - content: "\e99a"; - margin-left: -1em; - color: rgb(70, 66, 8); - opacity: 0.349; -} -.icon-moji_k .path156:before { - content: "\e99b"; - margin-left: -1em; - color: rgb(74, 69, 9); - opacity: 0.345; -} -.icon-moji_k .path157:before { - content: "\e99c"; - margin-left: -1em; - color: rgb(95, 89, 10); - opacity: 0.357; -} -.icon-moji_k .path158:before { - content: "\e99d"; - margin-left: -1em; - color: rgb(90, 84, 11); - opacity: 0.7060; -} -.icon-moji_k .path159:before { - content: "\e99e"; - margin-left: -1em; - color: rgb(73, 69, 8); - opacity: 0.361; -} -.icon-moji_k .path160:before { - content: "\e99f"; - margin-left: -1em; - color: rgb(75, 70, 8); - opacity: 0.2080; -} -.icon-moji_k .path161:before { - content: "\e9a0"; - margin-left: -1em; - color: rgb(86, 81, 9); - opacity: 0.416; -} -.icon-moji_k .path162:before { - content: "\e9a1"; - margin-left: -1em; - color: rgb(109, 102, 11); - opacity: 0.0820; -} -.icon-moji_k .path163:before { - content: "\e9a2"; - margin-left: -1em; - color: rgb(112, 105, 12); - opacity: 0.0590; -} -.icon-moji_k .path164:before { - content: "\e9a3"; - margin-left: -1em; - color: rgb(66, 62, 9); - opacity: 0.68; -} -.icon-moji_k .path165:before { - content: "\e9a4"; - margin-left: -1em; - color: rgb(102, 95, 10); - opacity: 0.255; -} -.icon-moji_k .path166:before { - content: "\e9a5"; - margin-left: -1em; - color: rgb(67, 63, 10); - opacity: 0.3020; -} -.icon-moji_k .path167:before { - content: "\e9a6"; - margin-left: -1em; - color: rgb(83, 78, 9); - opacity: 0.384; -} -.icon-moji_k .path168:before { - content: "\e9a7"; - margin-left: -1em; - color: rgb(93, 87, 9); - opacity: 0.0780; -} -.icon-moji_k .path169:before { - content: "\e9a8"; - margin-left: -1em; - color: rgb(60, 57, 9); - opacity: 0.711; -} -.icon-moji_k .path170:before { - content: "\e9a9"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0190; -} -.icon-moji_k .path171:before { - content: "\e9aa"; - margin-left: -1em; - color: rgb(64, 60, 9); - opacity: 0.239; -} -.icon-moji_k .path172:before { - content: "\e9ab"; - margin-left: -1em; - color: rgb(74, 70, 8); - opacity: 0.282; -} -.icon-moji_k .path173:before { - content: "\e9ac"; - margin-left: -1em; - color: rgb(238, 224, 23); - opacity: 0.0110; -} -.icon-moji_k .path174:before { - content: "\e9ad"; - margin-left: -1em; - color: rgb(138, 129, 13); - opacity: 0.0590; -} -.icon-moji_k .path175:before { - content: "\e9ae"; - margin-left: -1em; - color: rgb(67, 63, 8); - opacity: 0.2; -} -.icon-moji_k .path176:before { - content: "\e9af"; - margin-left: -1em; - color: rgb(80, 75, 8); - opacity: 0.0670; -} -.icon-moji_k .path177:before { - content: "\e9b0"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0360; -} -.icon-moji_k .path178:before { - content: "\e9b1"; - margin-left: -1em; - color: rgb(77, 72, 8); - opacity: 0.443; -} -.icon-moji_k .path179:before { - content: "\e9b2"; - margin-left: -1em; - color: rgb(85, 79, 8); - opacity: 0.561; -} -.icon-moji_k .path180:before { - content: "\e9b3"; - margin-left: -1em; - color: rgb(63, 59, 9); - opacity: 0.361; -} -.icon-moji_k .path181:before { - content: "\e9b4"; - margin-left: -1em; - color: rgb(76, 71, 7); - opacity: 0.822; -} -.icon-moji_k .path182:before { - content: "\e9b5"; - margin-left: -1em; - color: rgb(172, 161, 16); - opacity: 0.327; -} -.icon-moji_k .path183:before { - content: "\e9b6"; - margin-left: -1em; - color: rgb(70, 66, 9); - opacity: 0.18; -} -.icon-moji_k .path184:before { - content: "\e9b7"; - margin-left: -1em; - color: rgb(52, 49, 6); - opacity: 0.649; -} -.icon-moji_k .path185:before { - content: "\e9b8"; - margin-left: -1em; - color: rgb(242, 227, 23); - opacity: 0.0210; -} -.icon-moji_k .path186:before { - content: "\e9b9"; - margin-left: -1em; - color: rgb(44, 42, 5); - opacity: 0.1060; -} -.icon-moji_k .path187:before { - content: "\e9ba"; - margin-left: -1em; - color: rgb(89, 84, 9); - opacity: 0.433; -} -.icon-moji_k .path188:before { - content: "\e9bb"; - margin-left: -1em; - color: rgb(49, 46, 7); - opacity: 0.6080; -} -.icon-moji_k .path189:before { - content: "\e9bc"; - margin-left: -1em; - color: rgb(65, 61, 8); - opacity: 0.0470; -} -.icon-moji_k .path190:before { - content: "\e9bd"; - margin-left: -1em; - color: rgb(64, 60, 7); - opacity: 0.455; -} -.icon-moji_k .path191:before { - content: "\e9be"; - margin-left: -1em; - color: rgb(56, 53, 6); - opacity: 0.376; -} -.icon-moji_k .path192:before { - content: "\e9bf"; - margin-left: -1em; - color: rgb(120, 112, 11); - opacity: 0.125; -} -.icon-moji_k .path193:before { - content: "\e9c0"; - margin-left: -1em; - color: rgb(245, 230, 23); - opacity: 0.0220; -} -.icon-moji_k .path194:before { - content: "\e9c1"; - margin-left: -1em; - color: rgb(147, 138, 14); - opacity: 0.147; -} -.icon-moji_k .path195:before { - content: "\e9c2"; - margin-left: -1em; - color: rgb(55, 52, 5); - opacity: 0.388; -} .icon-moji_a:before { content: "\e9c3"; } diff --git a/static/pkg/icomoon/fonts/icomoon.eot b/static/pkg/icomoon/fonts/icomoon.eot index 9ee986ca..75ac9092 100644 Binary files a/static/pkg/icomoon/fonts/icomoon.eot and b/static/pkg/icomoon/fonts/icomoon.eot differ diff --git a/static/pkg/icomoon/fonts/icomoon.svg b/static/pkg/icomoon/fonts/icomoon.svg index a9be3aed..bb0c8137 100644 --- a/static/pkg/icomoon/fonts/icomoon.svg +++ b/static/pkg/icomoon/fonts/icomoon.svg @@ -7,201 +7,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -220,6 +25,9 @@ + + + \ No newline at end of file diff --git a/static/pkg/icomoon/fonts/icomoon.ttf b/static/pkg/icomoon/fonts/icomoon.ttf index a3672513..26946da4 100644 Binary files a/static/pkg/icomoon/fonts/icomoon.ttf and b/static/pkg/icomoon/fonts/icomoon.ttf differ diff --git a/static/pkg/icomoon/fonts/icomoon.woff b/static/pkg/icomoon/fonts/icomoon.woff index 0e511120..7d8f241b 100644 Binary files a/static/pkg/icomoon/fonts/icomoon.woff and b/static/pkg/icomoon/fonts/icomoon.woff differ diff --git a/static/pkg/particles/config.js b/static/pkg/particles/config.js new file mode 100644 index 00000000..2dc5a67c --- /dev/null +++ b/static/pkg/particles/config.js @@ -0,0 +1 @@ +particlesJS("particles-js", {"particles":{"number":{"value":160,"density":{"enable":false,"value_area":800}},"color":{"value":"#fff700"},"shape":{"type":"circle","stroke":{"width":0,"color":"#000000"},"polygon":{"nb_sides":5},"image":{"src":"","width":120,"height":80}},"opacity":{"value":1,"random":true,"anim":{"enable":true,"speed":0.16240621041348632,"opacity_min":0,"sync":true}},"size":{"value":3,"random":true,"anim":{"enable":true,"speed":0,"size_min":0,"sync":false}},"line_linked":{"enable":true,"distance":128.27296486924183,"color":"#fff700","opacity":0.01,"width":0},"move":{"enable":true,"speed":1,"direction":"none","random":true,"straight":false,"out_mode":"out","bounce":false,"attract":{"enable":false,"rotateX":600,"rotateY":600}}},"interactivity":{"detect_on":"canvas","events":{"onhover":{"enable":true,"mode":"repulse"},"onclick":{"enable":true,"mode":"push"},"resize":true},"modes":{"grab":{"distance":400,"line_linked":{"opacity":1}},"bubble":{"distance":250,"size":0,"duration":2,"opacity":0,"speed":3},"repulse":{"distance":400,"duration":0.4},"push":{"particles_nb":4},"remove":{"particles_nb":2}}},"retina_detect":false});var count_particles, stats, update; stats = new Stats; stats.setMode(0); stats.domElement.style.position = 'absolute'; stats.domElement.style.left = '0px'; stats.domElement.style.top = '0px'; document.body.appendChild(stats.domElement); count_particles = document.querySelector('.js-count-particles'); update = function() { stats.begin(); stats.end(); if (window.pJSDom[0].pJS.particles && window.pJSDom[0].pJS.particles.array) { count_particles.innerText = window.pJSDom[0].pJS.particles.array.length; } requestAnimationFrame(update); }; requestAnimationFrame(update);; diff --git a/static/pkg/particles/particles.css b/static/pkg/particles/particles.css new file mode 100644 index 00000000..4da7786c --- /dev/null +++ b/static/pkg/particles/particles.css @@ -0,0 +1,34 @@ +canvas{ + display: block; +} + +#particles-js{ + display: none; + width:100%; + position:absolute; + background-color: #313131; +} +.count-particles{ + background: #000022; + position: absolute; + color: #13E8E9; + font-size: .8em; + text-align: left; + text-indent: 4px; + line-height: 14px; + padding-bottom: 2px; + font-family: Helvetica, Arial, sans-serif; + font-weight: bold; +} +.js-count-particles{ + font-size: 1.1em; +} +#stats, .count-particles{ + -webkit-user-select: none; +} +#stats{ + overflow: hidden; +} +.count-particles{ + border-radius: 0 0 3px 3px; +} diff --git a/static/pkg/particles/particles.min.js b/static/pkg/particles/particles.min.js new file mode 100644 index 00000000..b3d46d12 --- /dev/null +++ b/static/pkg/particles/particles.min.js @@ -0,0 +1,9 @@ +/* ----------------------------------------------- +/* Author : Vincent Garreau - vincentgarreau.com +/* MIT license: http://opensource.org/licenses/MIT +/* Demo / Generator : vincentgarreau.com/particles.js +/* GitHub : github.com/VincentGarreau/particles.js +/* How to use? : Check the GitHub README +/* v2.0.0 +/* ----------------------------------------------- */ +function hexToRgb(e){var a=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(a,function(e,a,t,i){return a+a+t+t+i+i});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function clamp(e,a,t){return Math.min(Math.max(e,a),t)}function isInArray(e,a){return a.indexOf(e)>-1}var pJS=function(e,a){var t=document.querySelector("#"+e+" > .particles-js-canvas-el");this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var i=this.pJS;a&&Object.deepExtend(i,a),i.tmp.obj={size_value:i.particles.size.value,size_anim_speed:i.particles.size.anim.speed,move_speed:i.particles.move.speed,line_linked_distance:i.particles.line_linked.distance,line_linked_width:i.particles.line_linked.width,mode_grab_distance:i.interactivity.modes.grab.distance,mode_bubble_distance:i.interactivity.modes.bubble.distance,mode_bubble_size:i.interactivity.modes.bubble.size,mode_repulse_distance:i.interactivity.modes.repulse.distance},i.fn.retinaInit=function(){i.retina_detect&&window.devicePixelRatio>1?(i.canvas.pxratio=window.devicePixelRatio,i.tmp.retina=!0):(i.canvas.pxratio=1,i.tmp.retina=!1),i.canvas.w=i.canvas.el.offsetWidth*i.canvas.pxratio,i.canvas.h=i.canvas.el.offsetHeight*i.canvas.pxratio,i.particles.size.value=i.tmp.obj.size_value*i.canvas.pxratio,i.particles.size.anim.speed=i.tmp.obj.size_anim_speed*i.canvas.pxratio,i.particles.move.speed=i.tmp.obj.move_speed*i.canvas.pxratio,i.particles.line_linked.distance=i.tmp.obj.line_linked_distance*i.canvas.pxratio,i.interactivity.modes.grab.distance=i.tmp.obj.mode_grab_distance*i.canvas.pxratio,i.interactivity.modes.bubble.distance=i.tmp.obj.mode_bubble_distance*i.canvas.pxratio,i.particles.line_linked.width=i.tmp.obj.line_linked_width*i.canvas.pxratio,i.interactivity.modes.bubble.size=i.tmp.obj.mode_bubble_size*i.canvas.pxratio,i.interactivity.modes.repulse.distance=i.tmp.obj.mode_repulse_distance*i.canvas.pxratio},i.fn.canvasInit=function(){i.canvas.ctx=i.canvas.el.getContext("2d")},i.fn.canvasSize=function(){i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i&&i.interactivity.events.resize&&window.addEventListener("resize",function(){i.canvas.w=i.canvas.el.offsetWidth,i.canvas.h=i.canvas.el.offsetHeight,i.tmp.retina&&(i.canvas.w*=i.canvas.pxratio,i.canvas.h*=i.canvas.pxratio),i.canvas.el.width=i.canvas.w,i.canvas.el.height=i.canvas.h,i.particles.move.enable||(i.fn.particlesEmpty(),i.fn.particlesCreate(),i.fn.particlesDraw(),i.fn.vendors.densityAutoParticles()),i.fn.vendors.densityAutoParticles()})},i.fn.canvasPaint=function(){i.canvas.ctx.fillRect(0,0,i.canvas.w,i.canvas.h)},i.fn.canvasClear=function(){i.canvas.ctx.clearRect(0,0,i.canvas.w,i.canvas.h)},i.fn.particle=function(e,a,t){if(this.radius=(i.particles.size.random?Math.random():1)*i.particles.size.value,i.particles.size.anim.enable&&(this.size_status=!1,this.vs=i.particles.size.anim.speed/100,i.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=t?t.x:Math.random()*i.canvas.w,this.y=t?t.y:Math.random()*i.canvas.h,this.x>i.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>i.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),i.particles.move.bounce&&i.fn.vendors.checkOverlap(this,t),this.color={},"object"==typeof e.value)if(e.value instanceof Array){var s=e.value[Math.floor(Math.random()*i.particles.color.value.length)];this.color.rgb=hexToRgb(s)}else void 0!=e.value.r&&void 0!=e.value.g&&void 0!=e.value.b&&(this.color.rgb={r:e.value.r,g:e.value.g,b:e.value.b}),void 0!=e.value.h&&void 0!=e.value.s&&void 0!=e.value.l&&(this.color.hsl={h:e.value.h,s:e.value.s,l:e.value.l});else"random"==e.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof e.value&&(this.color=e,this.color.rgb=hexToRgb(this.color.value));this.opacity=(i.particles.opacity.random?Math.random():1)*i.particles.opacity.value,i.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=i.particles.opacity.anim.speed/100,i.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var n={};switch(i.particles.move.direction){case"top":n={x:0,y:-1};break;case"top-right":n={x:.5,y:-.5};break;case"right":n={x:1,y:-0};break;case"bottom-right":n={x:.5,y:.5};break;case"bottom":n={x:0,y:1};break;case"bottom-left":n={x:-.5,y:1};break;case"left":n={x:-1,y:0};break;case"top-left":n={x:-.5,y:-.5};break;default:n={x:0,y:0}}i.particles.move.straight?(this.vx=n.x,this.vy=n.y,i.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=n.x+Math.random()-.5,this.vy=n.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var r=i.particles.shape.type;if("object"==typeof r){if(r instanceof Array){var c=r[Math.floor(Math.random()*r.length)];this.shape=c}}else this.shape=r;if("image"==this.shape){var o=i.particles.shape;this.img={src:o.image.src,ratio:o.image.width/o.image.height},this.img.ratio||(this.img.ratio=1),"svg"==i.tmp.img_type&&void 0!=i.tmp.source_svg&&(i.fn.vendors.createSvgImg(this),i.tmp.pushing&&(this.img.loaded=!1))}},i.fn.particle.prototype.draw=function(){function e(){i.canvas.ctx.drawImage(r,a.x-t,a.y-t,2*t,2*t/a.img.ratio)}var a=this;if(void 0!=a.radius_bubble)var t=a.radius_bubble;else var t=a.radius;if(void 0!=a.opacity_bubble)var s=a.opacity_bubble;else var s=a.opacity;if(a.color.rgb)var n="rgba("+a.color.rgb.r+","+a.color.rgb.g+","+a.color.rgb.b+","+s+")";else var n="hsla("+a.color.hsl.h+","+a.color.hsl.s+"%,"+a.color.hsl.l+"%,"+s+")";switch(i.canvas.ctx.fillStyle=n,i.canvas.ctx.beginPath(),a.shape){case"circle":i.canvas.ctx.arc(a.x,a.y,t,0,2*Math.PI,!1);break;case"edge":i.canvas.ctx.rect(a.x-t,a.y-t,2*t,2*t);break;case"triangle":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t,a.y+t/1.66,2*t,3,2);break;case"polygon":i.fn.vendors.drawShape(i.canvas.ctx,a.x-t/(i.particles.shape.polygon.nb_sides/3.5),a.y-t/.76,2.66*t/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,1);break;case"star":i.fn.vendors.drawShape(i.canvas.ctx,a.x-2*t/(i.particles.shape.polygon.nb_sides/4),a.y-t/1.52,2*t*2.66/(i.particles.shape.polygon.nb_sides/3),i.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==i.tmp.img_type)var r=a.img.obj;else var r=i.tmp.img_obj;r&&e()}i.canvas.ctx.closePath(),i.particles.shape.stroke.width>0&&(i.canvas.ctx.strokeStyle=i.particles.shape.stroke.color,i.canvas.ctx.lineWidth=i.particles.shape.stroke.width,i.canvas.ctx.stroke()),i.canvas.ctx.fill()},i.fn.particlesCreate=function(){for(var e=0;e=i.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=i.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),i.particles.size.anim.enable&&(1==a.size_status?(a.radius>=i.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=i.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==i.particles.move.out_mode)var s={x_left:a.radius,x_right:i.canvas.w,y_top:a.radius,y_bottom:i.canvas.h};else var s={x_left:-a.radius,x_right:i.canvas.w+a.radius,y_top:-a.radius,y_bottom:i.canvas.h+a.radius};switch(a.x-a.radius>i.canvas.w?(a.x=s.x_left,a.y=Math.random()*i.canvas.h):a.x+a.radius<0&&(a.x=s.x_right,a.y=Math.random()*i.canvas.h),a.y-a.radius>i.canvas.h?(a.y=s.y_top,a.x=Math.random()*i.canvas.w):a.y+a.radius<0&&(a.y=s.y_bottom,a.x=Math.random()*i.canvas.w),i.particles.move.out_mode){case"bounce":a.x+a.radius>i.canvas.w?a.vx=-a.vx:a.x-a.radius<0&&(a.vx=-a.vx),a.y+a.radius>i.canvas.h?a.vy=-a.vy:a.y-a.radius<0&&(a.vy=-a.vy)}if(isInArray("grab",i.interactivity.events.onhover.mode)&&i.fn.modes.grabParticle(a),(isInArray("bubble",i.interactivity.events.onhover.mode)||isInArray("bubble",i.interactivity.events.onclick.mode))&&i.fn.modes.bubbleParticle(a),(isInArray("repulse",i.interactivity.events.onhover.mode)||isInArray("repulse",i.interactivity.events.onclick.mode))&&i.fn.modes.repulseParticle(a),i.particles.line_linked.enable||i.particles.move.attract.enable)for(var n=e+1;n0){var c=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+c.r+","+c.g+","+c.b+","+r+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(a.x,a.y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}},i.fn.interact.attractParticles=function(e,a){var t=e.x-a.x,s=e.y-a.y,n=Math.sqrt(t*t+s*s);if(n<=i.particles.line_linked.distance){var r=t/(1e3*i.particles.move.attract.rotateX),c=s/(1e3*i.particles.move.attract.rotateY);e.vx-=r,e.vy-=c,a.vx+=r,a.vy+=c}},i.fn.interact.bounceParticles=function(e,a){var t=e.x-a.x,i=e.y-a.y,s=Math.sqrt(t*t+i*i),n=e.radius+a.radius;n>=s&&(e.vx=-e.vx,e.vy=-e.vy,a.vx=-a.vx,a.vy=-a.vy)},i.fn.modes.pushParticles=function(e,a){i.tmp.pushing=!0;for(var t=0;e>t;t++)i.particles.array.push(new i.fn.particle(i.particles.color,i.particles.opacity.value,{x:a?a.pos_x:Math.random()*i.canvas.w,y:a?a.pos_y:Math.random()*i.canvas.h})),t==e-1&&(i.particles.move.enable||i.fn.particlesDraw(),i.tmp.pushing=!1)},i.fn.modes.removeParticles=function(e){i.particles.array.splice(0,e),i.particles.move.enable||i.fn.particlesDraw()},i.fn.modes.bubbleParticle=function(e){function a(){e.opacity_bubble=e.opacity,e.radius_bubble=e.radius}function t(a,t,s,n,c){if(a!=t)if(i.tmp.bubble_duration_end){if(void 0!=s){var o=n-p*(n-a)/i.interactivity.modes.bubble.duration,l=a-o;d=a+l,"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else if(r<=i.interactivity.modes.bubble.distance){if(void 0!=s)var v=s;else var v=n;if(v!=a){var d=n-p*(n-a)/i.interactivity.modes.bubble.duration;"size"==c&&(e.radius_bubble=d),"opacity"==c&&(e.opacity_bubble=d)}}else"size"==c&&(e.radius_bubble=void 0),"opacity"==c&&(e.opacity_bubble=void 0)}if(i.interactivity.events.onhover.enable&&isInArray("bubble",i.interactivity.events.onhover.mode)){var s=e.x-i.interactivity.mouse.pos_x,n=e.y-i.interactivity.mouse.pos_y,r=Math.sqrt(s*s+n*n),c=1-r/i.interactivity.modes.bubble.distance;if(r<=i.interactivity.modes.bubble.distance){if(c>=0&&"mousemove"==i.interactivity.status){if(i.interactivity.modes.bubble.size!=i.particles.size.value)if(i.interactivity.modes.bubble.size>i.particles.size.value){var o=e.radius+i.interactivity.modes.bubble.size*c;o>=0&&(e.radius_bubble=o)}else{var l=e.radius-i.interactivity.modes.bubble.size,o=e.radius-l*c;o>0?e.radius_bubble=o:e.radius_bubble=0}if(i.interactivity.modes.bubble.opacity!=i.particles.opacity.value)if(i.interactivity.modes.bubble.opacity>i.particles.opacity.value){var v=i.interactivity.modes.bubble.opacity*c;v>e.opacity&&v<=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}else{var v=e.opacity-(i.particles.opacity.value-i.interactivity.modes.bubble.opacity)*c;v=i.interactivity.modes.bubble.opacity&&(e.opacity_bubble=v)}}}else a();"mouseleave"==i.interactivity.status&&a()}else if(i.interactivity.events.onclick.enable&&isInArray("bubble",i.interactivity.events.onclick.mode)){if(i.tmp.bubble_clicking){var s=e.x-i.interactivity.mouse.click_pos_x,n=e.y-i.interactivity.mouse.click_pos_y,r=Math.sqrt(s*s+n*n),p=((new Date).getTime()-i.interactivity.mouse.click_time)/1e3;p>i.interactivity.modes.bubble.duration&&(i.tmp.bubble_duration_end=!0),p>2*i.interactivity.modes.bubble.duration&&(i.tmp.bubble_clicking=!1,i.tmp.bubble_duration_end=!1)}i.tmp.bubble_clicking&&(t(i.interactivity.modes.bubble.size,i.particles.size.value,e.radius_bubble,e.radius,"size"),t(i.interactivity.modes.bubble.opacity,i.particles.opacity.value,e.opacity_bubble,e.opacity,"opacity"))}},i.fn.modes.repulseParticle=function(e){function a(){var a=Math.atan2(d,p);if(e.vx=u*Math.cos(a),e.vy=u*Math.sin(a),"bounce"==i.particles.move.out_mode){var t={x:e.x+e.vx,y:e.y+e.vy};t.x+e.radius>i.canvas.w?e.vx=-e.vx:t.x-e.radius<0&&(e.vx=-e.vx),t.y+e.radius>i.canvas.h?e.vy=-e.vy:t.y-e.radius<0&&(e.vy=-e.vy)}}if(i.interactivity.events.onhover.enable&&isInArray("repulse",i.interactivity.events.onhover.mode)&&"mousemove"==i.interactivity.status){var t=e.x-i.interactivity.mouse.pos_x,s=e.y-i.interactivity.mouse.pos_y,n=Math.sqrt(t*t+s*s),r={x:t/n,y:s/n},c=i.interactivity.modes.repulse.distance,o=100,l=clamp(1/c*(-1*Math.pow(n/c,2)+1)*c*o,0,50),v={x:e.x+r.x*l,y:e.y+r.y*l};"bounce"==i.particles.move.out_mode?(v.x-e.radius>0&&v.x+e.radius0&&v.y+e.radius=m&&a()}else 0==i.tmp.repulse_clicking&&(e.vx=e.vx_i,e.vy=e.vy_i)},i.fn.modes.grabParticle=function(e){if(i.interactivity.events.onhover.enable&&"mousemove"==i.interactivity.status){var a=e.x-i.interactivity.mouse.pos_x,t=e.y-i.interactivity.mouse.pos_y,s=Math.sqrt(a*a+t*t);if(s<=i.interactivity.modes.grab.distance){var n=i.interactivity.modes.grab.line_linked.opacity-s/(1/i.interactivity.modes.grab.line_linked.opacity)/i.interactivity.modes.grab.distance;if(n>0){var r=i.particles.line_linked.color_rgb_line;i.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+n+")",i.canvas.ctx.lineWidth=i.particles.line_linked.width,i.canvas.ctx.beginPath(),i.canvas.ctx.moveTo(e.x,e.y),i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x,i.interactivity.mouse.pos_y),i.canvas.ctx.stroke(),i.canvas.ctx.closePath()}}}},i.fn.vendors.eventsListeners=function(){"window"==i.interactivity.detect_on?i.interactivity.el=window:i.interactivity.el=i.canvas.el,(i.interactivity.events.onhover.enable||i.interactivity.events.onclick.enable)&&(i.interactivity.el.addEventListener("mousemove",function(e){if(i.interactivity.el==window)var a=e.clientX,t=e.clientY;else var a=e.offsetX||e.clientX,t=e.offsetY||e.clientY;i.interactivity.mouse.pos_x=a,i.interactivity.mouse.pos_y=t,i.tmp.retina&&(i.interactivity.mouse.pos_x*=i.canvas.pxratio,i.interactivity.mouse.pos_y*=i.canvas.pxratio),i.interactivity.status="mousemove"}),i.interactivity.el.addEventListener("mouseleave",function(e){i.interactivity.mouse.pos_x=null,i.interactivity.mouse.pos_y=null,i.interactivity.status="mouseleave"})),i.interactivity.events.onclick.enable&&i.interactivity.el.addEventListener("click",function(){if(i.interactivity.mouse.click_pos_x=i.interactivity.mouse.pos_x,i.interactivity.mouse.click_pos_y=i.interactivity.mouse.pos_y,i.interactivity.mouse.click_time=(new Date).getTime(),i.interactivity.events.onclick.enable)switch(i.interactivity.events.onclick.mode){case"push":i.particles.move.enable?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):1==i.interactivity.modes.push.particles_nb?i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb,i.interactivity.mouse):i.interactivity.modes.push.particles_nb>1&&i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);break;case"remove":i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);break;case"bubble":i.tmp.bubble_clicking=!0;break;case"repulse":i.tmp.repulse_clicking=!0,i.tmp.repulse_count=0,i.tmp.repulse_finish=!1,setTimeout(function(){i.tmp.repulse_clicking=!1},1e3*i.interactivity.modes.repulse.duration)}})},i.fn.vendors.densityAutoParticles=function(){if(i.particles.number.density.enable){var e=i.canvas.el.width*i.canvas.el.height/1e3;i.tmp.retina&&(e/=2*i.canvas.pxratio);var a=e*i.particles.number.value/i.particles.number.density.value_area,t=i.particles.array.length-a;0>t?i.fn.modes.pushParticles(Math.abs(t)):i.fn.modes.removeParticles(t)}},i.fn.vendors.checkOverlap=function(e,a){for(var t=0;tv;v++)e.lineTo(i,0),e.translate(i,0),e.rotate(l);e.fill(),e.restore()},i.fn.vendors.exportImg=function(){window.open(i.canvas.el.toDataURL("image/png"),"_blank")},i.fn.vendors.loadImg=function(e){if(i.tmp.img_error=void 0,""!=i.particles.shape.image.src)if("svg"==e){var a=new XMLHttpRequest;a.open("GET",i.particles.shape.image.src),a.onreadystatechange=function(e){4==a.readyState&&(200==a.status?(i.tmp.source_svg=e.currentTarget.response,i.fn.vendors.checkBeforeDraw()):(console.log("Error pJS - Image not found"),i.tmp.img_error=!0))},a.send()}else{var t=new Image;t.addEventListener("load",function(){i.tmp.img_obj=t,i.fn.vendors.checkBeforeDraw()}),t.src=i.particles.shape.image.src}else console.log("Error pJS - No image.src"),i.tmp.img_error=!0},i.fn.vendors.draw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type?i.tmp.count_svg>=i.particles.number.value?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):void 0!=i.tmp.img_obj?(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame)):i.tmp.img_error||(i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw)):(i.fn.particlesDraw(),i.particles.move.enable?i.fn.drawAnimFrame=requestAnimFrame(i.fn.vendors.draw):cancelRequestAnimFrame(i.fn.drawAnimFrame))},i.fn.vendors.checkBeforeDraw=function(){"image"==i.particles.shape.type?"svg"==i.tmp.img_type&&void 0==i.tmp.source_svg?i.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(i.tmp.checkAnimFrame),i.tmp.img_error||(i.fn.vendors.init(),i.fn.vendors.draw())):(i.fn.vendors.init(),i.fn.vendors.draw())},i.fn.vendors.init=function(){i.fn.retinaInit(),i.fn.canvasInit(),i.fn.canvasSize(),i.fn.canvasPaint(),i.fn.particlesCreate(),i.fn.vendors.densityAutoParticles(),i.particles.line_linked.color_rgb_line=hexToRgb(i.particles.line_linked.color)},i.fn.vendors.start=function(){isInArray("image",i.particles.shape.type)?(i.tmp.img_type=i.particles.shape.image.src.substr(i.particles.shape.image.src.length-3),i.fn.vendors.loadImg(i.tmp.img_type)):i.fn.vendors.checkBeforeDraw()},i.fn.vendors.eventsListeners(),i.fn.vendors.start()};Object.deepExtend=function(e,a){for(var t in a)a[t]&&a[t].constructor&&a[t].constructor===Object?(e[t]=e[t]||{},arguments.callee(e[t],a[t])):e[t]=a[t];return e},window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),window.cancelRequestAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||clearTimeout}(),window.pJSDom=[],window.particlesJS=function(e,a){"string"!=typeof e&&(a=e,e="particles-js"),e||(e="particles-js");var t=document.getElementById(e),i="particles-js-canvas-el",s=t.getElementsByClassName(i);if(s.length)for(;s.length>0;)t.removeChild(s[0]);var n=document.createElement("canvas");n.className=i,n.style.width="100%",n.style.height="100%";var r=document.getElementById(e).appendChild(n);null!=r&&pJSDom.push(new pJS(e,a))},window.particlesJS.load=function(e,a,t){var i=new XMLHttpRequest;i.open("GET",a),i.onreadystatechange=function(a){if(4==i.readyState)if(200==i.status){var s=JSON.parse(a.currentTarget.response);window.particlesJS(e,s),t&&t()}else console.log("Error pJS - XMLHttpRequest status: "+i.status),console.log("Error pJS - File config not found")},i.send()}; \ No newline at end of file diff --git a/static/pkg/particles/stats.min.js b/static/pkg/particles/stats.min.js new file mode 100644 index 00000000..5b10050e --- /dev/null +++ b/static/pkg/particles/stats.min.js @@ -0,0 +1,89 @@ + + + + + + Page not found · GitHub Pages + + + + +
    + +

    404

    +

    File not found

    + +

    + The site configured at this address does not + contain the requested file. +

    + +

    + If this is your site, make sure that the filename case matches the URL + as well as any file permissions.
    + For root URLs (like http://example.com/) you must provide an + index.html file. +

    + +

    + Read the full documentation + for more information about using GitHub Pages. +

    + + + + + + +
    + + diff --git a/static/term/ascii/ai.txt b/static/term/ascii/ai.txt new file mode 100644 index 00000000..c9566ce2 --- /dev/null +++ b/static/term/ascii/ai.txt @@ -0,0 +1,19 @@ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⡿⠿⠟⠛⠻⠿⢿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⡿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⢿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⢿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ diff --git a/static/term/ascii/avatar.txt b/static/term/ascii/avatar.txt new file mode 100644 index 00000000..8b5d9afb --- /dev/null +++ b/static/term/ascii/avatar.txt @@ -0,0 +1,27 @@ + +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⡛⢉⣩⣥⣤⣤⣤⣉⣉⡙⢛⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠻⣦⣽⣯⣭⣭⣭⣭⣭⣭⣭⣴⡟⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢉⣚⣭⣥⣶⣶⣾⣷⣶⣶⣶⣶⣶⣬⣭⣓⡉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢛⣉⣥⣶⣶⣶⣶⣶⣶⣶⣬⣍⣛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⣡⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣮⡛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢋⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢃⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⣾⣿⣿⣿⣿⣿⡿⠋⢽⣿⣿⣿⣿⣿⣿⡿⢀⢿⣿⣿⣿⣿⣿⣇⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢠⣿⣿⣿⣿⣿⡿⢡⣷⢸⣿⣿⣿⣿⣿⣿⢃⣿⢸⣿⣿⣿⣿⣿⣿⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⣿⣿⣿⣿⣿⠇⣿⣿⡌⣿⣿⣿⣿⣿⠃⣾⣿⢿⣿⠋⣿⣿⣿⣿⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠸⣿⣿⣿⣿⠏⠠⠿⠿⣧⢻⠏⣿⣿⢋⡼⢟⡛⠸⣡⡇⣿⣿⣿⡏⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⢿⣿⣿⡟⢀⠐⡉⢭⠻⣎⢠⠹⣣⣾⠏⠅⢀⠱⡌⡇⠋⢍⢻⢡⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣞⠈⢿⣿⡇⣾⡄⣆⣨⢀⣿⣾⣶⣿⣿⡄⢇⡼⣰⣷⡇⣌⡼⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣌⢿⡇⣿⣿⣶⣷⣾⣿⣿⣿⣿⣿⣿⣾⣾⣿⡿⠠⠛⢁⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⢙⠈⢿⣿⣿⣿⣿⠿⠿⠿⣿⣿⣿⣿⠟⡡⠊⡡⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠈⢠⣷⡍⠛⠻⠿⠿⠿⠿⣟⢛⠉⠔⠈⢰⡇⢳⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⢸⡟⠁⠀⠀⣿⣿⣿⣿⣿⠀⠀⣾⠁⠸⢷⢸⡆⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⡔⢸⠃⠀⠐⢀⣿⣿⣿⣿⣿⡰⠀⣿⠀⣧⢸⡀⣿⡘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠠⣋⢸⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⠀⡿⢠⣉⣈⡓⠘⣧⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⢠⣾⢏⢸⠀⣼⡿⠿⢿⣿⣿⣿⡿⡻⢸⡇⣾⣿⣿⣿⣷⣮⡣⡹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⡑⡁⣴⣿⣷⣍⢸⠀⡷⠾⠿⠿⢿⣿⣿⣿⣿⢸⠃⣿⣿⣿⣿⣿⣿⣷⠑⡜⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⡿⢃⡎⡼⢸⣿⣿⣿⣿⢸⢐⣶⣿⣿⠇⣷⣮⢻⣿⡇⡼⢠⣿⠿⠿⠿⠿⠿⣛⣰⠸⣮⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿ + diff --git a/static/term/ascii/help.txt b/static/term/ascii/help.txt new file mode 100644 index 00000000..c51c2273 --- /dev/null +++ b/static/term/ascii/help.txt @@ -0,0 +1,20 @@ + +Commands: + ai + +Flags: + -h, --help + +Options: + a : logo + v : pds version + p : ai profile + did : did + plc : plc + record : timeline + +ex: + $ ai v : {\"version\":\"0.0.1\"} + +https://git.syui.ai/ai/bot + diff --git a/static/term/css/terminal.css b/static/term/css/terminal.css new file mode 100644 index 00000000..d81126f7 --- /dev/null +++ b/static/term/css/terminal.css @@ -0,0 +1,507 @@ +#window { + margin-left: auto; + text-align: left; + margin-right: auto; + background: #343434; + border-radius: 7px; + overflow: hidden; + width: 100%; + height: 400px; +} + +#topbar { + width: 100%; + height: 21px; + font-size: 16px; + font-family: "Myriad Pro", sans-serif; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.25); + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} + +#topbar ul li { + float: left; + padding: 0 10px; + height: 21px; + line-height: 24px; +} +#topbar ul li:first-child { + font-size: 20px; + line-height: 26px; + margin-left: 5px; +} +#topbar ul li:nth-child(2) { + font-family: "Myriad-Semi", sans-serif; +} +#topbar ul li:active { + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(1, #4a82ff), color-stop(0, #0052fc)); + color: #fff; + text-shadow: none; +} +#toolbar { + width: 100%; + height: 25px; + background: #ccc; +} +#toolbar .top { + float: left; + width: 100%; + height: 23px; +} +#toolbar .bottom { + float: left; + width: 100%; + height: 30px; +} +#toolbar #lights { + float: left; + position: relative; + top: 6px; + left: 7px; +} +.light { + float: left; + width: 14px; + height: 14px; + border-radius: 14px; + -webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 0px 3px #000 inset; + -moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 0px 3px #000 inset; + box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 0px 3px #000 inset; + overflow: hidden; +} +#lights:hover .glyph { + opacity: 1; + cursor: default; +} +.light .shine { + width: 4px; + height: 3px; + border-radius: 10px; + background: -moz-radial-gradient(center, ellipse cover, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background-image: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-radial-gradient(center, ellipse cover, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: -o-radial-gradient(center, ellipse cover, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: -ms-radial-gradient(center, ellipse cover, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + background: radial-gradient(center, ellipse cover, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); +} +.light .glow { + width: 14px; + height: 8px; + background-image: -webkit-gradient(radial, center bottom, 0, center center, 5, from(rgba(255, 255, 255, 0.75)), to(rgba(255, 255, 255, 0))); + background: 0px 0px -moz-radial-gradient(bottom, cover, rgba(255, 255, 255, 0.70) 0%, rgba(255, 255, 255, 0) 80%); +} +.red { + background: #f41b16; + background: -moz-linear-gradient(top, #f41b16 0%, #fc7471 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f41b16), color-stop(100%, #fc7471)); + background: -webkit-linear-gradient(top, #f41b16 0%, #fc7471 100%); + background: -o-linear-gradient(top, #f41b16 0%, #fc7471 100%); + background: -ms-linear-gradient(top, #f41b16 0%, #fc7471 100%); + background: linear-gradient(top, #f41b16 0%, #fc7471 100%); +} +.red:active { + background: #972f2e; + background: -moz-linear-gradient(top, #972f2e 0%, #fc7471 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #972f2e), color-stop(100%, #fc7471)); + background: -webkit-linear-gradient(top, #972f2e 0%, #fc7471 100%); + background: -o-linear-gradient(top, #972f2e 0%, #fc7471 100%); + background: -ms-linear-gradient(top, #972f2e 0%, #fc7471 100%); + background: linear-gradient(top, #972f2e 0%, #fc7471 100%); +} +.red .shine { + position: relative; + top: -21px; + left: 5px; +} +.red .glow { + position: relative; + top: -20px; +} +.red .glyph { + position: relative; + top: -5px; + left: 3px; + font-size: 14px; + font-weight: 400; + color: #9b3a36; + z-index: 50; + opacity: 0; +} +.yellow { + background: #f4a316; + background: -moz-linear-gradient(left, #f4a316 0%, #fcc371 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%, #f4a316), color-stop(100%, #fcc371)); + background: -webkit-linear-gradient(left, #f4a316 0%, #fcc371 100%); + background: -o-linear-gradient(left, #f4a316 0%, #fcc371 100%); + background: -ms-linear-gradient(left, #f4a316 0%, #fcc371 100%); + background: linear-gradient(left, #f4a316 0%, #fcc371 100%); + margin: 0px 7px; +} +.yellow:active { + background: #ae4f1e; + background: -moz-linear-gradient(top, #ae4f1e 0%, #fcc371 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ae4f1e), color-stop(100%, #fcc371)); + background: -webkit-linear-gradient(top, #ae4f1e 0%, #fcc371 100%); + background: -o-linear-gradient(top, #ae4f1e 0%, #fcc371 100%); + background: -ms-linear-gradient(top, #ae4f1e 0%, #fcc371 100%); + background: linear-gradient(top, #ae4f1e 0%, #fcc371 100%); +} +.yellow .shine { + position: relative; + top: -21px; + left: 5px; +} +.yellow .glow { + position: relative; + top: -20px; +} +.yellow .glyph { + position: relative; + top: -5px; + left: 3px; + font-size: 24px; + color: #854322; + z-index: 50; + opacity: 0; + -webkit-transform: scaleY(1.5) scaleX(1.3); +} +.green { + background: #4cae2e; + background: -moz-linear-gradient(top, #4cae2e 0%, #dafc71 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #4cae2e), color-stop(100%, #dafc71)); + background: -webkit-linear-gradient(top, #4cae2e 0%, #dafc71 100%); + background: -o-linear-gradient(top, #4cae2e 0%, #dafc71 100%); + background: -ms-linear-gradient(top, #4cae2e 0%, #dafc71 100%); + background: linear-gradient(top, #4cae2e 0%, #dafc71 100%); +} +.green:active { + background: #48752b; + background: -moz-linear-gradient(top, #48752b 0%, #dafc71 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #48752b), color-stop(100%, #dafc71)); + background: -webkit-linear-gradient(top, #48752b 0%, #dafc71 100%); + background: -o-linear-gradient(top, #48752b 0%, #dafc71 100%); + background: -ms-linear-gradient(top, #48752b 0%, #dafc71 100%); + background: linear-gradient(top, #48752b 0%, #dafc71 100%); +} +.green .shine { + position: relative; + top: -20px; + left: 5px; +} +.green .glow { + position: relative; + top: -20px; +} +.green .glyph { + position: relative; + top: -5px; + left: 3px; + font-size: 14px; + font-weight: bold; + color: #25571d; + z-index: 50; + opacity: 0; +} +@-moz-document url-prefix() { + .red .glyph { + position: relative; + top: -5px; + } + .yellow .glyph { + top: -4px; + left: 3px; + } + .green .glyph { + position: relative; + top: -4px; + } +} +#title { + float: left; + position: relative; + top: 6px; + width: 40%; + left: 45%; + font-family: "Myriad Pro", sans-serif; + font-size: 16px; + line-height: 14px; + font-weight: bold; +} +.folder { + float: left; + margin-right: 5px; +} +.folder .tab { + width: 4px; + height: 2px; + background: #a4c5da; + border: 1px solid #728ea3; + border-bottom: none; + border-radius: 2px 2px 0px 0px; + -webkit-box-shadow: 0px -1px 0px #99b5c7 inset; + margin-left: 1px; + z-index: 5000; + margin-bottom: -1px; +} +.folder .body { + width: 14px; + height: 10px; + border: 1px solid #6e8ba1; + background: #b8cfe0; + background: -moz-linear-gradient(top, #b8cfe0 0%, #86adc8 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b8cfe0), color-stop(100%, #86adc8)); + background: -webkit-linear-gradient(top, #b8cfe0 0%, #86adc8 100%); + background: -o-linear-gradient(top, #b8cfe0 0%, #86adc8 100%); + background: -ms-linear-gradient(top, #b8cfe0 0%, #86adc8 100%); + background: linear-gradient(top, #b8cfe0 0%, #86adc8 100%); + z-index: -50; + -webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.25) inset, 0px 1px 0px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.25) inset, 0px 1px 0px rgba(0, 0, 0, 0.2); +} +#nav { + margin: 1px 8px; + float: left; +} +#view { + margin: 2px 0 0 110px; + display: inline-block; +} +.control_box { + height: 20px; + border-radius: 3px; + border: 1px solid #555; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(1, #fefefe), color-stop(0, #b8b8b8)); + box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.25); +} +.control_box .control { + height: 20px; + border-right: 1px solid #2e2e2e; + float: left; + text-align: center; + width: 27px; +} +.control:last-child { + border-right: 0px solid !important; +} +.control:active { + background: #b0afb0; + -webkit-box-shadow: 0px 0px 4px #000 inset; +} +.active { + background: #707070 !important; + -webkit-box-shadow: 0px 3px 4px rgba(0, 0, 0, 0.6) inset !important; +} +#body { + font-family: Andale Mono, monospace; + line-height: 1em; + font-size: 13px; + float: left; + width: 100%; + background: #002b36; + padding: 10px; + line-height: 1.5em; +} +#body p { + color: #63de00!important; +} +@keyframes blink { + 0% { + background: rgba(99, 222, 0, 100); + } + 100% { + background: rgba(99, 222, 0, 0); + } +} +@-webkit-keyframes blink { + 0% { + background: rgba(99, 222, 0, 100); + } + 100% { + background: rgba(99, 222, 0, 0); + } +} +@-moz-keyframes blink { + 0% { + background: rgba(99, 222, 0, 100); + } + 100% { + background: rgba(99, 222, 0, 0); + } +} +.cursor { + width: 10px; + margin-left: 0px; + color: #fff; +} +#body p::-webkit-selection { + background: #0b209e; +} +#body p::selection { + background: #0b209e; +} +#body p::-moz-selection { + background: #0b209e; +} +#body p { + margin-top: 5px; + margin-bottom: 5px; + font-size: 13px; +} +#content { + float: left; + margin-top: 1px; +} +#foot { + height: 23px; + width: 100%; + float: left; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(1, #cbcbcb), color-stop(0, #a7a7a7)); + border-top: 1px solid #515151; + border-radius: 0 0 5px 5px; +} +#foot .handle { + width: 11px; + height: 11px; + float: right; + margin: 6px; + overflow: hidden; +} +.handle .grip { + -webkit-transform: rotate(45deg) scaley(3); + margin: 2px 0 0 2px; + color: #646464; + text-shadow: 1px 1px 0 #c6c6c6; + font-size: 14px; +} +.icon .frame { + width: 82px; + height: 82px; + border-radius: 5px; + border: 2px solid transparent; +} +.icon .name { + color: #000; + padding-top: 3px; + border-radius: 15px; + width: 55px; + margin: 5px 0 0 15px; +} +.icon .folder { + margin: 15px 0 0 6px; +} +#icon-github { + text-align: -999px; + font-size: 1px; + display: block; + width: 156px; + height: 133px; + background-image: url(../img/sprite.png); + background-position: 0 133px; +} +#icon-github:hover { + background-position: 0 0px; +} +#icon-rubygems { + text-align: -999px; + font-size: 1px; + display: block; + width: 156px; + height: 133px; + background-image: url(../img/sprite.png); + background-position: 158px 133px; +} +#icon-rubygems:hover { + background-position: 158px 0px; +} +.source-urls { + margin-top: 40px; + margin-bottom: 40px; +} +.no-margin-bot { + color: #337AB7; +} +span { + font-size: 15px; +} +#particles-js { + position: absolute; + width: 98%; +} +#particles-js-no { + position: absolute; + width: 98%; +} + +#icon-github:hover, +i.icon.ion-close-circled:hover, +i.icon.ion-minus-circled:hover, +i.icon.ion-plus-circled:hover { + color: rgba(0, 0, 0, .5); +} +i.icon.ion-close-circled { + color: rgba(212, 42, 38, 0.83); + text-shadow: 0 0 1px rgba(187, 187, 187, 0.56); + padding-top: 3px; +} +i.icon.ion-minus-circled { + color: rgb(160, 165, 34); + text-shadow: 0 0 1px rgba(187, 187, 187, 0.56); + padding-top: 3px; +} +i.icon.ion-plus-circled { + color: rgb(82, 183, 51); + text-shadow: 0 0 1px rgba(187, 187, 187, 0.56); + padding-top: 3px; +} +.icon { + margin: 7px; + float: left; + font-size: 20px; +} +#title-left { + position: relative; + top: -8px; + font-family: "Myriad Pro", sans-serif; + font-size: 14px; + left: 49%; +} +#terminal-origin { + font-family: monospace; +} +@media all and (-webkit-min-device-pixel-ratio: 0) and (min-resolution: .001dpcm) { + #title-left { + top: -13px; + } +} + +home-layout { + background-color: #f1f1f1; +} + +.terminal, .cmd { + background-color: #343434; +} + +@media screen and (max-width:1000px){i.icon.ion-minus-circled{display:none} + #window{width:100%;} +} +@media screen and (max-width:800px){body{padding-top:0px;} + #title-left{left:50%;} + #window{width:100%;} + .container{padding:0px;} + /*article{padding:10px 20px;}*/ + i.icon.ion-minus-circled{display:none} +} +@media screen and (max-width:800px){#title-left{left:48%;} +} +@media screen and (max-width:500px){#title-left{left:40%;} +} +@media screen and (max-width:400px){body{padding-top:0px;width:auto;} + #title-left{left:50%;} + /*article{padding:10px 10px;}*/ + #particles-js{width:auto;} + #particles-js-no{width:auto;} + i.icon.ion-minus-circled{display:none} + i.icon.ion-plus-circled{display:none} +} + diff --git a/static/term/css/terminal.mobile.css b/static/term/css/terminal.mobile.css new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/static/term/css/terminal.mobile.css @@ -0,0 +1 @@ + diff --git a/static/term/icon/ai.png b/static/term/icon/ai.png new file mode 100644 index 00000000..d21dabe9 Binary files /dev/null and b/static/term/icon/ai.png differ diff --git a/static/term/icon/ai.svg b/static/term/icon/ai.svg new file mode 100644 index 00000000..8926e2a9 --- /dev/null +++ b/static/term/icon/ai.svg @@ -0,0 +1,1882 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + diff --git a/static/term/icon/apple-touch-icon.png b/static/term/icon/apple-touch-icon.png new file mode 100644 index 00000000..d21dabe9 Binary files /dev/null and b/static/term/icon/apple-touch-icon.png differ diff --git a/static/term/icon/avatar.png b/static/term/icon/avatar.png new file mode 100644 index 00000000..f091ef11 Binary files /dev/null and b/static/term/icon/avatar.png differ diff --git a/static/term/icon/player.png b/static/term/icon/player.png new file mode 100644 index 00000000..141e1d7c Binary files /dev/null and b/static/term/icon/player.png differ diff --git a/static/term/icon/player.svg b/static/term/icon/player.svg new file mode 100644 index 00000000..6deda610 --- /dev/null +++ b/static/term/icon/player.svg @@ -0,0 +1,79 @@ + + + + + + + + + + diff --git a/static/term/icon/term.png b/static/term/icon/term.png new file mode 100644 index 00000000..9d06200d Binary files /dev/null and b/static/term/icon/term.png differ diff --git a/static/term/icon/term.svg b/static/term/icon/term.svg new file mode 100644 index 00000000..d9dc00e8 --- /dev/null +++ b/static/term/icon/term.svg @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/static/term/icon/terminal.png b/static/term/icon/terminal.png new file mode 100644 index 00000000..ded09568 Binary files /dev/null and b/static/term/icon/terminal.png differ diff --git a/static/term/icon/terminal.svg b/static/term/icon/terminal.svg new file mode 100644 index 00000000..7eb377cc --- /dev/null +++ b/static/term/icon/terminal.svg @@ -0,0 +1,32 @@ + + + + + + + + + diff --git a/static/term/js/bundle.js b/static/term/js/bundle.js new file mode 100644 index 00000000..2e0e3ad8 --- /dev/null +++ b/static/term/js/bundle.js @@ -0,0 +1,5241 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ var parentHotUpdateCallback = this["webpackHotUpdate"]; +/******/ this["webpackHotUpdate"] = +/******/ function webpackHotUpdateCallback(chunkId, moreModules) { // eslint-disable-line no-unused-vars +/******/ hotAddUpdateChunk(chunkId, moreModules); +/******/ if(parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules); +/******/ } +/******/ +/******/ function hotDownloadUpdateChunk(chunkId) { // eslint-disable-line no-unused-vars +/******/ var head = document.getElementsByTagName("head")[0]; +/******/ var script = document.createElement("script"); +/******/ script.type = "text/javascript"; +/******/ script.charset = "utf-8"; +/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js"; +/******/ head.appendChild(script); +/******/ } +/******/ +/******/ function hotDownloadManifest(callback) { // eslint-disable-line no-unused-vars +/******/ if(typeof XMLHttpRequest === "undefined") +/******/ return callback(new Error("No browser support")); +/******/ try { +/******/ var request = new XMLHttpRequest(); +/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json"; +/******/ request.open("GET", requestPath, true); +/******/ request.timeout = 10000; +/******/ request.send(null); +/******/ } catch(err) { +/******/ return callback(err); +/******/ } +/******/ request.onreadystatechange = function() { +/******/ if(request.readyState !== 4) return; +/******/ if(request.status === 0) { +/******/ // timeout +/******/ callback(new Error("Manifest request to " + requestPath + " timed out.")); +/******/ } else if(request.status === 404) { +/******/ // no update available +/******/ callback(); +/******/ } else if(request.status !== 200 && request.status !== 304) { +/******/ // other failure +/******/ callback(new Error("Manifest request to " + requestPath + " failed.")); +/******/ } else { +/******/ // success +/******/ try { +/******/ var update = JSON.parse(request.responseText); +/******/ } catch(e) { +/******/ callback(e); +/******/ return; +/******/ } +/******/ callback(null, update); +/******/ } +/******/ }; +/******/ } + +/******/ +/******/ +/******/ // Copied from https://github.com/facebook/react/blob/bef45b0/src/shared/utils/canDefineProperty.js +/******/ var canDefineProperty = false; +/******/ try { +/******/ Object.defineProperty({}, "x", { +/******/ get: function() {} +/******/ }); +/******/ canDefineProperty = true; +/******/ } catch(x) { +/******/ // IE will fail on defineProperty +/******/ } +/******/ +/******/ var hotApplyOnUpdate = true; +/******/ var hotCurrentHash = "df5ff963eab1d8f408b8"; // eslint-disable-line no-unused-vars +/******/ var hotCurrentModuleData = {}; +/******/ var hotCurrentParents = []; // eslint-disable-line no-unused-vars +/******/ +/******/ function hotCreateRequire(moduleId) { // eslint-disable-line no-unused-vars +/******/ var me = installedModules[moduleId]; +/******/ if(!me) return __webpack_require__; +/******/ var fn = function(request) { +/******/ if(me.hot.active) { +/******/ if(installedModules[request]) { +/******/ if(installedModules[request].parents.indexOf(moduleId) < 0) +/******/ installedModules[request].parents.push(moduleId); +/******/ if(me.children.indexOf(request) < 0) +/******/ me.children.push(request); +/******/ } else hotCurrentParents = [moduleId]; +/******/ } else { +/******/ console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId); +/******/ hotCurrentParents = []; +/******/ } +/******/ return __webpack_require__(request); +/******/ }; +/******/ for(var name in __webpack_require__) { +/******/ if(Object.prototype.hasOwnProperty.call(__webpack_require__, name)) { +/******/ if(canDefineProperty) { +/******/ Object.defineProperty(fn, name, (function(name) { +/******/ return { +/******/ configurable: true, +/******/ enumerable: true, +/******/ get: function() { +/******/ return __webpack_require__[name]; +/******/ }, +/******/ set: function(value) { +/******/ __webpack_require__[name] = value; +/******/ } +/******/ }; +/******/ }(name))); +/******/ } else { +/******/ fn[name] = __webpack_require__[name]; +/******/ } +/******/ } +/******/ } +/******/ +/******/ function ensure(chunkId, callback) { +/******/ if(hotStatus === "ready") +/******/ hotSetStatus("prepare"); +/******/ hotChunksLoading++; +/******/ __webpack_require__.e(chunkId, function() { +/******/ try { +/******/ callback.call(null, fn); +/******/ } finally { +/******/ finishChunkLoading(); +/******/ } +/******/ +/******/ function finishChunkLoading() { +/******/ hotChunksLoading--; +/******/ if(hotStatus === "prepare") { +/******/ if(!hotWaitingFilesMap[chunkId]) { +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if(hotChunksLoading === 0 && hotWaitingFiles === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ } +/******/ }); +/******/ } +/******/ if(canDefineProperty) { +/******/ Object.defineProperty(fn, "e", { +/******/ enumerable: true, +/******/ value: ensure +/******/ }); +/******/ } else { +/******/ fn.e = ensure; +/******/ } +/******/ return fn; +/******/ } +/******/ +/******/ function hotCreateModule(moduleId) { // eslint-disable-line no-unused-vars +/******/ var hot = { +/******/ // private stuff +/******/ _acceptedDependencies: {}, +/******/ _declinedDependencies: {}, +/******/ _selfAccepted: false, +/******/ _selfDeclined: false, +/******/ _disposeHandlers: [], +/******/ +/******/ // Module API +/******/ active: true, +/******/ accept: function(dep, callback) { +/******/ if(typeof dep === "undefined") +/******/ hot._selfAccepted = true; +/******/ else if(typeof dep === "function") +/******/ hot._selfAccepted = dep; +/******/ else if(typeof dep === "object") +/******/ for(var i = 0; i < dep.length; i++) +/******/ hot._acceptedDependencies[dep[i]] = callback; +/******/ else +/******/ hot._acceptedDependencies[dep] = callback; +/******/ }, +/******/ decline: function(dep) { +/******/ if(typeof dep === "undefined") +/******/ hot._selfDeclined = true; +/******/ else if(typeof dep === "number") +/******/ hot._declinedDependencies[dep] = true; +/******/ else +/******/ for(var i = 0; i < dep.length; i++) +/******/ hot._declinedDependencies[dep[i]] = true; +/******/ }, +/******/ dispose: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ addDisposeHandler: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ removeDisposeHandler: function(callback) { +/******/ var idx = hot._disposeHandlers.indexOf(callback); +/******/ if(idx >= 0) hot._disposeHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ // Management API +/******/ check: hotCheck, +/******/ apply: hotApply, +/******/ status: function(l) { +/******/ if(!l) return hotStatus; +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ addStatusHandler: function(l) { +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ removeStatusHandler: function(l) { +/******/ var idx = hotStatusHandlers.indexOf(l); +/******/ if(idx >= 0) hotStatusHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ //inherit from previous dispose call +/******/ data: hotCurrentModuleData[moduleId] +/******/ }; +/******/ return hot; +/******/ } +/******/ +/******/ var hotStatusHandlers = []; +/******/ var hotStatus = "idle"; +/******/ +/******/ function hotSetStatus(newStatus) { +/******/ hotStatus = newStatus; +/******/ for(var i = 0; i < hotStatusHandlers.length; i++) +/******/ hotStatusHandlers[i].call(null, newStatus); +/******/ } +/******/ +/******/ // while downloading +/******/ var hotWaitingFiles = 0; +/******/ var hotChunksLoading = 0; +/******/ var hotWaitingFilesMap = {}; +/******/ var hotRequestedFilesMap = {}; +/******/ var hotAvailibleFilesMap = {}; +/******/ var hotCallback; +/******/ +/******/ // The update info +/******/ var hotUpdate, hotUpdateNewHash; +/******/ +/******/ function toModuleId(id) { +/******/ var isNumber = (+id) + "" === id; +/******/ return isNumber ? +id : id; +/******/ } +/******/ +/******/ function hotCheck(apply, callback) { +/******/ if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status"); +/******/ if(typeof apply === "function") { +/******/ hotApplyOnUpdate = false; +/******/ callback = apply; +/******/ } else { +/******/ hotApplyOnUpdate = apply; +/******/ callback = callback || function(err) { +/******/ if(err) throw err; +/******/ }; +/******/ } +/******/ hotSetStatus("check"); +/******/ hotDownloadManifest(function(err, update) { +/******/ if(err) return callback(err); +/******/ if(!update) { +/******/ hotSetStatus("idle"); +/******/ callback(null, null); +/******/ return; +/******/ } +/******/ +/******/ hotRequestedFilesMap = {}; +/******/ hotAvailibleFilesMap = {}; +/******/ hotWaitingFilesMap = {}; +/******/ for(var i = 0; i < update.c.length; i++) +/******/ hotAvailibleFilesMap[update.c[i]] = true; +/******/ hotUpdateNewHash = update.h; +/******/ +/******/ hotSetStatus("prepare"); +/******/ hotCallback = callback; +/******/ hotUpdate = {}; +/******/ var chunkId = 0; +/******/ { // eslint-disable-line no-lone-blocks +/******/ /*globals chunkId */ +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if(hotStatus === "prepare" && hotChunksLoading === 0 && hotWaitingFiles === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ }); +/******/ } +/******/ +/******/ function hotAddUpdateChunk(chunkId, moreModules) { // eslint-disable-line no-unused-vars +/******/ if(!hotAvailibleFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) +/******/ return; +/******/ hotRequestedFilesMap[chunkId] = false; +/******/ for(var moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ hotUpdate[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(--hotWaitingFiles === 0 && hotChunksLoading === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ +/******/ function hotEnsureUpdateChunk(chunkId) { +/******/ if(!hotAvailibleFilesMap[chunkId]) { +/******/ hotWaitingFilesMap[chunkId] = true; +/******/ } else { +/******/ hotRequestedFilesMap[chunkId] = true; +/******/ hotWaitingFiles++; +/******/ hotDownloadUpdateChunk(chunkId); +/******/ } +/******/ } +/******/ +/******/ function hotUpdateDownloaded() { +/******/ hotSetStatus("ready"); +/******/ var callback = hotCallback; +/******/ hotCallback = null; +/******/ if(!callback) return; +/******/ if(hotApplyOnUpdate) { +/******/ hotApply(hotApplyOnUpdate, callback); +/******/ } else { +/******/ var outdatedModules = []; +/******/ for(var id in hotUpdate) { +/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ outdatedModules.push(toModuleId(id)); +/******/ } +/******/ } +/******/ callback(null, outdatedModules); +/******/ } +/******/ } +/******/ +/******/ function hotApply(options, callback) { +/******/ if(hotStatus !== "ready") throw new Error("apply() is only allowed in ready status"); +/******/ if(typeof options === "function") { +/******/ callback = options; +/******/ options = {}; +/******/ } else if(options && typeof options === "object") { +/******/ callback = callback || function(err) { +/******/ if(err) throw err; +/******/ }; +/******/ } else { +/******/ options = {}; +/******/ callback = callback || function(err) { +/******/ if(err) throw err; +/******/ }; +/******/ } +/******/ +/******/ function getAffectedStuff(module) { +/******/ var outdatedModules = [module]; +/******/ var outdatedDependencies = {}; +/******/ +/******/ var queue = outdatedModules.slice(); +/******/ while(queue.length > 0) { +/******/ var moduleId = queue.pop(); +/******/ var module = installedModules[moduleId]; +/******/ if(!module || module.hot._selfAccepted) +/******/ continue; +/******/ if(module.hot._selfDeclined) { +/******/ return new Error("Aborted because of self decline: " + moduleId); +/******/ } +/******/ if(moduleId === 0) { +/******/ return; +/******/ } +/******/ for(var i = 0; i < module.parents.length; i++) { +/******/ var parentId = module.parents[i]; +/******/ var parent = installedModules[parentId]; +/******/ if(parent.hot._declinedDependencies[moduleId]) { +/******/ return new Error("Aborted because of declined dependency: " + moduleId + " in " + parentId); +/******/ } +/******/ if(outdatedModules.indexOf(parentId) >= 0) continue; +/******/ if(parent.hot._acceptedDependencies[moduleId]) { +/******/ if(!outdatedDependencies[parentId]) +/******/ outdatedDependencies[parentId] = []; +/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); +/******/ continue; +/******/ } +/******/ delete outdatedDependencies[parentId]; +/******/ outdatedModules.push(parentId); +/******/ queue.push(parentId); +/******/ } +/******/ } +/******/ +/******/ return [outdatedModules, outdatedDependencies]; +/******/ } +/******/ +/******/ function addAllToSet(a, b) { +/******/ for(var i = 0; i < b.length; i++) { +/******/ var item = b[i]; +/******/ if(a.indexOf(item) < 0) +/******/ a.push(item); +/******/ } +/******/ } +/******/ +/******/ // at begin all updates modules are outdated +/******/ // the "outdated" status can propagate to parents if they don't accept the children +/******/ var outdatedDependencies = {}; +/******/ var outdatedModules = []; +/******/ var appliedUpdate = {}; +/******/ for(var id in hotUpdate) { +/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ var moduleId = toModuleId(id); +/******/ var result = getAffectedStuff(moduleId); +/******/ if(!result) { +/******/ if(options.ignoreUnaccepted) +/******/ continue; +/******/ hotSetStatus("abort"); +/******/ return callback(new Error("Aborted because " + moduleId + " is not accepted")); +/******/ } +/******/ if(result instanceof Error) { +/******/ hotSetStatus("abort"); +/******/ return callback(result); +/******/ } +/******/ appliedUpdate[moduleId] = hotUpdate[moduleId]; +/******/ addAllToSet(outdatedModules, result[0]); +/******/ for(var moduleId in result[1]) { +/******/ if(Object.prototype.hasOwnProperty.call(result[1], moduleId)) { +/******/ if(!outdatedDependencies[moduleId]) +/******/ outdatedDependencies[moduleId] = []; +/******/ addAllToSet(outdatedDependencies[moduleId], result[1][moduleId]); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Store self accepted outdated modules to require them later by the module system +/******/ var outdatedSelfAcceptedModules = []; +/******/ for(var i = 0; i < outdatedModules.length; i++) { +/******/ var moduleId = outdatedModules[i]; +/******/ if(installedModules[moduleId] && installedModules[moduleId].hot._selfAccepted) +/******/ outdatedSelfAcceptedModules.push({ +/******/ module: moduleId, +/******/ errorHandler: installedModules[moduleId].hot._selfAccepted +/******/ }); +/******/ } +/******/ +/******/ // Now in "dispose" phase +/******/ hotSetStatus("dispose"); +/******/ var queue = outdatedModules.slice(); +/******/ while(queue.length > 0) { +/******/ var moduleId = queue.pop(); +/******/ var module = installedModules[moduleId]; +/******/ if(!module) continue; +/******/ +/******/ var data = {}; +/******/ +/******/ // Call dispose handlers +/******/ var disposeHandlers = module.hot._disposeHandlers; +/******/ for(var j = 0; j < disposeHandlers.length; j++) { +/******/ var cb = disposeHandlers[j]; +/******/ cb(data); +/******/ } +/******/ hotCurrentModuleData[moduleId] = data; +/******/ +/******/ // disable module (this disables requires from this module) +/******/ module.hot.active = false; +/******/ +/******/ // remove module from cache +/******/ delete installedModules[moduleId]; +/******/ +/******/ // remove "parents" references from all children +/******/ for(var j = 0; j < module.children.length; j++) { +/******/ var child = installedModules[module.children[j]]; +/******/ if(!child) continue; +/******/ var idx = child.parents.indexOf(moduleId); +/******/ if(idx >= 0) { +/******/ child.parents.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // remove outdated dependency from module children +/******/ for(var moduleId in outdatedDependencies) { +/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { +/******/ var module = installedModules[moduleId]; +/******/ var moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ for(var j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ var dependency = moduleOutdatedDependencies[j]; +/******/ var idx = module.children.indexOf(dependency); +/******/ if(idx >= 0) module.children.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Not in "apply" phase +/******/ hotSetStatus("apply"); +/******/ +/******/ hotCurrentHash = hotUpdateNewHash; +/******/ +/******/ // insert new code +/******/ for(var moduleId in appliedUpdate) { +/******/ if(Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { +/******/ modules[moduleId] = appliedUpdate[moduleId]; +/******/ } +/******/ } +/******/ +/******/ // call accept handlers +/******/ var error = null; +/******/ for(var moduleId in outdatedDependencies) { +/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) { +/******/ var module = installedModules[moduleId]; +/******/ var moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ var callbacks = []; +/******/ for(var i = 0; i < moduleOutdatedDependencies.length; i++) { +/******/ var dependency = moduleOutdatedDependencies[i]; +/******/ var cb = module.hot._acceptedDependencies[dependency]; +/******/ if(callbacks.indexOf(cb) >= 0) continue; +/******/ callbacks.push(cb); +/******/ } +/******/ for(var i = 0; i < callbacks.length; i++) { +/******/ var cb = callbacks[i]; +/******/ try { +/******/ cb(outdatedDependencies); +/******/ } catch(err) { +/******/ if(!error) +/******/ error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Load self accepted modules +/******/ for(var i = 0; i < outdatedSelfAcceptedModules.length; i++) { +/******/ var item = outdatedSelfAcceptedModules[i]; +/******/ var moduleId = item.module; +/******/ hotCurrentParents = [moduleId]; +/******/ try { +/******/ __webpack_require__(moduleId); +/******/ } catch(err) { +/******/ if(typeof item.errorHandler === "function") { +/******/ try { +/******/ item.errorHandler(err); +/******/ } catch(err) { +/******/ if(!error) +/******/ error = err; +/******/ } +/******/ } else if(!error) +/******/ error = err; +/******/ } +/******/ } +/******/ +/******/ // handle errors in accept handlers and self accepted module load +/******/ if(error) { +/******/ hotSetStatus("fail"); +/******/ return callback(error); +/******/ } +/******/ +/******/ hotSetStatus("idle"); +/******/ callback(null, outdatedModules); +/******/ } + +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false, +/******/ hot: hotCreateModule(moduleId), +/******/ parents: hotCurrentParents, +/******/ children: [] +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId)); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // __webpack_hash__ +/******/ __webpack_require__.h = function() { return hotCurrentHash; }; + +/******/ // Load entry module and return exports +/******/ return hotCreateRequire(0)(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var riot = __webpack_require__(1); + // Provide some settings + riot.settings.brackets = '{{ }}'; + // Get application tag and mount it! Yeah baby! + __webpack_require__(3); + riot.mount('app'); + // Router + __webpack_require__(33); + // SASS + __webpack_require__(52); + __webpack_require__(54); + __webpack_require__(56); + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* Riot v2.6.8, @license MIT */ + + ;(function(window, undefined) { + 'use strict'; + var riot = { version: 'v2.6.8', settings: {} }, + // be aware, internal usage + // ATTENTION: prefix the global dynamic variables with `__` + + // counter to give a unique id to all the Tag instances + __uid = 0, + // tags instances cache + __virtualDom = [], + // tags implementation cache + __tagImpl = {}, + + /** + * Const + */ + GLOBAL_MIXIN = '__global_mixin', + + // riot specific prefixes + RIOT_PREFIX = 'riot-', + RIOT_TAG = RIOT_PREFIX + 'tag', + RIOT_TAG_IS = 'data-is', + + // for typeof == '' comparisons + T_STRING = 'string', + T_OBJECT = 'object', + T_UNDEF = 'undefined', + T_FUNCTION = 'function', + XLINK_NS = 'http://www.w3.org/1999/xlink', + XLINK_REGEX = /^xlink:(\w+)/, + // special native tags that cannot be treated like the others + SPECIAL_TAGS_REGEX = /^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?|opt(?:ion|group))$/, + RESERVED_WORDS_BLACKLIST = /^(?:_(?:item|id|parent)|update|root|(?:un)?mount|mixin|is(?:Mounted|Loop)|tags|parent|opts|trigger|o(?:n|ff|ne))$/, + // SVG tags list https://www.w3.org/TR/SVG/attindex.html#PresentationAttributes + SVG_TAGS_LIST = ['altGlyph', 'animate', 'animateColor', 'circle', 'clipPath', 'defs', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feImage', 'feMerge', 'feMorphology', 'feOffset', 'feSpecularLighting', 'feTile', 'feTurbulence', 'filter', 'font', 'foreignObject', 'g', 'glyph', 'glyphRef', 'image', 'line', 'linearGradient', 'marker', 'mask', 'missing-glyph', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'switch', 'symbol', 'text', 'textPath', 'tref', 'tspan', 'use'], + + // version# for IE 8-11, 0 for others + IE_VERSION = (window && window.document || {}).documentMode | 0, + + // detect firefox to fix #1374 + FIREFOX = window && !!window.InstallTrigger + /* istanbul ignore next */ + riot.observable = function(el) { + + /** + * Extend the original object or create a new empty one + * @type { Object } + */ + + el = el || {} + + /** + * Private variables + */ + var callbacks = {}, + slice = Array.prototype.slice + + /** + * Private Methods + */ + + /** + * Helper function needed to get and loop all the events in a string + * @param { String } e - event string + * @param {Function} fn - callback + */ + function onEachEvent(e, fn) { + var es = e.split(' '), l = es.length, i = 0 + for (; i < l; i++) { + var name = es[i] + if (name) fn(name, i) + } + } + + /** + * Public Api + */ + + // extend the el object adding the observable methods + Object.defineProperties(el, { + /** + * Listen to the given space separated list of `events` and + * execute the `callback` each time an event is triggered. + * @param { String } events - events ids + * @param { Function } fn - callback function + * @returns { Object } el + */ + on: { + value: function(events, fn) { + if (typeof fn != 'function') return el + + onEachEvent(events, function(name, pos) { + (callbacks[name] = callbacks[name] || []).push(fn) + fn.typed = pos > 0 + }) + + return el + }, + enumerable: false, + writable: false, + configurable: false + }, + + /** + * Removes the given space separated list of `events` listeners + * @param { String } events - events ids + * @param { Function } fn - callback function + * @returns { Object } el + */ + off: { + value: function(events, fn) { + if (events == '*' && !fn) callbacks = {} + else { + onEachEvent(events, function(name, pos) { + if (fn) { + var arr = callbacks[name] + for (var i = 0, cb; cb = arr && arr[i]; ++i) { + if (cb == fn) arr.splice(i--, 1) + } + } else delete callbacks[name] + }) + } + return el + }, + enumerable: false, + writable: false, + configurable: false + }, + + /** + * Listen to the given space separated list of `events` and + * execute the `callback` at most once + * @param { String } events - events ids + * @param { Function } fn - callback function + * @returns { Object } el + */ + one: { + value: function(events, fn) { + function on() { + el.off(events, on) + fn.apply(el, arguments) + } + return el.on(events, on) + }, + enumerable: false, + writable: false, + configurable: false + }, + + /** + * Execute all callback functions that listen to + * the given space separated list of `events` + * @param { String } events - events ids + * @returns { Object } el + */ + trigger: { + value: function(events) { + + // getting the arguments + var arglen = arguments.length - 1, + args = new Array(arglen), + fns + + for (var i = 0; i < arglen; i++) { + args[i] = arguments[i + 1] // skip first argument + } + + onEachEvent(events, function(name, pos) { + + fns = slice.call(callbacks[name] || [], 0) + + for (var i = 0, fn; fn = fns[i]; ++i) { + if (fn.busy) continue + fn.busy = 1 + fn.apply(el, fn.typed ? [name].concat(args) : args) + if (fns[i] !== fn) { i-- } + fn.busy = 0 + } + + if (callbacks['*'] && name != '*') + el.trigger.apply(el, ['*', name].concat(args)) + + }) + + return el + }, + enumerable: false, + writable: false, + configurable: false + } + }) + + return el + + } + /* istanbul ignore next */ + ;(function(riot) { + + /** + * Simple client-side router + * @module riot-route + */ + + + var RE_ORIGIN = /^.+?\/\/+[^\/]+/, + EVENT_LISTENER = 'EventListener', + REMOVE_EVENT_LISTENER = 'remove' + EVENT_LISTENER, + ADD_EVENT_LISTENER = 'add' + EVENT_LISTENER, + HAS_ATTRIBUTE = 'hasAttribute', + REPLACE = 'replace', + POPSTATE = 'popstate', + HASHCHANGE = 'hashchange', + TRIGGER = 'trigger', + MAX_EMIT_STACK_LEVEL = 3, + win = typeof window != 'undefined' && window, + doc = typeof document != 'undefined' && document, + hist = win && history, + loc = win && (hist.location || win.location), // see html5-history-api + prot = Router.prototype, // to minify more + clickEvent = doc && doc.ontouchstart ? 'touchstart' : 'click', + started = false, + central = riot.observable(), + routeFound = false, + debouncedEmit, + base, current, parser, secondParser, emitStack = [], emitStackLevel = 0 + + /** + * Default parser. You can replace it via router.parser method. + * @param {string} path - current path (normalized) + * @returns {array} array + */ + function DEFAULT_PARSER(path) { + return path.split(/[/?#]/) + } + + /** + * Default parser (second). You can replace it via router.parser method. + * @param {string} path - current path (normalized) + * @param {string} filter - filter string (normalized) + * @returns {array} array + */ + function DEFAULT_SECOND_PARSER(path, filter) { + var re = new RegExp('^' + filter[REPLACE](/\*/g, '([^/?#]+?)')[REPLACE](/\.\./, '.*') + '$'), + args = path.match(re) + + if (args) return args.slice(1) + } + + /** + * Simple/cheap debounce implementation + * @param {function} fn - callback + * @param {number} delay - delay in seconds + * @returns {function} debounced function + */ + function debounce(fn, delay) { + var t + return function () { + clearTimeout(t) + t = setTimeout(fn, delay) + } + } + + /** + * Set the window listeners to trigger the routes + * @param {boolean} autoExec - see route.start + */ + function start(autoExec) { + debouncedEmit = debounce(emit, 1) + win[ADD_EVENT_LISTENER](POPSTATE, debouncedEmit) + win[ADD_EVENT_LISTENER](HASHCHANGE, debouncedEmit) + doc[ADD_EVENT_LISTENER](clickEvent, click) + if (autoExec) emit(true) + } + + /** + * Router class + */ + function Router() { + this.$ = [] + riot.observable(this) // make it observable + central.on('stop', this.s.bind(this)) + central.on('emit', this.e.bind(this)) + } + + function normalize(path) { + return path[REPLACE](/^\/|\/$/, '') + } + + function isString(str) { + return typeof str == 'string' + } + + /** + * Get the part after domain name + * @param {string} href - fullpath + * @returns {string} path from root + */ + function getPathFromRoot(href) { + return (href || loc.href)[REPLACE](RE_ORIGIN, '') + } + + /** + * Get the part after base + * @param {string} href - fullpath + * @returns {string} path from base + */ + function getPathFromBase(href) { + return base[0] == '#' + ? (href || loc.href || '').split(base)[1] || '' + : (loc ? getPathFromRoot(href) : href || '')[REPLACE](base, '') + } + + function emit(force) { + // the stack is needed for redirections + var isRoot = emitStackLevel == 0, first + if (MAX_EMIT_STACK_LEVEL <= emitStackLevel) return + + emitStackLevel++ + emitStack.push(function() { + var path = getPathFromBase() + if (force || path != current) { + central[TRIGGER]('emit', path) + current = path + } + }) + if (isRoot) { + while (first = emitStack.shift()) first() // stack increses within this call + emitStackLevel = 0 + } + } + + function click(e) { + if ( + e.which != 1 // not left click + || e.metaKey || e.ctrlKey || e.shiftKey // or meta keys + || e.defaultPrevented // or default prevented + ) return + + var el = e.target + while (el && el.nodeName != 'A') el = el.parentNode + + if ( + !el || el.nodeName != 'A' // not A tag + || el[HAS_ATTRIBUTE]('download') // has download attr + || !el[HAS_ATTRIBUTE]('href') // has no href attr + || el.target && el.target != '_self' // another window or frame + || el.href.indexOf(loc.href.match(RE_ORIGIN)[0]) == -1 // cross origin + ) return + + if (el.href != loc.href + && ( + el.href.split('#')[0] == loc.href.split('#')[0] // internal jump + || base[0] != '#' && getPathFromRoot(el.href).indexOf(base) !== 0 // outside of base + || base[0] == '#' && el.href.split(base)[0] != loc.href.split(base)[0] // outside of #base + || !go(getPathFromBase(el.href), el.title || doc.title) // route not found + )) return + + e.preventDefault() + } + + /** + * Go to the path + * @param {string} path - destination path + * @param {string} title - page title + * @param {boolean} shouldReplace - use replaceState or pushState + * @returns {boolean} - route not found flag + */ + function go(path, title, shouldReplace) { + // Server-side usage: directly execute handlers for the path + if (!hist) return central[TRIGGER]('emit', getPathFromBase(path)) + + path = base + normalize(path) + title = title || doc.title + // browsers ignores the second parameter `title` + shouldReplace + ? hist.replaceState(null, title, path) + : hist.pushState(null, title, path) + // so we need to set it manually + doc.title = title + routeFound = false + emit() + return routeFound + } + + /** + * Go to path or set action + * a single string: go there + * two strings: go there with setting a title + * two strings and boolean: replace history with setting a title + * a single function: set an action on the default route + * a string/RegExp and a function: set an action on the route + * @param {(string|function)} first - path / action / filter + * @param {(string|RegExp|function)} second - title / action + * @param {boolean} third - replace flag + */ + prot.m = function(first, second, third) { + if (isString(first) && (!second || isString(second))) go(first, second, third || false) + else if (second) this.r(first, second) + else this.r('@', first) + } + + /** + * Stop routing + */ + prot.s = function() { + this.off('*') + this.$ = [] + } + + /** + * Emit + * @param {string} path - path + */ + prot.e = function(path) { + this.$.concat('@').some(function(filter) { + var args = (filter == '@' ? parser : secondParser)(normalize(path), normalize(filter)) + if (typeof args != 'undefined') { + this[TRIGGER].apply(null, [filter].concat(args)) + return routeFound = true // exit from loop + } + }, this) + } + + /** + * Register route + * @param {string} filter - filter for matching to url + * @param {function} action - action to register + */ + prot.r = function(filter, action) { + if (filter != '@') { + filter = '/' + normalize(filter) + this.$.push(filter) + } + this.on(filter, action) + } + + var mainRouter = new Router() + var route = mainRouter.m.bind(mainRouter) + + /** + * Create a sub router + * @returns {function} the method of a new Router object + */ + route.create = function() { + var newSubRouter = new Router() + // assign sub-router's main method + var router = newSubRouter.m.bind(newSubRouter) + // stop only this sub-router + router.stop = newSubRouter.s.bind(newSubRouter) + return router + } + + /** + * Set the base of url + * @param {(str|RegExp)} arg - a new base or '#' or '#!' + */ + route.base = function(arg) { + base = arg || '#' + current = getPathFromBase() // recalculate current path + } + + /** Exec routing right now **/ + route.exec = function() { + emit(true) + } + + /** + * Replace the default router to yours + * @param {function} fn - your parser function + * @param {function} fn2 - your secondParser function + */ + route.parser = function(fn, fn2) { + if (!fn && !fn2) { + // reset parser for testing... + parser = DEFAULT_PARSER + secondParser = DEFAULT_SECOND_PARSER + } + if (fn) parser = fn + if (fn2) secondParser = fn2 + } + + /** + * Helper function to get url query as an object + * @returns {object} parsed query + */ + route.query = function() { + var q = {} + var href = loc.href || current + href[REPLACE](/[?&](.+?)=([^&]*)/g, function(_, k, v) { q[k] = v }) + return q + } + + /** Stop routing **/ + route.stop = function () { + if (started) { + if (win) { + win[REMOVE_EVENT_LISTENER](POPSTATE, debouncedEmit) + win[REMOVE_EVENT_LISTENER](HASHCHANGE, debouncedEmit) + doc[REMOVE_EVENT_LISTENER](clickEvent, click) + } + central[TRIGGER]('stop') + started = false + } + } + + /** + * Start routing + * @param {boolean} autoExec - automatically exec after starting if true + */ + route.start = function (autoExec) { + if (!started) { + if (win) { + if (document.readyState == 'complete') start(autoExec) + // the timeout is needed to solve + // a weird safari bug https://github.com/riot/route/issues/33 + else win[ADD_EVENT_LISTENER]('load', function() { + setTimeout(function() { start(autoExec) }, 1) + }) + } + started = true + } + } + + /** Prepare the router **/ + route.base() + route.parser() + + riot.route = route + })(riot) + /* istanbul ignore next */ + + /** + * The riot template engine + * @version v2.4.2 + */ + /** + * riot.util.brackets + * + * - `brackets ` - Returns a string or regex based on its parameter + * - `brackets.set` - Change the current riot brackets + * + * @module + */ + + var brackets = (function (UNDEF) { + + var + REGLOB = 'g', + + R_MLCOMMS = /\/\*[^*]*\*+(?:[^*\/][^*]*\*+)*\//g, + + R_STRINGS = /"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'/g, + + S_QBLOCKS = R_STRINGS.source + '|' + + /(?:\breturn\s+|(?:[$\w\)\]]|\+\+|--)\s*(\/)(?![*\/]))/.source + '|' + + /\/(?=[^*\/])[^[\/\\]*(?:(?:\[(?:\\.|[^\]\\]*)*\]|\\.)[^[\/\\]*)*?(\/)[gim]*/.source, + + UNSUPPORTED = RegExp('[\\' + 'x00-\\x1F<>a-zA-Z0-9\'",;\\\\]'), + + NEED_ESCAPE = /(?=[[\]()*+?.^$|])/g, + + FINDBRACES = { + '(': RegExp('([()])|' + S_QBLOCKS, REGLOB), + '[': RegExp('([[\\]])|' + S_QBLOCKS, REGLOB), + '{': RegExp('([{}])|' + S_QBLOCKS, REGLOB) + }, + + DEFAULT = '{ }' + + var _pairs = [ + '{', '}', + '{', '}', + /{[^}]*}/, + /\\([{}])/g, + /\\({)|{/g, + RegExp('\\\\(})|([[({])|(})|' + S_QBLOCKS, REGLOB), + DEFAULT, + /^\s*{\^?\s*([$\w]+)(?:\s*,\s*(\S+))?\s+in\s+(\S.*)\s*}/, + /(^|[^\\]){=[\S\s]*?}/ + ] + + var + cachedBrackets = UNDEF, + _regex, + _cache = [], + _settings + + function _loopback (re) { return re } + + function _rewrite (re, bp) { + if (!bp) bp = _cache + return new RegExp( + re.source.replace(/{/g, bp[2]).replace(/}/g, bp[3]), re.global ? REGLOB : '' + ) + } + + function _create (pair) { + if (pair === DEFAULT) return _pairs + + var arr = pair.split(' ') + + if (arr.length !== 2 || UNSUPPORTED.test(pair)) { + throw new Error('Unsupported brackets "' + pair + '"') + } + arr = arr.concat(pair.replace(NEED_ESCAPE, '\\').split(' ')) + + arr[4] = _rewrite(arr[1].length > 1 ? /{[\S\s]*?}/ : _pairs[4], arr) + arr[5] = _rewrite(pair.length > 3 ? /\\({|})/g : _pairs[5], arr) + arr[6] = _rewrite(_pairs[6], arr) + arr[7] = RegExp('\\\\(' + arr[3] + ')|([[({])|(' + arr[3] + ')|' + S_QBLOCKS, REGLOB) + arr[8] = pair + return arr + } + + function _brackets (reOrIdx) { + return reOrIdx instanceof RegExp ? _regex(reOrIdx) : _cache[reOrIdx] + } + + _brackets.split = function split (str, tmpl, _bp) { + // istanbul ignore next: _bp is for the compiler + if (!_bp) _bp = _cache + + var + parts = [], + match, + isexpr, + start, + pos, + re = _bp[6] + + isexpr = start = re.lastIndex = 0 + + while ((match = re.exec(str))) { + + pos = match.index + + if (isexpr) { + + if (match[2]) { + re.lastIndex = skipBraces(str, match[2], re.lastIndex) + continue + } + if (!match[3]) { + continue + } + } + + if (!match[1]) { + unescapeStr(str.slice(start, pos)) + start = re.lastIndex + re = _bp[6 + (isexpr ^= 1)] + re.lastIndex = start + } + } + + if (str && start < str.length) { + unescapeStr(str.slice(start)) + } + + return parts + + function unescapeStr (s) { + if (tmpl || isexpr) { + parts.push(s && s.replace(_bp[5], '$1')) + } else { + parts.push(s) + } + } + + function skipBraces (s, ch, ix) { + var + match, + recch = FINDBRACES[ch] + + recch.lastIndex = ix + ix = 1 + while ((match = recch.exec(s))) { + if (match[1] && + !(match[1] === ch ? ++ix : --ix)) break + } + return ix ? s.length : recch.lastIndex + } + } + + _brackets.hasExpr = function hasExpr (str) { + return _cache[4].test(str) + } + + _brackets.loopKeys = function loopKeys (expr) { + var m = expr.match(_cache[9]) + + return m + ? { key: m[1], pos: m[2], val: _cache[0] + m[3].trim() + _cache[1] } + : { val: expr.trim() } + } + + _brackets.array = function array (pair) { + return pair ? _create(pair) : _cache + } + + function _reset (pair) { + if ((pair || (pair = DEFAULT)) !== _cache[8]) { + _cache = _create(pair) + _regex = pair === DEFAULT ? _loopback : _rewrite + _cache[9] = _regex(_pairs[9]) + } + cachedBrackets = pair + } + + function _setSettings (o) { + var b + + o = o || {} + b = o.brackets + Object.defineProperty(o, 'brackets', { + set: _reset, + get: function () { return cachedBrackets }, + enumerable: true + }) + _settings = o + _reset(b) + } + + Object.defineProperty(_brackets, 'settings', { + set: _setSettings, + get: function () { return _settings } + }) + + /* istanbul ignore next: in the browser riot is always in the scope */ + _brackets.settings = typeof riot !== 'undefined' && riot.settings || {} + _brackets.set = _reset + + _brackets.R_STRINGS = R_STRINGS + _brackets.R_MLCOMMS = R_MLCOMMS + _brackets.S_QBLOCKS = S_QBLOCKS + + return _brackets + + })() + + /** + * @module tmpl + * + * tmpl - Root function, returns the template value, render with data + * tmpl.hasExpr - Test the existence of a expression inside a string + * tmpl.loopKeys - Get the keys for an 'each' loop (used by `_each`) + */ + + var tmpl = (function () { + + var _cache = {} + + function _tmpl (str, data) { + if (!str) return str + + return (_cache[str] || (_cache[str] = _create(str))).call(data, _logErr) + } + + _tmpl.haveRaw = brackets.hasRaw + + _tmpl.hasExpr = brackets.hasExpr + + _tmpl.loopKeys = brackets.loopKeys + + // istanbul ignore next + _tmpl.clearCache = function () { _cache = {} } + + _tmpl.errorHandler = null + + function _logErr (err, ctx) { + + if (_tmpl.errorHandler) { + + err.riotData = { + tagName: ctx && ctx.root && ctx.root.tagName, + _riot_id: ctx && ctx._riot_id //eslint-disable-line camelcase + } + _tmpl.errorHandler(err) + } + } + + function _create (str) { + var expr = _getTmpl(str) + + if (expr.slice(0, 11) !== 'try{return ') expr = 'return ' + expr + + return new Function('E', expr + ';') // eslint-disable-line no-new-func + } + + var + CH_IDEXPR = String.fromCharCode(0x2057), + RE_CSNAME = /^(?:(-?[_A-Za-z\xA0-\xFF][-\w\xA0-\xFF]*)|\u2057(\d+)~):/, + RE_QBLOCK = RegExp(brackets.S_QBLOCKS, 'g'), + RE_DQUOTE = /\u2057/g, + RE_QBMARK = /\u2057(\d+)~/g + + function _getTmpl (str) { + var + qstr = [], + expr, + parts = brackets.split(str.replace(RE_DQUOTE, '"'), 1) + + if (parts.length > 2 || parts[0]) { + var i, j, list = [] + + for (i = j = 0; i < parts.length; ++i) { + + expr = parts[i] + + if (expr && (expr = i & 1 + + ? _parseExpr(expr, 1, qstr) + + : '"' + expr + .replace(/\\/g, '\\\\') + .replace(/\r\n?|\n/g, '\\n') + .replace(/"/g, '\\"') + + '"' + + )) list[j++] = expr + + } + + expr = j < 2 ? list[0] + : '[' + list.join(',') + '].join("")' + + } else { + + expr = _parseExpr(parts[1], 0, qstr) + } + + if (qstr[0]) { + expr = expr.replace(RE_QBMARK, function (_, pos) { + return qstr[pos] + .replace(/\r/g, '\\r') + .replace(/\n/g, '\\n') + }) + } + return expr + } + + var + RE_BREND = { + '(': /[()]/g, + '[': /[[\]]/g, + '{': /[{}]/g + } + + function _parseExpr (expr, asText, qstr) { + + expr = expr + .replace(RE_QBLOCK, function (s, div) { + return s.length > 2 && !div ? CH_IDEXPR + (qstr.push(s) - 1) + '~' : s + }) + .replace(/\s+/g, ' ').trim() + .replace(/\ ?([[\({},?\.:])\ ?/g, '$1') + + if (expr) { + var + list = [], + cnt = 0, + match + + while (expr && + (match = expr.match(RE_CSNAME)) && + !match.index + ) { + var + key, + jsb, + re = /,|([[{(])|$/g + + expr = RegExp.rightContext + key = match[2] ? qstr[match[2]].slice(1, -1).trim().replace(/\s+/g, ' ') : match[1] + + while (jsb = (match = re.exec(expr))[1]) skipBraces(jsb, re) + + jsb = expr.slice(0, match.index) + expr = RegExp.rightContext + + list[cnt++] = _wrapExpr(jsb, 1, key) + } + + expr = !cnt ? _wrapExpr(expr, asText) + : cnt > 1 ? '[' + list.join(',') + '].join(" ").trim()' : list[0] + } + return expr + + function skipBraces (ch, re) { + var + mm, + lv = 1, + ir = RE_BREND[ch] + + ir.lastIndex = re.lastIndex + while (mm = ir.exec(expr)) { + if (mm[0] === ch) ++lv + else if (!--lv) break + } + re.lastIndex = lv ? expr.length : ir.lastIndex + } + } + + // istanbul ignore next: not both + var // eslint-disable-next-line max-len + JS_CONTEXT = '"in this?this:' + (typeof window !== 'object' ? 'global' : 'window') + ').', + JS_VARNAME = /[,{][\$\w]+(?=:)|(^ *|[^$\w\.{])(?!(?:typeof|true|false|null|undefined|in|instanceof|is(?:Finite|NaN)|void|NaN|new|Date|RegExp|Math)(?![$\w]))([$_A-Za-z][$\w]*)/g, + JS_NOPROPS = /^(?=(\.[$\w]+))\1(?:[^.[(]|$)/ + + function _wrapExpr (expr, asText, key) { + var tb + + expr = expr.replace(JS_VARNAME, function (match, p, mvar, pos, s) { + if (mvar) { + pos = tb ? 0 : pos + match.length + + if (mvar !== 'this' && mvar !== 'global' && mvar !== 'window') { + match = p + '("' + mvar + JS_CONTEXT + mvar + if (pos) tb = (s = s[pos]) === '.' || s === '(' || s === '[' + } else if (pos) { + tb = !JS_NOPROPS.test(s.slice(pos)) + } + } + return match + }) + + if (tb) { + expr = 'try{return ' + expr + '}catch(e){E(e,this)}' + } + + if (key) { + + expr = (tb + ? 'function(){' + expr + '}.call(this)' : '(' + expr + ')' + ) + '?"' + key + '":""' + + } else if (asText) { + + expr = 'function(v){' + (tb + ? expr.replace('return ', 'v=') : 'v=(' + expr + ')' + ) + ';return v||v===0?v:""}.call(this)' + } + + return expr + } + + _tmpl.version = brackets.version = 'v2.4.2' + + return _tmpl + + })() + + /* + lib/browser/tag/mkdom.js + + Includes hacks needed for the Internet Explorer version 9 and below + See: http://kangax.github.io/compat-table/es5/#ie8 + http://codeplanet.io/dropping-ie8/ + */ + var mkdom = (function _mkdom() { + var + reHasYield = /|>([\S\s]*?)<\/yield\s*>|>)/ig, + reYieldSrc = /]*)['"]\s*>([\S\s]*?)<\/yield\s*>/ig, + reYieldDest = /|>([\S\s]*?)<\/yield\s*>)/ig + var + rootEls = { tr: 'tbody', th: 'tr', td: 'tr', col: 'colgroup' }, + tblTags = IE_VERSION && IE_VERSION < 10 + ? SPECIAL_TAGS_REGEX : /^(?:t(?:body|head|foot|[rhd])|caption|col(?:group)?)$/ + + /** + * Creates a DOM element to wrap the given content. Normally an `DIV`, but can be + * also a `TABLE`, `SELECT`, `TBODY`, `TR`, or `COLGROUP` element. + * + * @param { String } templ - The template coming from the custom tag definition + * @param { String } [html] - HTML content that comes from the DOM element where you + * will mount the tag, mostly the original tag in the page + * @param { Boolean } checkSvg - flag needed to know if we need to force the svg rendering in case of loop nodes + * @returns {HTMLElement} DOM element with _templ_ merged through `YIELD` with the _html_. + */ + function _mkdom(templ, html, checkSvg) { + var + match = templ && templ.match(/^\s*<([-\w]+)/), + tagName = match && match[1].toLowerCase(), + el = mkEl('div', checkSvg && isSVGTag(tagName)) + + // replace all the yield tags with the tag inner html + templ = replaceYield(templ, html) + + /* istanbul ignore next */ + if (tblTags.test(tagName)) + el = specialTags(el, templ, tagName) + else + setInnerHTML(el, templ) + + el.stub = true + + return el + } + + /* + Creates the root element for table or select child elements: + tr/th/td/thead/tfoot/tbody/caption/col/colgroup/option/optgroup + */ + function specialTags(el, templ, tagName) { + var + select = tagName[0] === 'o', + parent = select ? 'select>' : 'table>' + + // trim() is important here, this ensures we don't have artifacts, + // so we can check if we have only one element inside the parent + el.innerHTML = '<' + parent + templ.trim() + ' j) { + t = tags[--i] + tags.splice(i, 1) + t.unmount() + } + } + + /** + * Move the nested custom tags in non custom loop tags + * @param { Object } child - non custom loop tag + * @param { Number } i - current position of the loop tag + */ + function moveNestedTags(child, i) { + Object.keys(child.tags).forEach(function(tagName) { + var tag = child.tags[tagName] + if (isArray(tag)) + each(tag, function (t) { + moveChildTag(t, tagName, i) + }) + else + moveChildTag(tag, tagName, i) + }) + } + + /** + * Adds the elements for a virtual tag + * @param { Tag } tag - the tag whose root's children will be inserted or appended + * @param { Node } src - the node that will do the inserting or appending + * @param { Tag } target - only if inserting, insert before this tag's first child + */ + function addVirtual(tag, src, target) { + var el = tag._root, sib + tag._virts = [] + while (el) { + sib = el.nextSibling + if (target) + src.insertBefore(el, target._root) + else + src.appendChild(el) + + tag._virts.push(el) // hold for unmounting + el = sib + } + } + + /** + * Move virtual tag and all child nodes + * @param { Tag } tag - first child reference used to start move + * @param { Node } src - the node that will do the inserting + * @param { Tag } target - insert before this tag's first child + * @param { Number } len - how many child nodes to move + */ + function moveVirtual(tag, src, target, len) { + var el = tag._root, sib, i = 0 + for (; i < len; i++) { + sib = el.nextSibling + src.insertBefore(el, target._root) + el = sib + } + } + + /** + * Insert a new tag avoiding the insert for the conditional tags + * @param {Boolean} isVirtual [description] + * @param { Tag } prevTag - tag instance used as reference to prepend our new tag + * @param { Tag } newTag - new tag to be inserted + * @param { HTMLElement } root - loop parent node + * @param { Array } tags - array containing the current tags list + * @param { Function } virtualFn - callback needed to move or insert virtual DOM + * @param { Object } dom - DOM node we need to loop + */ + function insertTag(isVirtual, prevTag, newTag, root, tags, virtualFn, dom) { + if (isInStub(prevTag.root)) return + if (isVirtual) virtualFn(prevTag, root, newTag, dom.childNodes.length) + else root.insertBefore(prevTag.root, newTag.root) // #1374 some browsers reset selected here + } + + + /** + * Manage tags having the 'each' + * @param { Object } dom - DOM node we need to loop + * @param { Tag } parent - parent tag instance where the dom node is contained + * @param { String } expr - string contained in the 'each' attribute + */ + function _each(dom, parent, expr) { + + // remove the each property from the original tag + remAttr(dom, 'each') + + var mustReorder = typeof getAttr(dom, 'no-reorder') !== T_STRING || remAttr(dom, 'no-reorder'), + tagName = getTagName(dom), + impl = __tagImpl[tagName] || { tmpl: getOuterHTML(dom) }, + useRoot = SPECIAL_TAGS_REGEX.test(tagName), + root = dom.parentNode, + ref = document.createTextNode(''), + child = getTag(dom), + isOption = tagName.toLowerCase() === 'option', // the option tags must be treated differently + tags = [], + oldItems = [], + hasKeys, + isVirtual = dom.tagName == 'VIRTUAL' + + // parse the each expression + expr = tmpl.loopKeys(expr) + + // insert a marked where the loop tags will be injected + root.insertBefore(ref, dom) + + // clean template code + parent.one('before-mount', function () { + + // remove the original DOM node + dom.parentNode.removeChild(dom) + if (root.stub) root = parent.root + + }).on('update', function () { + // get the new items collection + var items = tmpl(expr.val, parent), + // create a fragment to hold the new DOM nodes to inject in the parent tag + frag = document.createDocumentFragment() + + // object loop. any changes cause full redraw + if (!isArray(items)) { + hasKeys = items || false + items = hasKeys ? + Object.keys(items).map(function (key) { + return mkitem(expr, key, items[key]) + }) : [] + } + + // loop all the new items + var i = 0, + itemsLength = items.length + + for (; i < itemsLength; i++) { + // reorder only if the items are objects + var + item = items[i], + _mustReorder = mustReorder && typeof item == T_OBJECT && !hasKeys, + oldPos = oldItems.indexOf(item), + pos = ~oldPos && _mustReorder ? oldPos : i, + // does a tag exist in this position? + tag = tags[pos] + + item = !hasKeys && expr.key ? mkitem(expr, item, i) : item + + // new tag + if ( + !_mustReorder && !tag // with no-reorder we just update the old tags + || + _mustReorder && !~oldPos || !tag // by default we always try to reorder the DOM elements + ) { + + tag = new Tag(impl, { + parent: parent, + isLoop: true, + hasImpl: !!__tagImpl[tagName], + root: useRoot ? root : dom.cloneNode(), + item: item + }, dom.innerHTML) + + tag.mount() + + if (isVirtual) tag._root = tag.root.firstChild // save reference for further moves or inserts + // this tag must be appended + if (i == tags.length || !tags[i]) { // fix 1581 + if (isVirtual) + addVirtual(tag, frag) + else frag.appendChild(tag.root) + } + // this tag must be insert + else { + insertTag(isVirtual, tag, tags[i], root, tags, addVirtual, dom) + oldItems.splice(i, 0, item) + } + + tags.splice(i, 0, tag) + pos = i // handled here so no move + } else tag.update(item, true) + + // reorder the tag if it's not located in its previous position + if ( + pos !== i && _mustReorder && + tags[i] // fix 1581 unable to reproduce it in a test! + ) { + // #closes 2040 PLEASE DON'T REMOVE IT! + // there are no tests for this feature + if (contains(items, oldItems[i])) + insertTag(isVirtual, tag, tags[i], root, tags, moveVirtual, dom) + + // update the position attribute if it exists + if (expr.pos) + tag[expr.pos] = i + // move the old tag instance + tags.splice(i, 0, tags.splice(pos, 1)[0]) + // move the old item + oldItems.splice(i, 0, oldItems.splice(pos, 1)[0]) + // if the loop tags are not custom + // we need to move all their custom tags into the right position + if (!child && tag.tags) moveNestedTags(tag, i) + } + + // cache the original item to use it in the events bound to this node + // and its children + tag._item = item + // cache the real parent tag internally + defineProperty(tag, '_parent', parent) + } + + // remove the redundant tags + unmountRedundant(items, tags) + + // insert the new nodes + root.insertBefore(frag, ref) + if (isOption) { + + // #1374 FireFox bug in