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/"
|