├── LICENSE.md
├── README.md
├── archetypes
└── default.md
├── exampleSite
├── config.toml
└── content
│ ├── about.md
│ ├── archive.md
│ └── posts
│ ├── creating-a-new-theme.md
│ └── goisforlovers.md
├── gen_lunr_index.sh
├── images
├── screenshot.png
└── tn.png
├── layouts
├── 404.html
├── _default
│ ├── list.html
│ ├── single.html
│ └── terms.html
├── archive
│ └── single.html
├── index.html
├── partials
│ ├── breadcrumb.html
│ ├── comment.html
│ ├── footer.html
│ ├── header.html
│ ├── msearch.html
│ ├── script.html
│ ├── splash.html
│ └── waterfall.html
└── shortcodes
│ ├── admonition.html
│ ├── asciinema.html
│ ├── codepen.html
│ ├── jsfiddle.html
│ ├── music.html
│ ├── shengxiang.html
│ └── video.html
├── static
├── CNAME
├── css
│ └── index.css
├── favicon.ico
├── fonts
│ └── roboto
│ │ ├── Roboto-Bold.woff
│ │ ├── Roboto-Bold.woff2
│ │ ├── Roboto-Light.woff
│ │ ├── Roboto-Light.woff2
│ │ ├── Roboto-Medium.woff
│ │ ├── Roboto-Medium.woff2
│ │ ├── Roboto-Regular.woff
│ │ ├── Roboto-Regular.woff2
│ │ ├── Roboto-Thin.woff
│ │ └── Roboto-Thin.woff2
├── img
│ ├── 20.jpg
│ ├── avatar.jpg
│ ├── avatar.png
│ ├── bg.jpg
│ ├── bg.png
│ ├── iconseamless.png
│ └── profile-bg.jpg
├── js
│ ├── Valine.min.js
│ ├── av-min.js
│ ├── canvas.js
│ ├── index.js
│ └── polyfill.js
└── svg
│ └── icon.svg
└── theme.toml
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 YOUR_NAME_HERE
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Canoe
2 |
3 | A beautifull and powerfull theme of hugo static blog generator.
4 |
5 | [demo](https://keyin.me)
6 |
7 | 
8 |
9 |
10 | ## Feature
11 |
12 | 1. Waterfall layout
13 | 2. Responsive layout
14 | 3. Material design
15 | 4. Table of content
16 | 5. Tiny and powerfull, no JQuery
17 | 5. Chinese keyword search(using `lunr` and `nodejieba`)
18 |
19 |
20 | ## Install
21 |
22 | ```
23 | cd /your-blog-path/theme
24 | git clone https://github.com/stkevintan/canoe
25 | ```
26 |
27 | then update your `config.toml` file with the help of the `exampleSite/config.toml`
28 |
29 |
30 |
31 | refer to for more info.
32 |
33 |
34 | ## Enable Search
35 | My theme use [lunr](https://lunrjs.com/) to search keywords, so you need using [hugo-lunr](https://www.npmjs.com/package/hugo-lunr) to generate lunr index file every time after building your site. If you need Chinese support, use my tool: [hugo-lunr-zh](https://www.npmjs.com/package/hugo-lunr-zh) instead. Plese refer to [official doc](https://gohugo.io/tools/search/#readout) for more info.
36 |
--------------------------------------------------------------------------------
/archetypes/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "{{ replace .TranslationBaseName "-" " " | title }}"
3 | date: {{ .Date }}
4 | draft: true
5 | toc: true
6 | ---
--------------------------------------------------------------------------------
/exampleSite/config.toml:
--------------------------------------------------------------------------------
1 | baseURL = "https://example.org"
2 | languageCode = "zh-cn"
3 | title = "Hugo Canoe Theme"
4 |
5 |
6 | theme = "canoe"
7 |
8 | # last mod time support
9 | enableGitInfo = true
10 |
11 | # if true, auto-detect Chinese/Japanese/Korean Languages in the content. (.Summary and .WordCount can work properly in CJKLanguage)
12 | hasCJKLanguage = true
13 |
14 |
15 |
16 | [params]
17 | author = "Kevin Tan"
18 | description = "Tempora mutantur, nos et mutamur in illis ..."
19 | copyright = "Copyleft@Kevin Tan"
20 | # date format convert: http://fuckinggodateformat.com/
21 | dateFormat = "2006年01月_2日"
22 | # 用户头像地址, user avatar's url
23 | logo = "/img/avatar.jpg"
24 |
25 | # 首页横幅的背景链接, home banner's background url.
26 | splash_bg = "/img/bg.jpg"
27 |
28 | # 是否使用一言, if using hitokoto(dynamic moto in splash screen)
29 | hitokoto = true
30 |
31 | # 是否使用Canvas动态背景, if using canvas dynamic background (nest.js)
32 | nest_bg = false
33 |
34 | # 是否使用动态加载效果, if using fade effect while loading (scroll-reveal.js)
35 | reveal_effect = true
36 |
37 | # comment settings, support 'valine' and 'disqus'.
38 | # more about 'valine', ref: http://valine.js.org/
39 | [params.comment]
40 | type = "valine" # or 'disqus'
41 |
42 | [params.comment.valine]
43 | id = "< the appId >"
44 | key = "< the appKey >"
45 | placeholder = "< placeholder >"
46 | avatar = "retro"
47 |
48 | [params.comment.disqus]
49 | shortname = '< short name >'
50 |
51 |
52 | # Main menu
53 | [[menu.main]]
54 | name = "Home"
55 | # associated with displaying order.
56 | weight = 1
57 | url = "/"
58 |
59 | [[menu.main]]
60 | name = "Archive"
61 | weight = 2
62 | url = "/archive/"
63 |
64 | [[menu.main]]
65 | name = "About"
66 | weight = 6
67 | url = "/about/"
68 |
69 |
70 |
71 | # 文章归类 Taxonomy
72 | [[menu.taxonomy]]
73 | name = "Tag"
74 | identifier="tags"
75 |
76 | [[menu.taxonomy]]
77 | name = "Category"
78 | identifier="categories"
79 |
80 | # 友情链接 Your Friend's blog links
81 | [[menu.friend]]
82 | name = "Frantic1048"
83 | url = "https://frantic1048.logdown.com/"
84 |
85 | [[menu.friend]]
86 | name = "HclMaster"
87 | url = "https://hclmaster.github.io/"
88 |
89 | [[menu.friend]]
90 | name = "WANG Hsü-Tung"
91 | url = "https://whst.github.io/"
92 |
93 |
94 | # 社交账号 Social Network
95 | [[menu.social]]
96 | pre = " "
97 | name = "Github"
98 | url = "https://github.com/stkevintan"
99 |
100 | [[menu.social]]
101 | pre = ""
102 | name = "Twitter"
103 | url = "https://twitter.com/kevinsfork"
104 |
105 | [[menu.social]]
106 | pre = " "
107 | name = "Weibo"
108 | url = "http://weibo.com/kevinclasky"
109 |
110 | [blackfriday]
111 | extensions = ["laxHtmlBlocks","noEmptyLineBeforeBlock"]
--------------------------------------------------------------------------------
/exampleSite/content/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "About Me"
3 | date: "2017-08-19T20:09:28+08:00"
4 | type: "about"
5 | toc: false
6 | ---
7 |
8 | ## Hello World!
9 |
10 | ```json
11 | {
12 | "Name": "Kevin Tan",
13 | "Hobbies": ["Coding", "Movie", "Piano", "Linux"],
14 | "Location": "Hangzhou",
15 | "Company": "Netease",
16 | "School": "Zhejiang University",
17 | "Contacts": {
18 | "Email": "stkevintan@zju.edu.cn",
19 | "Telegram": "@kevinsfork",
20 | "Weibo": "@kevinclasky"
21 | }
22 | }
23 | ```
24 |
--------------------------------------------------------------------------------
/exampleSite/content/archive.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Archive"
3 | date: "2017-08-19T21:37:49+08:00"
4 | type: "archive"
5 | ---
6 |
7 |
--------------------------------------------------------------------------------
/exampleSite/content/posts/goisforlovers.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: (Hu)go Template Primer
3 | tags: ["go", "golang", "templates", "themes", "development"]
4 | date: 2014-07-28
5 | ---
6 |
7 | Hugo uses the excellent [go][] [html/template][gohtmltemplate] library for
8 | its template engine. It is an extremely lightweight engine that provides a very
9 | small amount of logic. In our experience that it is just the right amount of
10 | logic to be able to create a good static website. If you have used other
11 | template systems from different languages or frameworks you will find a lot of
12 | similarities in go templates.
13 |
14 | This document is a brief primer on using go templates. The [go docs][gohtmltemplate]
15 | provide more details.
16 |
17 | ## Introduction to Go Templates
18 |
19 | Go templates provide an extremely simple template language. It adheres to the
20 | belief that only the most basic of logic belongs in the template or view layer.
21 | One consequence of this simplicity is that go templates parse very quickly.
22 |
23 | A unique characteristic of go templates is they are content aware. Variables and
24 | content will be sanitized depending on the context of where they are used. More
25 | details can be found in the [go docs][gohtmltemplate].
26 |
27 | ## Basic Syntax
28 |
29 | Go lang templates are html files with the addition of variables and
30 | functions.
31 |
32 | **Go variables and functions are accessible within {{ }}**
33 |
34 | Accessing a predefined variable "foo":
35 |
36 | {{ foo }}
37 |
38 | **Parameters are separated using spaces**
39 |
40 | Calling the add function with input of 1, 2:
41 |
42 | {{ add 1 2 }}
43 |
44 | **Methods and fields are accessed via dot notation**
45 |
46 | Accessing the Page Parameter "bar"
47 |
48 | {{ .Params.bar }}
49 |
50 | **Parentheses can be used to group items together**
51 |
52 | {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
53 |
54 |
55 | ## Variables
56 |
57 | Each go template has a struct (object) made available to it. In hugo each
58 | template is passed either a page or a node struct depending on which type of
59 | page you are rendering. More details are available on the
60 | [variables](/layout/variables) page.
61 |
62 | A variable is accessed by referencing the variable name.
63 |
64 |
{{ .Title }}
65 |
66 | Variables can also be defined and referenced.
67 |
68 | {{ $address := "123 Main St."}}
69 | {{ $address }}
70 |
71 |
72 | ## Functions
73 |
74 | Go template ship with a few functions which provide basic functionality. The go
75 | template system also provides a mechanism for applications to extend the
76 | available functions with their own. [Hugo template
77 | functions](/layout/functions) provide some additional functionality we believe
78 | are useful for building websites. Functions are called by using their name
79 | followed by the required parameters separated by spaces. Template
80 | functions cannot be added without recompiling hugo.
81 |
82 | **Example:**
83 |
84 | {{ add 1 2 }}
85 |
86 | ## Includes
87 |
88 | When including another template you will pass to it the data it will be
89 | able to access. To pass along the current context please remember to
90 | include a trailing dot. The templates location will always be starting at
91 | the /layout/ directory within Hugo.
92 |
93 | **Example:**
94 |
95 | {{ template "chrome/header.html" . }}
96 |
97 |
98 | ## Logic
99 |
100 | Go templates provide the most basic iteration and conditional logic.
101 |
102 | ### Iteration
103 |
104 | Just like in go, the go templates make heavy use of range to iterate over
105 | a map, array or slice. The following are different examples of how to use
106 | range.
107 |
108 | **Example 1: Using Context**
109 |
110 | {{ range array }}
111 | {{ . }}
112 | {{ end }}
113 |
114 | **Example 2: Declaring value variable name**
115 |
116 | {{range $element := array}}
117 | {{ $element }}
118 | {{ end }}
119 |
120 | **Example 2: Declaring key and value variable name**
121 |
122 | {{range $index, $element := array}}
123 | {{ $index }}
124 | {{ $element }}
125 | {{ end }}
126 |
127 | ### Conditionals
128 |
129 | If, else, with, or, & and provide the framework for handling conditional
130 | logic in Go Templates. Like range, each statement is closed with `end`.
131 |
132 |
133 | Go Templates treat the following values as false:
134 |
135 | * false
136 | * 0
137 | * any array, slice, map, or string of length zero
138 |
139 | **Example 1: If**
140 |
141 | {{ if isset .Params "title" }}{{ index .Params "title" }} {{ end }}
142 |
143 | **Example 2: If -> Else**
144 |
145 | {{ if isset .Params "alt" }}
146 | {{ index .Params "alt" }}
147 | {{else}}
148 | {{ index .Params "caption" }}
149 | {{ end }}
150 |
151 | **Example 3: And & Or**
152 |
153 | {{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
154 |
155 | **Example 4: With**
156 |
157 | An alternative way of writing "if" and then referencing the same value
158 | is to use "with" instead. With rebinds the context `.` within its scope,
159 | and skips the block if the variable is absent.
160 |
161 | The first example above could be simplified as:
162 |
163 | {{ with .Params.title }}{{ . }} {{ end }}
164 |
165 | **Example 5: If -> Else If**
166 |
167 | {{ if isset .Params "alt" }}
168 | {{ index .Params "alt" }}
169 | {{ else if isset .Params "caption" }}
170 | {{ index .Params "caption" }}
171 | {{ end }}
172 |
173 | ## Pipes
174 |
175 | One of the most powerful components of go templates is the ability to
176 | stack actions one after another. This is done by using pipes. Borrowed
177 | from unix pipes, the concept is simple, each pipeline's output becomes the
178 | input of the following pipe.
179 |
180 | Because of the very simple syntax of go templates, the pipe is essential
181 | to being able to chain together function calls. One limitation of the
182 | pipes is that they only can work with a single value and that value
183 | becomes the last parameter of the next pipeline.
184 |
185 | A few simple examples should help convey how to use the pipe.
186 |
187 | **Example 1 :**
188 |
189 | {{ if eq 1 1 }} Same {{ end }}
190 |
191 | is the same as
192 |
193 | {{ eq 1 1 | if }} Same {{ end }}
194 |
195 | It does look odd to place the if at the end, but it does provide a good
196 | illustration of how to use the pipes.
197 |
198 | **Example 2 :**
199 |
200 | {{ index .Params "disqus_url" | html }}
201 |
202 | Access the page parameter called "disqus_url" and escape the HTML.
203 |
204 | **Example 3 :**
205 |
206 | {{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
207 | Stuff Here
208 | {{ end }}
209 |
210 | Could be rewritten as
211 |
212 | {{ isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" | if }}
213 | Stuff Here
214 | {{ end }}
215 |
216 |
217 | ## Context (aka. the dot)
218 |
219 | The most easily overlooked concept to understand about go templates is that {{ . }}
220 | always refers to the current context. In the top level of your template this
221 | will be the data set made available to it. Inside of a iteration it will have
222 | the value of the current item. When inside of a loop the context has changed. .
223 | will no longer refer to the data available to the entire page. If you need to
224 | access this from within the loop you will likely want to set it to a variable
225 | instead of depending on the context.
226 |
227 | **Example:**
228 |
229 | {{ $title := .Site.Title }}
230 | {{ range .Params.tags }}
231 | {{ . }} - {{ $title }}
232 | {{ end }}
233 |
234 | Notice how once we have entered the loop the value of {{ . }} has changed. We
235 | have defined a variable outside of the loop so we have access to it from within
236 | the loop.
237 |
238 | # Hugo Parameters
239 |
240 | Hugo provides the option of passing values to the template language
241 | through the site configuration (for sitewide values), or through the meta
242 | data of each specific piece of content. You can define any values of any
243 | type (supported by your front matter/config format) and use them however
244 | you want to inside of your templates.
245 |
246 |
247 | ## Using Content (page) Parameters
248 |
249 | In each piece of content you can provide variables to be used by the
250 | templates. This happens in the [front matter](/content/front-matter).
251 |
252 | An example of this is used in this documentation site. Most of the pages
253 | benefit from having the table of contents provided. Sometimes the TOC just
254 | doesn't make a lot of sense. We've defined a variable in our front matter
255 | of some pages to turn off the TOC from being displayed.
256 |
257 | Here is the example front matter:
258 |
259 | ```
260 | ---
261 | title: "Permalinks"
262 | date: "2013-11-18"
263 | aliases:
264 | - "/doc/permalinks/"
265 | groups: ["extras"]
266 | groups_weight: 30
267 | notoc: true
268 | ---
269 | ```
270 |
271 | Here is the corresponding code inside of the template:
272 |
273 | {{ if not .Params.notoc }}
274 |
275 | {{ .TableOfContents }}
276 |
277 | {{ end }}
278 |
279 |
280 |
281 | ## Using Site (config) Parameters
282 | In your top-level configuration file (eg, `config.yaml`) you can define site
283 | parameters, which are values which will be available to you in chrome.
284 |
285 | For instance, you might declare:
286 |
287 | ```yaml
288 | params:
289 | CopyrightHTML: "Copyright © 2013 John Doe. All Rights Reserved."
290 | TwitterUser: "spf13"
291 | SidebarRecentLimit: 5
292 | ```
293 |
294 | Within a footer layout, you might then declare a `` which is only
295 | provided if the `CopyrightHTML` parameter is provided, and if it is given,
296 | you would declare it to be HTML-safe, so that the HTML entity is not escaped
297 | again. This would let you easily update just your top-level config file each
298 | January 1st, instead of hunting through your templates.
299 |
300 | ```
301 | {{if .Site.Params.CopyrightHTML}}{{end}}
304 | ```
305 |
306 | An alternative way of writing the "if" and then referencing the same value
307 | is to use "with" instead. With rebinds the context `.` within its scope,
308 | and skips the block if the variable is absent:
309 |
310 | ```
311 | {{with .Site.Params.TwitterUser}}{{end}}
316 | ```
317 |
318 | Finally, if you want to pull "magic constants" out of your layouts, you can do
319 | so, such as in this example:
320 |
321 | ```
322 |
323 | Recent Posts
324 | {{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
325 | {{.Title}}
326 | {{end}}
327 |
328 | ```
329 |
330 |
331 | [go]:
332 | [gohtmltemplate]:
333 |
--------------------------------------------------------------------------------
/gen_lunr_index.sh:
--------------------------------------------------------------------------------
1 | #! env bash
2 |
3 | hugo-lunr-zh -d exampleSite/content/posts -o static/index.json --matter-delims --- --matter-type yaml
4 |
5 |
--------------------------------------------------------------------------------
/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/images/screenshot.png
--------------------------------------------------------------------------------
/images/tn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/images/tn.png
--------------------------------------------------------------------------------
/layouts/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ $isHomePage := eq .Title .Site.Title }}{{ .Title }}{{ if eq $isHomePage false }} | {{ .Site.Title }}{{ end }}
6 |
7 |
45 |
46 |
47 |
48 |
49 |
50 | // 404 page not found.
51 |
52 |
53 |
54 | if
55 |
56 | (
57 | !
58 | found ) {
59 |
60 |
61 |
62 | throw
63 |
64 |
65 | (
66 | "(╯°□°)╯︵ ┻━┻" );
67 |
68 | }
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/layouts/_default/list.html:
--------------------------------------------------------------------------------
1 | {{ partial "header.html" . }}
2 |
3 | {{partial "waterfall.html" .}} {{ partialCached "footer.html" . }}
4 |
5 | {{partialCached "script.html" .}}
--------------------------------------------------------------------------------
/layouts/_default/single.html:
--------------------------------------------------------------------------------
1 | {{ partial "header.html" . }}
2 |
3 | {{ $tocable := and (index .Params "toc" | default true) (gt .WordCount 400) }}
4 |
5 | {{ $tocable := and (ne "" (print .TableOfContents)) $tocable }}
6 |
7 |
8 |
9 |
10 |
11 | {{if eq $tocable true}}
12 |
13 | {{ .TableOfContents }}
14 |
15 | {{ end }}
16 |
17 |
18 | {{ partial "breadcrumb.html" . }}
19 | {{ if ne .Params.type "about" }}
20 |
23 |
48 | {{ end }}
49 |
50 |
51 |
52 | {{.Content }}
53 |
54 |
55 |
56 | {{ with .Params.tags }}
57 |
58 | {{ range . }}
59 |
{{ . }} {{ end }}
60 |
61 | {{ end }}
62 |
63 | {{ partial "comment.html" . }}
64 |
65 |
66 | {{ if eq .Type "posts" }}
67 |
80 | {{ end }}
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | {{ partialCached "footer.html" . }}
89 |
90 |
91 | {{partialCached "script.html" .}}
--------------------------------------------------------------------------------
/layouts/_default/terms.html:
--------------------------------------------------------------------------------
1 | {{ partial "header.html" . }} {{ $site := .Site }} {{ $data := .Data }}
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{ partial "breadcrumb.html" . }}
10 |
11 | {{ range $key, $value := .Data.Terms.Alphabetical }}
12 |
18 | {{ end }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | {{ partialCached "footer.html" . }}
27 |
28 | {{partialCached "script.html" .}}
--------------------------------------------------------------------------------
/layouts/archive/single.html:
--------------------------------------------------------------------------------
1 | {{ partial "header.html" . }}
2 |
3 |
4 |
5 |
6 | {{ partial "breadcrumb.html" . }}
7 |
8 | {{ $post := where (where $.Site.Pages "Type" "posts") "Kind" "page" }} {{ range $post.GroupByDate "01 - 2006" }}
9 |
10 |
14 |
23 |
24 | {{ end }}
25 |
26 |
27 |
28 |
29 |
30 | {{ partialCached "footer.html" . }}
31 |
32 | {{partialCached "script.html" .}}
--------------------------------------------------------------------------------
/layouts/index.html:
--------------------------------------------------------------------------------
1 | {{ partial "header.html" . }}
2 |
3 | {{ partialCached "splash.html" . }}
4 |
5 |
6 | {{partial "waterfall.html" .}} {{ partialCached "footer.html" . }}
7 |
8 |
9 | {{partialCached "script.html" .}}
--------------------------------------------------------------------------------
/layouts/partials/breadcrumb.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" }} {{ $.Scratch.Add "path" .Site.BaseURL }}
4 |
5 |
6 | location_on Home
7 | {{ range $index, $element := split $url "/" }} {{ $.Scratch.Add "path" $element }} {{ $.Scratch.Add "path" "/" }}
8 |
9 | {{ $isLast := eq ($.Scratch.Get "path") $.Permalink }} {{ if ne $element "" }} {{ if $isLast }}
10 |
{{ $.Title }}
11 |
12 | {{ else if eq $element "posts" }}
13 |
14 | {{ else }}
15 |
{{ title ( replace . "-" " ") }}
16 | {{ end }} {{ end }} {{ end }}
17 |
18 |
--------------------------------------------------------------------------------
/layouts/partials/comment.html:
--------------------------------------------------------------------------------
1 | {{ with $.Site.Params.comment }} {{ if eq .type "disqus"}}
2 |
5 |
6 |
17 | Please enable JavaScript to view the
18 | comments powered by Disqus.
19 |
20 | {{ end }} {{ if eq .type "valine"}}
21 |
22 |
27 | {{ end }} {{ end }}
--------------------------------------------------------------------------------
/layouts/partials/footer.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/header.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 | {{ $isHomePage := eq .Title .Site.Title }}{{ .Title }}{{ if eq $isHomePage false }} | {{ .Site.Title }}{{ end }}
11 |
12 |
13 |
14 |
16 |
17 |
18 |
20 |
21 |
22 |
24 |
25 |
26 |
27 |
28 |
30 |
31 |
32 |
33 |
35 |
36 |
37 |
40 |
41 |
42 | {{ $path := split (replace .Permalink ( printf "%s" .Site.BaseURL) "") "/" }}
43 |
44 |
45 | {{ $curType := index $path (sub (len $path) 2)}}
46 |
47 |
48 |
49 |
109 |
110 |
111 | {{ partial "msearch.html" . }}
112 |
113 |
114 |
115 |
116 |
117 |
118 | {{ with .Site.Menus.taxonomy }}{{ range . }}
119 |
120 |
{{ .Name | title }}
121 |
122 | {{ $key := .Identifier }} {{ $value := (index $.Site.Taxonomies .Identifier) }} {{ range $value.ByCount }}
123 |
124 | {{ .Name }}
125 | {{ .Count }}
126 |
127 |
128 | {{ end }}
129 |
130 |
131 | {{ end }} {{end }}
132 |
133 |
134 |
135 |
136 |
137 | {{ with .Site.Menus.main }}
138 |
162 | {{end}}
--------------------------------------------------------------------------------
/layouts/partials/msearch.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/layouts/partials/script.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
14 |
15 |
16 |
17 |
18 |
19 | {{ with .Site.Params.analytics }}
20 | {{ end }}
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/layouts/partials/splash.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{ with .Site.Params.logo }}
7 |
{{ end }} {{ with .Site.Params.author }}
8 |
{{ . }} {{ end }}
9 |
{{ with .Site.Params.description }}{{ . }}{{ end }}
10 |
11 |
12 | {{ if eq true .Site.Params.hitokoto }}
13 | {{ end }}
14 |
--------------------------------------------------------------------------------
/layouts/partials/waterfall.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ if not .IsHome }}
4 | {{ partial "breadcrumb.html" . }}
5 | {{ end }}
6 |
7 | {{ $paginator := .Paginate (where .Data.Pages "Type" "posts") }} {{ range $paginator.Pages }}
8 |
9 |
10 |
25 |
26 |
27 |
28 | {{.Summary }} {{ if .Truncated }}
29 | 阅读全文
30 | {{ end }}
31 |
32 |
33 |
34 |
35 | {{with .Params.tags}}
36 |
{{ range . }}
37 |
{{ . }} {{ end }}
38 |
39 | {{end}}
40 |
41 |
42 | {{ end }}
43 |
44 |
45 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/layouts/shortcodes/admonition.html:
--------------------------------------------------------------------------------
1 | {{ $type := or (.Get "type") "note" }} {{ $title := or (.Get "title") "注意" }}
2 |
3 |
4 |
5 |
6 | {{ if eq $type "warning" }} warning {{ else }} assistant_photo {{ end }}
7 | {{ $title }}
8 |
9 |
{{ printf "%s" .Inner | markdownify }}
10 |
--------------------------------------------------------------------------------
/layouts/shortcodes/asciinema.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## Asciinema Cast
4 |
5 | ### This shortcode is not mobile friendly :(
6 | ### You can embed image for mobile
7 | ### Or you can set rows and cols to make player small for mobile.
8 |
9 | ### Params:
10 |
11 | - Cast `id`
12 |
13 | required param
14 | you can extract from asciicast url
15 | url format "https://asciinema.org/a/107960"
16 |
17 | - Cast Embed `type`
18 |
19 | optional param
20 | Embed image link or the player
21 | default value "player"
22 | you can set "image" or "player"
23 |
24 | - Cast `started`
25 |
26 | optional param
27 | Append ?t=30 to start the playback at 30s, ?t=3:20 to start the playback at 3m 20s.
28 |
29 | - Cast `speed`
30 |
31 | optional param
32 | The speed option alters the playback speed.
33 | The default speed is 1 which means it plays at the unaltered, original speed.
34 |
35 | - Cast `size`
36 |
37 | optional param
38 | The size option alters the size of the terminal font. There are 3 available sizes:
39 |
40 | * small (default)
41 | * medium
42 | * big
43 |
44 | - Cast `theme`
45 |
46 | optional param
47 | The theme option allows overriding a theme used for the terminal.
48 | It defaults to a theme set by the asciicast author, The available themes are:
49 |
50 | * asciinema,
51 | * tango
52 | * solarized-dark
53 | * solarized-light
54 | * monokai
55 |
56 | - Cast `cols`
57 |
58 | optional param
59 | The cols option allows overriding width (in characters) of the emulated terminal.
60 | By default the recorded terminal’s width is used.
61 |
62 | - Cast `rows`
63 |
64 | optional param
65 | The rows option allows overriding height (in lines) of the emulated terminal.
66 | By default the recorded terminal’s height is used.
67 |
68 | - Cast `autoplay`
69 |
70 | optional param
71 | The autoplay option controls whether the playback should automatically start when the player loads.
72 | default value "0"
73 | you can set "0" or "1"
74 |
75 | - Cast `loop`
76 |
77 | optional param
78 | The loop option allows for looping the playback. This option is usually combined with autoplay option.
79 | default value "0"
80 | you can set "0" or "1"
81 |
82 | - Cast `preload`
83 |
84 | optional param
85 | The preload option controls whether the player should immediately start fetching the recording.
86 | default value "1"
87 | you can set "0" or "1"
88 |
89 | ### Examples:
90 |
91 | - Simple
92 |
93 | {{% asciinema "107960" %}}
94 | {{% asciinema "107960" "image" "30" %}}
95 | {{% asciinema "107960" "30" "3" "small" "monokai" "80" "20" "1" "1" "1" %}}
96 |
97 | - Named Params
98 |
99 | {{% asciinema id="107960" %}}
100 | {{% asciinema id="107960" type="image" started="30" %}}
101 | {{% asciinema id="107960" started="30" speed="3" size="small" theme="monokai" cols="80" rows="20" autoplay="1" loop="1" preload="1" %}}
102 |
103 | */}}
104 |
105 | {{/* DEFAULTS */}}
106 | {{ $type := "player" }}
107 | {{ $size := "small" }}
108 | {{ $theme := "asciinema" }}
109 | {{ $preload := "1" }}
110 |
111 | {{ if .IsNamedParams }}
112 |
113 | {{ if eq (.Get "type") "image" }}
114 |
115 | {{ else }}
116 |
117 | {{ end }}
118 |
119 | {{ else }}
120 |
121 | {{ if isset .Params 1 }}
122 | {{ if eq (.Get 1) "image" }}
123 |
124 | {{ else if eq (.Get 1) $type }}
125 |
126 | {{ else }}
127 |
128 | {{ end }}
129 | {{ else }}
130 |
131 | {{ end }}
132 |
133 | {{ end }}
134 |
135 |
136 |
137 |
--------------------------------------------------------------------------------
/layouts/shortcodes/codepen.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## Code Pen Demo
4 |
5 | ### Params:
6 |
7 | - `pen`
8 |
9 | required param
10 | you can extract from pen url
11 | url format "https://codepen.io/laozhu/pen/RoaWdE"
12 |
13 | - Pen `user`
14 |
15 | required param
16 | you can extract from pen url
17 | url format "https://codepen.io/laozhu/pen/RoaWdE"
18 |
19 | - Pen user `fullname`
20 |
21 | required param
22 | you can get from pen page
23 | pen page url "https://codepen.io/laozhu/pen/RoaWdE"
24 |
25 | - Pen `height`
26 |
27 | required param
28 | set height for pen result
29 |
30 | - Pen `style`
31 |
32 | optional param
33 | default value "light"
34 | you can overwrite it with "dark"
35 |
36 | - Pen `tabs`
37 |
38 | optional param
39 | default value "result"
40 | you can choose two from "js,html,css,result", for example "js,result"
41 |
42 | - Preview prefs
43 |
44 | optional param
45 | default value "true"
46 | you can set "false"
47 |
48 | ### Examples:
49 |
50 | - Simple
51 |
52 | {{% codepen "RoaWdE" "🐍 Snake Rush" "laozhu" "Ritchie Zhu" %}}
53 | {{% codepen "RoaWdE" "🐍 Snake Rush" "laozhu" "Ritchie Zhu" "600" "dark" "css,result" "false" %}}
54 |
55 | - Named Params
56 |
57 | {{% codepen pen="RoaWdE" title="🐍 Snake Rush" user="laozhu" fullname="Ritchie Zhu" %}}
58 | {{% codepen pen="RoaWdE" title="🐍 Snake Rush" user="laozhu" fullname="Ritchie Zhu" height="600" style="dark" tabs="css,result" preview="false" %}}
59 |
60 | */}}
61 |
62 | {{/* DEFAULTS */}}
63 | {{ $height := "265" }}
64 | {{ $style := "light" }}
65 | {{ $tabs := "result" }}
66 | {{ $preview := "true" }}
67 |
68 | {{ if .IsNamedParams }}
69 |
70 |
72 | See the Pen {{ .Get "title" }} by {{ .Get "fullname" }} (@{{ .Get "user" }} ) on CodePen .
73 |
74 |
75 |
76 | {{ else }}
77 |
78 |
80 | See the Pen {{ .Get 1 }} by {{ .Get 3 }} (@{{ .Get 2 }} ) on CodePen .
81 |
82 |
83 |
84 | {{ end }}
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/layouts/shortcodes/jsfiddle.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## jsFiddle Code Demo
4 |
5 | ### Params:
6 |
7 | - `fiddle`
8 |
9 | required param
10 | you can extract from fiddle url
11 | url format "https://jsfiddle.net/laozhu/L479wueo/3/"
12 |
13 | - Fiddle `tabs`
14 |
15 | optional param
16 | default value "js,html,css,result"
17 | you can overwrite it with subset of "js,html,css,result"
18 |
19 | - Fiddle `style`
20 |
21 | optional param
22 | default value "light"
23 | you can overwrite it with "dark"
24 |
25 | ### Examples:
26 |
27 | - Simple
28 |
29 | {{% jsfiddle "laozhu/L479wueo" %}}
30 | {{% jsfiddle "laozhu/L479wueo" "html,css,result" %}}
31 | {{% jsfiddle "laozhu/L479wueo" "html,css,result" "light" %}}
32 |
33 | - Named Params
34 |
35 | {{% jsfiddle fiddle="laozhu/L479wueo/3" %}}
36 | {{% jsfiddle fiddle="laozhu/L479wueo/3" tabs="html,css,result" %}}
37 | {{% jsfiddle fiddle="laozhu/L479wueo/3" tabs="html,css,result" style="light" %}}
38 |
39 | */}}
40 |
41 | {{/* DEFAULTS */}}
42 | {{ $tabs := "js,html,css,result" }}
43 | {{ $style := "light" }}
44 |
45 | {{ if .IsNamedParams }}
46 |
47 |
48 |
49 | {{ else }}
50 |
51 |
52 |
53 | {{ end }}
54 |
--------------------------------------------------------------------------------
/layouts/shortcodes/music.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## Music 163
4 |
5 | ### Because of music copyright issue, this shortcode is invalid now.
6 | ### 由于音乐版权问题,该插件已经无法继续正常使用。
7 |
8 | ### Params:
9 |
10 | - `id`
11 |
12 | required param
13 | you can extract from music url
14 | url format "http://music.163.com/#/song?id=3950552"
15 |
16 | - Fiddle `auto`
17 |
18 | optional param
19 | default value 0
20 | you can overwrite it with 1
21 |
22 | ### Examples:
23 |
24 | - Simple
25 |
26 | {{% music "3950552" %}}
27 | {{% music "3950552" "1" %}}
28 |
29 | - Named Params
30 |
31 | {{% music id="3950552" %}}
32 | {{% music id="3950552" auto="1" %}}
33 |
34 | */}}
35 |
36 | {{/* DEFAULTS */}}
37 | {{ $auto := "0" }}
38 |
39 | {{ if .IsNamedParams }}
40 |
41 |
51 |
52 | {{ else }}
53 |
54 |
64 |
65 | {{ end }}
66 |
--------------------------------------------------------------------------------
/layouts/shortcodes/shengxiang.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## Sheng Xiang PPT
4 |
5 | ### Params:
6 |
7 | - `id`
8 |
9 | required param
10 | you can extract from shengxiang url
11 | url format "https://ppt.baomitu.com/d/a8a49a00#/"
12 |
13 | - Fiddle `style`
14 |
15 | optional param
16 | default value "light"
17 | you can overwrite it with "dark"
18 |
19 | ### Examples:
20 |
21 | - Simple
22 |
23 | {{% shengxiang "a8a49a00" %}}
24 | {{% shengxiang "a8a49a00" "dark" %}}
25 |
26 | - Named Params
27 |
28 | {{% shengxiang id="a8a49a00" %}}
29 | {{% shengxiang id="a8a49a00" style="dark" %}}
30 |
31 | */}}
32 |
33 | {{/* DEFAULTS */}}
34 | {{ $style := "light" }}
35 |
36 | {{ if .IsNamedParams }}
37 |
38 |
47 |
48 | {{ else }}
49 |
50 |
59 |
60 | {{ end }}
61 |
--------------------------------------------------------------------------------
/layouts/shortcodes/video.html:
--------------------------------------------------------------------------------
1 | {{/*
2 |
3 | ## Video.js Player
4 |
5 | ### Params:
6 |
7 | - Video `mp4`
8 |
9 | required param
10 | mp4 video url or path
11 | url format "//vjs.zencdn.net/v/oceans.mp4"
12 | path format "/media/posts/hugo-nuo-post-preview/videojs.mp4"
13 |
14 | - Video `webm`
15 |
16 | required param
17 | mp4 video url or path
18 | url format "//vjs.zencdn.net/v/oceans.webm"
19 | path format "/media/posts/hugo-nuo-post-preview/videojs.webm"
20 |
21 | - Video `ogv`
22 |
23 | required param
24 | ogv video url or path
25 | url format "//vjs.zencdn.net/v/oceans.ogv"
26 | path format "/media/posts/hugo-nuo-post-preview/videojs.ogv"
27 |
28 | - Video `poster`
29 |
30 | optional param
31 | default value "/img/poster.jpg"
32 | you can overwrite it with your photo (16:9)
33 |
34 | ### Examples:
35 |
36 | - Simple
37 |
38 | {{% video
39 | "/media/posts/hugo-nuo-post-preview/videojs.mp4"
40 | "/media/posts/hugo-nuo-post-preview/videojs.webm"
41 | "/media/posts/hugo-nuo-post-preview/videojs.ogv"
42 | %}}
43 |
44 | {{% video
45 | "/media/posts/hugo-nuo-post-preview/videojs.mp4"
46 | "/media/posts/hugo-nuo-post-preview/videojs.webm"
47 | "/media/posts/hugo-nuo-post-preview/videojs.ogv"
48 | "/img/poster.jpg"
49 | %}}
50 |
51 | - Named Params
52 |
53 | {{%
54 | video mp4="/media/posts/hugo-nuo-post-preview/videojs.mp4"
55 | webm="/media/posts/hugo-nuo-post-preview/videojs.webm"
56 | ogv="/media/posts/hugo-nuo-post-preview/videojs.ogv"
57 | %}}
58 |
59 | {{%
60 | video mp4="/media/posts/hugo-nuo-post-preview/videojs.mp4"
61 | webm="/media/posts/hugo-nuo-post-preview/videojs.webm"
62 | ogv="/media/posts/hugo-nuo-post-preview/videojs.ogv"
63 | poster="/img/poster.jpg"
64 | %}}
65 |
66 | */}}
67 |
68 | {{/* DEFAULTS */}}
69 | {{ $poster := "/img/poster.jpg" }}
70 |
71 | {{ if .IsNamedParams }}
72 |
73 |
74 |
75 |
76 |
77 | To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
78 |
79 |
80 | {{ else }}
81 |
82 |
83 |
84 |
85 |
86 | To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
87 |
88 |
89 | {{ end }}
90 |
--------------------------------------------------------------------------------
/static/CNAME:
--------------------------------------------------------------------------------
1 | keyin.me
--------------------------------------------------------------------------------
/static/css/index.css:
--------------------------------------------------------------------------------
1 | body{background:#ebecee;font-family:Roboto,Helvetica,Hiragino Sans GB,Hiragino Sans GB W3,Source Han Sans CN Regular,WenQuanYi Micro Hei,Microsoft YaHei,Arial,sans-serif;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;text-rendering:optimizelegibility}a.unstyled,a.unstyled:active,a.unstyled:hover{color:inherit}.nowrap,.pagination-single .pagination-item a{vertical-align:middle;width:100%;display:inline-block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
2 |
3 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,footer,header,main,menu,nav,section,summary{display:block}canvas,progress,video{display:inline-block;vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*,:after,:before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}ol:not(.browser-default){padding-left:0}a{color:#3f51b5;-webkit-tap-highlight-color:transparent}.z-depth-0{-webkit-box-shadow:none!important;box-shadow:none!important}.btn,.btn-large,.card,.card-panel,.mobile-search .header,.navbar .nav-container,.navbar form.nav-form .form-popout,.side-nav,.splash,.splash .splash-content .avatar,.taxonomy .taxonomy-panel,.z-depth-1{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.btn-large:hover,.btn:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,.14),0 1px 7px 0 rgba(0,0,0,.12),0 3px 1px -1px rgba(0,0,0,.2);box-shadow:0 3px 3px 0 rgba(0,0,0,.14),0 1px 7px 0 rgba(0,0,0,.12),0 3px 1px -1px rgba(0,0,0,.2)}.z-depth-2{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.3);box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.3)}.z-depth-3{-webkit-box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.3);box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.3)}.z-depth-4{-webkit-box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.3);box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.3)}.z-depth-5{-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.3);box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.3)}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#3f51b5}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width:992px){.pagination{width:100%}.pagination li.next,.pagination li.prev{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:hsla(0,0%,100%,.7)}.breadcrumb [class*=mdi-],.breadcrumb [class^=mdi-],.breadcrumb i,.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:"\E5CC";color:hsla(0,0%,100%,.7);vertical-align:top;display:inline-block;font-family:Material Icons;font-weight:400;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}@media only screen and (max-width:600px){.hide-on-small-and-down,.hide-on-small-only{display:none!important}}@media only screen and (max-width:992px){.hide-on-med-and-down{display:none!important}}@media only screen and (min-width:601px){.hide-on-med-and-up{display:none!important}}@media only screen and (min-width:600px) and (max-width:992px){.hide-on-med-only{display:none!important}}@media only screen and (min-width:993px){.hide-on-large-only{display:none!important}}@media only screen and (min-width:993px){.show-on-large{display:block!important}}@media only screen and (min-width:600px) and (max-width:992px){.show-on-medium{display:block!important}}@media only screen and (max-width:600px){.show-on-small{display:block!important}}@media only screen and (min-width:601px){.show-on-medium-and-up{display:block!important}}@media only screen and (max-width:992px){.show-on-medium-and-down{display:block!important}}@media only screen and (max-width:600px){.center-on-small-only{text-align:center}}.hide{display:none!important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left!important}.right{float:right!important}.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.center-block{display:block;margin-left:auto;margin-right:auto}.no-padding{padding:0!important}.material-icons{text-rendering:optimizeLegibility;-webkit-font-feature-settings:"liga";-moz-font-feature-settings:"liga";font-feature-settings:"liga"}.navbar{width:100%}.navbar .nav-container{background-color:#3f51b5;height:64px;line-height:64px}.navbar,.navbar a{color:#fff}.navbar i.material-icons{display:block;font-size:24px;height:64px;line-height:64px}.navbar .nav-wrapper{position:relative;height:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.navbar .button-collapse{position:relative;z-index:1;height:64px}.navbar .brand-logo,.navbar .button-collapse{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:none;flex:none;margin:0 10px}.navbar .brand-logo{color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:1.5rem;transition:flex .2s,margin .2s,width .2s,-ms-flex .2s}.navbar .brand-logo i.material-icons{font-size:1.5rem;float:left;margin-right:15px}.navbar .nav-title{display:inline-block;font-size:32px;padding:28px 0}.navbar form.nav-form{position:relative;background:#606fc7;border-radius:2px;-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;margin:0 10px;transition:flex .2s,width .2s,-ms-flex .2s,background .2s}.navbar form.nav-form .form-group{line-height:40px;height:40px;padding:10px 20px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.navbar form.nav-form .form-group i.material-icons{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:none;flex:none;color:#ddd;-webkit-transition:color .2s;transition:color .2s;line-height:inherit;height:inherit;margin-right:10px}.navbar form.nav-form .form-group ::-webkit-input-placeholder{color:#ddd;-webkit-transition:color .2s;transition:color .2s}.navbar form.nav-form .form-group :-moz-placeholder,.navbar form.nav-form .form-group ::-moz-placeholder{color:#ddd;-webkit-transition:color .2s;transition:color .2s}.navbar form.nav-form .form-group :-ms-input-placeholder{color:#ddd;-webkit-transition:color .2s;transition:color .2s}.navbar form.nav-form .form-group input{color:#ddd;-webkit-transition:color .2s;transition:color .2s;line-height:1.2em;height:inherit;outline:none;-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;background:transparent;-webkit-appearance:none;border:none;font-size:14px}.navbar form.nav-form .form-popout{position:absolute;background:#fff;width:100%;max-height:calc(100vh - 64px);-webkit-transform:translateY(-110%);transform:translateY(-110%);margin-top:12px;visibility:hidden;z-index:-1;-webkit-transition:visibility .2s,-webkit-transform .2s;transition:visibility .2s,-webkit-transform .2s;transition:transform .2s,visibility .2s;transition:transform .2s,visibility .2s,-webkit-transform .2s}.navbar form.nav-form:hover{background:#7280ce}.navbar form.nav-form:hover i.material-icons,.navbar form.nav-form:hover input{color:#fff}.navbar form.nav-form:hover ::-webkit-input-placeholder{color:#fff}.navbar form.nav-form:hover :-moz-placeholder,.navbar form.nav-form:hover ::-moz-placeholder{color:#fff}.navbar form.nav-form:hover :-ms-input-placeholder{color:#fff}.navbar ul.nav-menu li{-webkit-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}.navbar ul.nav-menu li.active{background-color:rgba(0,0,0,.1)}.navbar ul.nav-menu a{-webkit-transition:background-color .3s;transition:background-color .3s;font-size:1.2rem;color:#fff;display:block;padding:0 15px;cursor:pointer}.navbar ul.nav-menu a.btn,.navbar ul.nav-menu a.btn-large{margin-top:-2px;margin-left:15px;margin-right:15px}.navbar ul.nav-menu a.btn-large>.material-icons,.navbar ul.nav-menu a.btn>.material-icons{height:inherit;line-height:inherit}.navbar ul.nav-menu a:hover{background-color:rgba(0,0,0,.1)}.navbar ul.tabs{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;width:auto;height:64px;margin-left:20px;overflow:hidden;transition:flex .2s,margin .2s,width .2s,-ms-flex .2s}.navbar ul.tabs .tab{height:64px;line-height:64px;text-transform:none}.navbar ul.tabs .tab a{font-size:1.1rem}.navbar ul.apps{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:none;flex:none}.navbar.search-active ul.tabs{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;visibility:hidden;width:0;margin:0}.navbar.search-active form.nav-form{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;background:#f7f7f7}.navbar.search-active form.nav-form i.material-icons{color:#757575}.navbar.search-active form.nav-form input{color:#212121}.navbar.search-active form.nav-form ::-webkit-input-placeholder{color:#757575}.navbar.search-active form.nav-form :-moz-placeholder,.navbar.search-active form.nav-form ::-moz-placeholder{color:#757575}.navbar.search-active form.nav-form :-ms-input-placeholder{color:#757575}.navbar.search-active form.nav-form .form-popout{visibility:visible;-webkit-transform:translateY(0);transform:translateY(0)}.navbar-fixed{position:relative;height:64px;z-index:998}.navbar-fixed .navbar{position:fixed}@media only screen and (max-width:992px){.navbar .brand-logo{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.navbar.search-active .button-collapse{display:none}.navbar.search-active .brand-logo{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;visibility:hidden;width:0;margin:0}}@media only screen and (max-width:600px){.navbar .nav-container,.navbar .nav-wrapper i,.navbar a.button-collapse,.navbar a.button-collapse i{height:56px;line-height:56px}.navbar-fixed{height:56px}}@font-face{font-family:Roboto;src:local(Roboto Thin),url(../fonts/roboto/Roboto-Thin.woff2) format("woff2"),url(../fonts/roboto/Roboto-Thin.woff) format("woff");font-weight:100}@font-face{font-family:Roboto;src:local(Roboto Light),url(../fonts/roboto/Roboto-Light.woff2) format("woff2"),url(../fonts/roboto/Roboto-Light.woff) format("woff");font-weight:300}@font-face{font-family:Roboto;src:local(Roboto Regular),url(../fonts/roboto/Roboto-Regular.woff2) format("woff2"),url(../fonts/roboto/Roboto-Regular.woff) format("woff");font-weight:400}@font-face{font-family:Roboto;src:local(Roboto Medium),url(../fonts/roboto/Roboto-Medium.woff2) format("woff2"),url(../fonts/roboto/Roboto-Medium.woff) format("woff");font-weight:500}@font-face{font-family:Roboto;src:local(Roboto Bold),url(../fonts/roboto/Roboto-Bold.woff2) format("woff2"),url(../fonts/roboto/Roboto-Bold.woff) format("woff");font-weight:700}a{text-decoration:none}html{line-height:1.5;font-family:Roboto,sans-serif;font-weight:400;color:#333}@media only screen and (min-width:0){html{font-size:14px}}@media only screen and (min-width:992px){html{font-size:14.5px}}@media only screen and (min-width:1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.1}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;margin:2.1rem 0 1.68rem}h1,h2{line-height:110%}h2{font-size:3.56rem;margin:1.78rem 0 1.424rem}h3{font-size:2.92rem;margin:1.46rem 0 1.168rem}h3,h4{line-height:110%}h4{font-size:2.28rem;margin:1.14rem 0 .912rem}h5{font-size:1.64rem;margin:.82rem 0 .656rem}h5,h6{line-height:110%}h6{font-size:1rem;margin:.5rem 0 .4rem}em{font-style:italic}small{font-size:75%}.light,.page-footer .footer-copyright{font-weight:300}.card-panel{padding:24px}.card,.card-panel{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s,-webkit-box-shadow .25s;margin:0;border-radius:2px;background-color:#fff}.card{position:relative}@media only screen and (max-width:600px){.card{-webkit-box-shadow:none;box-shadow:none}}.card .card-title{font-size:24px}.card .card-title a{color:#3f51b5;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;width:100%;display:inline-block}.card.large,.card.medium,.card.small{position:relative}.card.large .card-image,.card.medium .card-image,.card.small .card-image{max-height:60%;overflow:hidden}.card.large .card-image+.card-content,.card.medium .card-image+.card-content,.card.small .card-image+.card-content{max-height:40%}.card.large .card-content,.card.medium .card-content,.card.small .card-content{max-height:100%;overflow:hidden}.card.large .card-action,.card.medium .card-action,.card.small .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.medium{height:400px}.card.large{height:500px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{color:#fff;position:absolute;bottom:0;left:0;max-width:100%;padding:24px}.card .card-content{padding:16px 24px;border-radius:0 0 2px 2px}@media only screen and (max-width:600px){.card .card-content{padding-left:16px;padding-right:16px}}.card .card-content p{margin:0;color:inherit}.card .card-header{position:relative;background-color:inherit;border-bottom:1px solid hsla(0,0%,63%,.2);padding:16px 24px}@media only screen and (max-width:600px){.card .card-header{padding-left:16px;padding-right:16px}}.card .card-header.postinfo{padding-top:24px;padding-bottom:24px}.card .card-header.postinfo .card-title{display:block;line-height:32px}.card .card-header.postinfo .card-title i{line-height:32px}.card .card-header.postinfo .card-meta{display:block;line-height:20px}.card .card-header.postinfo .card-meta i{line-height:20px;color:#737373;vertical-align:middle}.card .card-header.postinfo .card-meta time{vertical-align:middle;display:inline-block;color:#737373}.card .card-header.postinfo .card-meta address{display:inline-block;font-style:normal;vertical-align:middle}.card .card-header.postinfo .card-meta address:before{content:"";margin:0 6px;display:inline-block;height:11px;border-top:5.5px solid transparent;border-bottom:5.5px solid transparent;border-left:11px solid #3f51b5}.card .card-header.date{color:#737373;line-height:25px;padding-right:11px}@media only screen and (max-width:600px){.card .card-header.date{padding-right:3px}}.card .card-header.date .group{white-space:nowrap;display:inline-block;margin-right:13px}@media only screen and (max-width:600px){.card .card-header.date .group{display:block}}.card .card-header.date address,.card .card-header.date i,.card .card-header.date time{font-style:normal;display:inline-block;vertical-align:middle}.card .card-header.date i{font-size:20px}.card .card-header.date a{border-bottom:1px dotted}.card .card-action{position:relative;background-color:inherit;border-top:1px solid hsla(0,0%,63%,.2);padding:16px 24px}.card .card-action:last-child{border-radius:0 0 2px 2px}@media only screen and (max-width:600px){.card .card-action{padding-left:16px;padding-right:16px}}.card .card-action.card-action-links{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-moz-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:start;align-content:flex-start;padding:16px 19px 11px 24px}@media only screen and (max-width:600px){.card .card-action.card-action-links{padding-left:16px;padding-right:11px}}.card .card-action.card-action-links .btn,.card .card-action.card-action-links .btn-large{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;margin:0 5px 5px 0}.card .card-reveal{padding:24px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;left:0;top:100%;height:100%;z-index:3;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}.tabs{position:relative;overflow-x:auto;overflow-y:hidden;height:48px;width:100%;background-color:#fff;margin:0 auto;white-space:nowrap}.tabs.tabs-transparent{background-color:transparent}.tabs.tabs-transparent .tab.disabled a,.tabs.tabs-transparent .tab.disabled a:hover,.tabs.tabs-transparent .tab a{color:hsla(0,0%,100%,.7)}.tabs.tabs-transparent .tab a.active,.tabs.tabs-transparent .tab a:hover{color:#fff}.tabs.tabs-transparent .indicator{background-color:#fff}.tabs.tabs-fixed-width{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab{display:inline-block;text-align:center;line-height:48px;height:48px;padding:0;margin:0;text-transform:uppercase}.tabs .tab a{color:rgba(63,81,181,.7);display:block;width:100%;height:100%;padding:0 24px;font-size:14px;text-overflow:ellipsis;overflow:hidden;-webkit-transition:color .28s ease;transition:color .28s ease}.tabs .tab a.active,.tabs .tab a:hover{background-color:transparent;color:#3f51b5}.tabs .tab.disabled a,.tabs .tab.disabled a:hover{color:rgba(63,81,181,.7);cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#7280ce;will-change:left,right;-webkit-transition:all .3s!important;transition:all .3s!important}@media only screen and (max-width:992px){.tabs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex}.tabs .tab{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab a{padding:0 12px}}.btn,.btn-large{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn-large.disabled,.btn-large:disabled,.btn-large[disabled],.btn.disabled,.btn:disabled,.btn[disabled],.disabled.btn-large,[disabled].btn-large{pointer-events:none;background-color:#dfdfdf!important;-webkit-box-shadow:none;box-shadow:none;color:#9f9f9f!important;cursor:default}.btn-large.disabled:hover,.btn-large:disabled:hover,.btn-large[disabled]:hover,.btn.disabled:hover,.btn:disabled:hover,.btn[disabled]:hover,.disabled.btn-large:hover,[disabled].btn-large:hover{background-color:#dfdfdf!important;color:#9f9f9f!important}.btn,.btn-large{font-size:1rem;outline:0}.btn-large i,.btn i{font-size:1.3rem;line-height:inherit}.btn-large:focus,.btn:focus{background-color:#4b626d}.btn,.btn-large{text-decoration:none;color:#fff;background-color:#607d8b;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.btn-large:hover,.btn:hover{background-color:#6b8a99}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:997}.fixed-action-btn.active ul{visibility:visible}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0;visibility:hidden}.fixed-action-btn ul li{margin-bottom:15px}.btn-large{height:54px;line-height:54px}.btn-large i{font-size:1.6rem}.btn-block{display:block}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#e4e4e4;margin-bottom:5px;margin-right:5px}.chip>img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip .close{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}@media only screen and (max-width:992px){body.mobile-sidebar-active{overflow:hidden}body.mobile-sidebar-active .side-nav{-webkit-transform:translateX(0);transform:translateX(0)}#sidenav-overlay{display:blcok}}.side-nav{position:fixed;width:300px;left:0;top:0;margin:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);height:calc(100% + 60px);height:100%;padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:transform;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-105%);transform:translateX(-105%);-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.side-nav .collapsible{margin:0}.side-nav li{float:none;line-height:48px}.side-nav li.active{background-color:rgba(0,0,0,.05)}.side-nav li>a{color:rgba(0,0,0,.87);display:block;font-size:14px;font-weight:500;height:48px;line-height:48px;padding:0 32px}.side-nav li>a:hover{background-color:rgba(0,0,0,.05)}.side-nav li>a.btn,.side-nav li>a.btn-large{margin:10px 15px;color:#fff}.side-nav li>a.btn-large:hover,.side-nav li>a.btn:hover{background-color:#6b8a99}.side-nav li>a>[class^=mdi-],.side-nav li>a>i,.side-nav li>a>i.material-icons,.side-nav li>a li>a>[class*=mdi-]{float:left;height:48px;line-height:48px;margin:0 32px 0 0;width:24px;color:rgba(0,0,0,.54)}.side-nav .user-view{position:relative;padding:32px 32px 0;margin-bottom:8px}.side-nav .user-view>a{height:auto;padding:0}.side-nav .user-view>a:hover{background-color:transparent}.side-nav .user-view .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.side-nav .user-view .email,.side-nav .user-view .name{display:block;font-size:14px;line-height:24px}.side-nav .user-view .name{margin-top:16px;font-weight:500}.side-nav .user-view .email{padding-bottom:16px;font-weight:400}.side-nav.fixed{left:0;-webkit-transform:translateX(0);transform:translateX(0);position:fixed}@media only screen and (max-width:992px){.side-nav.fixed{-webkit-transform:translateX(-105%);transform:translateX(-105%)}.side-nav a{padding:0 16px}.side-nav .user-view{padding:16px 16px 0}}.side-nav .collapsible-body>ul:not(.collapsible)>li.active,.side-nav.fixed .collapsible-body>ul:not(.collapsible)>li.active{background-color:#3f51b5}.side-nav .collapsible-body>ul:not(.collapsible)>li.active a,.side-nav.fixed .collapsible-body>ul:not(.collapsible)>li.active a{color:#fff}.side-nav .collapsible-body{padding:0}#sidenav-overlay{display:block;position:fixed;top:0;left:0;right:0;height:120vh;background-color:rgba(0,0,0,.5);z-index:998;will-change:opacity}svg.svg-icons{width:2rem;height:1.6rem;display:inline-block;text-align:center;margin-right:1rem;fill:#4d4d4d}body,html{height:100%;min-height:100%}.container{margin:0 auto;width:100%;padding:0 20px}@media only screen and (min-width:1201px){.container{padding:0 30px}}@media only screen and (max-width:992px){.container{padding:0 10px}}@media only screen and (max-width:600px){.container.container-ex{padding:0}}.main-panel{min-height:calc(100% - 64px);-webkit-transition:all .2s ease-in;transition:all .2s ease-in;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media only screen and (max-width:600px){.main-panel{min-height:calc(100% - 56px)}}.page-content{position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.page-content .container{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%}.page-content .container .inner{height:100%}.page-footer{position:relative;z-index:1;padding-top:20px;color:#fff;background-color:#3f51b5}.page-footer .wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap}.page-footer .group{-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.page-footer .group.group-slink{-ms-flex-preferred-size:66%;flex-basis:66%}.page-footer .group.group-flink{-ms-flex-preferred-size:34%;flex-basis:34%}@media only screen and (max-width:600px){.page-footer .group{min-width:100%}}.page-footer a{color:#eee}.page-footer ul.slink{margin:20px 0;list-style:none}.page-footer ul.slink>li{display:inline-block}.page-footer ul.slink>li a{color:#fff}.page-footer ul.slink>li svg{fill:#fff}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 0;color:hsla(0,0%,100%,.8);background-color:rgba(51,51,51,.08)}.inner{max-width:1300px;margin:auto}.search-result{overflow-y:auto;color:#333;font-size:15px;line-height:1.2em;padding:12px 24px}.search-result ul{margin:0;overflow:hidden}.search-result ul li{float:left;width:50%}.search-result ul li a{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;color:#333;padding:10px 20px}.search-result ul li a:hover{background:#f7f7f7}.search-result ul:empty{display:none}.search-result label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;padding:0 20px 5px;margin:0;font-size:13px;color:#737373}@media only screen and (max-width:600px){body.mobile-search-active{overflow:hidden}body.mobile-search-active .mobile-search{display:block}}.mobile-search{display:none;overflow-y:auto;height:100%;z-index:1000;background:#ebecee;font-size:15px;color:#737373;padding-top:56px}.mobile-search,.mobile-search .header{position:fixed;top:0;left:0;width:100%}.mobile-search .header{height:56px;line-height:56px;background:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;padding:0 16px;font-size:16px}.mobile-search .header input{color:#333;-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;margin:0 10px;-webkit-appearance:none;border:none;outline:none}.mobile-search .content{width:100%}.mobile-search .content label{padding:16px;font-size:13px;display:block;text-align:center}.mobile-search .content ul{width:100%;margin:0 0 40px;border-top:1px solid #eaeaea;background:#fff}.mobile-search .content ul li{width:100%;line-height:20px;padding:8px 16px;border-bottom:1px solid #e0e0e0}.mobile-search .content ul li a{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#737373}.taxonomy{position:fixed;z-index:996;width:100%;left:0;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s;-webkit-transform:translateY(-100%);transform:translateY(-100%);overflow:hidden}.taxonomy.active{-webkit-transform:translateY(0);transform:translateY(0)}.taxonomy .taxonomy-panel{max-height:calc(100vh - 64px);margin-bottom:1px;background:#fff;overflow-y:auto;color:#333;font-size:15px;line-height:1.2em;padding:12px 24px}.taxonomy .taxonomy-panel label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;padding:15px 0;margin:0;color:#737373}.taxonomy .taxonomy-panel ul{margin:0;overflow:hidden}.taxonomy .taxonomy-panel ul li{display:inline-block;margin-bottom:10px;margin-right:5px}.taxonomy .taxonomy-panel ul li .badge{font-size:.8em;vertical-align:top;line-height:25px}.taxonomy .taxonomy-panel ul:empty{display:none}.article{font-size:16px;line-height:1.7em}.article blockquote{margin:20px 0;padding:0 10px 0 16px;border-left:2px solid #3f51b5;color:#4d4d4d;background:#fafafa}.article h1{font-size:30px;line-height:1.333334em;padding-bottom:.5em;margin:.67em 0}.article h2{font-size:25px;margin:.8em 0;line-height:1.4em}.article h3{font-size:22px;margin:1em 0}.article h4{font-size:20px;margin:1.2em 0;font-weight:400;font-style:italic}.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.article h1,.article h2{color:#3f51b5}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article p{margin:0}.article code:not(.hljs){color:#3f51b5;white-space:nowrap;padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.article>pre code:not(.hljs){overflow-x:auto;display:block;background:#2b303b;color:#c0c5c3;padding:.5em 24px;border-radius:0}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 #bbb;box-shadow:inset 0 -1px 0 #bbb}.article a{text-decoration:none;border-bottom:1px dotted}.article a,.article a:focus,.article a:hover{color:#3f51b5}.article ul,.article ul>li{list-style-type:disc}.article li ul,.article li ul li{list-style-type:circle}.article ol,.article ul{padding-left:0;margin:1.2em 0}.article li,.article li ol,.article li ul{margin:.5em 0}.article li{margin-left:18px}.article li p{display:inline}.article p>code{word-break:break-all;word-wrap:break-word;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article>pre{margin:0 -24px}.article pre{padding:10px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article pre code{padding:.5em 24px}@media only screen and (max-width:600px){.article pre code{padding-left:16px;padding-right:16px}.article>pre{margin-left:-16px;margin-right:-16px}}.article .admonition{margin:20px -24px;padding:20px 24px;background:#42a5f5;color:#fff}@media only screen and (max-width:600px){.article .admonition{padding-left:16px;padding-right:16px;margin-left:-16px;margin-right:-16px}}.article .admonition.warning{background:#ff7043}.article .admonition .admonition-title{font-size:20px;margin-bottom:10px}.article .admonition .admonition-title i{margin-right:5px;vertical-align:top}.toc-panel{position:relative;display:none;float:right;width:320px;height:100%;padding-left:10px}.toc-panel nav{top:56px;padding-top:56px;width:320px;position:fixed}@media only screen and (min-width:601px){.toc-panel nav{top:64px;padding-top:64px}}.toc-panel nav .indicator{position:absolute;z-index:-1;display:none;top:0;left:0;width:100%;height:25px;border-left:3px solid #3f51b5;background-color:#dddfe2}.toc-panel nav .indicator.show{display:block;-webkit-transition:top .2s ease-in;transition:top .2s ease-in}.toc-panel nav>ul{margin:0;font-size:13px;padding:0 10px;padding-left:1em}.toc-panel nav>ul ul>li{line-height:25px}.toc-panel nav>ul ul>li ul{padding-left:1.5em}.toc-panel nav>ul ul>li a{color:#333;outline:none;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.toc-panel nav>ul>li:before{display:none;content:""}@media (min-width:1000px){.toc-panel{display:block}}.breadcrumbs{height:56px;line-height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media only screen and (min-width:601px){.breadcrumbs{height:64px;line-height:64px}}.breadcrumbs,.breadcrumbs .breadcrumb:before,.breadcrumbs a{color:#3f51b5}.breadcrumbs .breadcrumb:last-child,.breadcrumbs span.breadcrumb,.breadcrumbs span.breadcrumb:before{color:#737373}.breadcrumbs .breadcrumb i.material-icons{vertical-align:top;margin-right:10px;float:none;line-height:inherit}.breadcrumb-root{padding:0 24px}@media only screen and (max-width:600px){.breadcrumb-root{padding-left:16px;padding-right:16px}}.post{max-width:100%}.post-summary .article h1{font-size:25px;line-height:1.333334em}.post-summary .article h2{font-size:20px;line-height:1.4em;padding:0;margin:10px 0}.post-summary .article h3,.post-summary .article h4{font-size:15px;padding:0;margin:10px 0}.readmore{display:inline-block;margin-top:10px}.post-wrapper{margin:0 auto;position:relative}.post-wrapper .post .card{min-height:100%}.post-wrapper .post:not(.no-toc){margin-right:0}@media (min-width:1000px){.post-wrapper .post:not(.no-toc){margin-right:320px}}.post-wrapper .post .breadcrumb-root{background-color:#e8eaf6}.post-wrapper .post .breadcrumb-root .breadcrumbs{margin:0}.post-wrapper .post .card-header.postinfo{background-color:#3f51b5;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.post-wrapper .post .card-header.postinfo .card-title{color:#fff;font-size:2rem;line-height:1.2;margin:0}@media only screen and (min-width:601px){.post-wrapper .post .card-header.postinfo{min-height:150px}.post-wrapper .post .card-header.postinfo .card-title{font-size:2.5rem}}.post-wrapper .post .card-header.postinfo .card-meta{font-size:15px}.post-wrapper .post .card-header.postinfo .card-meta address a,.post-wrapper .post .card-header.postinfo .card-meta time{color:#fff}.post-wrapper .post .card-header.postinfo .card-meta address:before{display:none}.post-wrapper .post .card-header.postinfo .card-meta{margin-bottom:0}.splash{height:250px;width:100%;background-color:#607d8b;position:relative;margin-bottom:30px}@media only screen and (min-width:601px){.splash{height:344px}}.splash .splash-bg{background-repeat:no-repeat;background-size:cover;background-position:center 80%;position:absolute;top:0;left:0;opacity:.4}.splash .splash-bg,.splash .splash-bg canvas{width:100%;height:100%}.splash .splash-content{position:absolute;top:0;left:0;width:100%;height:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;color:#fff}.splash .splash-content .avatar{width:120px;height:120px;border-radius:50%}@media only screen and (min-width:601px){.splash .splash-content .avatar{width:150px;height:150px}}.splash .splash-content h3{font-size:2.2rem;margin:10px 0}@media only screen and (min-width:601px){.splash .splash-content h3{font-size:2.5rem}}.splash .splash-content .desc{margin:0}#archive .collapsible{margin:0;padding:0 24px;vertical-align:middle}@media only screen and (max-width:992px){#archive .collapsible{padding:0 16px}}#archive .collapsible .collapsible-header{color:#737373;height:50px;line-height:50px;vertical-align:middle}#archive .collapsible .collapsible-header i,#archive .collapsible .collapsible-header span{display:inline-block;vertical-align:inherit;line-height:inherit}#archive .collapsible .collapsible-header i.material-icons{margin-right:6px}#archive .collapsible li{display:block}#archive .collapsible .collapsible-body{padding:10px 0 20px 30px;position:relative}#archive .collapsible .collapsible-body:before{content:"";position:absolute;left:10px;top:0;height:100%;width:0;border-left:2px dashed silver}.no-toc{max-width:980px;margin-left:auto;margin-right:auto}.reveal{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px);-webkit-transition:opacity .5s cubic-bezier(.6,.2,.1,1),-webkit-transform .5s cubic-bezier(.6,.2,.1,1);transition:opacity .5s cubic-bezier(.6,.2,.1,1),-webkit-transform .5s cubic-bezier(.6,.2,.1,1);transition:opacity .5s cubic-bezier(.6,.2,.1,1),transform .5s cubic-bezier(.6,.2,.1,1);transition:opacity .5s cubic-bezier(.6,.2,.1,1),transform .5s cubic-bezier(.6,.2,.1,1),-webkit-transform .5s cubic-bezier(.6,.2,.1,1)}.reveal.enter{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}.waterfall{-webkit-columns:400px;-moz-columns:400px;columns:400px;-webkit-column-gap:0;-moz-column-gap:0;column-gap:0;margin:-10px}.waterfall__item{padding:10px;page-break-inside:avoid;-webkit-column-break-inside:avoid;break-inside:avoid-column}.pagination{margin:40px 0}.pagination-single{height:56px;line-height:56px;padding:0 20px;background-color:#e8eaf6}@media only screen and (min-width:601px){.pagination-single{height:64px;line-height:64px}}.pagination-single .pagination-item{width:50%;padding-right:10px;float:left;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-moz-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.pagination-single .pagination-item.next{-webkit-box-pack:end;-moz-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding-right:0;padding-left:10px;float:right;text-align:right}.pagination-single .pagination-item i{color:#607d8b;-webkit-box-flex:0;-moz-box-flex:0;-ms-flex:none;flex:none}.pagination-single .pagination-item a{-webkit-box-flex:1;-moz-box-flex:1;-ms-flex:1 2 auto;flex:1 2 auto}.btn-secondary.btn-large,.btn.btn-secondary{line-height:30px;height:30px;padding:0 1rem;-webkit-box-shadow:none;box-shadow:none;background-color:#b0bec5}.btn-secondary.btn-large:hover,.btn.btn-secondary:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,.14),0 1px 7px 0 rgba(0,0,0,.12),0 3px 1px -1px rgba(0,0,0,.2);box-shadow:0 3px 3px 0 rgba(0,0,0,.14),0 1px 7px 0 rgba(0,0,0,.12),0 3px 1px -1px rgba(0,0,0,.2);background-color:#607d8b}.collection{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;background:#fff;-webkit-columns:400px;-moz-columns:400px;columns:400px;padding:12px 24px}.collection .collection-item{display:block;-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid;padding:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;-webkit-transition:all .2s;transition:all .2s}.collection .collection-item:hover{background:#f7f7f7}
--------------------------------------------------------------------------------
/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/favicon.ico
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Bold.woff
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Bold.woff2
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Light.woff
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Light.woff2
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Medium.woff
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Medium.woff2
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Regular.woff
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Regular.woff2
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Thin.woff
--------------------------------------------------------------------------------
/static/fonts/roboto/Roboto-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/fonts/roboto/Roboto-Thin.woff2
--------------------------------------------------------------------------------
/static/img/20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/20.jpg
--------------------------------------------------------------------------------
/static/img/avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/avatar.jpg
--------------------------------------------------------------------------------
/static/img/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/avatar.png
--------------------------------------------------------------------------------
/static/img/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/bg.jpg
--------------------------------------------------------------------------------
/static/img/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/bg.png
--------------------------------------------------------------------------------
/static/img/iconseamless.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/iconseamless.png
--------------------------------------------------------------------------------
/static/img/profile-bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stkevintan/canoe/80dcb1e4b18c770aaec99e11c6dfbaf11c84af5c/static/img/profile-bg.jpg
--------------------------------------------------------------------------------
/static/js/Valine.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Valine",[],t):"object"==typeof exports?exports.Valine=t():e.Valine=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=11)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){return e&&A.test(e)?e.replace($,function(e){return O[e]}):e}function a(e){return e&&C.test(e)?e.replace(M,function(e){return w[e]}):e}var s=function(){function e(e,t){for(var n=0;n-1?o:"mm"),m.hide="hide"===o,b.url=decodeURI((e.path||location.pathname).replace(/index\.(html|htm)$/,"")),e.guest_info=(e.guest_info||x).filter(function(e){return x.indexOf(e)>-1});var a=Number(e.pageSize||10);e.pageSize=isNaN(a)?10:a<1?10:a;var s=AV;if(!s)return void setTimeout(function(){t.init(e)},20);var l=e.app_id||e.appId,c=e.app_key||e.appKey;if(!l||!c)throw 100;if(s.applicationId=null,s.init({appId:l,appKey:c}),t.v=s,s)for(var u=document.querySelectorAll(".valine-comment-count"),d=0,p=u.length;d',mail:' ',link:' '},v=e.guest_info.map(function(e){return f[e]}),g=e.placeholder||"",k='
';t.el.innerHTML=k;var w=t.el.querySelector(".vempty");t.nodata={show:function(e){return w.innerHTML=e||t.locale.tips.sofa,w.setAttribute("style","display:block;"),t},hide:function(){return w.setAttribute("style","display:none;"),t}};var O=document.createElement("li");O.setAttribute("class","vloading"),O.innerHTML='
';var S=t.el.querySelector(".vlist");t.loading={show:function(e){var n=S.querySelectorAll("li");return e?S.insertBefore(O,n[0]):S.appendChild(O),t.nodata.hide(),t},hide:function(){var e=S.querySelector(".vloading");return e&&S.removeChild(e),0===S.querySelectorAll(".vcard").length&&t.nodata.show(),t}};var $=t.el.querySelector(".vmark");t.alert={show:function(e){$.innerHTML='';var n=$.querySelector(".vbtns"),r=''+(e&&e.ctxt||t.locale.ctrl.cancel)+" ",i=''+(e&&e.otxt||t.locale.ctrl.sure)+" ";if(n.innerHTML=""+r+(e&&e.type&&i),_.on("click",$.querySelector(".vcancel"),function(e){t.alert.hide()}),$.setAttribute("style","display:block;"),e&&e.type){var o=$.querySelector(".vsure");_.on("click",o,function(n){t.alert.hide(),e.cb&&e.cb()})}return t},hide:function(){return $.setAttribute("style","display:none;"),t}},t.el&&t.bind(e)}catch(e){t.ErrorHandler(e)}return t}},{key:"Q",value:function(e){var t=this,n=new t.v.Query("Comment");return n.equalTo("url",decodeURI(e)),n.descending("createdAt"),n}},{key:"ErrorHandler",value:function(e){var t=this;t.el&&t.loading.hide().nodata.hide();var n="";if(101==e)return void t.nodata.show();n="number"==typeof e?"Code "+e+": "+(t.locale.error[e]||e):e,t.el&&t.nodata.show(''+n+" "),console}},{key:"installLocale",value:function(e,t){var n=this;return t=t||{},y[e]=JSON.stringify(Object.keys(y["zh-cn"]))==JSON.stringify(Object.keys(t))?t:void 0,n.locale=y[e]||y["zh-cn"],n}},{key:"bind",value:function(e){var t=this,n=function n(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,o=e.pageSize,a=Number(t.el.querySelector(".vnum").innerText);t.loading.show();var s=t.Q(b.url);s.limit(o),s.skip((i-1)*o),s.find().then(function(e){for(var s=e.length,l=0;l'+t.locale.ctrl.more+"":"";var u=c.querySelector(".vmore");u&&_.on("click",u,function(e){c.innerHTML="",n(++i)}),t.loading.hide()}).catch(function(e){t.loading.hide().ErrorHandler(e.code)})};t.Q(b.url).count().then(function(e){e>0?(t.el.querySelector(".vinfo").setAttribute("style","display:block;"),t.el.querySelector(".vcount").innerHTML=''+e+" "+t.locale.tips.comments,n()):t.loading.hide()}).catch(function(e){t.ErrorHandler(e.code)});for(var r=function(e,n){var r=document.createElement("li");r.setAttribute("class","vcard"),r.setAttribute("id",e.id);var o=m.hide?"":' ",a=(0,h.default)(e.get("ua")),s=''+a.browser+" "+a.version+" ",l=''+a.os+" "+a.osVersion+" ",u="",d=e.get("link")||(e.get("mail")?"mailto:"+e.get("mail"):"");u=d?''+e.get("nick")+" ":''+e.get("nick")+" ",r.innerHTML=o+''+u+" "+s+" "+l+'
'+e.get("comment")+'