50 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/category.ejs:
--------------------------------------------------------------------------------
1 |
2 | <%- partial('_partial/archive', {pagination: config.category}) %>
3 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/index.ejs:
--------------------------------------------------------------------------------
1 |
2 | <% page.comments = false; %>
3 |
89 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/layout.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 | <%- partial('_partial/head') %>
4 |
5 | <%- partial('_partial/navigation') %>
6 | <% if (is_home()) { %>
7 | <%- partial('_partial/front_matter') %>
8 |
20 | <%- partial('_partial/after_footer') %>
21 |
22 |
23 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/page.ejs:
--------------------------------------------------------------------------------
1 |
2 | <%- partial('_partial/article', {item: page, post: false}) %>
3 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/post.ejs:
--------------------------------------------------------------------------------
1 |
2 | <% page.comments = true; %>
3 |
4 | <%- partial('_partial/article', {item: page, post: true}) %>
5 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/tag.ejs:
--------------------------------------------------------------------------------
1 |
2 | <%- partial('_partial/archive', {pagination: config.tag}) %>
3 |
--------------------------------------------------------------------------------
/blog/themes/freewill/layout/tags.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 | <% if (theme.widgets.length) { %>
10 |
11 | <% } else { %>
12 |
13 | <% } %>
14 |
15 | <% if (site.tags.length){ %>
16 |
23 |
24 |
25 | <% site.tags.sort('name').each(function(item){ %>
26 |
27 |
<%= item.name %>
28 |
37 | <% }); %>
38 |
39 |
40 |
41 | <% } %>
42 |
43 |
44 |
45 | <% if (theme.widgets.length) { %>
46 | <%- partial('_partial/sidebar') %>
47 | <% } %>
48 |
49 |
50 |
--------------------------------------------------------------------------------
/blog/themes/freewill/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hexo-theme-freewill",
3 | "version": "0.1.1",
4 | "description": "Hexo Freewill Theme"
5 | }
6 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/css/darktheme.css:
--------------------------------------------------------------------------------
1 | @media (prefers-color-scheme: dark) {
2 | body {
3 | background-color: #000;
4 | color: #b4bcc2;
5 | }
6 | .downloads {
7 | background-color: #0f0f0f;
8 | }
9 | .user-quotes {
10 | background-color: #0f0f0f;
11 | }
12 | .home hr {
13 | border-color: #0f0f0f;
14 | }
15 | #sidebar {
16 | border-left: 1px solid #1f1f1f;
17 | }
18 | .widget {
19 | border-bottom: 1px solid #1f1f1f;
20 | }
21 | .has-success .form-control,
22 | .has-success .form-control:focus {
23 | background-color: #000;
24 | }
25 |
26 | table tr { border-top: 1px solid #333333; background-color: black; margin: 0; padding: 0; }
27 | table tr:nth-child(2n) { background-color: #080808; }
28 | table tr th { font-weight: bold; border: 1px solid #333333; margin: 0; padding: 6px 13px; }
29 | table tr td { border: 1px solid #333333; margin: 0; padding: 6px 13px; }
30 |
31 | code {
32 | background: #111;
33 | border: 1px solid #1a1a1a;
34 | color: #ff4f7c;
35 | text-shadow: 0 1px #000;
36 | }
37 |
38 | h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
39 | color: #767c80;
40 | }
41 |
42 | .panel {
43 | background-color: #000 !important;
44 | }
45 | .panel-default {
46 | border-color: #0e1013 !important;
47 | }
48 | .mypage > .panel-default > .panel-heading {
49 | border-bottom: 1px solid #0e1013 !important;
50 | }
51 | .mypage > .panel-default > .panel-heading:not(:first-child) {
52 | border-top: 1px solid #0e1013 !important;
53 | }
54 |
55 | textarea.form-control {
56 | color: white;
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/css/google-fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Droid Serif';
3 | font-style: normal;
4 | font-weight: 400;
5 | src: local('Droid Serif'), local('DroidSerif'), url('../fonts/google-fonts/0AKsP294HTD-nvJgucYTaIbN6UDyHWBl620a-IRfuBk.woff') format('woff');
6 | }
7 | @font-face {
8 | font-family: 'Droid Serif';
9 | font-style: italic;
10 | font-weight: 400;
11 | src: local('Droid Serif Italic'), local('DroidSerif-Italic'), url('../fonts/google-fonts/cj2hUnSRBhwmSPr9kS5899kZXW4sYc4BjuAIFc1SXII.woff') format('woff');
12 | }
13 | @font-face {
14 | font-family: 'PT Sans';
15 | font-style: normal;
16 | font-weight: 400;
17 | src: local('PT Sans'), local('PTSans-Regular'), url('../fonts/google-fonts/LKf8nhXsWg5ybwEGXk8UBQ.woff') format('woff');
18 | }
19 | @font-face {
20 | font-family: 'PT Sans';
21 | font-style: normal;
22 | font-weight: 700;
23 | src: local('PT Sans Bold'), local('PTSans-Bold'), url('../fonts/google-fonts/0XxGQsSc1g4rdRdjJKZrNBsxEYwM7FgeyaSgU71cLG0.woff') format('woff');
24 | }
25 | @font-face {
26 | font-family: 'PT Sans';
27 | font-style: italic;
28 | font-weight: 400;
29 | src: local('PT Sans Italic'), local('PTSans-Italic'), url('../fonts/google-fonts/PIPMHY90P7jtyjpXuZ2cLD8E0i7KZn-EPnyo3HZu7kw.woff') format('woff');
30 | }
31 | @font-face {
32 | font-family: 'PT Sans';
33 | font-style: italic;
34 | font-weight: 700;
35 | src: local('PT Sans Bold Italic'), local('PTSans-BoldItalic'), url('../fonts/google-fonts/lILlYDvubYemzYzN7GbLkHhCUOGz7vYGh680lGh-uXM.woff') format('woff');
36 | }
37 | @font-face {
38 | font-family: 'PT Sans Narrow';
39 | font-style: normal;
40 | font-weight: 400;
41 | src: local('PT Sans Narrow'), local('PTSans-Narrow'), url('../fonts/google-fonts/UyYrYy3ltEffJV9QueSi4RdbPw3QSf9R-kE0EsQUn2A.woff') format('woff');
42 | }
43 | @font-face {
44 | font-family: 'Roboto';
45 | font-style: normal;
46 | font-weight: 400;
47 | src: local('Roboto Regular'), local('Roboto-Regular'), url('../fonts/google-fonts/2UX7WLTfW3W8TclTUvlFyQ.woff') format('woff');
48 | }
--------------------------------------------------------------------------------
/blog/themes/freewill/source/css/highlight.css:
--------------------------------------------------------------------------------
1 | /* Code, Pre [landscape](http://goo.gl/hnwXeD) */
2 |
3 | /* highlight */
4 |
5 | pre, .highlight, .gist {
6 | background: #333;
7 | margin: 0.5em 0;
8 | padding: 1em 2%;
9 | overflow: auto;
10 | color: #ccc;
11 | font-size: 14px;
12 | text-shadow: none;
13 | -webkit-border-radius: 4px;
14 | -moz-border-radius: 4px;
15 | border-radius: 4px;
16 | border-style: solid;
17 | border-color: #ddd;
18 | border-width: 1px 0;
19 | line-height: 22.400000000000002px;
20 | }
21 |
22 | code {
23 | background: #eee;
24 | border: 1px solid #d6d6d6;
25 | padding: 0 5px;
26 | margin: 0 2px;
27 | font-size: 90%;
28 | text-shadow: 0 1px #fff;
29 | word-break: break-all;
30 | word-wrap: break-word;
31 | white-space: normal;
32 | }
33 |
34 | .highlight .gutter pre{
35 | text-align: left;
36 | padding-right: 20px;
37 | width: 100%;
38 | color: #666;
39 | }
40 |
41 | pre,
42 | code {
43 | /* font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; */
44 | }
45 |
46 | pre code {
47 | background: none;
48 | text-shadow: none;
49 | padding: 0;
50 | }
51 |
52 | .highlight pre {
53 | border: none;
54 | margin: 0;
55 | padding: 0;
56 | white-space: pre;
57 | }
58 |
59 | .highlight table {
60 | margin: 0;
61 | width: auto;
62 | }
63 |
64 | .highlight td {
65 | border: none;
66 | padding: 0;
67 | }
68 |
69 | /* gist */
70 |
71 | .container .gist .gist-file {
72 | border: none;
73 | /* font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; */
74 | margin: 0;
75 | }
76 | .container .gist .gist-file .gist-data {
77 | background: none;
78 | border: none;
79 | }
80 | .container .gist .gist-file .gist-data .line-numbers {
81 | background: none;
82 | border: none;
83 | padding-right: 20px;
84 | color: #666;
85 | text-align: left;
86 | }
87 | .container .gist .gist-file .gist-data .line-data {
88 | padding: 0 !important;
89 | }
90 | .container .gist .gist-file .highlight {
91 | margin: 0;
92 | padding: 0;
93 | border: none;
94 | }
95 | .container .gist .gist-file .gist-meta {
96 | background: #333;
97 | color: #999;
98 | font: 0.85em "Helvetica Neue", Helvetica, Arial, sans-serif;
99 | text-shadow: 0 0;
100 | padding: 0;
101 | margin-top: 1em;
102 | margin-left: 20px;
103 | }
104 | .container .gist .gist-file .gist-meta a {
105 | color: #258fb8;
106 | font-weight: normal;
107 | }
108 | .container .gist .gist-file .gist-meta a:hover {
109 | text-decoration: underline;
110 | }
111 |
112 | /* figcaption */
113 |
114 | .highlight figcaption {
115 | zoom: 1;
116 | font-size: 0.85em;
117 | color: #999;
118 | line-height: 1em;
119 | margin-bottom: 1em;
120 | }
121 | .highlight figcaption:before,
122 | .highlight figcaption:after {
123 | content: "";
124 | display: table;
125 | }
126 | .highlight figcaption:after {
127 | clear: both;
128 | }
129 | .highlight figcaption a {
130 | float: right;
131 | }
132 |
133 | pre .comment,
134 | pre .title {
135 | color: #999;
136 | }
137 | pre .variable,
138 | pre .attribute,
139 | pre .tag,
140 | pre .regexp,
141 | pre .ruby .constant,
142 | pre .xml .tag .title,
143 | pre .xml .pi,
144 | pre .xml .doctype,
145 | pre .html .doctype,
146 | pre .css .id,
147 | pre .css .class,
148 | pre .css .pseudo {
149 | color: #f2777a;
150 | }
151 | pre .number,
152 | pre .preprocessor,
153 | pre .built_in,
154 | pre .literal,
155 | pre .params,
156 | pre .constant {
157 | color: #f99157;
158 | }
159 | pre .class,
160 | pre .ruby .class .title,
161 | pre .css .rules .attribute {
162 | color: #9c9;
163 | }
164 | pre .string,
165 | pre .value,
166 | pre .inheritance,
167 | pre .header,
168 | pre .ruby .symbol,
169 | pre .xml .cdata {
170 | color: #9c9;
171 | }
172 | pre .css .hexcolor {
173 | color: #6cc;
174 | }
175 | pre .function,
176 | pre .python .decorator,
177 | pre .python .title,
178 | pre .ruby .function .title,
179 | pre .ruby .title .keyword,
180 | pre .perl .sub,
181 | pre .javascript .title,
182 | pre .coffeescript .title {
183 | color: #69c;
184 | }
185 | pre .keyword,
186 | pre .javascript .function {
187 | color: #c9c;
188 | }
189 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/css/style.old.css:
--------------------------------------------------------------------------------
1 | /* =============================================================================
2 | container
3 | ========================================================================== */
4 |
5 | .container-narrow {
6 | margin: 0 auto;
7 | max-width:970px;
8 | }
9 |
10 | .container-narrow > footer {
11 | margin-top: 20px;
12 | text-align: center;
13 | }
14 | .container-narrow > footer p {
15 | background-color: rgba(245,245,245,0.75);
16 | padding: 5px;
17 | display: inline-block;
18 | -webkit-border-radius: 6px;
19 | -moz-border-radius: 6px;
20 | border-radius: 6px;
21 | }
22 |
23 | /* =============================================================================
24 | Body and structure
25 | ========================================================================== */
26 |
27 | body {
28 | position: relative;
29 | padding-top: 40px;
30 | background-color: #fff;
31 | background-repeat: repeat-x;
32 | background-position: 0 40px;
33 | padding-bottom: 70px;
34 | }
35 |
36 | .content {
37 | padding: 20px;
38 | margin: 20px -20px; /* negative indent the amount of the padding to maintain the grid system */
39 | -webkit-border-radius: 6px 6px 6px 6px;
40 | -moz-border-radius: 6px 6px 6px 6px;
41 | border-radius: 6px 6px 6px 6px;
42 | -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.75);
43 | -moz-box-shadow: 0 2px 102px rgba(0,0,0,.75);
44 | box-shadow: 0 2px 10px rgba(0,0,0,.75);
45 | }
46 |
47 | #sidebar {
48 | margin-left: 5px;
49 | padding-left: 15px;
50 | border-left: 1px solid #e0e0e0;
51 | font-size: 0.9em;
52 | }
53 |
54 | /* =============================================================================
55 | page, post
56 | ========================================================================== */
57 |
58 | .post{
59 | font-size: 1.2em;
60 | }
61 |
62 | .page{
63 | font-size: 16px;
64 | }
65 |
66 | .page, .post{
67 | line-height: 1.5em;
68 | }
69 |
70 | .page .more {
71 | text-pull: right;
72 | }
73 |
74 | .post .date {
75 | margin-bottom:20px;
76 | font-weight:bold;
77 | }
78 |
79 | .mypage {
80 | padding-bottom: 30px;
81 | border-bottom: 1px solid #ccc;
82 | }
83 |
84 | /* =============================================================================
85 | navbar
86 | ========================================================================== */
87 |
88 | .navbar-brand {
89 | text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125);
90 | -webkit-transition: all .2s linear;
91 | -moz-transition: all .2s linear;
92 | transition: all .2s linear;
93 | }
94 |
95 | .navbar-brand:hover {
96 | text-decoration: none;
97 | text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4);
98 | }
99 |
100 |
101 | /* =============================================================================
102 | pagination
103 | ========================================================================== */
104 |
105 | .pagination {
106 | margin: 10px 0;
107 | }
108 |
109 | .pagination a{
110 | color:#555;
111 | }
112 |
113 |
114 | /* =============================================================================
115 | List
116 | ========================================================================== */
117 |
118 | li i {
119 | margin-right: 5px;
120 | margin-left: 5px;
121 | }
122 |
123 | .listing-item {
124 | line-height: 24px;
125 | }
126 |
127 | /* =============================================================================
128 | widget and tag box
129 | ========================================================================== */
130 |
131 | .meta-widget {
132 | margin: 10px 0;
133 | }
134 |
135 | .meta-widget a{
136 | color:#555;
137 | }
138 |
139 | .tag_box {
140 | margin:0;
141 | overflow:hidden;
142 | }
143 | .tag_box li {
144 | line-height:28px;
145 | }
146 | .tag_box li i {
147 | opacity:0.9;
148 | }
149 | .tag_box.inline li {
150 | float:left;
151 | }
152 | .tag_box a {
153 | padding: 2px 6px;
154 | margin: 2px;
155 | background: #e5e5e5;
156 | color:#555;
157 | border-radius: 3px;
158 | text-decoration:none;
159 | border:1px dashed #bbb;
160 | }
161 | .tag_box a span{
162 | vertical-align:super;
163 | font-size:0.8em;
164 | }
165 | .tag_box a:hover {
166 | background-color:#397bdd;
167 | color:#FFF;
168 | }
169 | .tag_box a.active {
170 | background:#57A957;
171 | border:1px solid #4C964D;
172 | color:#FFF;
173 | }
174 |
175 | .widget {
176 | padding-bottom: 25px;
177 | border-bottom: 1px solid #e0e0e0;
178 | }
179 |
180 | .tagcloud .entry{
181 | width: 100%;
182 | }
183 |
184 | .archive-title:before {
185 | font-family: FontAwesome;
186 | content: '\f187 ';
187 | }
188 |
189 | .archive-title-tag:before {
190 | font-family: FontAwesome;
191 | content: '\f02c ';
192 | }
193 |
194 | .archive-title-category:before {
195 | font-family: FontAwesome;
196 | content: '\f07b ';
197 | }
198 |
199 | /* =============================================================================
200 | hyper links
201 | ========================================================================== */
202 |
203 | a{color:#1863a1}
204 | a:focus{color:#0181eb}
205 | a:hover{color:#0181eb}
206 | a:active{color:#01579f}
207 |
208 | a.label-anchor {
209 | position: relative;
210 | display: block;
211 | text-align: right;
212 | width: 200px;
213 | left: -210px;
214 | font-family: 'PT Sans', sans-serif;
215 | }
216 | a.label-anchor:target span {
217 | background-color: #b94a48;
218 | }
219 | a.label-anchor:hover {
220 | text-decoration: none;
221 | }
222 | a.label-anchor span {
223 | font-weight: bold;
224 | line-height: 0px;
225 | color: #ffffff;
226 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
227 | white-space: nowrap;
228 | background-color: #666;
229 | padding: 1px 4px 2px;
230 | -webkit-border-radius: 3px;
231 | -moz-border-radius: 3px;
232 | border-radius: 3px;
233 | }
234 |
235 | a.inline-ref {
236 | border-bottom: dotted 1px #333;
237 | color: black;
238 | }
239 | a.inline-ref:hover {
240 | text-decoration: none;
241 | border-bottom: solid 1px #000;
242 | }
243 |
244 | /* =============================================================================
245 | blockquote
246 | ========================================================================== */
247 |
248 | blockquote {
249 | border-left:5px solid #cccccc;
250 | font-size: 1em;
251 | background-color: #fff;
252 | }
253 |
254 | blockquote p, blockquote ol, blockquote ul, blockquote li, .slogan{
255 | font-family: 'Open Sans',"Helvetica Neue", Helvetica, "Segoe UI", Ubuntu, "Hiragino Sans GB", '楷体', 'STKaiti';
256 | }
257 |
258 | /* =============================================================================
259 | img
260 | ========================================================================== */
261 |
262 | img {
263 | max-width: 97.5%;
264 | margin: 15px auto;
265 | display: block;
266 | width: auto;
267 | height: auto;
268 | }
269 |
270 | /* =============================================================================
271 | slogan
272 | ========================================================================== */
273 |
274 | .slogan .icon-heart{
275 | opacity: 0.5;
276 | margin-right: 5px;
277 | margin-top: 3px;
278 | }
279 |
280 | .slogan .icon-heart:hover{
281 | opacity: 1;
282 | }
283 |
284 | .slogan{
285 | font-size: 1.2em;
286 | color: #888;
287 | display:block;
288 | margin-bottom: 1em;
289 | }
290 |
291 | /* =============================================================================
292 | scroll to top
293 | ========================================================================== */
294 |
295 | #gotop{
296 | display:block;
297 | width:36px;
298 | height:36px;
299 | position:fixed;
300 | bottom:40px;
301 | right:30px;
302 | border-radius:7px;
303 | text-decoration:none;
304 | display:none;
305 | background-color:#999999;
306 | }
307 | #gotop span{
308 | display:block;
309 | color:#dddddd;
310 | }
311 | #gotop span:hover{
312 | color:#cccccc;
313 | }
314 | #gotop span{
315 | font-size:24px;
316 | text-align:center;
317 | }
318 |
319 | /* =============================================================================
320 | Headers
321 | ========================================================================== */
322 |
323 | header h1{
324 | font-weight:normal;
325 | line-height:1.2em;
326 | margin-bottom:0.6667em;
327 | }
328 |
329 | h1{
330 | font-size:2.6em;
331 | line-height:1.2em;
332 | margin-bottom:0.6667em;
333 | }
334 |
335 | h1,h2,h3,h4,h5,h6{
336 | text-rendering:optimizelegibility;
337 | font-weight:bold;
338 | /* font-family: 'Open Sans', "Helvetica Neue", "Helvetica","Microsoft YaHei", "WenQuanYi Micro Hei",Arial, sans-serif;
339 | }
340 |
341 | h2{
342 | margin: 0.83em 0;
343 | color: green;
344 | padding-top: 40px;
345 | margin-top: -25px;
346 | }
347 |
348 | h3 {
349 | color: #9C4C17;
350 | }
351 |
352 | h4 {
353 | color: #B94A48;
354 | }
355 |
356 | .page-header {
357 | -webkit-background-clip: border-box;
358 | -webkit-background-origin: padding-box;
359 | -webkit-background-size: cover;
360 | /* background-color: #f5f5f5; */
361 | padding: 10px 20px 0px 20px;
362 | margin: -20px -20px 20px;
363 | /* background: #333;
364 | background: -moz-linear-gradient(top, #222, #000 50%);
365 | background: -webkit-gradient(linear, 0 0, 0 50%, from(#222), to(#000));
366 | color: #e9e9e9; */
367 | border-bottom-left-radius: 0px;
368 | border-bottom-right-radius: 0px;
369 | border-top-left-radius: 6px;
370 | border-top-right-radius: 6px;
371 | }
372 |
373 | /* =============================================================================
374 | entry
375 | ========================================================================== */
376 |
377 | .page .entry{
378 | padding-top: 10px 0;
379 | }
380 |
381 | .page .entry h2{
382 | display:block; overflow: hidden; width: 0; height: 0;
383 | margin: -20px 0;
384 | }
385 |
386 | .page .entry h3{
387 | display:block; overflow: hidden; width: 0; height: 0;
388 | }
389 |
390 | .page .entry .col-md-8{
391 | margin: 10px 0;
392 | }
393 |
394 | .page h3.title {
395 | position:relative;
396 | padding: 2px 5px 5px 5px;
397 | border-top:3px solid #ccc;
398 | font-size: 1.9em;
399 | font-weight: normal;
400 | /* font-family: 'PT Sans Narrow', '雅黑', '文泉驿微米黑', '黑体', sans-serif; */
401 | background-color: #e5e5e5;
402 | }
403 |
404 | .page h3.title a {
405 | color: black;
406 | }
407 |
408 | .page h3.title span.date {
409 | position:absolute;
410 | right:5px;
411 | /* font-size:0.7em; */
412 | color: #777;
413 | }
414 |
415 |
416 | /* =============================================================================
417 | Archives list
418 | ========================================================================== */
419 |
420 | .archive-ul > .caret {
421 | vertical-align: 7px;
422 | margin-left: 5px;
423 | opacity: 0.3;
424 | }
425 |
426 | .archive-ul:hover > .caret {
427 | opacity: 1;
428 | }
429 |
430 | /* =============================================================================
431 | ToC
432 | ========================================================================== */
433 |
434 | .toc{
435 | font-size:10pt;
436 | width:auto;
437 | padding:10px;
438 | background: #eee;
439 | border:solid 1px #ccc;
440 | }
441 |
442 | .toc .toc-title{
443 | font-weight:bold;
444 | font-size:125%
445 | }
446 |
447 | .toc-article{
448 | list-style:circle;
449 | line-height: 1em;
450 | margin-bottom: 0px;
451 | padding: 10px 20px;
452 | }
453 |
454 | .toc-article li{
455 | margin-left:5px !important;
456 | padding:0 !important
457 | }
458 |
459 | .toc-article ol{
460 | list-style:square;
461 | padding: 5px 20px;
462 | }
463 |
464 | .toc-article ol ol{
465 | list-style:circle;
466 | padding: 5px 20px;
467 | }
468 |
469 | /* =============================================================================
470 | Tables
471 | ========================================================================== */
472 |
473 | table {
474 | border-collapse: separate;
475 | border-spacing: 0;
476 | vertical-align: middle;
477 | }
478 |
479 | th {
480 | padding: 12px 10px 12px 10px;
481 | border-bottom: 1px dashed #4088b8;
482 | }
483 |
484 | td {
485 | padding: 7px 10px 7px 10px;
486 | text-align: left;
487 | font-weight: normal;
488 | vertical-align: middle;
489 | }
490 |
491 | /**
492 | *
493 | * For modern browsers
494 | * 1. The space content is one way to avoid an Opera bug when the
495 | * contenteditable attribute is included anywhere else in the document.
496 | * Otherwise it causes space to appear at the top and bottom of elements
497 | * that are clearfixed.
498 | * 2. The use of `table` rather than `block` is only necessary if using
499 | * `:before` to contain the top-margins of child elements.
500 | */
501 | .cf:before,
502 | .cf:after {
503 | content: ""; /* 1 */
504 | display: table; /* 2 */
505 | }
506 |
507 | .cf:after {
508 | clear: both;
509 | }
510 |
511 | /**
512 | * For IE 6/7 only
513 | * Include this rule to trigger hasLayout and contain floats.
514 | */
515 | .cf {
516 | *zoom: 1;
517 | }
518 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/blank.gif
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/fancybox_loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/fancybox_loading.gif
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/fancybox_loading@2x.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/fancybox_loading@2x.gif
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/fancybox_overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/fancybox_overlay.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/fancybox_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/fancybox_sprite.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/fancybox_sprite@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fancybox/fancybox_sprite@2x.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fancybox/jquery.fancybox.css:
--------------------------------------------------------------------------------
1 | /*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
2 | .fancybox-wrap,
3 | .fancybox-skin,
4 | .fancybox-outer,
5 | .fancybox-inner,
6 | .fancybox-image,
7 | .fancybox-wrap iframe,
8 | .fancybox-wrap object,
9 | .fancybox-nav,
10 | .fancybox-nav span,
11 | .fancybox-tmp
12 | {
13 | padding: 0;
14 | margin: 0;
15 | border: 0;
16 | outline: none;
17 | vertical-align: top;
18 | }
19 |
20 | .fancybox-wrap {
21 | position: absolute;
22 | top: 0;
23 | left: 0;
24 | z-index: 8020;
25 | }
26 |
27 | .fancybox-skin {
28 | position: relative;
29 | background: #f9f9f9;
30 | color: #444;
31 | text-shadow: none;
32 | -webkit-border-radius: 4px;
33 | -moz-border-radius: 4px;
34 | border-radius: 4px;
35 | }
36 |
37 | .fancybox-opened {
38 | z-index: 8030;
39 | }
40 |
41 | .fancybox-opened .fancybox-skin {
42 | -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
43 | -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
44 | box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
45 | }
46 |
47 | .fancybox-outer, .fancybox-inner {
48 | position: relative;
49 | }
50 |
51 | .fancybox-inner {
52 | overflow: hidden;
53 | }
54 |
55 | .fancybox-type-iframe .fancybox-inner {
56 | -webkit-overflow-scrolling: touch;
57 | }
58 |
59 | .fancybox-error {
60 | color: #444;
61 | font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
62 | margin: 0;
63 | padding: 15px;
64 | white-space: nowrap;
65 | }
66 |
67 | .fancybox-image, .fancybox-iframe {
68 | display: block;
69 | width: 100%;
70 | height: 100%;
71 | }
72 |
73 | .fancybox-image {
74 | max-width: 100%;
75 | max-height: 100%;
76 | }
77 |
78 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
79 | background-image: url('fancybox_sprite.png');
80 | }
81 |
82 | #fancybox-loading {
83 | position: fixed;
84 | top: 50%;
85 | left: 50%;
86 | margin-top: -22px;
87 | margin-left: -22px;
88 | background-position: 0 -108px;
89 | opacity: 0.8;
90 | cursor: pointer;
91 | z-index: 8060;
92 | }
93 |
94 | #fancybox-loading div {
95 | width: 44px;
96 | height: 44px;
97 | background: url('fancybox_loading.gif') center center no-repeat;
98 | }
99 |
100 | .fancybox-close {
101 | position: absolute;
102 | top: -18px;
103 | right: -18px;
104 | width: 36px;
105 | height: 36px;
106 | cursor: pointer;
107 | z-index: 8040;
108 | }
109 |
110 | .fancybox-nav {
111 | position: absolute;
112 | top: 0;
113 | width: 40%;
114 | height: 100%;
115 | cursor: pointer;
116 | text-decoration: none;
117 | background: transparent url('blank.gif'); /* helps IE */
118 | -webkit-tap-highlight-color: rgba(0,0,0,0);
119 | z-index: 8040;
120 | }
121 |
122 | .fancybox-prev {
123 | left: 0;
124 | }
125 |
126 | .fancybox-next {
127 | right: 0;
128 | }
129 |
130 | .fancybox-nav span {
131 | position: absolute;
132 | top: 50%;
133 | width: 36px;
134 | height: 34px;
135 | margin-top: -18px;
136 | cursor: pointer;
137 | z-index: 8040;
138 | visibility: hidden;
139 | }
140 |
141 | .fancybox-prev span {
142 | left: 10px;
143 | background-position: 0 -36px;
144 | }
145 |
146 | .fancybox-next span {
147 | right: 10px;
148 | background-position: 0 -72px;
149 | }
150 |
151 | .fancybox-nav:hover span {
152 | visibility: visible;
153 | }
154 |
155 | .fancybox-tmp {
156 | position: absolute;
157 | top: -99999px;
158 | left: -99999px;
159 | visibility: hidden;
160 | max-width: 99999px;
161 | max-height: 99999px;
162 | overflow: visible !important;
163 | }
164 |
165 | /* Overlay helper */
166 |
167 | .fancybox-lock {
168 | overflow: hidden !important;
169 | width: auto;
170 | }
171 |
172 | .fancybox-lock body {
173 | overflow: hidden !important;
174 | }
175 |
176 | .fancybox-lock-test {
177 | overflow-y: hidden !important;
178 | }
179 |
180 | .fancybox-overlay {
181 | position: absolute;
182 | top: 0;
183 | left: 0;
184 | overflow: hidden;
185 | display: none;
186 | z-index: 8010;
187 | background: url('fancybox_overlay.png');
188 | }
189 |
190 | .fancybox-overlay-fixed {
191 | position: fixed;
192 | bottom: 0;
193 | right: 0;
194 | }
195 |
196 | .fancybox-lock .fancybox-overlay {
197 | overflow: auto;
198 | overflow-y: scroll;
199 | }
200 |
201 | /* Title helper */
202 |
203 | .fancybox-title {
204 | visibility: hidden;
205 | font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
206 | position: relative;
207 | text-shadow: none;
208 | z-index: 8050;
209 | }
210 |
211 | .fancybox-opened .fancybox-title {
212 | visibility: visible;
213 | }
214 |
215 | .fancybox-title-float-wrap {
216 | position: absolute;
217 | bottom: 0;
218 | right: 50%;
219 | margin-bottom: -35px;
220 | z-index: 8050;
221 | text-align: center;
222 | }
223 |
224 | .fancybox-title-float-wrap .child {
225 | display: inline-block;
226 | margin-right: -100%;
227 | padding: 2px 20px;
228 | background: transparent; /* Fallback for web browsers that doesn't support RGBa */
229 | background: rgba(0, 0, 0, 0.8);
230 | -webkit-border-radius: 15px;
231 | -moz-border-radius: 15px;
232 | border-radius: 15px;
233 | text-shadow: 0 1px 2px #222;
234 | color: #FFF;
235 | font-weight: bold;
236 | line-height: 24px;
237 | white-space: nowrap;
238 | }
239 |
240 | .fancybox-title-outside-wrap {
241 | position: relative;
242 | margin-top: 10px;
243 | color: #fff;
244 | }
245 |
246 | .fancybox-title-inside-wrap {
247 | padding-top: 10px;
248 | }
249 |
250 | .fancybox-title-over-wrap {
251 | position: absolute;
252 | bottom: 0;
253 | left: 0;
254 | color: #fff;
255 | padding: 10px;
256 | background: #000;
257 | background: rgba(0, 0, 0, .8);
258 | }
259 |
260 | /*Retina graphics!*/
261 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5),
262 | only screen and (min--moz-device-pixel-ratio: 1.5),
263 | only screen and (min-device-pixel-ratio: 1.5){
264 |
265 | #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
266 | background-image: url('fancybox_sprite@2x.png');
267 | background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
268 | }
269 |
270 | #fancybox-loading div {
271 | background-image: url('fancybox_loading@2x.gif');
272 | background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
273 | }
274 | }
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/blog/themes/freewill/source/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/bootstrap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/bootstrap.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/cerulean.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/cerulean.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/flatly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/flatly.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/journal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/journal.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/lumen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/lumen.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/readable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/readable.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/simplex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/simplex.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/spacelab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/spacelab.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/united.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/united.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/example/yeti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/example/yeti.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/github-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/github-sprite.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/blog/themes/freewill/source/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/gallery.js:
--------------------------------------------------------------------------------
1 | (function($){
2 | // Caption
3 | $('.content:not(.nofancybox)').each(function(i){
4 | $(this).find('img').each(function(){
5 | if (!$(this).hasClass('nofancybox')){
6 | var alt = this.alt;
7 | if (alt){
8 | $(this).wrap('
');
9 | } else {
10 | $(this).wrap('
');
11 | }
12 | }
13 | });
14 | });
15 |
16 | // Gallery
17 | var play = function(parent, item, callback){
18 | var width = parent.width();
19 |
20 | item.imagesLoaded(function(){
21 | var _this = this[0],
22 | nWidth = _this.naturalWidth,
23 | nHeight = _this.naturalHeight;
24 |
25 | callback();
26 | this.animate({opacity: 1}, 500);
27 | parent.animate({height: width * nHeight / nWidth}, 500);
28 | });
29 | };
30 |
31 | $('.gallery').each(function(){
32 | var $this = $(this),
33 | current = 0,
34 | photoset = $this.children('.photoset').children(),
35 | all = photoset.length,
36 | loading = true;
37 |
38 | play($this, photoset.eq(0), function(){
39 | loading = false;
40 | });
41 |
42 | $this.on('click', '.prev', function(){
43 | if (!loading){
44 | var next = (current - 1) % all;
45 | loading = true;
46 |
47 | play($this, photoset.eq(next), function(){
48 | photoset.eq(current).animate({opacity: 0}, 500);
49 | loading = false;
50 | current = next;
51 | });
52 | }
53 | }).on('click', '.next', function(){
54 | if (!loading){
55 | var next = (current + 1) % all;
56 | loading = true;
57 |
58 | play($this, photoset.eq(next), function(){
59 | photoset.eq(current).animate({opacity: 0}, 500);
60 | loading = false;
61 | current = next;
62 | });
63 | }
64 | });
65 | });
66 | })(jQuery);
67 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/jquery.cookie.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Cookie Plugin v1.4.1
3 | * https://github.com/carhartl/jquery-cookie
4 | *
5 | * Copyright 2006, 2014 Klaus Hartl
6 | * Released under the MIT license
7 | */
8 | (function (factory) {
9 | if (typeof define === 'function' && define.amd) {
10 | // AMD (Register as an anonymous module)
11 | define(['jquery'], factory);
12 | } else if (typeof exports === 'object') {
13 | // Node/CommonJS
14 | module.exports = factory(require('jquery'));
15 | } else {
16 | // Browser globals
17 | factory(jQuery);
18 | }
19 | }(function ($) {
20 |
21 | var pluses = /\+/g;
22 |
23 | function encode(s) {
24 | return config.raw ? s : encodeURIComponent(s);
25 | }
26 |
27 | function decode(s) {
28 | return config.raw ? s : decodeURIComponent(s);
29 | }
30 |
31 | function stringifyCookieValue(value) {
32 | return encode(config.json ? JSON.stringify(value) : String(value));
33 | }
34 |
35 | function parseCookieValue(s) {
36 | if (s.indexOf('"') === 0) {
37 | // This is a quoted cookie as according to RFC2068, unescape...
38 | s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
39 | }
40 |
41 | try {
42 | // Replace server-side written pluses with spaces.
43 | // If we can't decode the cookie, ignore it, it's unusable.
44 | // If we can't parse the cookie, ignore it, it's unusable.
45 | s = decodeURIComponent(s.replace(pluses, ' '));
46 | return config.json ? JSON.parse(s) : s;
47 | } catch(e) {}
48 | }
49 |
50 | function read(s, converter) {
51 | var value = config.raw ? s : parseCookieValue(s);
52 | return $.isFunction(converter) ? converter(value) : value;
53 | }
54 |
55 | var config = $.cookie = function (key, value, options) {
56 |
57 | // Write
58 |
59 | if (arguments.length > 1 && !$.isFunction(value)) {
60 | options = $.extend({}, config.defaults, options);
61 |
62 | if (typeof options.expires === 'number') {
63 | var days = options.expires, t = options.expires = new Date();
64 | t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
65 | }
66 |
67 | return (document.cookie = [
68 | encode(key), '=', stringifyCookieValue(value),
69 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
70 | options.path ? '; path=' + options.path : '',
71 | options.domain ? '; domain=' + options.domain : '',
72 | options.secure ? '; secure' : ''
73 | ].join(''));
74 | }
75 |
76 | // Read
77 |
78 | var result = key ? undefined : {},
79 | // To prevent the for loop in the first place assign an empty array
80 | // in case there are no cookies at all. Also prevents odd result when
81 | // calling $.cookie().
82 | cookies = document.cookie ? document.cookie.split('; ') : [],
83 | i = 0,
84 | l = cookies.length;
85 |
86 | for (; i < l; i++) {
87 | var parts = cookies[i].split('='),
88 | name = decode(parts.shift()),
89 | cookie = parts.join('=');
90 |
91 | if (key === name) {
92 | // If second argument (value) is a function it's a converter...
93 | result = read(cookie, value);
94 | break;
95 | }
96 |
97 | // Prevent storing a cookie that we couldn't decode.
98 | if (!key && (cookie = read(cookie)) !== undefined) {
99 | result[name] = cookie;
100 | }
101 | }
102 |
103 | return result;
104 | };
105 |
106 | config.defaults = {};
107 |
108 | $.removeCookie = function (key, options) {
109 | // Must not alter options, thus extending a fresh object...
110 | $.cookie(key, '', $.extend({}, options, { expires: -1 }));
111 | return !$.cookie(key);
112 | };
113 |
114 | }));
115 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/jquery.imagesloaded.min.js:
--------------------------------------------------------------------------------
1 | (function(d,b){var a="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";d.fn.imagesLoaded=function(t){function l(){var e=d(q),f=d(r);v&&(r.length?v.reject(u,e,f):v.resolve(u));d.isFunction(t)&&t.call(s,u,e,f)}function p(e,f){e.src===a||-1!==d.inArray(e,n)||(n.push(e),f?r.push(e):q.push(e),d.data(e,"imagesLoaded",{isBroken:f,src:e.src}),c&&v.notifyWith(d(e),[f,u,d(q),d(r)]),u.length===n.length&&(setTimeout(l),u.unbind(".imagesLoaded")))}var s=this,v=d.isFunction(d.Deferred)?d.Deferred():0,c=d.isFunction(v.notify),u=s.find("img").add(s.filter("img")),n=[],q=[],r=[];d.isPlainObject(t)&&d.each(t,function(e,f){if("callback"===e){t=f}else{if(v){v[e](f)}}});u.length?u.bind("load.imagesLoaded error.imagesLoaded",function(e){p(e.target,"error"===e.type)}).each(function(f,g){var i=g.src,h=d.data(g,"imagesLoaded");if(h&&h.src===i){p(g,h.isBroken)}else{if(g.complete&&g.naturalWidth!==b){p(g,0===g.naturalWidth||0===g.naturalHeight)}else{if(g.readyState||g.complete){g.src=a,g.src=i}}}}):l();return v?v.promise(s):s}})(jQuery);
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/jquery.t2s.js:
--------------------------------------------------------------------------------
1 | /**
2 | * jquery.t2s.js
3 | *
4 | * A Traditional Chinese to Simplified Chinese conversion library based on jquery-s2t and OpenCC data.
5 | * Copyright Rime Developers
6 | * ---
7 | * jquery-s2t v0.1.0
8 | *
9 | * https://github.com/hustlzp/jquery-s2t
10 | * A jQuery plugin to convert between Simplified Chinese and Traditional Chinese.
11 | * Tested in IE6+, Chrome, Firefox.
12 | *
13 | * Copyright 2013-2014 hustlzp
14 | * Released under the MIT license
15 | */
16 |
17 | (function($) {
18 |
19 | /**
20 | * 简体字
21 | * @const
22 | */
23 | var S = '㑔㑇㐹刾㗷㘎㚯㛣㟆㤘㨫㧐擜䀥䌶䌺䌻䌿䌾䍠䎬䙌䜧䞍䦂䥾䦶䦷䯅鲃䲣䲝鳚鳤鹮丢并乱亘亚伫布占并来仑侣局俣系伣侠伡私伥俩俫仓个们幸伦㑈伟㐽侧侦伪㐷杰伧伞备家佣偬传伛债伤倾偻仅佥侨仆伪侥偾雇价仪俊侬亿侩俭傤傧俦侪尽偿优储俪㑩傩傥俨凶兑儿兖内两册胄幂净冻凛凯别删刭则克刹刬刚剥剐剀创铲划剧刘刽刿剑㓥剂㔉劲动务勋胜劳势勚劢勋励劝匀匦汇匮区协恤却即厍厕历厌厉厣参叁丛咤吴呐吕呙员呗吣念问启哑启唡㖞唤丧吃乔单哟呛啬唝吗呜唢哔叹喽啯呕啧尝唛哗唠啸叽哓呒啴恶嘘㖊咝哒哝哕嗳哙喷吨当咛吓哜尝噜啮咽呖咙向亸喾严嘤啭嗫嚣冁呓啰苏嘱囱囵国围园圆图团埯垭采执坚垩垴埚尧报场块茔垲埘涂冢坞埙尘堑垫坠堕坛坟垯墙垦坛垱埙压垒圹垆坛坏垄垅坜坝塆壮壶壸寿够梦伙夹奂奥奁夺奖奋姹妆姗奸娱娄妇娅娲妫㛀媪妈袅妪妩娴娴婳妫媭娆婵娇嫱嫒嬷嫔婴婶娘㛤娈孙学孪宫采寝实宁审写宽宠宝将专寻对导尴届尸屃屉屡层屦属冈峰岘岛峡崃昆岗仑峥岽岚岁㟥嵝崭岖嵚崂峤峣峄峃崄岙嵘岭屿岳岿峦巅岩巯卺帅师帐带帧帏㡎帼帻帜币帮帱干几库厕厢厩厦庼荫厨厮庙厂庑废广廪庐厅弑吊弪张强别弹弥弯录汇彝彟彦雕彨佛后径从徕复彻恒耻悦悮怅闷凄恶恼恽恻爱惬悫怆恺忾栗态愠惨惭恸惯悫怄怂虑悭庆㥪戚欲忧惫怜凭愦慭惮愤悯怃宪忆恳应怿懔蒙怼懑㤽恹惩懒怀悬忏惧慑恋戆戋戗戬战戯戏户抛捝挲挟舍扪挨卷扫抡㧏挜挣挂采拣扬换挥搄损摇捣揾抢掴掼搂挚抠抟折掺捞挦撑挠㧑挢掸拨抚扑揿挞挝捡拥掳择击挡㧟担据挤抬捣拟摈拧搁掷扩撷摆擞撸㧰扰摅撵拢拦撄搀撺携摄攒挛摊搅揽教敚败叙敌数敛毙敩斓斩断于旗既升时晋昼晕晖旸畅暂晔历昙晓向暧旷昽晒书会胧术东锨拐栅拐查杆栀枧条枭棁弃棋枨枣栋㭎栈栖梾桠㭏杨枫桢业极矩干杩荣榅桤构枪杠梿椠椁椮桨椢椝桩乐枞梁楼标枢㭤样榝㭴桪朴树桦椫桡桥机椭横檩柽档桧槚检樯梼台槟柠槛柜橹榈栉椟橼栎橱槠栌枥橥榇蘖栊榉棂樱栏榉权椤栾榄棂钦叹欧欤欢岁历归殁残殒殇㱮殚僵殓殡㱩歼杀壳壳毁殴毵牦毡氇气氢氩氲泛泛污决没冲况溯泄汹浃泾涚凉凄泪渌净凌沦渊涞浅涣减沨涡测浑凑浈涌汤沩准沟温浉涢湿沧灭涤荥汇沪滞渗卤浒浐滚满渔溇沤汉涟渍涨溆渐浆颍泼洁沩㴋潜润浔溃滗涠涩浇涝沄涧渑泽滪泶浍淀㳠浊浓㳡湿泞溁蒙浕济涛㳔滥潍滨溅泺滤澛滢渎㲿泻沈浏濒泸沥潇潆潴泷濑弥潋澜沣滠洒漓滩灏㳕湾滦滟滟灾为乌烃无炼炜烟茕焕烦炀㶽煴荧炝热颎炽烨灯炖烧烫焖营灿毁烛烩㶶熏烬焘烁炉烂争为爷尔床墙牍牵荦牦犊牺状狭狈狰犹狲犸呆狱狮奖独狯猃狝狞㺍获猎犷兽獭献猕猡现雕珐珲玮玚琐瑶莹玛玱琏琎玑瑷珰㻅环玙瑸玺琼珑璎瓒瓯瓮产产苏宁亩毕画异画当畴叠痉酸疴痖疯疡痪瘗疮疟瘆疭瘘瘘疗痨痫瘅愈疠瘪痴痒疖症疬癞癣瘿瘾痈瘫癫发皂皑疱皲皱杯盗盏尽监盘卢荡真眦众困睁睐睾眍䁖瞒瞆睑蒙眬瞩矫朱硁硖砗砚埼硕砀砜确码䂵硙砖硵碜碛矶硗䃅硚硷础碍矿砺砾矾砻秘禄祸祯祎祃御禅礼祢祷秃籼税秆䅉棱禀种称谷䅟稣积颖秾穑秽稳获穞窝洼穷窑窎窭窥窜窍窦灶窃竖竞笔笋笕䇲个笺筝节范筑箧筼筿笃筛筚箦篓蓑箪简篑箫筜签帘篮筹䉤箓篯箨籁笼签笾簖篱箩吁粤粽糁粪粮团粝籴粜纟纠纪纣约红纡纥纨纫纹纳纽纾纯纰纼纱纮纸级纷纭纴纺䌷扎细绂绁绅纻绍绀绋绐绌终弦组䌹绊绗结绝绦绔绞络绚给绒绖统丝绛绝绢绑绡绠绨绣绤绥䌼捆经综缍绿绸绻线绶维绹绾纲网绷缀彩纶绺绮绽绰绫绵绲缁紧绯绿绪绬绱缃缄缂线缉缎缔缗缘缌编缓缅纬缑缈练缏缇致缊萦缙缢缒绉缣缊缞缚缜缟缛县绦缝缡缩纵缧䌸纤缦絷缕缥总绩绷缫缪穗缯织缮缭绕绣缋绳绘系茧缰缳缲缴䍁绎继缤缱䍀颣缬纩续累缠缨才纤缵缆钵䓨坛罂坛罚骂罢罗罴羁芈群羟羡义膻习翚翘翙耧耢圣闻联聪声耸聩聂职聍听聋肃胁脉胫唇修脱胀肾胨脶脑肿脚肠腽腘肤䏝胶腻胆脍脓脸脐膑腊胪脏脔臜卧临台与兴举旧馆舱舣舰舻艰艳刍苎兹荆庄茎荚苋芲华庵烟苌莱万荝莴叶荭荮苇药荤搜莼莳蒀莅苍荪席盖莲苁莼荜卜参蒌蒋葱茑荫荨蒇荞荬芸莸荛蒉荡芜萧蓣蕰荟蓟芗姜蔷荙莶荐萨䓕苧䓓苔荠蓝荩艺药薮䓖蕴苈蔼蔺萚蕲芦苏蕴苹藓蔹茏兰蓠萝蔂处虚虏号亏虬蛱蜕蚬蚀猬虾虱蜗蛳蚂萤䗖蝼螀蛰蝈螨虮蝉蛲虫蛏蚁蚃蝇虿蝎蛴蝾蚝蜡蛎蟏蛊蚕蛮众蔑术同胡卫冲衮袅里补装里制复裈袆裤裢褛亵幞裥裥袯袄裣裆褴袜摆衬袭襕核见觃规觅视觇觋觍觎亲觊觏觐觑觉览觌观觞觯触讠订讣计讯讧讨讦讱训讪讫托记讹讶讼䜣诀讷讻访设许诉诃诊注证诂诋讵诈诒诏评诐诇诎诅词咏诩询诣试诗诧诟诡诠诘话该详诜诙诖诔诛诓夸志认诳诶诞诱诮语诚诫诬误诰诵诲说说谁课谇诽谊訚调谄谆谈诿请诤诹诼谅论谂谀谍谞谝谥诨谔谛谐谏谕咨讳谙谌讽诸谚谖诺谋谒谓誊诌谎谜谧谑谡谤谦谥讲谢谣谣谟谪谬谫讴谨谩哗䜧证谲讥谮识谯谭谱噪谵毁译议谴护诪誉谫读谉变詟䜩雠谗让谰谶赞谠谳岂竖丰艳猪豮猫䝙贝贞贠负财贡贫货贩贪贯责贮贳赀贰贵贬买贷贶费贴贻贸贺贲赂赁贿赅资贾贼赈赊宾赇赒赉赐赏赔赓贤卖贱赋赕质赍账赌䞐赖赗赚赙购赛赜贽赘赟赠赞赝赡赢赆赃赑赎赝赣赃赪赶赵趋趱迹践逾踊跄跸迹蹒踪跷跶趸踌跻跃䟢踯跞踬蹰跹蹑蹿躜躏躯车轧轨军轪轩轫轭软轷轸轱轴轵轺轲轶轼较辂辁辀载轾辄挽辅轻辆辎辉辋辍辊辇辈轮辌辑辏输辐辒辗舆辒毂辖辕辘转辙轿辚轰辔轹轳办辞辫辩农回迳这连周进游运过达违遥逊递远溯适迟迁选遗辽迈还迩边逻逦郏邮郓乡邹邬郧邓郑邻郸邺郐邝酂郦腌酝丑酝蒏糖医酱酦酿衅酾酽释厘钅钆钇钌钊钉钋针钓钐扣钏钒钗钍钕钎䥺钯钫钘钭钥钚钠钝钩钤钣钑钞钮钧钟钙钬钛钪铌铈钶铃钴钹铍钰钸铀钿钾巨钻铊铉铇铋铂钷钳铆铅钺钵钩钲钼钽锫铏铰铒铬铪银铳铜铚铣铨铢铭铫铦衔铑铷铱铟铵铥铕铯铐铞锐销锈锑锉铝镅锒锌钡铤铗锋铻锊锓铘锄锃锔锇铓铺锐铖锆锂铽锍锯钢锞录锖锫锩铔锥锕锟锤锱铮锛锬锭锜钱锦锚锠锡锢错录锰表铼镎锝锨锪钫钔锴锳炼锅镀锷铡钖锻锽锸锲锘锹锾键锶锗针钟镁锿镅镑镰镕锁镉锤镈镃钨蓥镏铠铩锼镐镇镇镒镋镍镓镌镎镞镟链镆镙镠镝铿锵戚镗镘镛铲镜镖镂錾镚铧镤镪䥽锈铙铴镣铹镦镡锏钟镫镢镨䦅锎锏镄镌镰䦃镯镭铁镮铎铛镱锿铸镬镔鉴鉴镲锧镴铄镳镥镧钥镵镶镊镩锣钻銮凿镢镋旋长门闩闪闫闬闭开闶闳闰闲闲间闵闸阂阁合阀闺闽阃阆闾阅阅阊阉阎阏阍阈阌阒板暗闱阔阕阑阇阗阘闿阖阙闯关阚阓阐辟阛闼陉陕升阵阴陈陆阳陧队阶陨际随险陦隐陇隶只隽虽双雏杂鸡离难云电霡雾霁雳霭叇灵叆靓静靔腼靥鼗巩绱秋鞒缰鞑千鞯韦韧韨韩韪韬鞲韫韵响页顶顷项顺顸须顼颂颀颃预顽颁顿颇领颌颉颐颏头颒颊颋颕颔颈颓频颓颗题额颚颜颙颛颜愿颡颠类颟颢顾颤颥显颦颅颞颧风飐飑飒台刮飓飔飏飖飕飗飘飙飚飞饣饥饤饦饨饪饫饬饭飧饮饴饲饱饰饳饺饸饼饷养饵饹饻饽馁饿馂饾余肴馄馃饯馅馆糊糇饧喂馉馇馎饩馏馊馌馍馒馐馑馓馈馔饥饶飨餍馋馕马驭冯驮驰驯驲驳驻驽驹驵驾骀驸驶驼驷骂骈骇骃骆骎骏骋骍骓骔骒骑骐骛骗骙䯄骞骘骝腾驺骚骟骡蓦骜骖骠骢驱骅骕骁骣骄验惊驿骤驴骧骥骦骊骉肮髅脏体髌髋发松胡须鬓斗闹哄阋阄郁鬶魉魇鱼鱽鱾鲀鲁鲂鱿鲄鲅鲆鲌鲉鲏鲇鲐鲍鲋鲊鲒鲘鲞鲕䲟鲖鲔鲛鲑鲜鲓鲪鲝鲧鲠鲩鲤鲨鲬鲻鲯鲭鲞鲷鲴鲱鲵鲲鲳鲸鲮鲰鲶鲺鳀鲫鳊鳈鲗鳂䲠鲽鳇䲡鳅鲾鳄鳆鳃鳁鳒鳑鳋鲥鳏䲢鳎鳐鳍鳁鲢鳌鳓鳘鲦鲣鲹鳗鳛鳔鳉鳙鳕鳖鳟鳝鳜鳞鲟鲼鲎鲙鳣鳡鳢鲿鲚鳠鳄鲈鲡鸟凫鸠凫鸤凤鸣鸢䴓鸩鸨鸦鸰鸵鸳鸲鸮鸱鸪鸯鸭鸸鸹鸻䴕鸿鸽䴔鸺鸼鹀鹃鹆鹁鹈鹅鹄鹉鹌鹏鹐鹎雕鹊鹓鹍䴖鸫鹑鹒鹋鹙鹕鹗鹖鹛鹜䴗鸧莺鹟鹤鹠鹡鹘鹣鹚鹚鹢鹞鸡䴘䴘鹝鹧鹥鸥鸷鹨鸶鹪鹔鹩鹫鹇鹇鹬鹰鹭鸴䴙㶉鹯䴙鹱鹲鸬鹴鹦鹳鹂鸾卤咸鹾碱盐丽麦麸面面曲曲面么么黄黉点党黪霉黡黩黾鼋鼌鼍冬鼹齄齐斋赍齑齿龀龁龂龅龇龃龆龄出龈啮龊龉龋腭龌龙厐庞䶮龚龛龟';
24 |
25 | /**
26 | * 繁体字
27 | * @const
28 | */
29 | var T = '㑯㑳㑶㓨㘔㘚㜄㜏㠏㥮㩜㩳㩵䁻䊷䋙䋚䋹䋻䍦䎱䙡䜀䝼䥇䥱䦛䦟䯀䰾䱷䱽䲁䲘䴉丟並亂亙亞佇佈佔併來侖侶侷俁係俔俠俥俬倀倆倈倉個們倖倫倲偉偑側偵偽傌傑傖傘備傢傭傯傳傴債傷傾僂僅僉僑僕僞僥僨僱價儀儁儂億儈儉儎儐儔儕儘償優儲儷儸儺儻儼兇兌兒兗內兩冊冑冪凈凍凜凱別刪剄則剋剎剗剛剝剮剴創剷劃劇劉劊劌劍劏劑劚勁動務勛勝勞勢勩勱勳勵勸勻匭匯匱區協卹卻卽厙厠厤厭厲厴參叄叢吒吳吶呂咼員唄唚唸問啓啞啟啢喎喚喪喫喬單喲嗆嗇嗊嗎嗚嗩嗶嘆嘍嘓嘔嘖嘗嘜嘩嘮嘯嘰嘵嘸嘽噁噓噚噝噠噥噦噯噲噴噸噹嚀嚇嚌嚐嚕嚙嚥嚦嚨嚮嚲嚳嚴嚶囀囁囂囅囈囉囌囑囪圇國圍園圓圖團垵埡埰執堅堊堖堝堯報場塊塋塏塒塗塚塢塤塵塹墊墜墮墰墳墶墻墾壇壋壎壓壘壙壚壜壞壟壠壢壩壪壯壺壼壽夠夢夥夾奐奧奩奪奬奮奼妝姍姦娛婁婦婭媧媯媰媼媽嫋嫗嫵嫺嫻嫿嬀嬃嬈嬋嬌嬙嬡嬤嬪嬰嬸孃孋孌孫學孿宮寀寢實寧審寫寬寵寶將專尋對導尷屆屍屓屜屢層屨屬岡峯峴島峽崍崑崗崙崢崬嵐嵗嵾嶁嶄嶇嶔嶗嶠嶢嶧嶨嶮嶴嶸嶺嶼嶽巋巒巔巖巰巹帥師帳帶幀幃幓幗幘幟幣幫幬幹幾庫廁廂廄廈廎廕廚廝廟廠廡廢廣廩廬廳弒弔弳張強彆彈彌彎彔彙彞彠彥彫彲彿後徑從徠復徹恆恥悅悞悵悶悽惡惱惲惻愛愜愨愴愷愾慄態慍慘慚慟慣慤慪慫慮慳慶慺慼慾憂憊憐憑憒憖憚憤憫憮憲憶懇應懌懍懞懟懣懤懨懲懶懷懸懺懼懾戀戇戔戧戩戰戱戲戶拋挩挱挾捨捫捱捲掃掄掆掗掙掛採揀揚換揮揯損搖搗搵搶摑摜摟摯摳摶摺摻撈撏撐撓撝撟撣撥撫撲撳撻撾撿擁擄擇擊擋擓擔據擠擡擣擬擯擰擱擲擴擷擺擻擼擽擾攄攆攏攔攖攙攛攜攝攢攣攤攪攬敎敓敗敘敵數斂斃斆斕斬斷於旂旣昇時晉晝暈暉暘暢暫曄曆曇曉曏曖曠曨曬書會朧朮東杴枴柵柺査桿梔梘條梟梲棄棊棖棗棟棡棧棲棶椏椲楊楓楨業極榘榦榪榮榲榿構槍槓槤槧槨槮槳槶槼樁樂樅樑樓標樞樢樣樧樫樳樸樹樺樿橈橋機橢橫檁檉檔檜檟檢檣檮檯檳檸檻櫃櫓櫚櫛櫝櫞櫟櫥櫧櫨櫪櫫櫬櫱櫳櫸櫺櫻欄欅權欏欒欖欞欽歎歐歟歡歲歷歸歿殘殞殤殨殫殭殮殯殰殲殺殻殼毀毆毿氂氈氌氣氫氬氳氾汎汙決沒沖況泝洩洶浹涇涗涼淒淚淥淨淩淪淵淶淺渙減渢渦測渾湊湞湧湯溈準溝溫溮溳溼滄滅滌滎滙滬滯滲滷滸滻滾滿漁漊漚漢漣漬漲漵漸漿潁潑潔潙潚潛潤潯潰潷潿澀澆澇澐澗澠澤澦澩澮澱澾濁濃濄濕濘濚濛濜濟濤濧濫濰濱濺濼濾瀂瀅瀆瀇瀉瀋瀏瀕瀘瀝瀟瀠瀦瀧瀨瀰瀲瀾灃灄灑灕灘灝灡灣灤灧灩災為烏烴無煉煒煙煢煥煩煬煱熅熒熗熱熲熾燁燈燉燒燙燜營燦燬燭燴燶燻燼燾爍爐爛爭爲爺爾牀牆牘牽犖犛犢犧狀狹狽猙猶猻獁獃獄獅獎獨獪獫獮獰獱獲獵獷獸獺獻獼玀現琱琺琿瑋瑒瑣瑤瑩瑪瑲璉璡璣璦璫璯環璵璸璽瓊瓏瓔瓚甌甕產産甦甯畝畢畫異畵當疇疊痙痠痾瘂瘋瘍瘓瘞瘡瘧瘮瘲瘺瘻療癆癇癉癒癘癟癡癢癤癥癧癩癬癭癮癰癱癲發皁皚皰皸皺盃盜盞盡監盤盧盪眞眥眾睏睜睞睪瞘瞜瞞瞶瞼矇矓矚矯硃硜硤硨硯碕碩碭碸確碼碽磑磚磠磣磧磯磽磾礄礆礎礙礦礪礫礬礱祕祿禍禎禕禡禦禪禮禰禱禿秈稅稈稏稜稟種稱穀穇穌積穎穠穡穢穩穫穭窩窪窮窯窵窶窺竄竅竇竈竊竪競筆筍筧筴箇箋箏節範築篋篔篠篤篩篳簀簍簑簞簡簣簫簹簽簾籃籌籔籙籛籜籟籠籤籩籪籬籮籲粵糉糝糞糧糰糲糴糶糹糾紀紂約紅紆紇紈紉紋納紐紓純紕紖紗紘紙級紛紜紝紡紬紮細紱紲紳紵紹紺紼紿絀終絃組絅絆絎結絕絛絝絞絡絢給絨絰統絲絳絶絹綁綃綆綈綉綌綏綐綑經綜綞綠綢綣綫綬維綯綰綱網綳綴綵綸綹綺綻綽綾綿緄緇緊緋緑緒緓緔緗緘緙線緝緞締緡緣緦編緩緬緯緱緲練緶緹緻緼縈縉縊縋縐縑縕縗縛縝縞縟縣縧縫縭縮縱縲縳縴縵縶縷縹總績繃繅繆繐繒織繕繚繞繡繢繩繪繫繭繮繯繰繳繸繹繼繽繾繿纇纈纊續纍纏纓纔纖纘纜缽罃罈罌罎罰罵罷羅羆羈羋羣羥羨義羶習翬翹翽耬耮聖聞聯聰聲聳聵聶職聹聽聾肅脅脈脛脣脩脫脹腎腖腡腦腫腳腸膃膕膚膞膠膩膽膾膿臉臍臏臘臚臟臠臢臥臨臺與興舉舊舘艙艤艦艫艱艷芻苧茲荊莊莖莢莧菕華菴菸萇萊萬萴萵葉葒葤葦葯葷蒐蒓蒔蒕蒞蒼蓀蓆蓋蓮蓯蓴蓽蔔蔘蔞蔣蔥蔦蔭蕁蕆蕎蕒蕓蕕蕘蕢蕩蕪蕭蕷薀薈薊薌薑薔薘薟薦薩薳薴薵薹薺藍藎藝藥藪藭藴藶藹藺蘀蘄蘆蘇蘊蘋蘚蘞蘢蘭蘺蘿虆處虛虜號虧虯蛺蛻蜆蝕蝟蝦蝨蝸螄螞螢螮螻螿蟄蟈蟎蟣蟬蟯蟲蟶蟻蠁蠅蠆蠍蠐蠑蠔蠟蠣蠨蠱蠶蠻衆衊術衕衚衛衝袞裊裏補裝裡製複褌褘褲褳褸褻襆襇襉襏襖襝襠襤襪襬襯襲襴覈見覎規覓視覘覡覥覦親覬覯覲覷覺覽覿觀觴觶觸訁訂訃計訊訌討訐訒訓訕訖託記訛訝訟訢訣訥訩訪設許訴訶診註証詁詆詎詐詒詔評詖詗詘詛詞詠詡詢詣試詩詫詬詭詮詰話該詳詵詼詿誄誅誆誇誌認誑誒誕誘誚語誠誡誣誤誥誦誨說説誰課誶誹誼誾調諂諄談諉請諍諏諑諒論諗諛諜諝諞諡諢諤諦諧諫諭諮諱諳諶諷諸諺諼諾謀謁謂謄謅謊謎謐謔謖謗謙謚講謝謠謡謨謫謬謭謳謹謾譁譅證譎譏譖識譙譚譜譟譫譭譯議譴護譸譽譾讀讅變讋讌讎讒讓讕讖讚讜讞豈豎豐豔豬豶貓貙貝貞貟負財貢貧貨販貪貫責貯貰貲貳貴貶買貸貺費貼貽貿賀賁賂賃賄賅資賈賊賑賒賓賕賙賚賜賞賠賡賢賣賤賦賧質賫賬賭賰賴賵賺賻購賽賾贄贅贇贈贊贋贍贏贐贓贔贖贗贛贜赬趕趙趨趲跡踐踰踴蹌蹕蹟蹣蹤蹺躂躉躊躋躍躎躑躒躓躕躚躡躥躦躪軀車軋軌軍軑軒軔軛軟軤軫軲軸軹軺軻軼軾較輅輇輈載輊輒輓輔輕輛輜輝輞輟輥輦輩輪輬輯輳輸輻輼輾輿轀轂轄轅轆轉轍轎轔轟轡轢轤辦辭辮辯農迴逕這連週進遊運過達違遙遜遞遠遡適遲遷選遺遼邁還邇邊邏邐郟郵鄆鄉鄒鄔鄖鄧鄭鄰鄲鄴鄶鄺酇酈醃醖醜醞醟醣醫醬醱釀釁釃釅釋釐釒釓釔釕釗釘釙針釣釤釦釧釩釵釷釹釺釾鈀鈁鈃鈄鈅鈈鈉鈍鈎鈐鈑鈒鈔鈕鈞鈡鈣鈥鈦鈧鈮鈰鈳鈴鈷鈸鈹鈺鈽鈾鈿鉀鉅鉆鉈鉉鉋鉍鉑鉕鉗鉚鉛鉞鉢鉤鉦鉬鉭鉳鉶鉸鉺鉻鉿銀銃銅銍銑銓銖銘銚銛銜銠銣銥銦銨銩銪銫銬銱銳銷銹銻銼鋁鋂鋃鋅鋇鋌鋏鋒鋙鋝鋟鋣鋤鋥鋦鋨鋩鋪鋭鋮鋯鋰鋱鋶鋸鋼錁錄錆錇錈錏錐錒錕錘錙錚錛錟錠錡錢錦錨錩錫錮錯録錳錶錸錼鍀鍁鍃鍅鍆鍇鍈鍊鍋鍍鍔鍘鍚鍛鍠鍤鍥鍩鍬鍰鍵鍶鍺鍼鍾鎂鎄鎇鎊鎌鎔鎖鎘鎚鎛鎡鎢鎣鎦鎧鎩鎪鎬鎭鎮鎰鎲鎳鎵鎸鎿鏃鏇鏈鏌鏍鏐鏑鏗鏘鏚鏜鏝鏞鏟鏡鏢鏤鏨鏰鏵鏷鏹鏺鏽鐃鐋鐐鐒鐓鐔鐗鐘鐙鐝鐠鐥鐦鐧鐨鐫鐮鐯鐲鐳鐵鐶鐸鐺鐿鑀鑄鑊鑌鑑鑒鑔鑕鑞鑠鑣鑥鑭鑰鑱鑲鑷鑹鑼鑽鑾鑿钁钂镟長門閂閃閆閈閉開閌閎閏閑閒間閔閘閡閣閤閥閨閩閫閬閭閱閲閶閹閻閼閽閾閿闃闆闇闈闊闋闌闍闐闒闓闔闕闖關闞闠闡闢闤闥陘陝陞陣陰陳陸陽隉隊階隕際隨險隯隱隴隸隻雋雖雙雛雜雞離難雲電霢霧霽靂靄靆靈靉靚靜靝靦靨鞀鞏鞝鞦鞽韁韃韆韉韋韌韍韓韙韜韝韞韻響頁頂頃項順頇須頊頌頎頏預頑頒頓頗領頜頡頤頦頭頮頰頲頴頷頸頹頻頽顆題額顎顏顒顓顔願顙顛類顢顥顧顫顬顯顰顱顳顴風颭颮颯颱颳颶颸颺颻颼飀飄飆飈飛飠飢飣飥飩飪飫飭飯飱飲飴飼飽飾飿餃餄餅餉養餌餎餏餑餒餓餕餖餘餚餛餜餞餡館餬餱餳餵餶餷餺餼餾餿饁饃饅饈饉饊饋饌饑饒饗饜饞饢馬馭馮馱馳馴馹駁駐駑駒駔駕駘駙駛駝駟駡駢駭駰駱駸駿騁騂騅騌騍騎騏騖騙騤騧騫騭騮騰騶騷騸騾驀驁驂驃驄驅驊驌驍驏驕驗驚驛驟驢驤驥驦驪驫骯髏髒體髕髖髮鬆鬍鬚鬢鬥鬧鬨鬩鬮鬱鬹魎魘魚魛魢魨魯魴魷魺鮁鮃鮊鮋鮍鮎鮐鮑鮒鮓鮚鮜鮝鮞鮣鮦鮪鮫鮭鮮鮳鮶鮺鯀鯁鯇鯉鯊鯒鯔鯕鯖鯗鯛鯝鯡鯢鯤鯧鯨鯪鯫鯰鯴鯷鯽鯿鰁鰂鰃鰆鰈鰉鰌鰍鰏鰐鰒鰓鰛鰜鰟鰠鰣鰥鰧鰨鰩鰭鰮鰱鰲鰳鰵鰷鰹鰺鰻鰼鰾鱂鱅鱈鱉鱒鱔鱖鱗鱘鱝鱟鱠鱣鱤鱧鱨鱭鱯鱷鱸鱺鳥鳧鳩鳬鳲鳳鳴鳶鳾鴆鴇鴉鴒鴕鴛鴝鴞鴟鴣鴦鴨鴯鴰鴴鴷鴻鴿鵁鵂鵃鵐鵑鵒鵓鵜鵝鵠鵡鵪鵬鵮鵯鵰鵲鵷鵾鶄鶇鶉鶊鶓鶖鶘鶚鶡鶥鶩鶪鶬鶯鶲鶴鶹鶺鶻鶼鶿鷀鷁鷂鷄鷈鷉鷊鷓鷖鷗鷙鷚鷥鷦鷫鷯鷲鷳鷴鷸鷹鷺鷽鷿鸂鸇鸊鸌鸏鸕鸘鸚鸛鸝鸞鹵鹹鹺鹼鹽麗麥麩麪麫麯麴麵麼麽黃黌點黨黲黴黶黷黽黿鼂鼉鼕鼴齇齊齋齎齏齒齔齕齗齙齜齟齠齡齣齦齧齪齬齲齶齷龍龎龐龑龔龕龜';
30 |
31 | /**
32 | * 转换文本
33 | * @param {String} str - 待转换的文本
34 | * @returns {String} - 转换结果
35 | */
36 | function tranStr(str) {
37 | var i;
38 | var letter;
39 | var code;
40 | var isChinese;
41 | var index;
42 | var result = '';
43 |
44 | if (typeof str !== "string") {
45 | return str;
46 | }
47 |
48 | for (i = 0; i < str.length; i++) {
49 | letter = str.charAt(i);
50 | code = str.charCodeAt(i);
51 |
52 | // 根据字符的Unicode判断是否为汉字,以提高性能
53 | // 参考:
54 | // [1] http://www.unicode.org
55 | // [2] http://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8
56 | // [3] http://xylonwang.iteye.com/blog/519552
57 | isChinese = (code > 0x3400 && code < 0x9FFF) || (code > 0xF900 && code < 0xFAFF);
58 |
59 | if (!isChinese) {
60 | result += letter;
61 | continue;
62 | }
63 |
64 | index = T.indexOf(letter);
65 |
66 | if (index !== -1) {
67 | result += S.charAt(index);
68 | } else {
69 | result += letter;
70 | }
71 | }
72 |
73 | return result;
74 | }
75 |
76 | /**
77 | * 转换为简体或取消转换
78 | * 若发生转换,繁体原文备份为 element 节点上由 backupAttr 指定的属性,以备恢复为繁体
79 | * @param {String} original - 待转换文字,若未提供则取消上一次转换
80 | * @param {Element} element - 所属节点
81 | * @param {String} backupAttr - 用于备份繁体原文的属性名
82 | * @param {Function} setter - 通过参数 value 设置转换后的值
83 | */
84 | function translateOrRestore(original, element, backupAttr, setter) {
85 | if (original) {
86 | var translated = tranStr(original);
87 | if (translated != original) {
88 | element.setAttribute(backupAttr, original);
89 | setter(translated);
90 | }
91 | } else if (element.hasAttribute(backupAttr)) {
92 | setter(element.getAttribute(backupAttr));
93 | }
94 | }
95 |
96 | /**
97 | * 转换HTML Element属性
98 | * @param {Element} element - 待转换的HTML Element节点
99 | * @param {String|Array} attr - 待转换的属性/属性列表
100 | * @param {Boolean} toT - 是否转换成繁体
101 | */
102 | function tranAttr(element, attr, toT) {
103 | var i, attrValue;
104 |
105 | if (attr instanceof Array) {
106 | for(i = 0; i < attr.length; i++) {
107 | tranAttr(element, attr[i], toT);
108 | }
109 | } else {
110 | attrValue = element.getAttribute(attr);
111 | if (attrValue !== "" && attrValue !== null) {
112 | translateOrRestore(!toT && attrValue, element, 'data-hant-' + attr, function(value) {
113 | element.setAttribute(attr, value);
114 | });
115 | }
116 | }
117 | }
118 |
119 | /**
120 | * 转换HTML Element节点
121 | * @param {Element} element - 待转换的HTML Element节点
122 | * @param {Boolean} toT - 是否转换成繁体
123 | */
124 | function tranElement(element, toT) {
125 | var i;
126 | var childNodes;
127 |
128 | if (element.nodeType !== 1) {
129 | return;
130 | }
131 |
132 | childNodes = element.childNodes;
133 |
134 | for (i = 0; i < childNodes.length; i++) {
135 | var childNode = childNodes.item(i);
136 |
137 | // 若为HTML Element节点
138 | if (childNode.nodeType === 1) {
139 | // 对以下标签不做处理
140 | if ("|BR|HR|TEXTAREA|SCRIPT|OBJECT|EMBED|".indexOf("|" + childNode.tagName + "|") !== -1) {
141 | continue;
142 | }
143 |
144 | tranAttr(childNode, ['title', 'data-original-title', 'alt', 'placeholder'], toT);
145 |
146 | // input 标签
147 | // 对text类型的input输入框不做处理
148 | if (childNode.tagName === "INPUT"
149 | && childNode.value !== ""
150 | && childNode.type !== "text"
151 | && childNode.type !== "hidden")
152 | {
153 | translateOrRestore(!toT && childNode.value, childNode, 'data-hant-value', function(value) {
154 | childNode.value = value;
155 | });
156 | }
157 |
158 | // 继续递归调用
159 | tranElement(childNode, toT);
160 | } else if (childNode.nodeType === 3) { // 若为文本节点
161 | // 繁体原文备份在当前节点而非子节点
162 | translateOrRestore(!toT && childNode.data, element, 'data-hant-text-' + i, function(value) {
163 | childNode.data = value;
164 | });
165 | }
166 | }
167 | }
168 |
169 | // 扩展jQuery全局方法
170 | $.extend({
171 | /**
172 | * 文本繁转简
173 | * @param {String} str - 待转换的文本
174 | * @returns {String} 转换结果
175 | */
176 | t2s: function(str) {
177 | return tranStr(str, false);
178 | }
179 | });
180 |
181 | // 扩展jQuery对象方法
182 | $.fn.extend({
183 | /**
184 | * jQuery Objects简转繁
185 | * @this {jQuery Objects} 待转换的jQuery Objects
186 | */
187 | s2t: function() {
188 | return this.each(function() {
189 | tranElement(this, true);
190 | });
191 | },
192 |
193 | /**
194 | * jQuery Objects繁转简
195 | * @this {jQuery Objects} 待转换的jQuery Objects
196 | */
197 | t2s: function() {
198 | return this.each(function() {
199 | tranElement(this, false);
200 | });
201 | }
202 | });
203 | }) (jQuery);
204 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/main.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | detectSvgSupport();
3 | setupScrolling();
4 | detectOSForDownloads();
5 | initializeChineseConversion();
6 | });
7 |
8 | function detectSvgSupport() {
9 | if (!Modernizr.svg) {
10 | var images = $('img[data-png-fallback]');
11 | images.each(function(i) {
12 | $(this).attr('src', $(this).data('png-fallback'));
13 | });
14 | }
15 | }
16 |
17 | function setupScrolling() {
18 | $(window).scroll(function(){ //As long as the window to scroll to trigger the code below
19 | var scrollt = document.documentElement.scrollTop + document.body.scrollTop; //Get height after rolling
20 | if( scrollt > 40 ){ //Height exceeds the judgment scroll, on display
21 | $("#gotop").fadeIn(333); //Fade
22 | $(".navbar").stop().fadeTo(333, 0.2);
23 | }else{
24 | $("#gotop").fadeOut(333); //If the return or does not exceed, on a fade. Must add stop () stops before the movie, there would be flashing
25 | $(".navbar").stop().fadeTo(0, 1);
26 | }
27 | });
28 | $("#gotop").click(function(){ //When you click on the label when using animate within 200 milliseconds, rolled top
29 | $("html,body").animate({scrollTop:"0px"},200);
30 | });
31 | $(".navbar").mouseenter(function(){
32 | $(".navbar").fadeTo(100, 1);
33 | });
34 | $(".navbar").mouseleave(function(){
35 | var scrollt = document.documentElement.scrollTop + document.body.scrollTop;
36 | if ( scrollt > 200) {
37 | $(".navbar").fadeTo(100, 0.2);
38 | }
39 | });
40 | }
41 |
42 | function getOSName() {
43 | var os = "unknown";
44 | if (navigator.userAgent.match(/Android/i)) os = "android";
45 | else if (navigator.userAgent.match(/BlackBerry/i)) os = "blackberry";
46 | else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) os = "ios";
47 | else if (navigator.userAgent.match(/webOS/i)) os = "webos";
48 | else if (navigator.userAgent.match(/Windows Phone/i)) os = "windows-phone";
49 | else if (~navigator.appVersion.indexOf("Win")) os = "windows";
50 | else if (~navigator.appVersion.indexOf("Mac")) os = "mac";
51 | else if (~navigator.appVersion.indexOf("Linux")) os = "linux";
52 | else if (~navigator.appVersion.indexOf("X11")) os = "unix";
53 | return os;
54 | }
55 |
56 | var rimeSupportedOS = {
57 | mac: true,
58 | linux: true,
59 | windows: true,
60 | };
61 |
62 | function detectOSForDownloads() {
63 | var os = getOSName();
64 | console.log('os: ' + os);
65 | if (rimeSupportedOS[os]) {
66 | $('.os-unknown').addClass('hidden');
67 | $('.os-' + os).removeClass('hidden');
68 | $('.downloads .footnote span.hidden').removeClass('hidden');
69 | }
70 | // iRimeWithFool
71 | var today = new Date();
72 | if (today.getMonth() == 3 && today.getDate() == 1) {
73 | $('.os-ios').removeClass('hidden');
74 | }
75 | }
76 |
77 | function simplifyTextInPage(simplified) {
78 | if (simplified) {
79 | $(document.body).t2s();
80 | $('#btn-simplify').addClass('simplified');
81 | } else {
82 | $(document.body).s2t();
83 | $('#btn-simplify').removeClass('simplified');
84 | }
85 | }
86 |
87 | function initializeChineseConversion() {
88 | var simplified = +$.cookie('simplified');
89 | // ?lang=zh-Hans, ?lang=zh-Hant
90 | var scriptCode = /[?&;]lang=[^&;]*(Han[st])/i.exec(window.location.search);
91 | if (scriptCode) {
92 | simplified = +(scriptCode[1].match(/Hans/i) != null);
93 | $.cookie('simplified', simplified, {expires: 365, path: '/'});
94 | }
95 | simplifyTextInPage(simplified);
96 |
97 | $('#btn-simplify').click(function() {
98 | simplified = +!simplified;
99 | $.cookie('simplified', simplified, {expires: 365, path: '/'});
100 | simplifyTextInPage(simplified);
101 | $(this).blur();
102 | });
103 | }
104 |
--------------------------------------------------------------------------------
/blog/themes/freewill/source/js/modernizr.js:
--------------------------------------------------------------------------------
1 | /*! modernizr 3.3.1 (Custom Build) | MIT *
2 | * https://modernizr.com/download/?-svg-setclasses !*/
3 | !function(e,n,s){function o(e,n){return typeof e===n}function a(){var e,n,s,a,t,f,r;for(var c in l)if(l.hasOwnProperty(c)){if(e=[],n=l[c],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(s=0;s
endDate) {
58 | continue;
59 | }
60 | if (entry.mode) {
61 | $(document.body).addClass(entry.mode);
62 | }
63 | if (entry.notice) {
64 | $('.front-matter .slogan').hide();
65 | let notice = $('.front-matter .notice');
66 | notice.append($('').text(entry.notice));
67 | if (entry.linkUrl) {
68 | notice.append($('').attr({
69 | 'href': entry.linkUrl,
70 | 'class': entry.linkIcon || 'fa fa-link',
71 | }));
72 | }
73 | }
74 | return;
75 | }
76 | })();
77 |
--------------------------------------------------------------------------------
/blog/update_weasel_appcast.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import time
3 | from datetime import datetime, timedelta, timezone
4 |
5 | datas = []
6 | for url in ["https://api.github.com/repos/rime/weasel/releases/tags/latest", "https://api.github.com/repos/rime/weasel/releases/latest"]:
7 | response = requests.get(url)
8 | if response.ok:
9 | datas.append(response.json())
10 | filenames = []
11 | urls = []
12 | update_time = []
13 | tags_name = []
14 | for data in datas:
15 | if data["prerelease"] == False:
16 | release_json = data
17 | for asset in data['assets']:
18 | if asset['name'].endswith('.exe'):
19 | filenames.append(asset['name'])
20 | urls.append(asset['browser_download_url'])
21 | update_time.append(data['published_at'])
22 | tags_name.append(data['tag_name'])
23 | # compare update_time and get the latest one
24 | latest_time = update_time[0]
25 | latest_index = 0
26 | for i in range(1, len(update_time)):
27 | if update_time[i] > latest_time:
28 | latest_time = update_time[i]
29 | latest_index = i
30 | # get version number
31 | version = filenames[latest_index].replace("-installer.exe", "")
32 | version = version.replace("weasel-", "")
33 | # download url
34 | download_url = urls[latest_index]
35 | # get local time in format like "Thu, 01 Jan 1970 00:00:00 +0000"
36 | # define a function to format time
37 | def format_time(time_str):
38 | utc_offset_sec = -time.timezone if time.localtime().tm_isdst == 0 else -time.altzone
39 | utc_offset = timedelta(seconds=utc_offset_sec)
40 | current_tz = timezone(utc_offset)
41 | utc_time = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc)
42 | local_time = utc_time.astimezone(current_tz)
43 | formatted_time = local_time.strftime("%a, %d %b %Y %H:%M:%S %z")
44 | return formatted_time
45 | formatted_time = format_time(update_time[latest_index])
46 |
47 | # get release notes link
48 | if tags_name[latest_index] == "latest":
49 | releaseNotesLink = "http://github.com/rime/weasel/releases/tag/latest/index.html"
50 | else:
51 | releaseNotesLink = "http://rime.github.io/testing/weasel/index.html"
52 | # format xml file content
53 | template = f"""
54 |
55 |
56 | 【小狼毫】輸入法測試頻道
57 | http://rime.github.io/testing/weasel/appcast.xml
58 | 小狼毫測試版 Appcast 更新頻道
59 | zh
60 | -
61 | 小狼毫 {version}
62 | {releaseNotesLink}
63 | {formatted_time}
64 |
67 |
68 |
69 |
70 | """
71 | print(f"./source/testing/weasel/appcast.xml:\n{template}")
72 | # write template to ./source/testing/weasel/appcast.xml
73 | with open("./source/testing/weasel/appcast.xml", "w", encoding='utf-8') as f:
74 | f.write(template)
75 | f.close()
76 | print("./source/testing/weasel/appcast.xml updated\n")
77 | # update release appcast.xml automatically, and update other files if needed
78 | if 'release_json' in locals() or 'release_json' in globals():
79 | import re
80 | release_formatted_time = format_time(release_json['published_at'])
81 | # get release url
82 | for asset in release_json['assets']:
83 | if asset['name'].endswith('.exe'):
84 | release_url = asset['browser_download_url']
85 | break
86 | if 'release_url' not in locals():
87 | print("release_url not found, using default url")
88 | release_url = f"https://github.com/rime/weasel/releases/download/{release_json['tag_name']}/weasel-{release_json['tag_name']}.0-installer.exe"
89 | # update appcast.xml
90 | template_release = f"""
91 |
92 |
93 | 【小狼毫】輸入法更新頻道
94 | http://rime.github.io/release/weasel/appcast.xml
95 | 小狼毫 Appcast 更新頻道
96 | zh
97 | -
98 | 小狼毫 {release_json["tag_name"]}
99 | http://rime.github.io/release/weasel/index.html
100 | {release_formatted_time}
101 |
104 |
105 |
106 | """
107 | print(f"./source/release/weasel/appcast.xml:\n{template_release}")
108 | with open("./source/release/weasel/appcast.xml", "w", encoding='utf-8') as f:
109 | f.write(template_release)
110 | f.close()
111 | print("./source/release/weasel/appcast.xml updated\n")
112 | # get changelog.md
113 | changelog_url = f"https://raw.githubusercontent.com/rime/weasel/refs/tags/{release_json['tag_name']}/CHANGELOG.md"
114 | changelog_txt = requests.get(changelog_url).text
115 | match = re.search(r'(\d+\.\d+\.\d+)', changelog_txt)
116 | if not match:
117 | print("No version number found in CHANGELOG.md")
118 | exit(0)
119 | changelog_version = match.group(1)
120 |
121 | if changelog_version != release_json['tag_name']:
122 | print("latest version in CHANGELOG.md is not released yet")
123 | exit(0)
124 | # version tag in CHANGELOG.md has been released
125 | print("latest version in CHANGELOG.md has been released")
126 | index_md = f"""title: 【小狼毫】更新日誌\ncomments: false\ndate: {release_formatted_time}\n---\n\n{changelog_txt}"""
127 | # update ./source/release/weasel/index.md
128 | with open("./source/release/weasel/index.md", "w", encoding='utf-8') as f:
129 | f.write(index_md)
130 | f.close()
131 | print("./source/release/weasel/index.md updated")
132 | # update ./source/testing/weasel/index.md
133 | with open("./source/testing/weasel/index.md", "w", encoding='utf-8') as f:
134 | f.write(index_md)
135 | f.close()
136 | print("./source/testing/weasel/index.md updated")
137 | # modify ./source/_data/downloads.yaml, key weasel/version and weasel/url
138 | from ruamel.yaml import YAML
139 | yaml = YAML()
140 | yaml.preserve_quotes = True
141 | yaml.indent(mapping=2, sequence=2, offset=2)
142 | # this will be like this until there is some change in the yaml file not in this format/rule
143 | with open("./source/_data/downloads.yaml", "r", encoding='utf-8') as f:
144 | downloads_yaml = yaml.load(f)
145 | f.close()
146 | with open("./source/_data/downloads.yaml", "w", encoding='utf-8') as f:
147 | downloads_yaml['weasel']['version'] = release_json['tag_name']
148 | downloads_yaml['weasel']['url'] = release_url
149 | yaml.dump(downloads_yaml, f)
150 | print("./source/_data/downloads.yaml updated")
151 | f.close()
152 | # update source/download/index.md
153 | pattern = r"\* \[小狼毫 \d+\.\d+\.\d+\]\(https://github\.com/rime/weasel/releases/latest\)〔\[下載\]\(https://github\.com/rime/weasel/releases/download/\d+\.\d+\.\d+/weasel-\d+\.\d+\.\d+\.0-installer\.exe\)〕〔\[更新日誌\]\(/release/weasel/\)〕〔\[歷史版本\]\(https://github\.com/rime/weasel/releases\)〕"
154 | new_str = f"* [小狼毫 {release_json['tag_name']}](https://github.com/rime/weasel/releases/latest)〔[下載](https://github.com/rime/weasel/releases/download/{release_json['tag_name']}/weasel-{release_json['tag_name']}.0-installer.exe)〕〔[更新日誌](/release/weasel/)〕〔[歷史版本](https://github.com/rime/weasel/releases)〕"
155 | # replace pattern with new_str in ./source/download/index.md
156 | with open("./source/download/index.md", "r", encoding='utf-8') as f:
157 | download_md = f.read()
158 | f.close()
159 | download_md = re.sub(pattern, new_str, download_md)
160 | with open("./source/download/index.md", "w", encoding='utf-8') as f:
161 | f.write(download_md)
162 | f.close()
163 | print("./source/download/index.md updated")
164 |
--------------------------------------------------------------------------------
/images/combo-pinyin-kbcon-amj40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-kbcon-amj40.jpg
--------------------------------------------------------------------------------
/images/combo-pinyin-kbcon-chicory-relabeled.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-kbcon-chicory-relabeled.jpg
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-a-ia-ua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-a-ia-ua.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-ai-ao-an.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-ai-ao-an.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-ang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-ang.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-chords.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-chords.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-ei-uen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-ei-uen.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-i-u-yu-er-en-o-e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-i-u-yu-er-en-o-e.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-iang-uang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-iang-uang.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-iao-yuan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-iao-yuan.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-ing-ong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-ing-ong.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-io-yue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-io-yue.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-iong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-iong.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-j-q-x-iou-yun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-j-q-x-iou-yun.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-layout.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-logo.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-m-n-r-uei-in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-m-n-r-uei-in.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-space.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-touch-typing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-touch-typing.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-uai-ian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-uai-ian.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-uan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-uan.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-uo-ie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-uo-ie.png
--------------------------------------------------------------------------------
/images/combo-pinyin-v3/combo-pinyin-zh-ch-sh-ou-eng.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/combo-pinyin-v3/combo-pinyin-zh-ch-sh-ou-eng.png
--------------------------------------------------------------------------------
/images/emoji-chart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/emoji-chart.png
--------------------------------------------------------------------------------
/images/rime-install-select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/rime-install-select.png
--------------------------------------------------------------------------------
/images/squirrel-vertical-text-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/squirrel-vertical-text-dark.png
--------------------------------------------------------------------------------
/images/squirrel-vertical-text-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/squirrel-vertical-text-light.png
--------------------------------------------------------------------------------
/images/user-quotes/rime-starcraft-player.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-starcraft-player.jpg
--------------------------------------------------------------------------------
/images/user-quotes/rime-users-quotes.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-users-quotes.jpg
--------------------------------------------------------------------------------
/images/user-quotes/rime-users-story.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-users-story.jpg
--------------------------------------------------------------------------------
/images/user-quotes/rime-users-test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-users-test.jpg
--------------------------------------------------------------------------------
/images/user-quotes/rime-users-uncertainty.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-users-uncertainty.jpg
--------------------------------------------------------------------------------
/images/user-quotes/rime-wubi-user.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/rime-wubi-user.jpg
--------------------------------------------------------------------------------
/images/user-quotes/squirrel-in-azure.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/squirrel-in-azure.jpg
--------------------------------------------------------------------------------
/images/user-quotes/weasel-in-lost-temple.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/images/user-quotes/weasel-in-lost-temple.jpg
--------------------------------------------------------------------------------
/manual/combo-pinyin-cheatsheet.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/manual/combo-pinyin-cheatsheet.pdf
--------------------------------------------------------------------------------
/manual/執鍵人宮保拼音鍵盤圖解.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/manual/執鍵人宮保拼音鍵盤圖解.pdf
--------------------------------------------------------------------------------
/manual/大衆式宮保拼音鍵盤圖解.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rime/home/4374cdec230f25e43b2246d1303367b39a3216c5/manual/大衆式宮保拼音鍵盤圖解.pdf
--------------------------------------------------------------------------------