Initial AD port
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
{{/*
|
||||
Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
|
||||
This file is part of After Dark.
|
||||
|
||||
After Dark is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
After Dark is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/ -}}
|
||||
|
||||
ul.thumbnail.grid {
|
||||
margin: 10px -10px;
|
||||
}
|
||||
ul.thumbnail.grid li {
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
ul.thumbnail.grid li h2 {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
ul.thumbnail.grid li a:hover figure {
|
||||
filter: brightness(1.1);
|
||||
}
|
||||
ul.thumbnail.grid li a figure > img {
|
||||
border-radius: 2px;
|
||||
}
|
||||
.hack ul.thumbnail.grid li h2::before {
|
||||
content: initial;
|
||||
}
|
||||
.hack ul.thumbnail.grid li::after {
|
||||
content: initial;
|
||||
}
|
||||
.standard ul.thumbnail.grid {
|
||||
padding-left: 0px;
|
||||
list-style-type: none;
|
||||
display: flex;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{{/*
|
||||
Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
|
||||
This file is part of After Dark.
|
||||
|
||||
After Dark is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
After Dark is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/ -}}
|
||||
|
||||
.hack header figure[itemtype*="ImageObject"] {
|
||||
position: relative;
|
||||
}
|
||||
.hack header figure[itemtype*="ImageObject"] figcaption {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
text-align: right;
|
||||
padding: 15px;
|
||||
font-style: oblique;
|
||||
font-size: smaller;
|
||||
mix-blend-mode: soft-light;
|
||||
}
|
||||
.hack header figure[itemtype*="ImageObject"] [itemprop="headline"] {
|
||||
font-weight: bold;
|
||||
}
|
||||
25
themes/after-dark/assets/css/conditional/layouts/search.css
Normal file
25
themes/after-dark/assets/css/conditional/layouts/search.css
Normal file
@@ -0,0 +1,25 @@
|
||||
{{/*
|
||||
Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
|
||||
This file is part of After Dark.
|
||||
|
||||
After Dark is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
After Dark is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/ -}}
|
||||
|
||||
[v-cloak] .js-cloaked {
|
||||
display: none;
|
||||
}
|
||||
[v-cloak] .js-initializing::after {
|
||||
content: "Initializing search. Please wait..."
|
||||
}
|
||||
39
themes/after-dark/assets/css/custom.css
Normal file
39
themes/after-dark/assets/css/custom.css
Normal file
@@ -0,0 +1,39 @@
|
||||
/*!
|
||||
* Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
*
|
||||
* This file is part of After Dark.
|
||||
*
|
||||
* After Dark is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* After Dark is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
a[rel*="external"]::after {
|
||||
content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E");
|
||||
}
|
||||
nav a.active {
|
||||
background-color: inherit;
|
||||
color: #fff;
|
||||
}
|
||||
a[itemprop="url"] {
|
||||
color: #ff9800;
|
||||
}
|
||||
a[itemprop="url"]:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.muted, .help-block {
|
||||
opacity: 0.70;
|
||||
}
|
||||
.hack .muted,
|
||||
.hack .help-block {
|
||||
color: #e0e0e0;
|
||||
}
|
||||
183
themes/after-dark/assets/css/theme.css
Normal file
183
themes/after-dark/assets/css/theme.css
Normal file
@@ -0,0 +1,183 @@
|
||||
/*!
|
||||
* Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
*
|
||||
* This file is part of After Dark.
|
||||
*
|
||||
* After Dark is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* After Dark is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--screen-size-small: 30em; /* breakpoint reference only */
|
||||
}
|
||||
@keyframes intro {
|
||||
0% { opacity: 0 } 100% { opacity: 1 }
|
||||
}
|
||||
.blur-up.lazyloading {
|
||||
filter: blur(5px);
|
||||
opacity: 1;
|
||||
transition: opacity 1s, filter 1.5s;
|
||||
}
|
||||
.blur-up.lazyload {
|
||||
opacity: 0;
|
||||
filter: blur(10px);
|
||||
}
|
||||
.blur-up.lazyloaded {
|
||||
filter: blur(0);
|
||||
transition: filter 1s;
|
||||
}
|
||||
.hack .readmore {
|
||||
margin-bottom: 2.2em;
|
||||
}
|
||||
.responsive-iframe,
|
||||
.ratio-container {
|
||||
position: relative;
|
||||
padding-bottom: 56.25%; /* 16:9 = 56.25% = calc(9 / 16 * 100%) */
|
||||
padding-top: 25px;
|
||||
height: 0;
|
||||
}
|
||||
.responsive-iframe iframe,
|
||||
.ratio-container > *:not([itemprop="caption"]) {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
main, footer {
|
||||
animation: intro 0.3s both;
|
||||
animation-delay: 0.15s;
|
||||
}
|
||||
header:first-of-type + details {
|
||||
margin: 20px 0;
|
||||
}
|
||||
footer time[datetime$="M"]:before {
|
||||
content: "\2013\0020";
|
||||
}
|
||||
body > footer p.muted {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@media only screen and (max-width: 768px) {
|
||||
footer time[datetime$="M"] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
blockquote cite {
|
||||
display: block;
|
||||
}
|
||||
blockquote cite::before {
|
||||
content: "\2014\00A0";
|
||||
}
|
||||
:target {
|
||||
filter: brightness(1.2);
|
||||
}
|
||||
:disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
/* hack.css overrides and enhancements */
|
||||
.hack li ul {
|
||||
margin: 0;
|
||||
}
|
||||
.hack ol li {
|
||||
padding-left: 27px;
|
||||
}
|
||||
.main {
|
||||
padding: 20px 10px;
|
||||
}
|
||||
input.form-control {
|
||||
border-radius: 0;
|
||||
background-color: transparent;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
-ms-appearance: none;
|
||||
}
|
||||
input.form-control,
|
||||
textarea.form-control,
|
||||
select.form-control,
|
||||
.help-block {
|
||||
font-size: initial;
|
||||
}
|
||||
@media only screen and (max-width: 768px) {
|
||||
.help-block {
|
||||
font-size: unset;
|
||||
}
|
||||
}
|
||||
html {
|
||||
font-size: 13px;
|
||||
}
|
||||
.hack .form input,
|
||||
.hack .form textarea,
|
||||
.hack .form button,
|
||||
.hack .form label {
|
||||
font-size: 1rem;
|
||||
}
|
||||
.hack .alert .highlight:first-of-type .chroma,
|
||||
.hack .card .highlight:first-of-type .chroma,
|
||||
.hack .alert pre:first-of-type,
|
||||
.hack .alert p:first-of-type,
|
||||
.hack .card pre:first-of-type,
|
||||
.hack .card p:first-of-type {
|
||||
margin-top: unset;
|
||||
}
|
||||
.hack .alert .highlight:last-of-type .chroma,
|
||||
.hack .card .highlight:last-of-type .chroma,
|
||||
.hack .alert pre:last-of-type,
|
||||
.hack .alert p:last-of-type,
|
||||
.hack .card pre:last-of-type,
|
||||
.hack .card p:last-of-type {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
.hack blockquote,
|
||||
.hack blockquote:after {
|
||||
line-height: 1.5;
|
||||
}
|
||||
.hack figure,
|
||||
.standard figure {
|
||||
margin: unset;
|
||||
}
|
||||
.hack figure a {
|
||||
border-bottom: none;
|
||||
}
|
||||
.hack figure a:hover {
|
||||
background-color: inherit;
|
||||
}
|
||||
article header img {
|
||||
width: 100%;
|
||||
border-radius: 3px;
|
||||
}
|
||||
table td, table th {
|
||||
line-height: inherit;
|
||||
}
|
||||
table a {
|
||||
border-bottom: unset;
|
||||
}
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
@media only screen and (min-width: 768px) {
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
.container {
|
||||
max-width: 50rem;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 768px), (-ms-high-contrast: active), (-ms-high-contrast: none) {
|
||||
/* @see http://browserhacks.com/#hack-28f493d247a12ab654f6c3637f6978d5 */
|
||||
html {
|
||||
margin-left: calc(100vw - 100%); /* @see https://aykevl.nl/2014/09/fix-jumping-scrollbar */
|
||||
}
|
||||
}
|
||||
21
themes/after-dark/assets/css/vendor/hack/LICENSE
vendored
Normal file
21
themes/after-dark/assets/css/vendor/hack/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 EGOIST 0x142857@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
1
themes/after-dark/assets/css/vendor/hack/dark-grey.css
vendored
Normal file
1
themes/after-dark/assets/css/vendor/hack/dark-grey.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.dark-grey{background-color:#181818;color:#ccc}.dark-grey pre{background-color:#181818;padding:0;border:none}.dark-grey pre code{color:#00bcd4}.dark-grey h1 a,.dark-grey h2 a,.dark-grey h3 a,.dark-grey h4 a,.dark-grey h5 a{color:#ccc}.dark-grey code,.dark-grey strong{color:#fff}.dark-grey code{font-weight:100}.dark-grey table{color:#ccc}.dark-grey table td,.dark-grey table th{border-color:#444}.dark-grey table tbody td:first-child{color:#fff}.dark-grey .form-group label{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .form-group.form-textarea label:after{background-color:#181818}.dark-grey .form-control{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .form-control:focus{border-color:#ccc;color:#ccc}.dark-grey textarea.form-control{color:#ccc}.dark-grey .card{border-color:rgba(95,95,95,.78)}.dark-grey .card .card-header{background-color:transparent;color:#ccc;border-bottom:1px solid rgba(95,95,95,.78)}.dark-grey .btn.btn-ghost.btn-default{border-color:#ababab;color:#ababab}.dark-grey .btn.btn-ghost.btn-default:focus,.dark-grey .btn.btn-ghost.btn-default:hover{border-color:#9c9c9c;color:#9c9c9c;z-index:1}.dark-grey .btn.btn-ghost.btn-default:focus,.dark-grey .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.dark-grey .btn.btn-ghost.btn-primary:focus,.dark-grey .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.dark-grey .btn.btn-ghost.btn-success:focus,.dark-grey .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.dark-grey .btn.btn-ghost.btn-info:focus,.dark-grey .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.dark-grey .btn.btn-ghost.btn-error:focus,.dark-grey .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.dark-grey .btn.btn-ghost.btn-warning:focus,.dark-grey .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.dark-grey .avatarholder,.dark-grey .placeholder{background-color:transparent;border-color:#333}.dark-grey .menu .menu-item{color:#ccc;border-color:rgba(95,95,95,.78)}.dark-grey .menu .menu-item.active,.dark-grey .menu .menu-item:hover{color:#fff;border-color:#ccc}
|
||||
1
themes/after-dark/assets/css/vendor/hack/dark.css
vendored
Normal file
1
themes/after-dark/assets/css/vendor/hack/dark.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.dark{color:#ccc}.dark,.dark pre{background-color:#000}.dark pre{padding:0;border:none}.dark pre code{color:#00bcd4}.dark h1 a,.dark h2 a,.dark h3 a,.dark h4 a,.dark h5 a{color:#ccc}.dark code,.dark strong{color:#fff}.dark code{font-weight:100}.dark table{color:#ccc}.dark table td,.dark table th{border-color:#444}.dark table tbody td:first-child{color:#fff}.dark .form-group label{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .form-group.form-textarea label:after{background-color:#000}.dark .form-control{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .form-control:focus{border-color:#ccc;color:#ccc}.dark textarea.form-control{color:#ccc}.dark .card{border-color:rgba(95,95,95,.78)}.dark .card .card-header{background-color:transparent;color:#ccc;border-bottom:1px solid rgba(95,95,95,.78)}.dark .btn.btn-ghost.btn-default{border-color:#ababab;color:#ababab}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#9c9c9c;color:#9c9c9c;z-index:1}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.dark .btn.btn-ghost.btn-primary:focus,.dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.dark .btn.btn-ghost.btn-success:focus,.dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.dark .btn.btn-ghost.btn-info:focus,.dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.dark .btn.btn-ghost.btn-error:focus,.dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.dark .btn.btn-ghost.btn-warning:focus,.dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.dark .avatarholder,.dark .placeholder{background-color:transparent;border-color:#333}.dark .menu .menu-item{color:#ccc;border-color:rgba(95,95,95,.78)}.dark .menu .menu-item.active,.dark .menu .menu-item:hover{color:#fff;border-color:#ccc}
|
||||
1
themes/after-dark/assets/css/vendor/hack/hack.css
vendored
Normal file
1
themes/after-dark/assets/css/vendor/hack/hack.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
themes/after-dark/assets/css/vendor/hack/solarized-dark.css
vendored
Normal file
1
themes/after-dark/assets/css/vendor/hack/solarized-dark.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.solarized-dark{background-color:#073642;color:#78909c}.solarized-dark h1,.solarized-dark h2,.solarized-dark h3,.solarized-dark h4,.solarized-dark h5,.solarized-dark h6{color:#1e88e5}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a,.solarized-dark h6 a{color:#1e88e5;border-bottom-color:#1e88e5}.solarized-dark h1 a:hover,.solarized-dark h2 a:hover,.solarized-dark h3 a:hover,.solarized-dark h4 a:hover,.solarized-dark h5 a:hover,.solarized-dark h6 a:hover{background-color:#1e88e5;color:#fff}.solarized-dark pre{background-color:#073642;padding:0;border:none}.solarized-dark pre code{color:#009688}.solarized-dark h1 a,.solarized-dark h2 a,.solarized-dark h3 a,.solarized-dark h4 a,.solarized-dark h5 a{color:#78909c}.solarized-dark code,.solarized-dark strong{color:#90a4ae}.solarized-dark code{font-weight:100}.solarized-dark .progress-bar-filled{background-color:#558b2f}.solarized-dark .progress-bar-filled:after,.solarized-dark .progress-bar-filled:before{color:#90a4ae}.solarized-dark table{color:#78909c}.solarized-dark table td,.solarized-dark table th{border-color:#b0bec5}.solarized-dark table tbody td:first-child{color:#b0bec5}.solarized-dark .form-group label{color:#78909c;border-color:#90a4ae}.solarized-dark .form-group.form-textarea label:after{background-color:#073642}.solarized-dark .form-control{color:#78909c;border-color:#90a4ae}.solarized-dark .form-control:focus{border-color:#cfd8dc;color:#cfd8dc}.solarized-dark textarea.form-control{color:#78909c}.solarized-dark .card{border-color:#90a4ae}.solarized-dark .card .card-header{background-color:transparent;color:#78909c;border-bottom:1px solid #90a4ae}.solarized-dark .btn.btn-ghost.btn-default{border-color:#607d8b;color:#607d8b}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#90a4ae;color:#90a4ae;z-index:1}.solarized-dark .btn.btn-ghost.btn-default:focus,.solarized-dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.solarized-dark .btn.btn-ghost.btn-primary:focus,.solarized-dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.solarized-dark .btn.btn-ghost.btn-success:focus,.solarized-dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.solarized-dark .btn.btn-ghost.btn-info:focus,.solarized-dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.solarized-dark .btn.btn-ghost.btn-error:focus,.solarized-dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.solarized-dark .btn.btn-ghost.btn-warning:focus,.solarized-dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.solarized-dark .avatarholder,.solarized-dark .placeholder{background-color:transparent;border-color:#90a4ae}.solarized-dark .menu .menu-item{color:#78909c;border-color:#90a4ae}.solarized-dark .menu .menu-item.active,.solarized-dark .menu .menu-item:hover{color:#fff;border-color:#78909c}
|
||||
1
themes/after-dark/assets/css/vendor/hack/standard.css
vendored
Normal file
1
themes/after-dark/assets/css/vendor/hack/standard.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
html{font-size:14px}.standard{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,Ubuntu,segoe ui,arial,sans-serif}.standard h1{font-size:2em;font-weight:700;margin:.67em 0}.standard h2{font-size:1.5em;font-weight:700;margin:.83em 0}.standard h3{font-size:1.17em;font-weight:700}.standard h3,.standard p{margin:1.75rem 0}.standard ol,.standard ul{display:block;list-style-type:disc;padding-left:20px;margin:1.75rem 0}.standard ol ul,.standard ul ul{margin:.75rem 0;list-style-type:square}.standard ol{list-style-type:decimal}.standard li{display:list-item;padding-left:0}.standard blockquote{margin:1.75rem 0;padding-left:10px;border-left:5px solid #f0f0f0}.standard pre{margin:1.75rem 0;white-space:pre}.standard hr{border:0;height:1px;display:block;background-color:#e2e2e2;margin:1.75rem 0}
|
||||
20
themes/after-dark/assets/js/baseof.js
Normal file
20
themes/after-dark/assets/js/baseof.js
Normal file
@@ -0,0 +1,20 @@
|
||||
/*!
|
||||
* Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
*
|
||||
* This file is part of After Dark.
|
||||
*
|
||||
* After Dark is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* After Dark is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
fetchInject(["{{ "/js/lazysizes.min.js" | relURL }}"]);
|
||||
145
themes/after-dark/assets/js/search.js
Normal file
145
themes/after-dark/assets/js/search.js
Normal file
@@ -0,0 +1,145 @@
|
||||
/*!
|
||||
* Copyright (C) 2019 Josh Habdas <jhabdas@protonmail.com>
|
||||
*
|
||||
* This file is part of After Dark.
|
||||
*
|
||||
* After Dark is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* After Dark is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
fetchInject([
|
||||
"{{ "/js/vue.min.js" | relURL }}",
|
||||
"{{ "/js/lodash.custom.min.js" | relURL }}",
|
||||
"{{ "/js/fuse.min.js" | relURL }}",
|
||||
"{{ "/js/mark.min.js" | relURL }}"
|
||||
]).then(() => {
|
||||
(function (window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
const getQueryByParam = param => decodeURIComponent(
|
||||
(location.search.split(param + '=')[1] || '').split('&')[0]
|
||||
).replace(/\+/g, ' ');
|
||||
|
||||
const queryParam = 's';
|
||||
const hotkeys = {{ (.Params.form.hotkeys | default (slice "/" "s")) | jsonify }};
|
||||
const selectors = {
|
||||
appContainer: '#search-app',
|
||||
resultContainer: '#search-results',
|
||||
searchInput: '#query'
|
||||
};
|
||||
|
||||
const fuseOpts = {
|
||||
shouldSort: true,
|
||||
tokenize: true,
|
||||
matchAllTokens: true,
|
||||
includeScore: true,
|
||||
includeMatches: true,
|
||||
keys: [
|
||||
{ name: "title", weight: 0.8 },
|
||||
{ name: "contents", weight: 0.5 },
|
||||
{ name: "tags", weight: 0.3 },
|
||||
{ name: "categories", weight: 0.3 }
|
||||
]
|
||||
};
|
||||
|
||||
const getSearchInput = () => document.querySelector(selectors.searchInput);
|
||||
const focusSearchInput = () => getSearchInput().focus();
|
||||
const searchQuery = getSearchInput().value = getQueryByParam(queryParam);
|
||||
|
||||
const fuse = new Fuse([], fuseOpts);
|
||||
window.fetch('/index.json').then(response => {
|
||||
response.text().then(searchData => {
|
||||
fuse.setCollection(JSON.parse(searchData));
|
||||
searchQuery && search(searchQuery);
|
||||
});
|
||||
});
|
||||
|
||||
const getUrl = (query) => {
|
||||
const encodedQuery = encodeURIComponent(query);
|
||||
const url = "{{ .RelPermalink }}";
|
||||
return (encodedQuery)
|
||||
? `${url}?${queryParam}=${encodedQuery}`
|
||||
: url;
|
||||
};
|
||||
|
||||
let mark = new Mark(
|
||||
document.querySelector(
|
||||
selectors.resultContainer
|
||||
)
|
||||
);
|
||||
|
||||
const app = new Vue({
|
||||
delimiters: ['{', '}'],
|
||||
el: selectors.appContainer,
|
||||
data: {
|
||||
fuse: null,
|
||||
results: [],
|
||||
query: getQueryByParam(queryParam),
|
||||
resultsForSearch: getQueryByParam(queryParam)
|
||||
},
|
||||
mounted () {
|
||||
this.fuse = fuse;
|
||||
window.onpopstate = (evt) => {
|
||||
this.query = evt.state.query;
|
||||
};
|
||||
const searchInput = getSearchInput();
|
||||
document.onkeydown = function (evt) {
|
||||
if (evt.target === searchInput) return;
|
||||
if (hotkeys.includes(evt.key)) {
|
||||
evt.preventDefault();
|
||||
focusSearchInput();
|
||||
getSearchInput().select();
|
||||
};
|
||||
}
|
||||
focusSearchInput();
|
||||
},
|
||||
watch: {
|
||||
query () {
|
||||
this.executeSearch();
|
||||
window.history.replaceState(
|
||||
{query: this.query},
|
||||
null,
|
||||
getUrl(this.query)
|
||||
);
|
||||
}
|
||||
},
|
||||
beforeUpdate: function () {
|
||||
mark.unmark();
|
||||
},
|
||||
updated: function () {
|
||||
this.$nextTick(function () {
|
||||
mark = new Mark(
|
||||
document.querySelector(
|
||||
selectors.resultContainer
|
||||
)
|
||||
)
|
||||
mark.mark(this.query.trim());
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
executeSearch: _.debounce(function () {
|
||||
const trimmedQuery = this.query.trim();
|
||||
this.resultsForSearch = trimmedQuery;
|
||||
this.results = (trimmedQuery)
|
||||
? this.fuse.search(trimmedQuery)
|
||||
: [];
|
||||
}, 250)
|
||||
}
|
||||
});
|
||||
|
||||
const search = query => {
|
||||
app.results = fuse.search(query);
|
||||
};
|
||||
|
||||
})(window, document);
|
||||
});
|
||||
2
themes/after-dark/assets/js/vendor/fetch-inject.min.js
vendored
Normal file
2
themes/after-dark/assets/js/vendor/fetch-inject.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! Fetch Inject v2.0.4 | Copyright (C) Josh Habdas <jhabdas@protonmail.com> (https://habd.as) | @license Zlib */
|
||||
var fetchInject=function(){"use strict";const e=function(e,t,r,n,o,c,i){c=t.createElement(r),i=t.getElementsByTagName(r)[0],c.appendChild(t.createTextNode(n.text)),c.onload=o(n),i?i.parentNode.insertBefore(c,i):t.head.appendChild(c)};return function(t,r){if(!arguments.length)return Promise.reject(new ReferenceError("Failed to execute 'fetchInject': 1 argument required but only 0 present."));if(arguments[0]&&arguments[0].constructor!==Array)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 1 must be of type 'Array'."));if(arguments[1]&&arguments[1].constructor!==Promise)return Promise.reject(new TypeError("Failed to execute 'fetchInject': argument 2 must be of type 'Promise'."));const n=[],o=r?[].concat(r):[],c=[];return t.forEach(e=>o.push(window.fetch(e).then(e=>[e.clone().text(),e.blob()]).then(e=>Promise.all(e).then(e=>{n.push({text:e[0],blob:e[1]})})))),Promise.all(o).then(()=>(n.forEach(t=>{c.push({then:r=>{t.blob.type.includes("text/css")?e(window,document,"style",t,r):e(window,document,"script",t,r)}})}),Promise.all(c)))}}();
|
||||
Reference in New Issue
Block a user