Initial commit
219
LICENSE
Normal file
@ -0,0 +1,219 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2018-2019 Huabing Zhao
|
||||
https://github.com/zhaohuabing
|
||||
https://zhaohuabing.com
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
=======================================================================
|
||||
Hugo Clean White Blog Theme is based on [huxblog Jekyll Theme](https://github.com/Huxpro/huxpro.github.io)
|
||||
and [Clean Blog Jekyll Theme](https://github.com/BlackrockDigital/startbootstrap-clean-blog-jekyll).
|
||||
It contains subcomponents with separate copyright notices and license terms.
|
||||
Your use of the source code for the these subcomponents is subject to the terms
|
||||
and conditions of their corresponding licences, which are not all listed here.
|
||||
|
||||
(Apache License) Huxblog Jekyll Theme: https://github.com/Huxpro/huxpro.github.io
|
||||
https://github.com/Huxpro/huxpro.github.io/blob/master/LICENSE
|
||||
Copyright 2015-2016 Huxpro
|
||||
|
||||
(MIT License) Clean Blog Jekyll Theme: https://github.com/BlackrockDigital/startbootstrap-clean-blog-jekyll/
|
||||
https://github.com/BlackrockDigital/startbootstrap-clean-blog-jekyll/blob/master/LICENSE
|
||||
Copyright (c) 2013-2016 Blackrock Digital LLC.
|
10
archetypes/post.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
title: "An Example Post"
|
||||
subtitle: ""
|
||||
description: ""
|
||||
date: 2021-06-04
|
||||
author: ""
|
||||
image: ""
|
||||
tags: ["tag1", "tag2"]
|
||||
categories: ["Tech" ]
|
||||
---
|
28
layouts/_default/baseof.html
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.LanguageCode }}">
|
||||
{{ partial "head.html" . }}
|
||||
<body>
|
||||
{{ partial "nav.html" . }}
|
||||
<!-- Page Header -->
|
||||
{{ block "header" .}}
|
||||
<header class="intro-header" style="background-image: url('{{ .Site.Params.header_image | relURL }}'); background-size: auto;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-8 offset-xl-2 col-lg-10 offset-lg-1 ">
|
||||
<div class="site-heading">
|
||||
<h1 class="display-1">{{ .Site.Title}} </h1>
|
||||
<!--<hr class="small">-->
|
||||
<span class="h5">{{ .Site.Params.slogan }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ block "main" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ partial "footer.html" . }}
|
||||
</body>
|
||||
</html>
|
56
layouts/_default/section.html
Normal file
@ -0,0 +1,56 @@
|
||||
{{ define "main" }}
|
||||
<!-- Post Content -->
|
||||
<article>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<!-- Post Container -->
|
||||
<div class="
|
||||
col-xl-8 offset-xl-2
|
||||
col-lg-10 offset-lg-1
|
||||
post-container">
|
||||
|
||||
{{ .Content }}
|
||||
|
||||
</div>
|
||||
<!-- Sidebar Container -->
|
||||
<div class="
|
||||
col-xl-8 offset-xl-2
|
||||
col-lg-10 offset-lg-1
|
||||
sidebar-container">
|
||||
|
||||
<!-- Featured Tags -->
|
||||
{{ if .Site.Params.featured_tags }}
|
||||
<section>
|
||||
<hr class="hidden-sm hidden-xs">
|
||||
<h5><a href="/tags/">FEATURED TAGS</a></h5>
|
||||
<div class="tags">
|
||||
{{ $featured_condition_size := .Site.Params.featured_condition_size }}
|
||||
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
|
||||
{{ if gt (len $taxonomy.Pages) $featured_condition_size }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}" title="{{ $name }}">
|
||||
{{ $name }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
<!-- Friends Blog -->
|
||||
{{ if .Site.Params.friends }}
|
||||
<section>
|
||||
<hr>
|
||||
<h5>FRIENDS</h5>
|
||||
<ul class="list-inline">
|
||||
{{ range .Site.Params.friend_link }}
|
||||
<li><a target="_blank" href="{{.href}}">{{.title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
{{ end }}
|
122
layouts/_default/single.html
Normal file
@ -0,0 +1,122 @@
|
||||
{{ define "header" }}
|
||||
<!-- Post Header -->
|
||||
<style type="text/css">
|
||||
header.intro-header {
|
||||
background-image: url('{{ if .Params.image }}{{ .Params.image | relURL }}{{ else }}{{ .Site.Params.header_image | relURL}}{{ end }}')
|
||||
}
|
||||
</style>
|
||||
<header class="intro-header">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-8 offset-xl-2 col-lg-10 offset-lg-1">
|
||||
<div class="post-heading">
|
||||
<div class="tags">
|
||||
{{ range .Params.tags }}
|
||||
<a class="tag" href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" title="{{ . }}">
|
||||
{{ . }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
<h1 class="py-2">{{ .Title }}</h1>
|
||||
<h2 class="subheading py-2 h4">{{ .Params.subtitle }}</h2>
|
||||
<span class="meta">
|
||||
Par
|
||||
{{ if .Params.author }}
|
||||
{{ .Params.author }}
|
||||
{{ else }}
|
||||
{{ .Site.Title }}
|
||||
{{ end }}
|
||||
le
|
||||
{{ .Date.Format "2 Jan 2006" }}
|
||||
{{ if .Site.Params.page_view_conter }}
|
||||
{{ partial "page_view_counter.html" . }}
|
||||
{{ end }}
|
||||
<!-- Don't show "Last Modified on" if update happened on the same day. -->
|
||||
{{ if (and (not .Lastmod.IsZero) (not (eq (dateFormat "2006-01-02" .Lastmod) (dateFormat "2006-01-02" .Date)))) }}
|
||||
<br>Last Modified on {{ dateFormat "Monday, January 2, 2006" .Params.LastMod }}
|
||||
{{ end }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<!-- Post Content -->
|
||||
<article>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
|
||||
<!-- Post Container -->
|
||||
<div class="
|
||||
col-xl-8 offset-xl-2
|
||||
col-lg-10 offset-lg-1
|
||||
post-container">
|
||||
|
||||
{{ if not (eq (.Param "showtoc") false) }}
|
||||
<header>
|
||||
<h2>Sommaire</h2>
|
||||
</header>
|
||||
{{.TableOfContents}}
|
||||
{{ end }}
|
||||
{{ .Content }}
|
||||
|
||||
<hr>
|
||||
<div style="clear: both">
|
||||
{{ if .PrevInSection }}
|
||||
<a class="btn btn-outline-primary float-left" href="{{ .PrevInSection.URL }}" data-toggle="tooltip" data-placement="top" title="{{ .PrevInSection.Title }}">←
|
||||
Article précédent
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ if .NextInSection }}
|
||||
<a class="btn btn-outline-primary float-right" href="{{ .NextInSection.URL }}" data-toggle="tooltip" data-placement="top" title="{{ .NextInSection.Title}}">
|
||||
Article suivant →
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- Sidebar Container -->
|
||||
<div class="
|
||||
col-xl-11 offset-xl-1
|
||||
col-lg-10 offset-lg-1
|
||||
sidebar-container">
|
||||
|
||||
<!-- Featured Tags -->
|
||||
{{ if .Site.Params.featured_tags }}
|
||||
<section>
|
||||
<hr class="hidden-sm hidden-xs">
|
||||
<h5><a href="/tags/" class="text-sc">Tags</a></h5>
|
||||
<div class="tags">
|
||||
{{ $featured_condition_size := .Site.Params.featured_condition_size }}
|
||||
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
|
||||
{{ if gt (len $taxonomy.Pages) $featured_condition_size }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}" title="{{ $name }}">
|
||||
{{ $name }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
<!-- Friends Blog -->
|
||||
{{ if .Site.Params.friends }}
|
||||
<section>
|
||||
<hr>
|
||||
<h5>FRIENDS</h5>
|
||||
<ul class="list-inline">
|
||||
{{ range .Site.Params.friend_link }}
|
||||
<li><a target="_blank" href="{{.href}}">{{.title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
{{ end }}
|
3
layouts/index.html
Normal file
@ -0,0 +1,3 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "portfolio.html" . }}
|
||||
{{ end }}
|
12
layouts/index.json
Normal file
@ -0,0 +1,12 @@
|
||||
[{{ range $index, $page := .Site.Pages }}
|
||||
{{- if ne $page.Type "json" -}}
|
||||
{{- if and $index (gt $index 0) -}},{{- end }}
|
||||
{
|
||||
"uri": "{{ $page.Permalink }}",
|
||||
"title": "{{ htmlEscape $page.Title}}",
|
||||
"tags": [{{ range $tindex, $tag := $page.Params.tags }}{{ if $tindex }}, {{ end }}"{{ $tag| htmlEscape }}"{{ end }}],
|
||||
"description": "{{ htmlEscape .Description}}",
|
||||
"content": {{$page.Plain | jsonify}}
|
||||
}
|
||||
{{- end -}}
|
||||
{{- end -}}]
|
264
layouts/partials/footer.html
Normal file
@ -0,0 +1,264 @@
|
||||
<!-- Footer -->
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xl-8 offset-xl-2 col-lg-10 offset-lg-1">
|
||||
<ul class="list-inline text-center">
|
||||
{{ if .Site.Params.social.rss }}
|
||||
<li class="list-inline-item">
|
||||
<a href='{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}' rel="alternate" type="application/rss+xml" title="{{ .Site.Title | default "" }}" >
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fas fa-rss fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.email }}
|
||||
<li class="list-inline-item">
|
||||
<a href="mailto:{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fas fa-envelope fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.social.twitter }}
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.zhihu }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-stack-1x fa-inverse">知</i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.weibo }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-weibo fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.social.facebook }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
|
||||
<!-- Huabing: add wechat QR code link -->
|
||||
{{ with .Site.Params.social.wechat }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . | relURL }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-wechat fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.github }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.gitlab }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-gitlab fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.git }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-git fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.linkedin }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-linkedin fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.medium }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-medium fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.stackoverflow }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-stack-overflow fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.reddit }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-reddit fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.mastodon }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-mastodon fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.keybase }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-keybase fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.xing }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-xing fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.instagram }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-instagram fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.flickr }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-flickr fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
<p class="copyright text-muted">
|
||||
Copyright © ArmaVirumque {{ now.Year }} |
|
||||
<a href="https://www.armavirumque.fr/mentions-legales">Mentions légales</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
|
||||
<!-- async load function -->
|
||||
<script>
|
||||
function async(u, c) {
|
||||
var d = document, t = 'script',
|
||||
o = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
o.src = u;
|
||||
if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
|
||||
s.parentNode.insertBefore(o, s);
|
||||
}
|
||||
</script>
|
||||
|
||||
<!--
|
||||
Because of the native support for backtick-style fenced code blocks
|
||||
right within the Markdown is landed in Github Pages,
|
||||
From V1.6, There is no need for Highlight.js,
|
||||
so Huxblog drops it officially.
|
||||
|
||||
- https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0
|
||||
- https://help.github.com/articles/creating-and-highlighting-code-blocks/
|
||||
-->
|
||||
<!--
|
||||
<script>
|
||||
async("http://cdn.bootcss.com/highlight.js/8.6/highlight.min.js", function(){
|
||||
hljs.initHighlightingOnLoad();
|
||||
})
|
||||
</script>
|
||||
<link href="http://cdn.bootcss.com/highlight.js/8.6/styles/github.min.css" rel="stylesheet">
|
||||
-->
|
||||
|
||||
|
||||
<!-- jquery.tagcloud.js -->
|
||||
<script>
|
||||
// only load tagcloud.js in tag.html
|
||||
if($('#tag_cloud').length !== 0){
|
||||
async("/js/jquery.tagcloud.js",function(){
|
||||
$.fn.tagcloud.defaults = {
|
||||
//size: {start: 1, end: 1, unit: 'em'},
|
||||
color: {start: '#bbbbee', end: '#0085a1'},
|
||||
};
|
||||
$('#tag_cloud a').tagcloud();
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<!--fastClick.js -->
|
||||
<script>
|
||||
async("https://cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.js", function(){
|
||||
var $nav = document.querySelector("nav");
|
||||
if($nav) FastClick.attach($nav);
|
||||
})
|
||||
</script>
|
102
layouts/partials/head.html
Normal file
@ -0,0 +1,102 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="{{ "favicon.ico" | relURL }}">
|
||||
<meta name="theme-color" content="#002fa7"/>
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="//www.armaviruemque.fr/img/apple-touch-icon.png">
|
||||
|
||||
<!-- start ogp -->
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}">
|
||||
<meta property="og:type" content="article">
|
||||
|
||||
{{ if .Params.thumbnail }}
|
||||
<meta property="og:image" content="{{ .Site.BaseURL }}{{ .Params.thumbnail }}">
|
||||
<meta property="twitter:image" content="{{ .Site.BaseURL }}{{ .Params.thumbnail }}" />
|
||||
{{ else }}
|
||||
<meta property="og:image" content="{{ .Site.BaseURL }}/{{ .Site.Params.header_image }}">
|
||||
<meta property="twitter:image" content="{{ .Site.BaseURL }}/{{ .Site.Params.header_image }}" />
|
||||
{{ end }}
|
||||
|
||||
{{ if .Params.title }}
|
||||
<meta name="title" content="{{ .Params.title }}" />
|
||||
<meta property="og:title" content="{{ .Params.title }}" />
|
||||
<meta property="twitter:title" content="{{ .Params.title }}" />
|
||||
{{ else }}
|
||||
<meta name="title" content="{{ .Site.Params.title }}" />
|
||||
<meta property="og:title" content="{{ .Site.Params.title }}" />
|
||||
<meta property="twitter:title" content="{{ .Site.Params.title }}" />
|
||||
{{ end }}
|
||||
|
||||
{{ if .Params.description }}
|
||||
<meta name="description" content="{{ .Params.description }}">
|
||||
<meta property="og:description" content="{{ .Params.description }}" />
|
||||
<meta property="twitter:description" content="{{ .Params.description }}" />
|
||||
{{ else }}
|
||||
<meta name="description" content="{{ .Site.Params.description }}">
|
||||
<meta property="og:description" content="{{ .Site.Params.description }}" />
|
||||
<meta property="twitter:description" content="{{ .Site.Params.description }}" />
|
||||
{{ end }}
|
||||
|
||||
{{ if .Params.summary }}
|
||||
<meta property="twitter:card" content="{{ .Params.summary }}" />
|
||||
{{ else }}
|
||||
<meta property="twitter:card" content="summary" />
|
||||
{{ end }}
|
||||
<!-- end ogp -->
|
||||
|
||||
<meta name="keyword" content="{{ .Site.Params.keyword }}">
|
||||
|
||||
<title>{{ if .Title }}{{ .Title }} - {{ .Site.Params.SEOTitle }}{{ else }}{{ .Site.Params.SEOTitle }}{{ end }}</title>
|
||||
|
||||
<link rel="canonical" href="{{ .URL | relURL }}">
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link rel="stylesheet" href="{{ "css/bootstrap.min.css" | relURL }}">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" rel="stylesheet" type="text/css">
|
||||
|
||||
<!-- Theme CSS -->
|
||||
<link rel="stylesheet" href="{{ "css/auto-complete.css" | relURL }}">
|
||||
<link rel="stylesheet" href="{{ "css/roland.css" | relURL }}">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
{{ range .Site.Params.custom_css -}}
|
||||
<link rel="stylesheet" href="{{ . | absURL }}">
|
||||
{{- end }}
|
||||
|
||||
<!--
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
|
||||
-->
|
||||
<!-- jQuery -->
|
||||
<script src="{{ "js/jquery.min.js" | relURL }}"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="{{ "js/bootstrap.min.js" | relURL }}"></script>
|
||||
|
||||
<!-- Search feature JavaScript -->
|
||||
<script type="text/javascript" src="{{"js/lunr.min.js" | relURL}}"></script>
|
||||
<script type="text/javascript" src="{{"js/auto-complete.js" | relURL}}"></script>
|
||||
<script type="text/javascript">
|
||||
{{ if .Site.IsMultiLingual }}
|
||||
var baseurl = "{{.Site.BaseURL}}{{.Site.LanguagePrefix}}";
|
||||
{{ else }}
|
||||
var baseurl = "{{.Site.BaseURL}}";
|
||||
{{ end }}
|
||||
</script>
|
||||
<script type="text/javascript" src="{{"js/search.js" | relURL}}"></script>
|
||||
|
||||
<!-- Custom JS -->
|
||||
{{ range .Site.Params.custom_js }}
|
||||
<script src="{{ . | absURL }}"></script>
|
||||
{{ end }}
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
})
|
||||
</script>
|
||||
|
||||
<script async defer data-website-id="55cc7d60-2443-45ac-ab74-21ece8d3b7ed" src="https://pythagore.p0m.fr/pythagore.js"></script>
|
||||
</head>
|
32
layouts/partials/nav.html
Normal file
@ -0,0 +1,32 @@
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-sm navbar-fixed-top">
|
||||
<a class="navbar-brand" href="{{ "/" | relLangURL }}" title="{{ .Site.Title }}">
|
||||
{{ partial "logo.html" . }}
|
||||
</a>
|
||||
<div class="navbar-collapse">
|
||||
<div class="navbar-nav mr-auto"></div>
|
||||
<form class="flex-grow-1 mx-3 mx-md-4 mx-lg-5 pr-3" onsubmit="return false;">
|
||||
<input id="search-by" class="form-control" placeholder="Rechercher un article…">
|
||||
</form>
|
||||
<div class="navbar-nav mr-auto"></div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
{{ if not .Site.Params.omit_categories }}
|
||||
{{ range $name, $taxonomy := .Site.Taxonomies.categories }}
|
||||
<li>
|
||||
<a href="{{ "categories/" | relLangURL }}{{ $name | urlize }}">{{ $name }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ range .Site.Params.addtional_menus }}
|
||||
<li><a href="{{.href | relLangURL}}">{{.title}}</a></li>
|
||||
{{ end }}
|
||||
|
||||
{{ if .Site.Params.cta_nav }}
|
||||
<li>
|
||||
<a href="{{ .Site.Params.cta_nav_href | relLangURL }}" class="btn btn-primary">{{ .Site.Params.cta_nav_txt }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
16
layouts/partials/pagination.html
Normal file
@ -0,0 +1,16 @@
|
||||
<!-- Pagination -->
|
||||
{{ $pag := $.Paginator }}
|
||||
{{ if gt $pag.TotalPages 1 }}
|
||||
<div style="clear: both">
|
||||
{{ if $pag.HasPrev }}
|
||||
<a class="btn btn-outline-primary float-left" href="{{ $pag.Prev.URL }}">
|
||||
← Articles plus récents
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ if $pag.HasNext }}
|
||||
<a class="btn btn-outline-primary float-right" href="{{ $pag.Next.URL }}">
|
||||
Articles plus anciens →
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
2
layouts/partials/portfolio.html
Normal file
@ -0,0 +1,2 @@
|
||||
{{ $paginator := .Paginate (where (where .Site.Pages "Type" "post") "IsPage" true) }}
|
||||
{{ partial "posts.html" . }}
|
31
layouts/partials/post_list.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!-- post list -->
|
||||
{{ range $index, $element := $.Paginator.Pages }}
|
||||
<div class="post-preview my-4">
|
||||
<a href="{{ .Permalink }}">
|
||||
<h2 class="font-weight-bold h3 pb-1">
|
||||
{{ .Title }}
|
||||
</h2>
|
||||
{{with .Params.subtitle }}
|
||||
<p class="lead">
|
||||
{{ . }}
|
||||
</p>
|
||||
{{ end }}
|
||||
<div class="post-content-preview text-muted my-4">
|
||||
{{ with .Description }}
|
||||
{{ . }}
|
||||
{{ else }}
|
||||
{{ .Summary}}
|
||||
{{ end }}
|
||||
</div>
|
||||
</a>
|
||||
<p class="post-meta text-right">
|
||||
Posté par {{ with .Params.author }}{{ . }}{{ else }}{{ .Site.Title }}{{ end }} le {{ .Date.Format "2 Jan 2006" }}
|
||||
<!-- Don't show "Last Modified on" if update happened on the same day. -->
|
||||
{{ if (and (not .Lastmod.IsZero) (not (eq (dateFormat "2006-01-02" .Lastmod) (dateFormat "2006-01-02" .Date)))) }}
|
||||
<br>Mise à jour le {{ dateFormat "2 Jan 2006" .Params.LastMod }}
|
||||
{{ end }}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<hr>
|
||||
{{ end }}
|
16
layouts/partials/posts.html
Normal file
@ -0,0 +1,16 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<!-- USE SIDEBAR -->
|
||||
<!-- Post Container -->
|
||||
<div class="
|
||||
col-xl-8 offset-xl-1
|
||||
col-lg-8 offset-lg-1
|
||||
col-12
|
||||
post-container
|
||||
">
|
||||
{{ partial "post_list.html" . }}
|
||||
{{ partial "pagination.html" . }}
|
||||
</div>
|
||||
{{ partial "sidebar.html" . }}
|
||||
</div>
|
||||
</div>
|
254
layouts/partials/sidebar.html
Normal file
@ -0,0 +1,254 @@
|
||||
|
||||
<!-- Sidebar Container -->
|
||||
<div class="
|
||||
col-xl-3 offset-xl-0
|
||||
col-lg-3 offset-lg-0
|
||||
col-12
|
||||
text-dark
|
||||
sidebar-container
|
||||
">
|
||||
<!-- Featured Tags -->
|
||||
{{ if .Site.Params.featured_tags }}
|
||||
<section>
|
||||
<hr class="d-none d-lg-block">
|
||||
<h5 class="text-sc">Tags</h5>
|
||||
<div class="tags">
|
||||
{{ $featured_condition_size := .Site.Params.featured_condition_size }}
|
||||
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
|
||||
{{ if gt (len $taxonomy.Pages) $featured_condition_size }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}" title="{{ $name }}">
|
||||
{{ $name }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
<!-- Short About -->
|
||||
{{ if .Site.Params.about_me }}
|
||||
<section class="d-none d-lg-block">
|
||||
<hr><h5 class="text-sc"><a href="{{ "/top/about" | relLangURL }}">À propos d'AVQ</a></h5>
|
||||
<div class="short-about">
|
||||
{{ with .Site.Params.sidebar_avatar }}
|
||||
<div class="text-center">
|
||||
<a href="{{ "/top/about" | relLangURL }}">
|
||||
<img src="{{ . | relURL }}" alt="avatar" style="cursor: pointer" />
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.sidebar_about_description }}
|
||||
<p class="text-secondary">{{ . }}</p>
|
||||
{{ end }}
|
||||
<!-- SNS Link -->
|
||||
<ul class="list-inline">
|
||||
{{ if .Site.Params.social.rss }}
|
||||
<li class="list-inline-item">
|
||||
<a href='{{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}' rel="alternate" type="application/rss+xml" title="{{ .Site.Title | default "" }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fas fa-rss fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.twitter }}
|
||||
<li class="list-inline-item">
|
||||
<a href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.zhihu }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-stack-1x fa-inverse">知</i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.weibo }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-weibo fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.facebook }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-facebook fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.wechat }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . | relURL}}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-wechat fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.github }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-github fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.gitlab }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-gitlab fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.git }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-git fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.linkedin }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-linkedin fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.medium }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-medium fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.stackoverflow }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-stack-overflow fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.reddit }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-reddit fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.mastodon }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-mastodon fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.keybase }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-keybase fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.xing }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-xing fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.instagram }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-instagram fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.social.flickr }}
|
||||
<li class="list-inline-item">
|
||||
<a target="_blank" href="{{ . }}">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fas fa-circle fa-stack-2x"></i>
|
||||
<i class="fab fa-flickr fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
<!-- Friends Blog -->
|
||||
{{ if .Site.Params.friends }}
|
||||
<section>
|
||||
<hr class="d-none s-lg-block">
|
||||
<h5>FRIENDS</h5>
|
||||
<ul class="list-inline">
|
||||
{{ range .Site.Params.friend_link }}
|
||||
<li class="list-inline-item"><a target="_blank" href="{{.href | relLangURL}}">{{.title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
<!-- Bookmarks -->
|
||||
{{ if .Site.Params.bookmarks }}
|
||||
<section>
|
||||
<hr>
|
||||
<h5>BOOKMARKS</h5>
|
||||
<ul class="list-inline">
|
||||
{{ range .Site.Params.bookmark_link }}
|
||||
<li class="list-inline-item"><a target="_blank" href="{{.href | relLangURL}}">{{.title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
</div>
|
1
layouts/shortcodes/br.html
Normal file
@ -0,0 +1 @@
|
||||
<br>
|
47
static/css/auto-complete.css
Normal file
@ -0,0 +1,47 @@
|
||||
.autocomplete-suggestions {
|
||||
text-align: left;
|
||||
cursor: default;
|
||||
border: 1px solid #ccc;
|
||||
border-top: 0;
|
||||
background: #fff;
|
||||
box-shadow: -1px 1px 3px rgba(0,0,0,.1);
|
||||
|
||||
/* core styles should not be changed */
|
||||
position: absolute;
|
||||
display: none;
|
||||
z-index: 9999;
|
||||
max-height: 254px;
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
box-sizing: border-box;
|
||||
|
||||
}
|
||||
.autocomplete-suggestion {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
padding: 7px;
|
||||
line-height: 23px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.autocomplete-suggestion b {
|
||||
font-weight: normal;
|
||||
color: #1f8dd6;
|
||||
}
|
||||
|
||||
.autocomplete-suggestion.selected {
|
||||
background: #333;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.autocomplete-suggestion:hover {
|
||||
background: #444;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.autocomplete-suggestion > .context {
|
||||
font-size: 12px;
|
||||
}
|
8
static/css/bootstrap.min.css
vendored
Normal file
2712
static/css/custom.css
Normal file
4
static/css/font-awesome.min.css
vendored
Normal file
BIN
static/css/fonts/FontAwesome.otf
Normal file
BIN
static/css/fonts/fontawesome-webfont.eot
Normal file
1
static/css/fonts/fontawesome-webfont.svg
Normal file
After Width: | Height: | Size: 377 KiB |
BIN
static/css/fonts/fontawesome-webfont.ttf
Normal file
BIN
static/css/fonts/fontawesome-webfont.woff
Normal file
BIN
static/css/fonts/fontawesome-webfont.woff2
Normal file
159
static/css/hugo-easy-gallery.css
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
Put this file in /static/css/hugo-easy-gallery.css
|
||||
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
Grid Layout Styles
|
||||
*/
|
||||
.gallery {
|
||||
overflow: hidden;
|
||||
margin: 10px;
|
||||
max-width: 768px;
|
||||
}
|
||||
.gallery .box {
|
||||
float: left;
|
||||
position: relative;
|
||||
/* Default: 1 tile wide */
|
||||
width: 100%;
|
||||
padding-bottom: 100%;
|
||||
}
|
||||
@media only screen and (min-width : 365px) {
|
||||
/* Tablet view: 2 tiles */
|
||||
.gallery .box {
|
||||
width: 50%;
|
||||
padding-bottom: 50%;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width : 480px) {
|
||||
/* Small desktop / ipad view: 3 tiles */
|
||||
.gallery .box {
|
||||
width: 33.3%;
|
||||
padding-bottom: 33.3%; /* */
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width : 9999px) {
|
||||
/* Medium desktop: 4 tiles */
|
||||
.box {
|
||||
width: 25%;
|
||||
padding-bottom: 25%;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Transition styles
|
||||
*/
|
||||
.gallery.hover-transition figure,
|
||||
.gallery.hover-effect-zoom .img,
|
||||
.gallery:not(.caption-effect-appear) figcaption,
|
||||
.fancy-figure:not(.caption-effect-appear) figcaption {
|
||||
-webkit-transition: all 0.3s ease-in-out;
|
||||
-moz-transition: all 0.3s ease-in-out;
|
||||
-o-transition: all 0.3s ease-in-out;
|
||||
transition: all 0.3s ease-in-out;
|
||||
}
|
||||
/*
|
||||
figure styles
|
||||
*/
|
||||
figure {
|
||||
position:relative; /* purely to allow absolution positioning of figcaption */
|
||||
overflow: hidden;
|
||||
}
|
||||
.gallery figure {
|
||||
position: absolute;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
top: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
.gallery.hover-effect-grow figure:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
.gallery.hover-effect-shrink figure:hover {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
.gallery.hover-effect-slidedown figure:hover {
|
||||
transform: translateY(5px);
|
||||
}
|
||||
.gallery.hover-effect-slideup figure:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
/*
|
||||
img / a styles
|
||||
*/
|
||||
|
||||
.gallery .img {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background-size: cover;
|
||||
background-position: 50% 50%;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.gallery.hover-effect-zoom figure:hover .img {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
.gallery img {
|
||||
display: none; /* only show the img if not inside a gallery */
|
||||
}
|
||||
figure a {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
figcaption styles
|
||||
*/
|
||||
.gallery figcaption,
|
||||
.fancy-figure figcaption {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: #000;
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
font-size: 75%; /* change this if you want bigger text */
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
opacity: 1;
|
||||
cursor: pointer;
|
||||
}
|
||||
.gallery.caption-position-none figcaption,
|
||||
.fancy-figure.caption-position-none figcaption {
|
||||
display: none;
|
||||
}
|
||||
.gallery.caption-position-center figcaption,
|
||||
.fancy-figure.caption-position-center figcaption {
|
||||
top: 0;
|
||||
padding: 40% 5px;
|
||||
}
|
||||
.gallery.caption-position-bottom figcaption,
|
||||
.fancy-figure.caption-position-bottom figcaption {
|
||||
padding: 5px;
|
||||
}
|
||||
.gallery.caption-effect-fade figure:not(:hover) figcaption,
|
||||
.gallery.caption-effect-appear figure:not(:hover) figcaption,
|
||||
.fancy-figure.caption-effect-fade figure:not(:hover) figcaption,
|
||||
.fancy-figure.caption-effect-appear figure:not(:hover) figcaption {
|
||||
background: rgba(0, 0, 0, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
.gallery.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption,
|
||||
.fancy-figure.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption {
|
||||
margin-bottom: -100%;
|
||||
}
|
||||
.gallery.caption-effect-slide.caption-position-center figure:not(:hover) figcaption,
|
||||
.fancy-figure.caption-effect-slide.caption-position-center figure:not(:hover) figcaption {
|
||||
top: 100%;
|
||||
}
|
||||
figcaption p {
|
||||
margin: auto; /* override style in theme */
|
||||
}
|
||||
|
1
static/css/hux-blog.min.css
vendored
Normal file
3
static/css/iDisqus.min.css
vendored
Normal file
111
static/css/mindmap.css
Normal file
@ -0,0 +1,111 @@
|
||||
.km-view {
|
||||
font-family: "STHeitiSC-Light", "STHeiti", "Hei", "Heiti SC", "Microsoft Yahei", Arial, sans-serif;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.km-view .km-receiver {
|
||||
position: absolute;
|
||||
left: -99999px;
|
||||
top: -99999px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
outline: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.km-view image {
|
||||
cursor: zoom-in;
|
||||
}
|
||||
|
||||
.km-image-viewer {
|
||||
position: fixed;
|
||||
z-index: 99999;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: rgba(0, 0, 0, .75);
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-container::before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
width: 0;
|
||||
font-size: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-container img {
|
||||
cursor: zoom-out;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-container img.limited {
|
||||
cursor: zoom-in;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-toolbar {
|
||||
z-index: 1;
|
||||
background: rgba(0, 0, 0, .75);
|
||||
text-align: right;
|
||||
transition: all .25s;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-toolbar.hidden {
|
||||
transform: translate(0, -100%);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-btn {
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjY0IiBoZWlnaHQ9Ijg4IiB2aWV3Qm94PSIwIDAgMjY0IDg4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5kZWZhdWx0LXNraW4gMjwvdGl0bGU+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Zz48cGF0aCBkPSJNNjcuMDAyIDU5LjV2My43NjhjLTYuMzA3Ljg0LTkuMTg0IDUuNzUtMTAuMDAyIDkuNzMyIDIuMjItMi44MyA1LjU2NC01LjA5OCAxMC4wMDItNS4wOThWNzEuNUw3MyA2NS41ODUgNjcuMDAyIDU5LjV6IiBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiLz48ZyBmaWxsPSIjZmZmIj48cGF0aCBkPSJNMTMgMjl2LTVoMnYzaDN2MmgtNXpNMTMgMTVoNXYyaC0zdjNoLTJ2LTV6TTMxIDE1djVoLTJ2LTNoLTN2LTJoNXpNMzEgMjloLTV2LTJoM3YtM2gydjV6IiBpZD0iU2hhcGUiLz48L2c+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTYyIDI0djVoLTJ2LTNoLTN2LTJoNXpNNjIgMjBoLTV2LTJoM3YtM2gydjV6TTcwIDIwdi01aDJ2M2gzdjJoLTV6TTcwIDI0aDV2MmgtM3YzaC0ydi01eiIvPjwvZz48cGF0aCBkPSJNMjAuNTg2IDY2bC01LjY1Ni01LjY1NiAxLjQxNC0xLjQxNEwyMiA2NC41ODZsNS42NTYtNS42NTYgMS40MTQgMS40MTRMMjMuNDE0IDY2bDUuNjU2IDUuNjU2LTEuNDE0IDEuNDE0TDIyIDY3LjQxNGwtNS42NTYgNS42NTYtMS40MTQtMS40MTRMMjAuNTg2IDY2eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xMTEuNzg1IDY1LjAzTDExMCA2My41bDMtMy41aC0xMHYtMmgxMGwtMy0zLjUgMS43ODUtMS40NjhMMTE3IDU5bC01LjIxNSA2LjAzeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xNTIuMjE1IDY1LjAzTDE1NCA2My41bC0zLTMuNWgxMHYtMmgtMTBsMy0zLjUtMS43ODUtMS40NjhMMTQ3IDU5bDUuMjE1IDYuMDN6IiBmaWxsPSIjZmZmIi8+PGc+PHBhdGggaWQ9IlJlY3RhbmdsZS0xMSIgZmlsbD0iI2ZmZiIgZD0iTTE2MC45NTcgMjguNTQzbC0zLjI1LTMuMjUtMS40MTMgMS40MTQgMy4yNSAzLjI1eiIvPjxwYXRoIGQ9Ik0xNTIuNSAyN2MzLjAzOCAwIDUuNS0yLjQ2MiA1LjUtNS41cy0yLjQ2Mi01LjUtNS41LTUuNS01LjUgMi40NjItNS41IDUuNSAyLjQ2MiA1LjUgNS41IDUuNXoiIGlkPSJPdmFsLTEiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUwIDIxaDV2MWgtNXoiLz48L2c+PGc+PHBhdGggZD0iTTExNi45NTcgMjguNTQzbC0xLjQxNCAxLjQxNC0zLjI1LTMuMjUgMS40MTQtMS40MTQgMy4yNSAzLjI1eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xMDguNSAyN2MzLjAzOCAwIDUuNS0yLjQ2MiA1LjUtNS41cy0yLjQ2Mi01LjUtNS41LTUuNS01LjUgMi40NjItNS41IDUuNSAyLjQ2MiA1LjUgNS41IDUuNXoiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA2IDIxaDV2MWgtNXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTA5LjA0MyAxOS4wMDhsLS4wODUgNS0xLS4wMTcuMDg1LTV6Ii8+PC9nPjwvZz48L2c+PC9zdmc+");
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-toolbar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.km-image-viewer .km-image-viewer-close {
|
||||
background-position: 0 -44px;
|
||||
}
|
||||
|
||||
.mindmap {
|
||||
/*width: inherit;*/
|
||||
width: 100%;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.mindmap-sm {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.mindmap-md {
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.mindmap-lg {
|
||||
height: 800px;
|
||||
}
|
72
static/css/roland.css
Normal file
@ -0,0 +1,72 @@
|
||||
body {
|
||||
background: inherit;
|
||||
}
|
||||
|
||||
.intro-header,.site-heading {
|
||||
color: white;
|
||||
text-align: center;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
.intro-header {
|
||||
background-color: #a7002f;
|
||||
background-repeat: repeat;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
}
|
||||
.site-heading, .post-heading {
|
||||
padding: 15vh 0;
|
||||
}
|
||||
.site-heading h1 {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.post-heading h1 {
|
||||
text-shadow: 0 0 7px rgba(0,0,0,0.95), 0 0 5px rgb(0,0,0);
|
||||
font-weight: bolder;
|
||||
}
|
||||
.post-heading h2, .post-heading .meta {
|
||||
text-shadow: 0 0 4px rgba(0,0,0,0.95), 0 0 5px rgb(0,0,0);
|
||||
}
|
||||
|
||||
.post-preview > a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.post-content-preview {
|
||||
border-left: 5px solid #f6e5ea;
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
|
||||
.text-sc {
|
||||
font-variant: common-ligatures small-caps;
|
||||
}
|
||||
|
||||
.sidebar-container img {
|
||||
max-width: 70%;
|
||||
}
|
||||
|
||||
.sidebar-container .short-about a, footer .list-inline a {
|
||||
color: #d37f97;
|
||||
}
|
||||
.sidebar-container .short-about a:hover, footer .list-inline a:hover {
|
||||
color: #a7002f;
|
||||
}
|
||||
|
||||
#TableOfContents > ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#TableOfContents > ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
|
||||
article img {
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
footer .copyright {
|
||||
font-size: 80%;
|
||||
text-align: center;
|
||||
}
|
2723
static/css/style.css
Normal file
192
static/css/zanshang.css
Normal file
@ -0,0 +1,192 @@
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 6px 12px;
|
||||
margin-bottom: 0;
|
||||
font-size: 14px;
|
||||
line-height: 1.42857143;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
img{vertical-align: middle;}
|
||||
.close {
|
||||
float: right;
|
||||
font-size: 21px;
|
||||
line-height: 1;
|
||||
color: #000;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
opacity: .2
|
||||
}
|
||||
|
||||
button.close {
|
||||
-webkit-appearance: none;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
background: 0 0;
|
||||
border: 0
|
||||
}
|
||||
.entry-shang {
|
||||
padding: 30px 0 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.entry-shang p {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.btn-bred {
|
||||
min-width: 80px;
|
||||
border-color: #e26d6d;
|
||||
background: #e26d6d;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.zs-modal-bg {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0,0,0,0.2);
|
||||
display: none;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.zs-modal-box {
|
||||
width: 340px;
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin: -195px 0 0 -171px;
|
||||
border: 1px solid #eee;
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
z-index: 100;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.zs-modal-head {
|
||||
padding: 0 16px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.zs-modal-head img {
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.zs-modal-head .close {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.zs-modal-head .author {
|
||||
padding-top: 15px;
|
||||
display: block;
|
||||
}
|
||||
.zs-modal-head .author a{
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.zs-modal-head .author img {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.zs-modal-head .tip {
|
||||
background: #f6f6f6;
|
||||
padding: 0 10px;
|
||||
font-size: 12px;
|
||||
color: gray;
|
||||
border-radius: 3px;
|
||||
margin-top: 10px;
|
||||
position: relative;
|
||||
line-height: 28px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.zs-modal-head .tip i {
|
||||
display: block;
|
||||
border-width: 0 7px 7px 7px;
|
||||
border-color: transparent transparent #f6f6f6 transparent;
|
||||
border-style: dashed dashed solid dashed;
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 8px;
|
||||
top: -7px;
|
||||
}
|
||||
|
||||
.zs-modal-body {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.zs-modal-btns {
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.zs-modal-btns .btn:nth-child(3n-2) {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.zs-modal-btns .btn {
|
||||
width: 28%;
|
||||
margin-left: 8%;
|
||||
margin-bottom: 24px;
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.zs-modal-btns .btn-blink {
|
||||
background: #fff;
|
||||
border-color: #e26d6d;
|
||||
color: #e26d6d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.zs-modal-btns .btn-blink:hover, .zs-btns .btn-blink:active {
|
||||
background: rgba(226,109,109,.06);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.zs-modal-btns .btn-blink:focus {
|
||||
background: #e26d6d;
|
||||
border-color: #e26d6d;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
.zs-modal-body ul {
|
||||
letter-spacing: -5px;
|
||||
}
|
||||
}
|
||||
|
||||
.zs-modal-footer {
|
||||
padding: 0 15px 15px;
|
||||
}
|
||||
|
||||
.zs-modal-footer label {
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.zs-modal-footer img {
|
||||
height: 30px;
|
||||
min-width: 85px;
|
||||
}
|
||||
|
||||
.zs-modal-pay {
|
||||
text-align: center;
|
||||
padding: 15px 0;
|
||||
display: none;
|
||||
}
|
BIN
static/img/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
static/img/reward/alipay-1.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/reward/alipay-10.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/alipay-100.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/alipay-2.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/alipay-5.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/reward/alipay-50.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/alipay-btn.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
static/img/reward/wechat-1.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
static/img/reward/wechat-10.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/reward/wechat-100.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/wechat-2.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
static/img/reward/wechat-5.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
static/img/reward/wechat-50.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/img/reward/wechat-btn.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
static/img/search.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
3
static/js/auto-complete.js
Normal file
7
static/js/bootstrap.min.js
vendored
Normal file
87
static/js/fitvids.js
Normal file
@ -0,0 +1,87 @@
|
||||
/*jshint browser:true */
|
||||
/*!
|
||||
* FitVids 1.1
|
||||
*
|
||||
* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
|
||||
* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
|
||||
* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
|
||||
*
|
||||
*/
|
||||
|
||||
;(function( $ ){
|
||||
|
||||
'use strict';
|
||||
|
||||
$.fn.fitVids = function( options ) {
|
||||
var settings = {
|
||||
customSelector: null,
|
||||
ignore: null
|
||||
};
|
||||
|
||||
if(!document.getElementById('fit-vids-style')) {
|
||||
// appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
|
||||
var head = document.head || document.getElementsByTagName('head')[0];
|
||||
var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
|
||||
var div = document.createElement("div");
|
||||
div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
|
||||
head.appendChild(div.childNodes[1]);
|
||||
}
|
||||
|
||||
if ( options ) {
|
||||
$.extend( settings, options );
|
||||
}
|
||||
|
||||
return this.each(function(){
|
||||
var selectors = [
|
||||
'iframe[src*="player.vimeo.com"]',
|
||||
'iframe[src*="youtube.com"]',
|
||||
'iframe[src*="youtube-nocookie.com"]',
|
||||
'iframe[src*="kickstarter.com"][src*="video.html"]',
|
||||
'object',
|
||||
'embed'
|
||||
];
|
||||
|
||||
if (settings.customSelector) {
|
||||
selectors.push(settings.customSelector);
|
||||
}
|
||||
|
||||
var ignoreList = '.fitvidsignore';
|
||||
|
||||
if(settings.ignore) {
|
||||
ignoreList = ignoreList + ', ' + settings.ignore;
|
||||
}
|
||||
|
||||
var $allVideos = $(this).find(selectors.join(','));
|
||||
$allVideos = $allVideos.not('object object'); // SwfObj conflict patch
|
||||
$allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
|
||||
|
||||
$allVideos.each(function(){
|
||||
var $this = $(this);
|
||||
if($this.parents(ignoreList).length > 0) {
|
||||
return; // Disable FitVids on this video.
|
||||
}
|
||||
if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
|
||||
if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
|
||||
{
|
||||
$this.attr('height', 9);
|
||||
$this.attr('width', 16);
|
||||
}
|
||||
var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
|
||||
width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
|
||||
aspectRatio = height / width;
|
||||
if(!$this.attr('name')){
|
||||
var videoName = 'fitvid' + $.fn.fitVids._count;
|
||||
$this.attr('name', videoName);
|
||||
$.fn.fitVids._count++;
|
||||
}
|
||||
$this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
|
||||
$this.removeAttr('height').removeAttr('width');
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// Internal counter for unique video names.
|
||||
$.fn.fitVids._count = 0;
|
||||
|
||||
// Works with either jQuery or Zepto
|
||||
})( window.jQuery || window.Zepto );
|
1591
static/js/iDisqus.js
Normal file
9205
static/js/jquery.js
vendored
Normal file
4
static/js/jquery.min.js
vendored
Normal file
81
static/js/jquery.tagcloud.js
Executable file
@ -0,0 +1,81 @@
|
||||
(function($) {
|
||||
|
||||
$.fn.tagcloud = function(options) {
|
||||
var opts = $.extend({}, $.fn.tagcloud.defaults, options);
|
||||
tagWeights = this.map(function(){
|
||||
return $(this).attr("rel");
|
||||
});
|
||||
tagWeights = jQuery.makeArray(tagWeights).sort(compareWeights);
|
||||
lowest = tagWeights[0];
|
||||
highest = tagWeights.pop();
|
||||
range = highest - lowest;
|
||||
if(range === 0) {range = 1;}
|
||||
// Sizes
|
||||
if (opts.size) {
|
||||
fontIncr = (opts.size.end - opts.size.start)/range;
|
||||
}
|
||||
// Colors
|
||||
if (opts.color) {
|
||||
colorIncr = colorIncrement (opts.color, range);
|
||||
}
|
||||
return this.each(function() {
|
||||
weighting = $(this).attr("rel") - lowest;
|
||||
if (opts.size) {
|
||||
$(this).css({"font-size": opts.size.start + (weighting * fontIncr) + opts.size.unit});
|
||||
}
|
||||
if (opts.color) {
|
||||
// change color to background-color
|
||||
$(this).css({"backgroundColor": tagColor(opts.color, colorIncr, weighting)});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.tagcloud.defaults = {
|
||||
size: {start: 14, end: 18, unit: "pt"}
|
||||
};
|
||||
|
||||
// Converts hex to an RGB array
|
||||
function toRGB (code) {
|
||||
if (code.length == 4) {
|
||||
code = jQuery.map(/\w+/.exec(code), function(el) {return el + el; }).join("");
|
||||
}
|
||||
hex = /(\w{2})(\w{2})(\w{2})/.exec(code);
|
||||
return [parseInt(hex[1], 16), parseInt(hex[2], 16), parseInt(hex[3], 16)];
|
||||
}
|
||||
|
||||
// Converts an RGB array to hex
|
||||
function toHex (ary) {
|
||||
return "#" + jQuery.map(ary, function(i) {
|
||||
hex = i.toString(16);
|
||||
hex = (hex.length == 1) ? "0" + hex : hex;
|
||||
return hex;
|
||||
}).join("");
|
||||
}
|
||||
|
||||
function colorIncrement (color, range) {
|
||||
return jQuery.map(toRGB(color.end), function(n, i) {
|
||||
return (n - toRGB(color.start)[i])/range;
|
||||
});
|
||||
}
|
||||
|
||||
function tagColor (color, increment, weighting) {
|
||||
rgb = jQuery.map(toRGB(color.start), function(n, i) {
|
||||
ref = Math.round(n + (increment[i] * weighting));
|
||||
if (ref > 255) {
|
||||
ref = 255;
|
||||
} else {
|
||||
if (ref < 0) {
|
||||
ref = 0;
|
||||
}
|
||||
}
|
||||
return ref;
|
||||
});
|
||||
return toHex(rgb);
|
||||
}
|
||||
|
||||
function compareWeights(a, b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
})(jQuery);
|
12
static/js/kity.min.js
vendored
Normal file
10
static/js/kityminder.core.min.js
vendored
Normal file
80
static/js/load-photoswipe.js
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
Put this file in /static/js/load-photoswipe.js
|
||||
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
||||
*/
|
||||
|
||||
/* Show an alert if this js file has been loaded twice */
|
||||
if (window.loadphotoswipejs) {
|
||||
window.alert("You've loaded load-photoswipe.js twice. See https://github.com/liwenyip/hugo-easy-gallery/issues/6")
|
||||
}
|
||||
var loadphotoswipejs = 1
|
||||
|
||||
/* TODO: Make the share function work */
|
||||
$( document ).ready(function() {
|
||||
/*
|
||||
Initialise Photoswipe
|
||||
*/
|
||||
var items = []; // array of slide objects that will be passed to PhotoSwipe()
|
||||
// for every figure element on the page:
|
||||
$('figure').each( function() {
|
||||
if ($(this).attr('class') == 'no-photoswipe') return true; // ignore any figures where class="no-photoswipe"
|
||||
// get properties from child a/img/figcaption elements,
|
||||
var $figure = $(this),
|
||||
$a = $figure.find('a'),
|
||||
$img = $figure.find('img'),
|
||||
$src = $a.attr('href'),
|
||||
$title = $img.attr('alt'),
|
||||
$msrc = $img.attr('src');
|
||||
// if data-size on <a> tag is set, read it and create an item
|
||||
if ($a.data('size')) {
|
||||
var $size = $a.data('size').split('x');
|
||||
var item = {
|
||||
src : $src,
|
||||
w : $size[0],
|
||||
h : $size[1],
|
||||
title : $title,
|
||||
msrc : $msrc
|
||||
};
|
||||
console.log("Using pre-defined dimensions for " + $src);
|
||||
// if not, set temp default size then load the image to check actual size
|
||||
} else {
|
||||
var item = {
|
||||
src : $src,
|
||||
w : 800, // temp default size
|
||||
h : 600, // temp default size
|
||||
title : $title,
|
||||
msrc : $msrc
|
||||
};
|
||||
console.log("Using default dimensions for " + $src);
|
||||
// load the image to check its dimensions
|
||||
// update the item as soon as w and h are known (check every 30ms)
|
||||
var img = new Image();
|
||||
img.src = $src;
|
||||
var wait = setInterval(function() {
|
||||
var w = img.naturalWidth,
|
||||
h = img.naturalHeight;
|
||||
if (w && h) {
|
||||
clearInterval(wait);
|
||||
item.w = w;
|
||||
item.h = h;
|
||||
console.log("Got actual dimensions for " + img.src);
|
||||
}
|
||||
}, 30);
|
||||
}
|
||||
// Save the index of this image then add it to the array
|
||||
var index = items.length;
|
||||
items.push(item);
|
||||
// Event handler for click on a figure
|
||||
$figure.on('click', function(event) {
|
||||
event.preventDefault(); // prevent the normal behaviour i.e. load the <a> hyperlink
|
||||
// Get the PSWP element and initialise it with the desired options
|
||||
var $pswp = $('.pswp')[0];
|
||||
var options = {
|
||||
index: index,
|
||||
bgOpacity: 0.8,
|
||||
showHideOpacity: true
|
||||
}
|
||||
new PhotoSwipe($pswp, PhotoSwipeUI_Default, items, options).init();
|
||||
});
|
||||
});
|
||||
});
|
6
static/js/lunr.min.js
vendored
Normal file
50
static/js/mindmap.js
Normal file
@ -0,0 +1,50 @@
|
||||
$(document).ready(function() {
|
||||
$('.mindmap').each(function() {
|
||||
MM_FUNCS.drawMindMap(this);
|
||||
});
|
||||
});
|
||||
|
||||
var MM_FUNCS = {
|
||||
// 将 li 节点转换为 JSON 数据
|
||||
li2jsonData: function(liNode) {
|
||||
var liData;
|
||||
var aNode = liNode.children("a:first");
|
||||
if (aNode.length !== 0) {
|
||||
liData = {
|
||||
"data": {
|
||||
"text": aNode.text(),
|
||||
"hyperlink": aNode.attr("href")
|
||||
}
|
||||
};
|
||||
} else {
|
||||
liData = {
|
||||
"data": {
|
||||
"text": liNode[0].childNodes[0].nodeValue.trim()
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
liNode.find("> ul > li").each(function() {
|
||||
if (!liData.hasOwnProperty("children")) {
|
||||
liData.children = [];
|
||||
}
|
||||
liData.children.push(MM_FUNCS.li2jsonData($(this)));
|
||||
});
|
||||
|
||||
return liData;
|
||||
},
|
||||
// 绘制脑图
|
||||
drawMindMap: function(ulParent) {
|
||||
var ulElement = $(ulParent).find(">ul:first");
|
||||
var mmData = {"root": {}};
|
||||
var minder = new kityminder.Minder({
|
||||
renderTo: ulParent
|
||||
});
|
||||
|
||||
mmData.root = MM_FUNCS.li2jsonData(ulElement.children("li:first"));
|
||||
minder.importData('json', JSON.stringify(mmData));
|
||||
minder.disable();
|
||||
minder.execCommand('hand');
|
||||
$(ulElement).hide();
|
||||
}
|
||||
};
|
1
static/js/mindmap.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
$(document).ready(function(){$(".mindmap").each(function(){MM_FUNCS.drawMindMap(this)})});var MM_FUNCS={li2jsonData:function(c){var a;var b=c.children("a:first");if(b.length!==0){a={"data":{"text":b.text(),"hyperlink":b.attr("href")}}}else{a={"data":{"text":c[0].childNodes[0].nodeValue.trim()}}}c.find("> ul > li").each(function(){if(!a.hasOwnProperty("children")){a.children=[]}a.children.push(MM_FUNCS.li2jsonData($(this)))});return a},drawMindMap:function(a){var d=$(a).find(">ul:first");var c={"root":{}};var b=new kityminder.Minder({renderTo:a});c.root=MM_FUNCS.li2jsonData(d.children("li:first"));b.importData("json",JSON.stringify(c));b.disable();b.execCommand("hand");$(d).hide()}};
|
1
static/js/production.min.js
vendored
Normal file
96
static/js/search.js
Normal file
@ -0,0 +1,96 @@
|
||||
var lunrIndex, pagesIndex;
|
||||
|
||||
function endsWith(str, suffix) {
|
||||
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
||||
}
|
||||
|
||||
// Initialize lunrjs using our generated index file
|
||||
function initLunr() {
|
||||
if (!endsWith(baseurl,"/")){
|
||||
baseurl = baseurl+'/'
|
||||
};
|
||||
|
||||
// First retrieve the index file
|
||||
$.getJSON(baseurl +"index.json")
|
||||
.done(function(index) {
|
||||
pagesIndex = index;
|
||||
// Set up lunrjs by declaring the fields we use
|
||||
// Also provide their boost level for the ranking
|
||||
lunrIndex = lunr(function() {
|
||||
this.ref("uri");
|
||||
this.field('title', {
|
||||
boost: 15
|
||||
});
|
||||
this.field('tags', {
|
||||
boost: 10
|
||||
});
|
||||
this.field("content", {
|
||||
boost: 5
|
||||
});
|
||||
|
||||
this.pipeline.remove(lunr.stemmer);
|
||||
this.searchPipeline.remove(lunr.stemmer);
|
||||
|
||||
// Feed lunr with each file and let lunr actually index them
|
||||
pagesIndex.forEach(function(page) {
|
||||
this.add(page);
|
||||
}, this);
|
||||
})
|
||||
})
|
||||
.fail(function(jqxhr, textStatus, error) {
|
||||
var err = textStatus + ", " + error;
|
||||
console.error("Error getting Hugo index file:", err);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a search in lunr and transform the result
|
||||
*
|
||||
* @param {String} query
|
||||
* @return {Array} results
|
||||
*/
|
||||
function search(queryTerm) {
|
||||
// Find the item in our index corresponding to the lunr one to have more info
|
||||
return lunrIndex.search(queryTerm+"^100"+" "+queryTerm+"*^10"+" "+"*"+queryTerm+"^10"+" "+queryTerm+"~2^1").map(function(result) {
|
||||
return pagesIndex.filter(function(page) {
|
||||
return page.uri === result.ref;
|
||||
})[0];
|
||||
});
|
||||
}
|
||||
|
||||
// Let's get started
|
||||
initLunr();
|
||||
$( document ).ready(function() {
|
||||
var searchList = new autoComplete({
|
||||
/* selector for the search box element */
|
||||
selector: $("#search-by").get(0),
|
||||
/* source is the callback to perform the search */
|
||||
source: function(term, response) {
|
||||
response(search(term));
|
||||
},
|
||||
/* renderItem displays individual search results */
|
||||
renderItem: function(item, term) {
|
||||
var numContextWords = 2;
|
||||
var text = item.content.match(
|
||||
"(?:\\s?(?:[\\w]+)\\s?){0,"+numContextWords+"}" +
|
||||
term+"(?:\\s?(?:[\\w]+)\\s?){0,"+numContextWords+"}");
|
||||
item.context = text;
|
||||
var divcontext = document.createElement("div");
|
||||
divcontext.className = "context";
|
||||
divcontext.innerText = (item.context || '');
|
||||
var divsuggestion = document.createElement("div");
|
||||
divsuggestion.className = "autocomplete-suggestion";
|
||||
divsuggestion.setAttribute("data-term", term);
|
||||
divsuggestion.setAttribute("data-title", item.title);
|
||||
divsuggestion.setAttribute("data-uri", item.uri);
|
||||
divsuggestion.setAttribute("data-context", item.context);
|
||||
divsuggestion.innerText = '» ' + item.title;
|
||||
divsuggestion.appendChild(divcontext);
|
||||
return divsuggestion.outerHTML;
|
||||
},
|
||||
/* onSelect callback fires when a search suggestion is chosen */
|
||||
onSelect: function(e, term, item) {
|
||||
location.href = item.getAttribute('data-uri');
|
||||
}
|
||||
});
|
||||
});
|
15
theme.toml
Normal file
@ -0,0 +1,15 @@
|
||||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/spf13/hugoThemes#themetoml for an example
|
||||
|
||||
name = "Roland"
|
||||
license = "Apache"
|
||||
licenselink = "https://github.com/nemunaire/hugo-theme-roland/blob/master/LICENSE"
|
||||
description = "A clean, elegant blog theme for hugo"
|
||||
homepage = "https://github.com/nemunaire/hugo-theme-roland"
|
||||
tags = [ "minimal", "responsive", "blog","light", "clean", "search"]
|
||||
features = ["site search", "responsive", "umami", "side bar"]
|
||||
min_version = 0.10
|
||||
|
||||
[author]
|
||||
name = "nemunaire"
|
||||
homepage = "https://nemunai.re/"
|