├── layout ├── widget │ ├── tag.ftl │ ├── category.ftl │ ├── tagcloud.ftl │ ├── archive.ftl │ ├── recent_comments.ftl │ ├── links.ftl │ ├── recent_posts.ftl │ ├── tag_posts.ftl │ ├── cate_posts.ftl │ ├── toc.ftl │ └── profile.ftl ├── plugin │ ├── animejs.ftl │ ├── back-to-top.ftl │ ├── gallery.ftl │ ├── mathjax.ftl │ └── outdated-browser.ftl ├── .DS_Store ├── donate │ ├── alipay.ftl │ └── wechat.ftl ├── comment │ └── comment.ftl ├── share │ ├── addtoany.ftl │ ├── bdshare.ftl │ └── sharejs.ftl ├── tags.ftl ├── journals │ └── journals.ftl ├── common │ ├── widget_pin.ftl │ ├── head.ftl │ ├── scripts.ftl │ ├── module.ftl │ ├── widget.ftl │ ├── navbar.ftl │ └── footer.ftl ├── categories.ftl ├── category.ftl ├── tag.ftl └── search │ └── local.ftl ├── screenshot.png ├── source ├── images │ ├── gg.jpg │ ├── avatar.png │ ├── cover │ │ ├── 0.jpg │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ ├── 5.jpg │ │ ├── 6.jpg │ │ ├── 7.jpg │ │ ├── 8.jpg │ │ └── 9.jpg │ ├── og_image.png │ ├── favicon.svg │ └── thumbnail.svg ├── lib │ ├── lg │ │ ├── fonts │ │ │ ├── lg.eot │ │ │ ├── lg.ttf │ │ │ └── lg.woff │ │ └── js │ │ │ ├── lg-fullscreen.min.js │ │ │ └── lg-autoplay.min.js │ ├── outdatedbrowser │ │ ├── lang │ │ │ ├── zh-cn.html │ │ │ ├── zh-tw.html │ │ │ └── en.html │ │ ├── outdatedbrowser.min.css │ │ └── outdatedbrowser.min.js │ ├── prism │ │ └── css │ │ │ └── prism-line-numbers.css │ ├── dianji.js │ └── toc │ │ └── toc.min.js ├── assets │ ├── images │ │ ├── favicon.png │ │ ├── logo@2x.png │ │ ├── preview.gif │ │ ├── logo_dark@2x.png │ │ ├── flags │ │ │ ├── flag-cn.png │ │ │ └── flag-us.png │ │ ├── logo-collapsed@2x.png │ │ ├── webstack_banner_cn.png │ │ └── webstack_icon_producthunt.png │ ├── css │ │ ├── fonts │ │ │ ├── elusive │ │ │ │ ├── font │ │ │ │ │ ├── elusive.eot │ │ │ │ │ ├── elusive.ttf │ │ │ │ │ └── elusive.woff │ │ │ │ └── css │ │ │ │ │ └── animation.css │ │ │ ├── linecons │ │ │ │ ├── font │ │ │ │ │ ├── linecons.eot │ │ │ │ │ ├── linecons.ttf │ │ │ │ │ └── linecons.woff │ │ │ │ └── css │ │ │ │ │ ├── animation.css │ │ │ │ │ ├── linecons-codes.css │ │ │ │ │ ├── linecons.css │ │ │ │ │ ├── linecons-ie7-codes.css │ │ │ │ │ └── linecons-ie7.css │ │ │ ├── meteocons │ │ │ │ ├── font │ │ │ │ │ ├── meteocons.eot │ │ │ │ │ ├── meteocons.ttf │ │ │ │ │ └── meteocons.woff │ │ │ │ └── css │ │ │ │ │ ├── animation.css │ │ │ │ │ ├── meteocons-codes.css │ │ │ │ │ ├── meteocons.css │ │ │ │ │ ├── meteocons-ie7-codes.css │ │ │ │ │ └── meteocons-ie7.css │ │ │ ├── fontawesome │ │ │ │ └── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ └── glyphicons │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ └── nav.css │ └── js │ │ ├── xenon-api.js │ │ ├── resizeable.js │ │ ├── lozad.js │ │ └── xenon-toggles.js ├── css │ ├── back-to-top.css │ ├── progressbar.css │ ├── insight.css │ ├── search.css │ ├── bundle.css │ └── widget_pin.css └── js │ ├── gallery.js │ ├── widget_pin.js │ ├── animation.js │ ├── main.js │ ├── back-to-top.js │ └── bundle.js ├── .gitignore ├── tags.ftl ├── categories.ftl ├── tag.ftl ├── post.ftl ├── sheet.ftl ├── category.ftl ├── xinac-fantastic.iml ├── theme.yaml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── index.ftl ├── journals.ftl ├── search.ftl ├── archives.ftl ├── links_bak.ftl ├── sheet_links.ftl └── photos.ftl /layout/widget/tag.ftl: -------------------------------------------------------------------------------- 1 | <#include "../tags.ftl"> -------------------------------------------------------------------------------- /layout/widget/category.ftl: -------------------------------------------------------------------------------- 1 | <#include "../categories.ftl"> -------------------------------------------------------------------------------- /layout/plugin/animejs.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/screenshot.png -------------------------------------------------------------------------------- /layout/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/layout/.DS_Store -------------------------------------------------------------------------------- /source/images/gg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/gg.jpg -------------------------------------------------------------------------------- /layout/plugin/back-to-top.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/avatar.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/.gitignore 2 | .idea/halo-theme-fantastic.iml 3 | .idea/misc.xml 4 | .idea/modules.xml 5 | .idea/vcs.xml 6 | -------------------------------------------------------------------------------- /source/images/cover/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/0.jpg -------------------------------------------------------------------------------- /source/images/cover/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/1.jpg -------------------------------------------------------------------------------- /source/images/cover/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/2.jpg -------------------------------------------------------------------------------- /source/images/cover/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/3.jpg -------------------------------------------------------------------------------- /source/images/cover/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/4.jpg -------------------------------------------------------------------------------- /source/images/cover/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/5.jpg -------------------------------------------------------------------------------- /source/images/cover/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/6.jpg -------------------------------------------------------------------------------- /source/images/cover/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/7.jpg -------------------------------------------------------------------------------- /source/images/cover/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/8.jpg -------------------------------------------------------------------------------- /source/images/cover/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/cover/9.jpg -------------------------------------------------------------------------------- /source/images/og_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/images/og_image.png -------------------------------------------------------------------------------- /source/lib/lg/fonts/lg.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/lib/lg/fonts/lg.eot -------------------------------------------------------------------------------- /source/lib/lg/fonts/lg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/lib/lg/fonts/lg.ttf -------------------------------------------------------------------------------- /source/lib/lg/fonts/lg.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/lib/lg/fonts/lg.woff -------------------------------------------------------------------------------- /source/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/favicon.png -------------------------------------------------------------------------------- /source/assets/images/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/logo@2x.png -------------------------------------------------------------------------------- /source/assets/images/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/preview.gif -------------------------------------------------------------------------------- /source/assets/images/logo_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/logo_dark@2x.png -------------------------------------------------------------------------------- /source/assets/images/flags/flag-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/flags/flag-cn.png -------------------------------------------------------------------------------- /source/assets/images/flags/flag-us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/flags/flag-us.png -------------------------------------------------------------------------------- /source/assets/images/logo-collapsed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/logo-collapsed@2x.png -------------------------------------------------------------------------------- /source/assets/images/webstack_banner_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/webstack_banner_cn.png -------------------------------------------------------------------------------- /source/assets/css/fonts/elusive/font/elusive.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/elusive/font/elusive.eot -------------------------------------------------------------------------------- /source/assets/css/fonts/elusive/font/elusive.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/elusive/font/elusive.ttf -------------------------------------------------------------------------------- /source/assets/css/fonts/elusive/font/elusive.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/elusive/font/elusive.woff -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/font/linecons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/linecons/font/linecons.eot -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/font/linecons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/linecons/font/linecons.ttf -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/font/linecons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/linecons/font/linecons.woff -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/font/meteocons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/meteocons/font/meteocons.eot -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/font/meteocons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/meteocons/font/meteocons.ttf -------------------------------------------------------------------------------- /source/assets/images/webstack_icon_producthunt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/images/webstack_icon_producthunt.png -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/font/meteocons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/meteocons/font/meteocons.woff -------------------------------------------------------------------------------- /source/assets/css/fonts/fontawesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/fontawesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /tags.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="标签 - ${blog_title!}" canonical="${tags_url!}"> 4 | <#include "layout/tags.ftl"> 5 | -------------------------------------------------------------------------------- /source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/fontawesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jinqilin721/halo-theme-xinac-fantastic/HEAD/source/assets/css/fonts/glyphicons/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /categories.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="分类 - ${blog_title!}" canonical="${categories_url!}"> 4 | <#include "layout/categories.ftl"> 5 | -------------------------------------------------------------------------------- /layout/plugin/gallery.ftl: -------------------------------------------------------------------------------- 1 | <#if is_post?? || is_sheet??> 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tag.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="标签:${tag.name!} - ${blog_title!}" canonical="${tag.fullPath!}"> 4 | <#include "layout/tag.ftl"> 5 | -------------------------------------------------------------------------------- /post.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="${post.title!} - ${blog_title!}" canonical="${post.fullPath!}"> 4 | <@article post,'page',"post",false /> 5 | -------------------------------------------------------------------------------- /sheet.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="${sheet.title!} - ${blog_title!}" canonical="${sheet.fullPath!}"> 4 | <@article sheet,'page',"sheet",false /> 5 | -------------------------------------------------------------------------------- /category.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="分类:${category.name!} - ${blog_title!}" canonical="${category.fullPath!}"> 4 | <#include "layout/category.ftl"> 5 | 6 | -------------------------------------------------------------------------------- /source/lib/outdatedbrowser/lang/zh-cn.html: -------------------------------------------------------------------------------- 1 |
您的浏览器已过时
2 |

要正常浏览本网站请升级您的浏览器。现在升级

3 |

×

4 | -------------------------------------------------------------------------------- /source/lib/outdatedbrowser/lang/zh-tw.html: -------------------------------------------------------------------------------- 1 |
您的瀏覽器已過時
2 |

要正常瀏覽本網站請升級您的瀏覽器。 現在升級​​

3 |

×

-------------------------------------------------------------------------------- /layout/donate/alipay.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/donate/wechat.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/lib/outdatedbrowser/lang/en.html: -------------------------------------------------------------------------------- 1 |
Your browser is out of date!
2 |

Update your browser to view this website correctly. Update my browser now

3 |

×

4 | -------------------------------------------------------------------------------- /xinac-fantastic.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /theme.yaml: -------------------------------------------------------------------------------- 1 | id: xinac-fantastic 2 | name: Xinac-Fantastic 3 | author: 4 | name: 新逸Cary 5 | website: https://blog.xinac.cn 6 | description: Fantastic主题修改版,https://github.com/jinqilin721/halo-theme-xinac-fantastic 7 | logo: https://blog.xinac.cn/avatar 8 | website: https://github.com/jinqilin721/halo-theme-xinac-fantastic 9 | repo: https://github.com/jinqilin721/halo-theme-xinac-fantastic 10 | version: 1.4.1 11 | require: 1.3.0 12 | -------------------------------------------------------------------------------- /source/css/back-to-top.css: -------------------------------------------------------------------------------- 1 | #back-to-top { 2 | position: fixed; 3 | padding: 8px 0; 4 | transition: 0.4s ease opacity, 0.4s ease width, 0.4s ease transform, 0.4s ease border-radius; 5 | opacity: 0; 6 | line-height: 24px; 7 | outline: none; 8 | transform: translateY(120px); 9 | display: block; 10 | } 11 | #back-to-top.fade-in { 12 | opacity: 1; 13 | } 14 | #back-to-top.rise-up { 15 | transform: translateY(0); 16 | } 17 | -------------------------------------------------------------------------------- /source/images/favicon.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source/css/progressbar.css: -------------------------------------------------------------------------------- 1 | .pace { 2 | -webkit-pointer-events: none; 3 | pointer-events: none; 4 | 5 | -webkit-user-select: none; 6 | -moz-user-select: none; 7 | user-select: none; 8 | } 9 | 10 | .pace-inactive { 11 | display: none; 12 | } 13 | 14 | .pace .pace-progress { 15 | background: #3273dc; 16 | position: fixed; 17 | z-index: 2000; 18 | top: 0; 19 | right: 100%; 20 | width: 100%; 21 | height: 2px; 22 | } -------------------------------------------------------------------------------- /source/js/gallery.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function () { 2 | if (typeof ($.fn.lightGallery) === 'function') { 3 | $('.article').lightGallery({ selector: '.gallery-item' }); 4 | } 5 | if (typeof ($.fn.justifiedGallery) === 'function') { 6 | if ($('.justified-gallery > p > .gallery-item').length) { 7 | $('.justified-gallery > p > .gallery-item').unwrap(); 8 | } 9 | $('.justified-gallery').justifiedGallery(); 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /source/js/widget_pin.js: -------------------------------------------------------------------------------- 1 | if (window.Swiper) { 2 | var swiper = new Swiper('.blog-slider', { 3 | autoplay: { 4 | delay: 3000, 5 | stopOnLastSlide: false, 6 | disableOnInteraction: true, 7 | }, 8 | spaceBetween: 30, 9 | effect: 'fade', 10 | mousewheel: { 11 | invert: false, 12 | }, 13 | // autoHeight: true, 14 | pagination: { 15 | el: '.blog-slider__pagination', 16 | clickable: true, 17 | } 18 | }); 19 | } -------------------------------------------------------------------------------- /layout/comment/comment.ftl: -------------------------------------------------------------------------------- 1 | <#macro comment post,type> 2 | <#if !post.disallowComment!false> 3 | 4 | 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /layout/widget/tagcloud.ftl: -------------------------------------------------------------------------------- 1 | <@tagTag method="list"> 2 | <#if tags?? && tags?size gt 0> 3 |
4 |
5 | 8 | <#list tags as tag> 9 | ${tag.name!}  10 | 11 |
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /layout/share/addtoany.ftl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 22 | 23 | -------------------------------------------------------------------------------- /source/images/thumbnail.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /layout/widget/archive.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 22 |
23 |
-------------------------------------------------------------------------------- /layout/plugin/mathjax.ftl: -------------------------------------------------------------------------------- 1 | <#if (is_post?? || is_sheet??) && settings.mathjax_enable!false> 2 | 3 | 24 | -------------------------------------------------------------------------------- /layout/share/bdshare.ftl: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /layout/tags.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 20 |
21 |
-------------------------------------------------------------------------------- /layout/journals/journals.ftl: -------------------------------------------------------------------------------- 1 | <#if (journals.content)?? && journals.content?size gt 0> 2 | <#macro journalItem journal> 3 |
4 |
5 | 19 |
20 |
21 | 22 | <#list journals.content as journal> 23 | <@journalItem journal=journal/> 24 | 25 | -------------------------------------------------------------------------------- /source/lib/prism/css/prism-line-numbers.css: -------------------------------------------------------------------------------- 1 | pre[class*="language-"].line-numbers { 2 | position: relative; 3 | padding-left: 3.8em; 4 | counter-reset: linenumber; 5 | } 6 | 7 | pre[class*="language-"].line-numbers > code { 8 | position: relative; 9 | white-space: inherit; 10 | } 11 | 12 | .line-numbers .line-numbers-rows { 13 | position: absolute; 14 | pointer-events: none; 15 | top: 0; 16 | font-size: 100%; 17 | left: -3.8em; 18 | width: 3em; /* works for line-numbers below 1000 lines */ 19 | letter-spacing: -1px; 20 | border-right: 1px solid #999; 21 | 22 | -webkit-user-select: none; 23 | -moz-user-select: none; 24 | -ms-user-select: none; 25 | user-select: none; 26 | 27 | } 28 | 29 | .line-numbers-rows > span { 30 | display: block; 31 | counter-increment: linenumber; 32 | } 33 | 34 | .line-numbers-rows > span:before { 35 | content: counter(linenumber); 36 | color: #999; 37 | display: block; 38 | padding-right: 0.8em; 39 | text-align: right; 40 | } 41 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | ## v1.1 3 | 1. 修改`share`组件样式。 4 | 2. 优化`sharejs` 样式,去掉`google+ `等分享。 5 | 3. 增加阅读量显示。 6 | 7 | ## v1.3.0 8 | > 1、全部日期样式改为:yyyy-MM-dd EE
9 | > 2、首页和文章详情页增加了评论量、浏览量、标签,页脚显示靠左
10 | > 3、主题设置增加 关注我和文章代码主题
11 | > 4、友链按排序显示
12 | > 5、摘要如果有代码时,样式会有问题,增加 word-break: break-word;
13 | > 6、页面优化更加细致,新增CDN优选功能,可自行配置CDN网址
14 | > 7、增加是否显示评论和是否显示文章封面图
15 | > 8、增加友情链接优化,使用参考 [Halo自定义页面的使用方法](https://blog.xinac.cn/archives/halo-usage-200409) 16 | 17 |
18 | 19 | ## v1.3.2 20 | > 1、图库页面优化 21 | > 2、文章封面图支持上传图片、使用随机封面图片、关闭封面图片显示 22 | > 3、支持增加一键灰色背景设置 23 | > 4、支持一键使用主题静态CDN,https://s.xinac.net 24 | 25 |
26 | 27 | ## v1.3.3--20.06.24 28 | > 1. 页面源码优化,使html源码更标准 29 | > 2. 分享按钮去除QQ空间分享 30 | > 3. 修复页面滚动时的一个报错问题 31 | 32 |
33 | 34 | ## v1.3.4--20.07.07 35 | > 1. 代码高亮功能优化 36 | 37 | ## v1.4.0--20.11.24 38 | > 1. 添加友链时,如logo不填写,自动获取favicon图标 39 | > 2. 友链网站名称以 -1 结头或结尾时,链接不显示 40 | > 3. 修改默认友链页面的风格,采用WebStack风格 41 | 42 | ## v1.4.1--20.12.09 43 | > 1. 优化友链网址过长的显示问题 -------------------------------------------------------------------------------- /layout/common/widget_pin.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |
8 | 26 December 2019 9 |
Lorem Ipsum Dolor
10 |
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Recusandae voluptate repellendus magni illo ea animi?
11 | READ MORE 12 |
13 |
14 |
15 |
16 |
17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /layout/categories.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 24 |
25 |
-------------------------------------------------------------------------------- /source/lib/outdatedbrowser/outdatedbrowser.min.css: -------------------------------------------------------------------------------- 1 | /*!-------------------------------------------------------------------- 2 | STYLES "Outdated Browser" 3 | Version: 1.1.2 - 2015 4 | author: Burocratik 5 | website: http://www.burocratik.com 6 | * @preserve 7 | -----------------------------------------------------------------------*/ 8 | #outdated{display:none;position:fixed;top:0;left:0;width:100%;height:170px;text-align:center;text-transform:uppercase;z-index:1500;background-color:#f25648;color:#fff}* html #outdated{position:absolute}#outdated h6{font-size:25px;line-height:25px;margin:30px 0 10px}#outdated p{font-size:12px;line-height:12px;margin:0}#outdated #btnUpdateBrowser{display:block;position:relative;padding:10px 20px;margin:30px auto 0;width:230px;color:#fff;text-decoration:none;border:2px solid #fff;cursor:pointer}#outdated #btnUpdateBrowser:hover{color:#f25648;background-color:#fff}#outdated .last{position:absolute;top:10px;right:25px;width:20px;height:20px}#outdated #btnCloseUpdateBrowser{display:block;position:relative;width:100%;height:100%;text-decoration:none;color:#fff;font-size:36px;line-height:36px} -------------------------------------------------------------------------------- /layout/widget/recent_comments.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 | <@commentTag method="latest" top="5"> 7 | <#if comments?? && comments.getTotalElements() gt 0> 8 | <#list comments.content as comment> 9 |
10 |
11 |
12 |
13 | ${comment.author!} : ${comment.content!} 14 |
15 | 16 |
17 |
18 | 19 | 20 | 21 |
22 |
-------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 PPOffice 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /layout/plugin/outdated-browser.ftl: -------------------------------------------------------------------------------- 1 |
2 |
Your browser is out of date!
3 |

Update your browser to view this website correctly. Update my browser now

4 |

×

5 |
6 | 7 | -------------------------------------------------------------------------------- /layout/widget/links.ftl: -------------------------------------------------------------------------------- 1 | <@linkTag method="list"> 2 | <#if links?? && links?size gt 0> 3 |
4 |
5 | 24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /layout/widget/recent_posts.ftl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 | <@postTag method="latest" top="5"> 7 | <#list posts as post> 8 | 25 | 26 | 27 |
28 |
29 | -------------------------------------------------------------------------------- /layout/widget/tag_posts.ftl: -------------------------------------------------------------------------------- 1 | <#if tags?exists && tags?size gt 0> 2 |
3 |
4 | 7 | <@postTag method="listByTagId" tagId="${tags[0].id}"> 8 | <#list posts as post> 9 | <#if post_index lt 3> 10 | 25 | 26 | 27 | 28 |
29 |
30 | 31 | -------------------------------------------------------------------------------- /layout/widget/cate_posts.ftl: -------------------------------------------------------------------------------- 1 | <#if categories?exists && categories?size gt 0> 2 |
3 |
4 | 7 | <@postTag method="listByCategoryId" categoryId="${categories[0].id}"> 8 | <#list posts as post> 9 | <#if post_index lt 3> 10 | 25 | 26 | 27 | 28 |
29 |
30 | 31 | -------------------------------------------------------------------------------- /source/css/insight.css: -------------------------------------------------------------------------------- 1 | .ins-section-container { 2 | position: relative; 3 | background: #f7f7f7; 4 | } 5 | 6 | .ins-section { 7 | font-size: 14px; 8 | line-height: 16px; 9 | } 10 | 11 | .ins-section .ins-section-header, .ins-section .ins-search-item { 12 | padding: 8px 15px; 13 | } 14 | 15 | .ins-section .ins-section-header { 16 | color: #9a9a9a; 17 | border-bottom: 1px solid #e2e2e2; 18 | } 19 | 20 | .ins-section .ins-slug { 21 | margin-left: 5px; 22 | color: #9a9a9a; 23 | } 24 | 25 | .ins-section .ins-slug:before { 26 | content: '('; 27 | } 28 | 29 | .ins-section .ins-slug:after { 30 | content: ')'; 31 | } 32 | 33 | .ins-section .ins-search-item header, .ins-section .ins-search-item .ins-search-preview { 34 | overflow: hidden; 35 | white-space: nowrap; 36 | text-overflow: ellipsis; 37 | } 38 | 39 | .ins-section .ins-search-item header .ins-title { 40 | margin-left: 8px; 41 | } 42 | 43 | .ins-section .ins-search-item .ins-search-preview { 44 | height: 15px; 45 | font-size: 12px; 46 | color: #9a9a9a; 47 | margin: 5px 0 0 20px; 48 | } 49 | 50 | .ins-section .ins-search-item:hover, .ins-section .ins-search-item.active { 51 | color: #fff; 52 | background: #3273dc; 53 | } 54 | 55 | .ins-section .ins-search-item:hover .ins-slug, .ins-section .ins-search-item.active .ins-slug, .ins-section .ins-search-item:hover .ins-search-preview, .ins-section .ins-search-item.active .ins-search-preview { 56 | color: #fff; 57 | } -------------------------------------------------------------------------------- /layout/widget/toc.ftl: -------------------------------------------------------------------------------- 1 | <% if (get_config('toc') === true && (post.layout === 'page' || post.layout === 'post')) { 2 | function buildToc(toc) { 3 | let result = ''; 4 | if (toc.hasOwnProperty('id') && toc.hasOwnProperty('index') && toc.hasOwnProperty('text')) { 5 | result += `
  • 6 | 7 | ${toc.index} 8 | ${toc.text} 9 | `; 10 | } 11 | let keys = Object.keys(toc); 12 | keys.indexOf('id') > -1 && keys.splice(keys.indexOf('id'), 1); 13 | keys.indexOf('text') > -1 && keys.splice(keys.indexOf('text'), 1); 14 | keys.indexOf('index') > -1 && keys.splice(keys.indexOf('index'), 1); 15 | keys = keys.map(k => parseInt(k)).sort((a, b) => a - b); 16 | if (keys.length > 0) { 17 | result += ''; 22 | } 23 | if (toc.hasOwnProperty('id') && toc.hasOwnProperty('index') && toc.hasOwnProperty('text')) { 24 | result += '
  • '; 25 | } 26 | return result; 27 | } 28 | %> 29 |
    30 |
    31 | 37 |
    38 |
    39 | <% } %> 40 | -------------------------------------------------------------------------------- /layout/common/head.ftl: -------------------------------------------------------------------------------- 1 | <#if settings.theme_static_base??> 2 | <#if settings.theme_static_base == ''> 3 | <#elseif settings.theme_static_base == '/' || settings.theme_static_base == '.'> 4 | <#assign theme_base = ''> 5 | <#else> 6 | <#assign theme_base = settings.theme_static_base> 7 | 8 | 9 | 10 | <#function check_post_thumbnail_enable> 11 | <#return (settings.post_thumbnail_enable?? && settings.post_thumbnail_enable != 'false')> 12 | 13 | 14 | <#assign time_count = 0> 15 | <#function post_thumbnail_url src> 16 | <#assign time_count = time_count + 1> 17 | <#if check_post_thumbnail_enable()> 18 | <#assign timestamp = .now?long + time_count> 19 | <#assign random_pic = timestamp?substring(timestamp?length - 1) + ".jpg"> 20 | <#if settings.post_thumbnail_enable == 'true'> 21 | <#if src != ''> 22 | <#return src> 23 | <#else> 24 | <#return theme_base + "/source/images/cover/" + random_pic> 25 | 26 | <#elseif settings.post_thumbnail_enable == 'random_pic'> 27 | <#return theme_base + "/source/images/cover/" + random_pic> 28 | 29 | 30 | 31 | 32 | <#-- 截取指定个数的字符 --> 33 | <#function get_title_head title number> 34 | <#if title?? && number?number gt 0> 35 | <#if title?length gte number> 36 | <#return title?substring(0, number)> 37 | 38 | 39 | <#return title> 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > 当前主题已支持 Halo v1.3.0版本,Halo 1.2.0及以下版本请使用 [v1.2.0](https://github.com/jinqilin721/halo-theme-xinac-fantastic/tree/v1.2.0) 版本主题。 2 | 3 | --- 4 | 5 | Halo博客系统主题
    6 | Fantastic主题修改版,为方便维护,重新发布此版本。
    7 | 8 | 此版本相关主题: 9 | - https://github.com/Bursteretion/halo-theme-fantastic 10 | - https://github.com/imkundev/halo-theme-fantastic 11 | 12 | --- 13 | 14 |

    本主题特色:

    15 | 16 | > 1、全部日期样式改为:yyyy-MM-dd EE
    17 | > 2、首页和文章详情页增加了评论量、浏览量、标签,页脚显示靠左
    18 | > 3、主题设置增加 关注我和文章代码主题
    19 | > 4、友链按排序显示
    20 | > 5、页面优化更加细致,可自由配置主题静态资源CDN
    21 | > 6、增加是否显示评论和是否显示文章封面图
    22 | > 7、增加友情链接优化,使用参考 [Halo自定义页面的使用方法](https://blog.xinac.cn/archives/halo-usage-200409) 23 | > 8、图库页面优化 24 | > 9、文章封面图支持上传图片、使用随机封面图片、关闭封面图片显示 25 | > 10、支持增加一键灰色背景设置 26 | > 11、支持一键使用主题静态CDN,https://s.xinac.net 27 | 28 |
    29 |
    30 |
    31 | 32 | > 该主题的友链页面评论问题已解决。使用参考 33 | [Halo自定义页面的使用方法](https://blog.xinac.cn/archives/halo-usage-200409) 34 |
    35 | 36 | > 效果预览:https://blog.xinac.cn/s/links 37 | 38 |
    39 | 40 | 41 | --- 42 | 43 | ## 预览网址 44 | [https://blog.xinac.cn/](https://blog.xinac.cn/) 45 | 46 | --- 47 | 48 | ## 预览截图 49 | 50 | ![](https://qiniucdn.xinac.net/blog/screenshot_1586231110425.png) 51 | 52 | ![](https://qiniucdn.xinac.net/blog/screenshot-2_1586231110444.png) 53 | 54 | ![](https://qiniucdn.xinac.net/blog/screenshot-3_1586231110351.png) 55 | 56 | ![](https://qiniucdn.xinac.net/blog/screenshot-4_1586231115821.png) 57 | 58 | 59 | ## 使用方法 60 | 61 | 1. 克隆或者下载 62 | 2. 压缩为 zip 压缩包之后在后台的主题设置直接上传即可使用 63 | 3. 用Halo自还的程序拉取 `https://github.com/jinqilin721/halo-theme-xinac-fantastic.git` 64 | 4. 当前版本`1.4.1`,修改日志详见 `CHANGELOG.md` -------------------------------------------------------------------------------- /layout/common/scripts.ftl: -------------------------------------------------------------------------------- 1 | 2 | <#include "../plugin/gallery.ftl"> 3 | <#include "../plugin/outdated-browser.ftl"> 4 | <#include "../plugin/mathjax.ftl"> 5 | <#include "../plugin/back-to-top.ftl"> 6 | 7 | 8 | <#if is_index??> 9 | 10 | 11 | <#if is_post??> 12 | 13 | 20 | 21 | <#if is_post?? || is_sheet?? || is_journal??> 22 | 23 | 24 | 25 | 48 | -------------------------------------------------------------------------------- /source/assets/css/nav.css: -------------------------------------------------------------------------------- 1 | .box2 { 2 | height: 86px; 3 | cursor: pointer; 4 | border-radius: 4px; 5 | padding: 0px 30px 0px 30px; 6 | background-color: #fff; 7 | border-radius: 4px; 8 | border: 1px solid #e4ecf3; 9 | margin: 20px 0 0 0; 10 | -webkit-transition: all 0.3s ease; 11 | -moz-transition: all 0.3s ease; 12 | -o-transition: all 0.3s ease; 13 | transition: all 0.3s ease; 14 | } 15 | 16 | .box2:hover { 17 | transform: translateY(-6px); 18 | -webkit-transform: translateY(-6px); 19 | -moz-transform: translateY(-6px); 20 | box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 21 | -webkit-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 22 | -moz-box-shadow: 0 26px 40px -24px rgba(0, 36, 100, 0.3); 23 | -webkit-transition: all 0.3s ease; 24 | -moz-transition: all 0.3s ease; 25 | -o-transition: all 0.3s ease; 26 | transition: all 0.3s ease; 27 | } 28 | 29 | .xe-comment-entry img { 30 | float: left; 31 | display: block; 32 | margin-right: 10px; 33 | } 34 | .xe-comment { 35 | transform: translateY(-50%); 36 | position: absolute; 37 | margin-left: 50px; 38 | top: 50%; 39 | } 40 | .xe-comment p { 41 | margin-bottom: 0px; 42 | margin-right: 15px; 43 | } 44 | .overflowClip_1 { 45 | overflow: hidden; 46 | text-overflow: ellipsis; 47 | display: -webkit-box; 48 | -webkit-line-clamp: 1; 49 | -webkit-box-orient: vertical; 50 | } 51 | .overflowClip_2 { 52 | overflow: hidden; 53 | text-overflow: ellipsis; 54 | display: -webkit-box; 55 | -webkit-line-clamp: 2; 56 | -webkit-box-orient: vertical; 57 | } 58 | 59 | 60 | .submit-tag{ 61 | margin-top: 50px; 62 | 63 | } 64 | 65 | .img-circle { 66 | padding: 7px 0; 67 | } -------------------------------------------------------------------------------- /index.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="${blog_title!}" canonical="${blog_url!}"> 4 | <#list posts.content as post> 5 | <#if post.topPriority != 1> 6 | <@article post,'index','null',true /> 7 | 8 | 9 | <#if posts.getTotalPages() gt 0> 10 |
    11 | 30 |
    31 | 32 | 33 | -------------------------------------------------------------------------------- /source/js/animation.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | function $() { 3 | return Array.prototype.slice.call(document.querySelectorAll.apply(document, arguments)); 4 | } 5 | 6 | $('body > .navbar, body > .section').forEach(function (element) { 7 | element.style.transition = '0s'; 8 | element.style.opacity = '0'; 9 | }); 10 | document.querySelector('body > .navbar').style.transform = 'translateY(-100px)'; 11 | ['.column-main > .card', 12 | '.column-left > .card, .column-right-shadow > .card', 13 | '.column-right > .card'].map(function (selector) { 14 | $(selector).forEach(function (element) { 15 | element.style.transition = '0s'; 16 | element.style.opacity = '0'; 17 | element.style.transform = 'scale(0.8)'; 18 | element.style.transformOrigin = 'center top'; 19 | }); 20 | }); 21 | setTimeout(function () { 22 | $('body > .navbar, body > .section, body > .footer').forEach(function (element) { 23 | element.style.opacity = '1'; 24 | element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out'; 25 | }); 26 | document.querySelector('body > .navbar').style.transform = 'translateY(0)'; 27 | ['.column-main > .card', 28 | '.column-left > .card, .column-right-shadow > .card', 29 | '.column-right > .card'].map(function (selector) { 30 | var i = 1; 31 | $(selector).forEach(function (element) { 32 | setTimeout(function () { 33 | element.style.opacity = '1'; 34 | element.style.transform = ''; 35 | element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out'; 36 | }, i * 100); 37 | i++; 38 | }); 39 | }); 40 | }); 41 | })(); 42 | -------------------------------------------------------------------------------- /journals.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="耳语 - ${blog_title!}" canonical="${journals_url!}"> 4 |
    5 | <#include "layout/journals/journals.ftl"/> 6 |
    7 |
    8 | <#if journals.getTotalPages() gt 0> 9 |
    10 | 32 |
    33 | 34 | -------------------------------------------------------------------------------- /search.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="搜索:${keyword!} - ${blog_title!}" canonical="${context!}/search?keyword=${keyword!}"> 4 | <#list posts.content as post> 5 | <@article post,'index','null',true /> 6 | 7 | <#if posts.getTotalPages() gt 0> 8 |
    9 | 28 |
    29 | <#else> 30 |
    31 |
    32 | 没有你要找的内容『${keyword}』 33 |
    34 |
    35 | 36 | 37 | -------------------------------------------------------------------------------- /layout/common/module.ftl: -------------------------------------------------------------------------------- 1 | <#macro module name> 2 | <#if name == 'share'> 3 |
    4 |
    5 | <#if settings.share_type?? && settings.share_type!=''> 6 | <#include "../share/${settings.share_type}.ftl"> 7 | 8 |
    9 |
    10 | 11 | <#if name == 'slider'> 12 |
    13 |
    14 | <#list posts.content as post> 15 | <#if post.topPriority == 1> 16 |
    17 |
    18 | 19 | ${post.title!} 20 | 21 |
    22 |
    23 | ${post.createTime?string["yyyy-MM-dd EE"]} 24 | 25 |
    ${post.summary!}
    26 | 阅读更多 27 |
    28 |
    29 | 30 | 31 |
    32 |
    33 |
    34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /source/assets/js/xenon-api.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Xenon API Functions 3 | * 4 | * Theme by: www.laborator.co 5 | **/ 6 | 7 | 8 | function rtl() // checks whether the content is in RTL mode 9 | { 10 | if(typeof window.isRTL == 'boolean') 11 | return window.isRTL; 12 | 13 | window.isRTL = jQuery("html").get(0).dir == 'rtl' ? true : false; 14 | 15 | return window.isRTL; 16 | } 17 | 18 | 19 | 20 | // Page Loader 21 | function show_loading_bar(options) 22 | { 23 | var defaults = { 24 | pct: 0, 25 | delay: 1.3, 26 | wait: 0, 27 | before: function(){}, 28 | finish: function(){}, 29 | resetOnEnd: true 30 | }; 31 | 32 | if(typeof options == 'object') 33 | defaults = jQuery.extend(defaults, options); 34 | else 35 | if(typeof options == 'number') 36 | defaults.pct = options; 37 | 38 | 39 | if(defaults.pct > 100) 40 | defaults.pct = 100; 41 | else 42 | if(defaults.pct < 0) 43 | defaults.pct = 0; 44 | 45 | var $ = jQuery, 46 | $loading_bar = $(".xenon-loading-bar"); 47 | 48 | if($loading_bar.length == 0) 49 | { 50 | $loading_bar = $('
    '); 51 | public_vars.$body.append( $loading_bar ); 52 | } 53 | 54 | var $pct = $loading_bar.find('span'), 55 | current_pct = $pct.data('pct'), 56 | is_regress = current_pct > defaults.pct; 57 | 58 | 59 | defaults.before(current_pct); 60 | 61 | TweenMax.to($pct, defaults.delay, {css: {width: defaults.pct + '%'}, delay: defaults.wait, ease: is_regress ? Expo.easeOut : Expo.easeIn, 62 | onStart: function() 63 | { 64 | $loading_bar.removeClass('progress-is-hidden'); 65 | }, 66 | onComplete: function() 67 | { 68 | var pct = $pct.data('pct'); 69 | 70 | if(pct == 100 && defaults.resetOnEnd) 71 | { 72 | hide_loading_bar(); 73 | } 74 | 75 | defaults.finish(pct); 76 | }, 77 | onUpdate: function() 78 | { 79 | $pct.data('pct', parseInt($pct.get(0).style.width, 10)); 80 | }}); 81 | } 82 | 83 | function hide_loading_bar() 84 | { 85 | var $ = jQuery, 86 | $loading_bar = $(".xenon-loading-bar"), 87 | $pct = $loading_bar.find('span'); 88 | 89 | $loading_bar.addClass('progress-is-hidden'); 90 | $pct.width(0).data('pct', 0); 91 | } -------------------------------------------------------------------------------- /source/css/search.css: -------------------------------------------------------------------------------- 1 | .searchbox { 2 | display: none; 3 | perspective: 50em; 4 | top: 0; 5 | left: 0; 6 | width: 100%; 7 | height: 100%; 8 | z-index: 100; 9 | background: rgba(0, 0, 0, 0.7); 10 | transform-origin: 0%; 11 | perspective-origin: top center; 12 | } 13 | 14 | .searchbox.show { 15 | display: block; 16 | } 17 | 18 | .searchbox, .searchbox .searchbox-container { 19 | position: fixed; 20 | } 21 | 22 | .searchbox .searchbox-container { 23 | overflow: hidden; 24 | } 25 | 26 | .searchbox .searchbox-selectable { 27 | cursor: pointer; 28 | } 29 | 30 | .searchbox .searchbox-input-wrapper { 31 | position: relative; 32 | } 33 | 34 | .searchbox .searchbox-input-wrapper .searchbox-input { 35 | width: 100%; 36 | border: none; 37 | outline: none; 38 | font-size: 16px; 39 | box-shadow: none; 40 | font-weight: 200; 41 | border-radius: 0; 42 | background: #fff; 43 | line-height: 20px; 44 | box-sizing: border-box; 45 | padding: 12px 28px 12px 20px; 46 | border-bottom: 1px solid #e2e2e2; 47 | } 48 | 49 | .searchbox .searchbox-input-wrapper .searchbox-close { 50 | top: 50%; 51 | right: 6px; 52 | width: 20px; 53 | height: 20px; 54 | line-height: 20px; 55 | font-size: 16px; 56 | margin-top: -11px; 57 | position: absolute; 58 | text-align: center; 59 | display: inline-block; 60 | } 61 | 62 | .searchbox .searchbox-input-wrapper .searchbox-close:hover { 63 | color: #3273dc; 64 | } 65 | 66 | .searchbox .searchbox-result-wrapper { 67 | left: 0; 68 | right: 0; 69 | top: 45px; 70 | bottom: 0; 71 | overflow-y: auto; 72 | position: absolute; 73 | } 74 | 75 | .searchbox .searchbox-container { 76 | left: 50%; 77 | top: 100px; 78 | width: 540px; 79 | z-index: 101; 80 | bottom: 100px; 81 | margin-left: -270px; 82 | box-sizing: border-box; 83 | } 84 | 85 | @media screen and (max-width: 559px), screen and (max-height: 479px) { 86 | .searchbox .searchbox-container { 87 | top: 0; 88 | left: 0; 89 | margin: 0; 90 | width: 100%; 91 | height: 100%; 92 | background: #f7f7f7; 93 | } 94 | } -------------------------------------------------------------------------------- /source/assets/css/fonts/elusive/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /layout/category.ftl: -------------------------------------------------------------------------------- 1 | <#if settings.nav_enable!false> 2 |
    3 |
    4 | 10 |
    11 |
    12 | 13 | <#if posts.content?size gt 0> 14 | <#list posts.content as post> 15 | <@article post,'index','null',true /> 16 | 17 | <#if posts.getTotalPages() gt 0> 18 |
    19 | 38 |
    39 | 40 | <#else> 41 |
    42 |
    43 | 空空如也 44 |
    45 |
    46 | 47 | -------------------------------------------------------------------------------- /layout/tag.ftl: -------------------------------------------------------------------------------- 1 | <#include "common/article.ftl"> 2 | <#if settings.nav_enable!false> 3 |
    4 |
    5 | 11 |
    12 |
    13 | 14 | <#if posts.content?size gt 0> 15 | <#list posts.content as post> 16 | <@article post,'index','null',true /> 17 | 18 | <#if posts.getTotalPages() gt 0> 19 |
    20 | 39 |
    40 | 41 | <#else> 42 |
    43 |
    44 | 空空如也 45 |
    46 |
    47 | 48 | -------------------------------------------------------------------------------- /source/assets/js/resizeable.js: -------------------------------------------------------------------------------- 1 | /* 2 | This function will be called in the event when browser breakpoint changes 3 | */ 4 | 5 | var public_vars = public_vars || {}; 6 | 7 | jQuery.extend(public_vars, { 8 | 9 | breakpoints: { 10 | largescreen: [991, -1], 11 | tabletscreen: [768, 990], 12 | devicescreen: [420, 767], 13 | sdevicescreen: [0, 419] 14 | }, 15 | 16 | lastBreakpoint: null 17 | }); 18 | 19 | 20 | /* Main Function that will be called each time when the screen breakpoint changes */ 21 | function resizable(breakpoint) 22 | { 23 | var sb_with_animation; 24 | 25 | // Large Screen Specific Script 26 | if(is('largescreen')) 27 | { 28 | } 29 | 30 | 31 | // Tablet or larger screen 32 | if(ismdxl()) 33 | { 34 | } 35 | 36 | 37 | // Tablet Screen Specific Script 38 | if(is('tabletscreen')) 39 | { 40 | } 41 | 42 | 43 | // Tablet device screen 44 | if(is('tabletscreen')) 45 | { 46 | public_vars.$sidebarMenu.addClass('collapsed'); 47 | ps_destroy(); 48 | } 49 | 50 | 51 | // Tablet Screen Specific Script 52 | if(isxs()) 53 | { 54 | } 55 | 56 | 57 | // Trigger Event 58 | jQuery(window).trigger('xenon.resize'); 59 | } 60 | 61 | 62 | 63 | /* Functions */ 64 | 65 | // Get current breakpoint 66 | function get_current_breakpoint() 67 | { 68 | var width = jQuery(window).width(), 69 | breakpoints = public_vars.breakpoints; 70 | 71 | for(var breakpont_label in breakpoints) 72 | { 73 | var bp_arr = breakpoints[breakpont_label], 74 | min = bp_arr[0], 75 | max = bp_arr[1]; 76 | 77 | if(max == -1) 78 | max = width; 79 | 80 | if(min <= width && max >= width) 81 | { 82 | return breakpont_label; 83 | } 84 | } 85 | 86 | return null; 87 | } 88 | 89 | 90 | // Check current screen breakpoint 91 | function is(screen_label) 92 | { 93 | return get_current_breakpoint() == screen_label; 94 | } 95 | 96 | 97 | // Is xs device 98 | function isxs() 99 | { 100 | return is('devicescreen') || is('sdevicescreen'); 101 | } 102 | 103 | // Is md or xl 104 | function ismdxl() 105 | { 106 | return is('tabletscreen') || is('largescreen'); 107 | } 108 | 109 | 110 | // Trigger Resizable Function 111 | function trigger_resizable() 112 | { 113 | if(public_vars.lastBreakpoint != get_current_breakpoint()) 114 | { 115 | public_vars.lastBreakpoint = get_current_breakpoint(); 116 | resizable(public_vars.lastBreakpoint); 117 | } 118 | 119 | 120 | // Trigger Event (Repeated) 121 | jQuery(window).trigger('xenon.resized'); 122 | } -------------------------------------------------------------------------------- /archives.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <@layout title="归档 - ${blog_title!}" canonical="${archives_url!}"> 4 | <#list archives as archive> 5 |
    6 |
    7 | 10 |
    11 | <#list archive.posts as post> 12 |
    13 |
    14 |
    15 | 16 | ${post.title!} 17 |
    18 |
    19 |
    20 | 21 |
    22 |
    23 |
    24 | 25 | <#if posts.getTotalPages() gt 0> 26 |
    27 | 46 |
    47 | 48 | 49 | -------------------------------------------------------------------------------- /links_bak.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/common/article.ftl"> 3 | <#include "layout/comment/comment.ftl"> 4 | <@layout title="链接 - ${blog_title!}" canonical="${links_url!}"> 5 | 6 | <#include "layout/widget/links.ftl"> 7 |
    8 |
    9 |

    友链申请

    10 |
    11 |

    # 友链须知

    12 |
    13 |

    1. 请确认您的网站可正常访问

    14 |

    2. 内容包括但不限于原创、技术博客

    15 |

    3. 不接受含有黄赌毒、政治敏感、暴力的网站

    16 |

    4. 没有广告

    17 |

    5. 添加本站链接

    18 |
    19 |

    # 本站信息

    20 |
    21 |

    名称:${user.nickname!}

    22 |

    链接:${context!}

    23 |

    头像:${context!}avatar

    24 |

    描述:${user.description!}

    25 |
    26 |

    本人会不定期清理无法访问的链接,请确保自己的链接长期有效 27 |

    28 |

    有需要互换友链的童鞋也可在下方评论区留言。

    29 |
    30 |
    31 |
    32 |
    33 |
    34 |

    35 | 评论 36 |

    37 |
    38 |
    39 | 40 | 41 | 47 | 48 |
    49 |
    50 |
    51 |
    52 | -------------------------------------------------------------------------------- /layout/share/sharejs.ftl: -------------------------------------------------------------------------------- 1 |
    2 | <#if is_post??> 3 | 6 | 7 |
    8 | 9 | 10 | -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/css/linecons-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .linecons-music:before { content: '\e800'; } /* '' */ 3 | .linecons-search:before { content: '\e801'; } /* '' */ 4 | .linecons-mail:before { content: '\e802'; } /* '' */ 5 | .linecons-heart:before { content: '\e803'; } /* '' */ 6 | .linecons-star:before { content: '\e804'; } /* '' */ 7 | .linecons-user:before { content: '\e805'; } /* '' */ 8 | .linecons-videocam:before { content: '\e806'; } /* '' */ 9 | .linecons-camera:before { content: '\e807'; } /* '' */ 10 | .linecons-photo:before { content: '\e808'; } /* '' */ 11 | .linecons-attach:before { content: '\e809'; } /* '' */ 12 | .linecons-lock:before { content: '\e80a'; } /* '' */ 13 | .linecons-eye:before { content: '\e80b'; } /* '' */ 14 | .linecons-tag:before { content: '\e80c'; } /* '' */ 15 | .linecons-thumbs-up:before { content: '\e80d'; } /* '' */ 16 | .linecons-pencil:before { content: '\e80e'; } /* '' */ 17 | .linecons-comment:before { content: '\e80f'; } /* '' */ 18 | .linecons-location:before { content: '\e810'; } /* '' */ 19 | .linecons-cup:before { content: '\e811'; } /* '' */ 20 | .linecons-trash:before { content: '\e812'; } /* '' */ 21 | .linecons-doc:before { content: '\e813'; } /* '' */ 22 | .linecons-note:before { content: '\e814'; } /* '' */ 23 | .linecons-cog:before { content: '\e815'; } /* '' */ 24 | .linecons-params:before { content: '\e816'; } /* '' */ 25 | .linecons-calendar:before { content: '\e817'; } /* '' */ 26 | .linecons-sound:before { content: '\e818'; } /* '' */ 27 | .linecons-clock:before { content: '\e819'; } /* '' */ 28 | .linecons-lightbulb:before { content: '\e81a'; } /* '' */ 29 | .linecons-tv:before { content: '\e81b'; } /* '' */ 30 | .linecons-desktop:before { content: '\e81c'; } /* '' */ 31 | .linecons-mobile:before { content: '\e81d'; } /* '' */ 32 | .linecons-cd:before { content: '\e81e'; } /* '' */ 33 | .linecons-inbox:before { content: '\e81f'; } /* '' */ 34 | .linecons-globe:before { content: '\e820'; } /* '' */ 35 | .linecons-cloud:before { content: '\e821'; } /* '' */ 36 | .linecons-paper-plane:before { content: '\e822'; } /* '' */ 37 | .linecons-fire:before { content: '\e823'; } /* '' */ 38 | .linecons-graduation-cap:before { content: '\e824'; } /* '' */ 39 | .linecons-megaphone:before { content: '\e825'; } /* '' */ 40 | .linecons-database:before { content: '\e826'; } /* '' */ 41 | .linecons-key:before { content: '\e827'; } /* '' */ 42 | .linecons-beaker:before { content: '\e828'; } /* '' */ 43 | .linecons-truck:before { content: '\e829'; } /* '' */ 44 | .linecons-money:before { content: '\e82a'; } /* '' */ 45 | .linecons-food:before { content: '\e82b'; } /* '' */ 46 | .linecons-shop:before { content: '\e82c'; } /* '' */ 47 | .linecons-diamond:before { content: '\e82d'; } /* '' */ 48 | .linecons-t-shirt:before { content: '\e82e'; } /* '' */ 49 | .linecons-wallet:before { content: '\e82f'; } /* '' */ -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/css/meteocons-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .meteocons-windy-rain-inv:before { content: '\e800'; } /* '' */ 3 | .meteocons-snow-inv:before { content: '\e801'; } /* '' */ 4 | .meteocons-snow-heavy-inv:before { content: '\e802'; } /* '' */ 5 | .meteocons-hail-inv:before { content: '\e803'; } /* '' */ 6 | .meteocons-clouds-inv:before { content: '\e804'; } /* '' */ 7 | .meteocons-clouds-flash-inv:before { content: '\e805'; } /* '' */ 8 | .meteocons-temperature:before { content: '\e806'; } /* '' */ 9 | .meteocons-compass:before { content: '\e807'; } /* '' */ 10 | .meteocons-na:before { content: '\e808'; } /* '' */ 11 | .meteocons-celcius:before { content: '\e809'; } /* '' */ 12 | .meteocons-fahrenheit:before { content: '\e80a'; } /* '' */ 13 | .meteocons-clouds-flash-alt:before { content: '\e80b'; } /* '' */ 14 | .meteocons-sun-inv:before { content: '\e80c'; } /* '' */ 15 | .meteocons-moon-inv:before { content: '\e80d'; } /* '' */ 16 | .meteocons-cloud-sun-inv:before { content: '\e80e'; } /* '' */ 17 | .meteocons-cloud-moon-inv:before { content: '\e80f'; } /* '' */ 18 | .meteocons-cloud-inv:before { content: '\e810'; } /* '' */ 19 | .meteocons-cloud-flash-inv:before { content: '\e811'; } /* '' */ 20 | .meteocons-drizzle-inv:before { content: '\e812'; } /* '' */ 21 | .meteocons-rain-inv:before { content: '\e813'; } /* '' */ 22 | .meteocons-windy-inv:before { content: '\e814'; } /* '' */ 23 | .meteocons-sunrise:before { content: '\e815'; } /* '' */ 24 | .meteocons-sun:before { content: '\e816'; } /* '' */ 25 | .meteocons-moon:before { content: '\e817'; } /* '' */ 26 | .meteocons-eclipse:before { content: '\e818'; } /* '' */ 27 | .meteocons-mist:before { content: '\e819'; } /* '' */ 28 | .meteocons-wind:before { content: '\e81a'; } /* '' */ 29 | .meteocons-snowflake:before { content: '\e81b'; } /* '' */ 30 | .meteocons-cloud-sun:before { content: '\e81c'; } /* '' */ 31 | .meteocons-cloud-moon:before { content: '\e81d'; } /* '' */ 32 | .meteocons-fog-sun:before { content: '\e81e'; } /* '' */ 33 | .meteocons-fog-moon:before { content: '\e81f'; } /* '' */ 34 | .meteocons-fog-cloud:before { content: '\e820'; } /* '' */ 35 | .meteocons-fog:before { content: '\e821'; } /* '' */ 36 | .meteocons-cloud:before { content: '\e822'; } /* '' */ 37 | .meteocons-cloud-flash:before { content: '\e823'; } /* '' */ 38 | .meteocons-cloud-flash-alt:before { content: '\e824'; } /* '' */ 39 | .meteocons-drizzle:before { content: '\e825'; } /* '' */ 40 | .meteocons-rain:before { content: '\e826'; } /* '' */ 41 | .meteocons-windy:before { content: '\e827'; } /* '' */ 42 | .meteocons-windy-rain:before { content: '\e828'; } /* '' */ 43 | .meteocons-snow:before { content: '\e829'; } /* '' */ 44 | .meteocons-snow-alt:before { content: '\e82a'; } /* '' */ 45 | .meteocons-snow-heavy:before { content: '\e82b'; } /* '' */ 46 | .meteocons-hail:before { content: '\e82c'; } /* '' */ 47 | .meteocons-clouds:before { content: '\e82d'; } /* '' */ 48 | .meteocons-clouds-flash:before { content: '\e82e'; } /* '' */ -------------------------------------------------------------------------------- /source/lib/dianji.js: -------------------------------------------------------------------------------- 1 | (function (window, document, undefined) { 2 | var hearts = []; 3 | 4 | window.requestAnimationFrame = (function () { 5 | return window.requestAnimationFrame || 6 | window.webkitRequestAnimationFrame || 7 | window.mozRequestAnimationFrame || 8 | window.oRequestAnimationFrame || 9 | window.msRequestAnimationFrame || 10 | function (callback) { 11 | setTimeout(callback, 1000 / 60); 12 | } 13 | })(); 14 | 15 | init(); 16 | 17 | function init() { 18 | css(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: absolute;}.heart:after{top: -5px;}.heart:before{left: -5px;}"); 19 | attachEvent(); 20 | gameloop(); 21 | } 22 | 23 | function gameloop() { 24 | for (var i = 0; i < hearts.length; i++) { 25 | if (hearts[i].alpha <= 0) { 26 | document.body.removeChild(hearts[i].el); 27 | hearts.splice(i, 1); 28 | continue; 29 | } 30 | 31 | hearts[i].y--; 32 | hearts[i].scale += 0.004; 33 | hearts[i].alpha -= 0.013; 34 | hearts[i].el.style.cssText = "left:" + hearts[i].x + "px;top:" + hearts[i].y + "px;opacity:" + hearts[i].alpha + ";transform:scale(" + hearts[i].scale + "," + hearts[i].scale + ") rotate(45deg);background:" + hearts[i].color; 35 | } 36 | 37 | requestAnimationFrame(gameloop); 38 | } 39 | 40 | function attachEvent() { 41 | var old = typeof window.onclick === "function" && window.onclick; 42 | window.onclick = function (event) { 43 | old && old(); 44 | createHeart(event); 45 | } 46 | } 47 | 48 | function createHeart(event) { 49 | var d = document.createElement("div"); 50 | d.className = "heart"; 51 | hearts.push({ 52 | el: d, 53 | x: event.clientX - 5, 54 | y: event.clientY - 5, 55 | scale: 1, 56 | alpha: 1, 57 | color: randomColor() 58 | }); 59 | 60 | document.body.appendChild(d); 61 | } 62 | 63 | function css(css) { 64 | var style = document.createElement("style"); 65 | style.type = "text/css"; 66 | try { 67 | style.appendChild(document.createTextNode(css)); 68 | } catch (ex) { 69 | style.styleSheet.cssText = css; 70 | } 71 | 72 | document.getElementsByTagName('head')[0].appendChild(style); 73 | } 74 | 75 | function randomColor() { 76 | return "rgb(" + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + "," + (~~(Math.random() * 255)) + ")"; 77 | } 78 | 79 | })(window, document); 80 | -------------------------------------------------------------------------------- /source/lib/lg/js/lg-fullscreen.min.js: -------------------------------------------------------------------------------- 1 | /**! 2 | * lg-fullscreen.js | 1.1.0 | February 23rd 2019 3 | * http://sachinchoolur.github.io/lg-fullscreen.js 4 | * Copyright (c) 2016 Sachin N; 5 | * @license GPLv3 6 | */ 7 | !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.LgFullscreen=e()}}(function(){var e,n,l;return function(){function e(n,l,t){function r(o,c){if(!l[o]){if(!n[o]){var s="function"==typeof require&&require;if(!c&&s)return s(o,!0);if(u)return u(o,!0);var i=new Error("Cannot find module '"+o+"'");throw i.code="MODULE_NOT_FOUND",i}var f=l[o]={exports:{}};n[o][0].call(f.exports,function(e){return r(n[o][1][e]||e)},f,f.exports,e,n,l,t)}return l[o].exports}for(var u="function"==typeof require&&require,o=0;o=c;c++)setTimeout(function(t){return function(){e(t)}}(c),8*c)}" "===languagePath||0==languagePath.length?r():a(languagePath);var d='
    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×

    '}}; -------------------------------------------------------------------------------- /source/lib/toc/toc.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";(function(t){var n,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;nr.order;i++){var o=e.splice(i,1);r.childH=r.childH.concat(o),i--}r.childH.length&&t(r.childH,0);for(var c=n+1;c[hide][显示目录]',this.insertDom.parentNode.insertBefore(e,this.insertDom),e.getElementsByClassName("hide_toc_btn")[0].addEventListener("click",function(){e.className=e.className+" hide"}),e.getElementsByClassName("show_toc_btn")[0].addEventListener("click",function(){e.className="toc_wrap"}),function e(n,r,i,o){var c=1;for(var l=0;l'+s+" "+r[l].innerHTML+"",r[l].setAttribute("id","toc_"+s),n.appendChild(a),r[l].childH&&r[l].childH.length&&e(a,r[l].childH,i+1,s),c++}}(document.getElementById("toc"),this.childH,1,"")}}}]),t}();"object"===r(t)&&"object"===r(t.exports)&&(t.exports=o),"function"==typeof window.define?void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n):window.Toc=o}).call(e,n(1)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}}]); 2 | //# sourceMappingURL=toc.min.js.map -------------------------------------------------------------------------------- /layout/common/widget.ftl: -------------------------------------------------------------------------------- 1 | <#macro widget position> 2 | <#if is_post?? || is_sheet?? > 3 |
    4 | <#elseif is_index??> 5 |
    6 | <#else> 7 |
    8 | 9 | <#if position == 'left'> 10 | <#if settings.sidebar_profile!true> 11 | <#include "../widget/profile.ftl"> 12 | 13 | <#if settings.music!true> 14 |
    16 | 17 | 18 |
    21 | 22 |
    23 | 24 | <#if settings.sidebar_categories!true> 25 | <#include "../widget/category.ftl"> 26 | 27 | <#if settings.sidebar_tags!true> 28 | <#include "../widget/tag.ftl"> 29 | 30 | <#if settings.sidebar_tagcloud!true> 31 | <#include "../widget/tagcloud.ftl"> 32 | 33 | <#if settings.sidebar_links!true> 34 | <#include "../widget/links.ftl"> 35 | 36 | 37 | <#if position == 'right'> 38 | <#if is_sheet??> 39 | <#if settings.sidebar_recentpost!true> 40 | <#include "../widget/recent_posts.ftl"> 41 | 42 | <#if settings.sidebar_recentcomment!true> 43 | <#include "../widget/recent_comments.ftl"> 44 | 45 | <#else> 46 | <#if post??> 47 | <#include "../widget/cate_posts.ftl"> 48 | <#include "../widget/tag_posts.ftl"> 49 | <#include "../widget/toc-post.ftl"> 50 | <#else> 51 | <#if settings.sidebar_recentpost!true> 52 | <#include "../widget/recent_posts.ftl"> 53 | 54 | 55 | <#if !is_post?? && settings.sidebar_recentcomment!true> 56 | <#include "../widget/recent_comments.ftl"> 57 | 58 | 59 | 60 | <#if position == 'left'> 61 |
    62 | <#if settings.sidebar_recentpost!true> 63 | <#include "../widget/recent_posts.ftl"> 64 | 65 | <#--<#if !is_post?? && settings.sidebar_recentcomment!true> 66 | <#include "../widget/recent_comments.ftl"> 67 | --> 68 | <#--<#include "../widget/archive.ftl">--> 69 |
    70 | 71 |
    72 | 73 | -------------------------------------------------------------------------------- /layout/common/navbar.ftl: -------------------------------------------------------------------------------- 1 | <#macro navbar layout> 2 | 68 | 78 | 79 | -------------------------------------------------------------------------------- /layout/common/footer.ftl: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
    5 | <#if settings.busuanzi!true> 6 |

    7 | 8 |
    9 | 10 | 11 |

    12 | 13 | <#if settings.bokejishi!true> 14 |

    15 | 我的博客已经运行    啦!
    16 |

    17 | 46 | 47 | <#if settings.social_beian?? && settings.social_beian!=''> 48 |

    49 | 50 | ${settings.social_beian!} 51 | 52 |

    53 | 54 | <#if settings.social_free?? && settings.social_free!=''> 55 |

    56 | © ${user.nickname!} ${settings.social_free!} 57 |

    58 | 59 | <#if settings.caidai!true> 60 | 61 | 62 | <#if settings.xiantiao!true> 63 | 67 | 68 | <#if settings.dianji!true> 69 | 70 | 71 | <@global.footer /> 72 |
    73 |
    74 |
    75 | ${settings.links_footer!} 76 |
    77 |
    78 |
    79 |
    80 |
    81 | -------------------------------------------------------------------------------- /source/lib/lg/js/lg-autoplay.min.js: -------------------------------------------------------------------------------- 1 | /**! 2 | * lg-autoplay.js | 1.0.0 | October 5th 2016 3 | * http://sachinchoolur.github.io/lg-autoplay.js 4 | * Copyright (c) 2016 Sachin N; 5 | * @license GPLv3 6 | */ 7 | !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.LgAutoplay=e()}}(function(){var e,t,o;return function e(t,o,r){function s(n,u){if(!o[n]){if(!t[n]){var i="function"==typeof require&&require;if(!u&&i)return i(n,!0);if(l)return l(n,!0);var c=new Error("Cannot find module '"+n+"'");throw c.code="MODULE_NOT_FOUND",c}var a=o[n]={exports:{}};t[n][0].call(a.exports,function(e){var o=t[n][1][e];return s(o?o:e)},a,a.exports,e,t,o,r)}return o[n].exports}for(var l="function"==typeof require&&require,n=0;n
    '),e.progress(),e.core.s.autoplay&&e.startlAuto(),utils.on(e.el,"onDragstart.lgtm touchstart.lgtm",function(){e.interval&&(e.cancelAuto(),e.canceledOnTouch=!0)}),utils.on(e.el,"onDragend.lgtm touchend.lgtm onSlideClick.lgtm",function(){!e.interval&&e.canceledOnTouch&&(e.startlAuto(),e.canceledOnTouch=!1)})},o.prototype.progress=function(){var e=this,t,o;utils.on(e.el,"onBeforeSlide.lgtm",function(){e.core.s.progressBar&&e.fromAuto&&(t=e.core.outer.querySelector(".lg-progress-bar"),o=e.core.outer.querySelector(".lg-progress"),e.interval&&(o.removeAttribute("style"),utils.removeClass(t,"lg-start"),setTimeout(function(){utils.setVendor(o,"Transition","width "+(e.core.s.speed+e.core.s.pause)+"ms ease 0s"),utils.addClass(t,"lg-start")},20))),e.fromAuto||e.core.s.fourceAutoplay||e.cancelAuto(),e.fromAuto=!1})},o.prototype.controls=function(){var e=this,t='';e.core.outer.querySelector(this.core.s.appendAutoplayControlsTo).insertAdjacentHTML("beforeend",t),utils.on(e.core.outer.querySelector(".lg-autoplay-button"),"click.lg",function(){utils.hasClass(e.core.outer,"lg-show-autoplay")?(e.cancelAuto(),e.core.s.fourceAutoplay=!1):e.interval||(e.startlAuto(),e.core.s.fourceAutoplay=e.fourceAutoplayTemp)})},o.prototype.startlAuto=function(){var e=this;utils.setVendor(e.core.outer.querySelector(".lg-progress"),"Transition","width "+(e.core.s.speed+e.core.s.pause)+"ms ease 0s"),utils.addClass(e.core.outer,"lg-show-autoplay"),utils.addClass(e.core.outer.querySelector(".lg-progress-bar"),"lg-start"),e.interval=setInterval(function(){e.core.index+1'); 7 | if (this.alt) { 8 | $(this).after('
    ' + this.alt + '
    '); 9 | } 10 | } 11 | }); 12 | 13 | if (typeof (moment) === 'function') { 14 | $('.article-meta time').each(function () { 15 | $(this).text(moment($(this).attr('datetime')).fromNow()); 16 | }); 17 | } 18 | 19 | $('.article > .content > table').each(function () { 20 | if ($(this).width() > $(this).parent().width()) { 21 | $(this).wrap('
    '); 22 | } 23 | }); 24 | 25 | function adjustNavbar() { 26 | const navbarWidth = $('.navbar-main .navbar-start').outerWidth() + $('.navbar-main .navbar-end').outerWidth(); 27 | if ($(document).outerWidth() < navbarWidth) { 28 | $('.navbar-main .navbar-menu').addClass('is-flex-start'); 29 | } else { 30 | $('.navbar-main .navbar-menu').removeClass('is-flex-start'); 31 | } 32 | } 33 | adjustNavbar(); 34 | $(window).resize(adjustNavbar); 35 | 36 | $('figure.highlight table').wrap('
    '); 37 | if (typeof (IcarusThemeSettings) !== 'undefined' && 38 | typeof (IcarusThemeSettings.article) !== 'undefined' && 39 | typeof (IcarusThemeSettings.article.highlight) !== 'undefined') { 40 | if (typeof (ClipboardJS) !== 'undefined' && IcarusThemeSettings.article.highlight.clipboard) { 41 | $('figure.highlight').each(function () { 42 | var id = 'code-' + Date.now() + (Math.random() * 1000 | 0); 43 | var button = ''; 44 | $(this).attr('id', id); 45 | if ($(this).find('figcaption').length) { 46 | $(this).find('figcaption').prepend(button); 47 | } else { 48 | $(this).prepend('
    ' + button + '
    '); 49 | } 50 | }); 51 | new ClipboardJS('.highlight .copy'); 52 | } 53 | var fold = IcarusThemeSettings.article.highlight.fold; 54 | if (fold.trim()) { 55 | var button = '' + (fold === 'unfolded' ? '' : '') + ''; 56 | $('figure.highlight').each(function () { 57 | if ($(this).find('figcaption').length) { 58 | $(this).find('figcaption').prepend(button); 59 | } else { 60 | $(this).prepend('
    ' + button + '
    '); 61 | } 62 | }); 63 | 64 | function toggleFold(codeBlock, isFolded) { 65 | var $toggle = $(codeBlock).find('.fold i'); 66 | !isFolded ? $(codeBlock).removeClass('folded') : $(codeBlock).addClass('folded'); 67 | !isFolded ? $toggle.removeClass('fa-angle-right') : $toggle.removeClass('fa-angle-down'); 68 | !isFolded ? $toggle.addClass('fa-angle-down') : $toggle.addClass('fa-angle-right'); 69 | } 70 | 71 | $('figure.highlight').each(function () { 72 | toggleFold(this, fold === 'folded'); 73 | }); 74 | $('figure.highlight figcaption .fold').click(function () { 75 | var $code = $(this).closest('figure.highlight'); 76 | toggleFold($code.eq(0), !$code.hasClass('folded')); 77 | }); 78 | } 79 | } 80 | 81 | var $toc = $('#toc'); 82 | if ($toc.length > 0) { 83 | var $mask = $('
    '); 84 | $mask.attr('id', 'toc-mask'); 85 | 86 | $('body').append($mask); 87 | 88 | function toggleToc() { 89 | $toc.toggleClass('is-active'); 90 | $mask.toggleClass('is-active'); 91 | } 92 | 93 | $toc.on('click', toggleToc); 94 | $mask.on('click', toggleToc); 95 | $('.navbar-main .catalogue').on('click', toggleToc); 96 | } 97 | })(jQuery); 98 | -------------------------------------------------------------------------------- /sheet_links.ftl: -------------------------------------------------------------------------------- 1 | <#include "layout/layout.ftl"> 2 | <#include "layout/comment/comment.ftl"> 3 | <@layout title="${sheet.title!} | ${blog_title!} " canonical="${links_url!}"> 4 | 41 |
    42 |
    43 | 80 |
    81 |
    82 | 83 |
    84 |
    85 |

    友链申请

    86 |
    87 |

    # 友链须知

    88 |
    89 |

    1. 请确认您的网站可正常访问

    90 |

    2. 不接受含有黄赌毒、政治敏感、暴力的网站

    91 |

    3. 添加本站链接

    92 |
    93 |

    # 本站信息

    94 |
    95 |

    名称:${user.nickname!}

    96 |

    链接:${context!}

    97 |

    头像:${context!}avatar

    98 |

    描述:${user.description!}

    99 |
    100 |

    本人会不定期清理无法访问的链接,请确保自己的链接长期有效 101 |

    102 |

    有需要互换友链的童鞋可在下方评论区留言。

    103 |
    104 |
    105 |
    106 | 107 |
    108 |
    109 |

    评论

    110 | <@comment post=sheet type="sheet" /> 111 |
    112 |
    113 | 114 | 115 | -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/css/linecons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'linecons'; 3 | src: url('../font/linecons.eot?24293614'); 4 | src: url('../font/linecons.eot?24293614#iefix') format('embedded-opentype'), 5 | url('../font/linecons.woff?24293614') format('woff'), 6 | url('../font/linecons.ttf?24293614') format('truetype'), 7 | url('../font/linecons.svg?24293614#linecons') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ 12 | /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ 13 | /* 14 | @media screen and (-webkit-min-device-pixel-ratio:0) { 15 | @font-face { 16 | font-family: 'linecons'; 17 | src: url('../font/linecons.svg?24293614#linecons') format('svg'); 18 | } 19 | } 20 | */ 21 | 22 | [class^="linecons-"]:before, [class*=" linecons-"]:before { 23 | font-family: "linecons"; 24 | font-style: normal; 25 | font-weight: normal; 26 | speak: none; 27 | 28 | display: inline-block; 29 | text-decoration: inherit; 30 | width: 1em; 31 | margin-right: .2em; 32 | text-align: center; 33 | /* opacity: .8; */ 34 | 35 | /* For safety - reset parent styles, that can break glyph codes*/ 36 | font-variant: normal; 37 | text-transform: none; 38 | 39 | /* fix buttons height, for twitter bootstrap */ 40 | line-height: 1em; 41 | 42 | /* Animation center compensation - margins should be symmetric */ 43 | /* remove if not needed */ 44 | margin-left: .2em; 45 | 46 | /* you can be more comfortable with increased icons size */ 47 | /* font-size: 120%; */ 48 | 49 | /* Uncomment for 3D effect */ 50 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ 51 | } 52 | 53 | .linecons-music:before { content: '\e800'; } /* '' */ 54 | .linecons-search:before { content: '\e801'; } /* '' */ 55 | .linecons-mail:before { content: '\e802'; } /* '' */ 56 | .linecons-heart:before { content: '\e803'; } /* '' */ 57 | .linecons-star:before { content: '\e804'; } /* '' */ 58 | .linecons-user:before { content: '\e805'; } /* '' */ 59 | .linecons-videocam:before { content: '\e806'; } /* '' */ 60 | .linecons-camera:before { content: '\e807'; } /* '' */ 61 | .linecons-photo:before { content: '\e808'; } /* '' */ 62 | .linecons-attach:before { content: '\e809'; } /* '' */ 63 | .linecons-lock:before { content: '\e80a'; } /* '' */ 64 | .linecons-eye:before { content: '\e80b'; } /* '' */ 65 | .linecons-tag:before { content: '\e80c'; } /* '' */ 66 | .linecons-thumbs-up:before { content: '\e80d'; } /* '' */ 67 | .linecons-pencil:before { content: '\e80e'; } /* '' */ 68 | .linecons-comment:before { content: '\e80f'; } /* '' */ 69 | .linecons-location:before { content: '\e810'; } /* '' */ 70 | .linecons-cup:before { content: '\e811'; } /* '' */ 71 | .linecons-trash:before { content: '\e812'; } /* '' */ 72 | .linecons-doc:before { content: '\e813'; } /* '' */ 73 | .linecons-note:before { content: '\e814'; } /* '' */ 74 | .linecons-cog:before { content: '\e815'; } /* '' */ 75 | .linecons-params:before { content: '\e816'; } /* '' */ 76 | .linecons-calendar:before { content: '\e817'; } /* '' */ 77 | .linecons-sound:before { content: '\e818'; } /* '' */ 78 | .linecons-clock:before { content: '\e819'; } /* '' */ 79 | .linecons-lightbulb:before { content: '\e81a'; } /* '' */ 80 | .linecons-tv:before { content: '\e81b'; } /* '' */ 81 | .linecons-desktop:before { content: '\e81c'; } /* '' */ 82 | .linecons-mobile:before { content: '\e81d'; } /* '' */ 83 | .linecons-cd:before { content: '\e81e'; } /* '' */ 84 | .linecons-inbox:before { content: '\e81f'; } /* '' */ 85 | .linecons-globe:before { content: '\e820'; } /* '' */ 86 | .linecons-cloud:before { content: '\e821'; } /* '' */ 87 | .linecons-paper-plane:before { content: '\e822'; } /* '' */ 88 | .linecons-fire:before { content: '\e823'; } /* '' */ 89 | .linecons-graduation-cap:before { content: '\e824'; } /* '' */ 90 | .linecons-megaphone:before { content: '\e825'; } /* '' */ 91 | .linecons-database:before { content: '\e826'; } /* '' */ 92 | .linecons-key:before { content: '\e827'; } /* '' */ 93 | .linecons-beaker:before { content: '\e828'; } /* '' */ 94 | .linecons-truck:before { content: '\e829'; } /* '' */ 95 | .linecons-money:before { content: '\e82a'; } /* '' */ 96 | .linecons-food:before { content: '\e82b'; } /* '' */ 97 | .linecons-shop:before { content: '\e82c'; } /* '' */ 98 | .linecons-diamond:before { content: '\e82d'; } /* '' */ 99 | .linecons-t-shirt:before { content: '\e82e'; } /* '' */ 100 | .linecons-wallet:before { content: '\e82f'; } /* '' */ -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/css/meteocons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'meteocons'; 3 | src: url('../font/meteocons.eot?24967826'); 4 | src: url('../font/meteocons.eot?24967826#iefix') format('embedded-opentype'), 5 | url('../font/meteocons.woff?24967826') format('woff'), 6 | url('../font/meteocons.ttf?24967826') format('truetype'), 7 | url('../font/meteocons.svg?24967826#meteocons') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ 12 | /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ 13 | /* 14 | @media screen and (-webkit-min-device-pixel-ratio:0) { 15 | @font-face { 16 | font-family: 'meteocons'; 17 | src: url('../font/meteocons.svg?24967826#meteocons') format('svg'); 18 | } 19 | } 20 | */ 21 | 22 | [class^="meteocons-"]:before, [class*=" meteocons-"]:before { 23 | font-family: "meteocons"; 24 | font-style: normal; 25 | font-weight: normal; 26 | speak: none; 27 | 28 | display: inline-block; 29 | text-decoration: inherit; 30 | width: 1em; 31 | margin-right: .2em; 32 | text-align: center; 33 | /* opacity: .8; */ 34 | 35 | /* For safety - reset parent styles, that can break glyph codes*/ 36 | font-variant: normal; 37 | text-transform: none; 38 | 39 | /* fix buttons height, for twitter bootstrap */ 40 | line-height: 1em; 41 | 42 | /* Animation center compensation - margins should be symmetric */ 43 | /* remove if not needed */ 44 | margin-left: .2em; 45 | 46 | /* you can be more comfortable with increased icons size */ 47 | /* font-size: 120%; */ 48 | 49 | /* Uncomment for 3D effect */ 50 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ 51 | } 52 | 53 | .meteocons-windy-rain-inv:before { content: '\e800'; } /* '' */ 54 | .meteocons-snow-inv:before { content: '\e801'; } /* '' */ 55 | .meteocons-snow-heavy-inv:before { content: '\e802'; } /* '' */ 56 | .meteocons-hail-inv:before { content: '\e803'; } /* '' */ 57 | .meteocons-clouds-inv:before { content: '\e804'; } /* '' */ 58 | .meteocons-clouds-flash-inv:before { content: '\e805'; } /* '' */ 59 | .meteocons-temperature:before { content: '\e806'; } /* '' */ 60 | .meteocons-compass:before { content: '\e807'; } /* '' */ 61 | .meteocons-na:before { content: '\e808'; } /* '' */ 62 | .meteocons-celcius:before { content: '\e809'; } /* '' */ 63 | .meteocons-fahrenheit:before { content: '\e80a'; } /* '' */ 64 | .meteocons-clouds-flash-alt:before { content: '\e80b'; } /* '' */ 65 | .meteocons-sun-inv:before { content: '\e80c'; } /* '' */ 66 | .meteocons-moon-inv:before { content: '\e80d'; } /* '' */ 67 | .meteocons-cloud-sun-inv:before { content: '\e80e'; } /* '' */ 68 | .meteocons-cloud-moon-inv:before { content: '\e80f'; } /* '' */ 69 | .meteocons-cloud-inv:before { content: '\e810'; } /* '' */ 70 | .meteocons-cloud-flash-inv:before { content: '\e811'; } /* '' */ 71 | .meteocons-drizzle-inv:before { content: '\e812'; } /* '' */ 72 | .meteocons-rain-inv:before { content: '\e813'; } /* '' */ 73 | .meteocons-windy-inv:before { content: '\e814'; } /* '' */ 74 | .meteocons-sunrise:before { content: '\e815'; } /* '' */ 75 | .meteocons-sun:before { content: '\e816'; } /* '' */ 76 | .meteocons-moon:before { content: '\e817'; } /* '' */ 77 | .meteocons-eclipse:before { content: '\e818'; } /* '' */ 78 | .meteocons-mist:before { content: '\e819'; } /* '' */ 79 | .meteocons-wind:before { content: '\e81a'; } /* '' */ 80 | .meteocons-snowflake:before { content: '\e81b'; } /* '' */ 81 | .meteocons-cloud-sun:before { content: '\e81c'; } /* '' */ 82 | .meteocons-cloud-moon:before { content: '\e81d'; } /* '' */ 83 | .meteocons-fog-sun:before { content: '\e81e'; } /* '' */ 84 | .meteocons-fog-moon:before { content: '\e81f'; } /* '' */ 85 | .meteocons-fog-cloud:before { content: '\e820'; } /* '' */ 86 | .meteocons-fog:before { content: '\e821'; } /* '' */ 87 | .meteocons-cloud:before { content: '\e822'; } /* '' */ 88 | .meteocons-cloud-flash:before { content: '\e823'; } /* '' */ 89 | .meteocons-cloud-flash-alt:before { content: '\e824'; } /* '' */ 90 | .meteocons-drizzle:before { content: '\e825'; } /* '' */ 91 | .meteocons-rain:before { content: '\e826'; } /* '' */ 92 | .meteocons-windy:before { content: '\e827'; } /* '' */ 93 | .meteocons-windy-rain:before { content: '\e828'; } /* '' */ 94 | .meteocons-snow:before { content: '\e829'; } /* '' */ 95 | .meteocons-snow-alt:before { content: '\e82a'; } /* '' */ 96 | .meteocons-snow-heavy:before { content: '\e82b'; } /* '' */ 97 | .meteocons-hail:before { content: '\e82c'; } /* '' */ 98 | .meteocons-clouds:before { content: '\e82d'; } /* '' */ 99 | .meteocons-clouds-flash:before { content: '\e82e'; } /* '' */ -------------------------------------------------------------------------------- /layout/search/local.ftl: -------------------------------------------------------------------------------- 1 | 71 | 79 | -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/css/linecons-ie7-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .linecons-music { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 3 | .linecons-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 4 | .linecons-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 5 | .linecons-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 6 | .linecons-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 7 | .linecons-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 8 | .linecons-videocam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 9 | .linecons-camera { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 10 | .linecons-photo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 11 | .linecons-attach { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 12 | .linecons-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 13 | .linecons-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 14 | .linecons-tag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 15 | .linecons-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 16 | .linecons-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 17 | .linecons-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 18 | .linecons-location { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 19 | .linecons-cup { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 20 | .linecons-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 21 | .linecons-doc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 22 | .linecons-note { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 23 | .linecons-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 24 | .linecons-params { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 25 | .linecons-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 26 | .linecons-sound { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 27 | .linecons-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 28 | .linecons-lightbulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 29 | .linecons-tv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 30 | .linecons-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 31 | .linecons-mobile { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 32 | .linecons-cd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 33 | .linecons-inbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 34 | .linecons-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 35 | .linecons-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 36 | .linecons-paper-plane { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 37 | .linecons-fire { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 38 | .linecons-graduation-cap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 39 | .linecons-megaphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 40 | .linecons-database { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 41 | .linecons-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 42 | .linecons-beaker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 43 | .linecons-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 44 | .linecons-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 45 | .linecons-food { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 46 | .linecons-shop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 47 | .linecons-diamond { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 48 | .linecons-t-shirt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 49 | .linecons-wallet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/css/meteocons-ie7-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .meteocons-windy-rain-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 3 | .meteocons-snow-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 4 | .meteocons-snow-heavy-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 5 | .meteocons-hail-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 6 | .meteocons-clouds-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 7 | .meteocons-clouds-flash-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 8 | .meteocons-temperature { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 9 | .meteocons-compass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 10 | .meteocons-na { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 11 | .meteocons-celcius { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 12 | .meteocons-fahrenheit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 13 | .meteocons-clouds-flash-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 14 | .meteocons-sun-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 15 | .meteocons-moon-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 16 | .meteocons-cloud-sun-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 17 | .meteocons-cloud-moon-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 18 | .meteocons-cloud-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 19 | .meteocons-cloud-flash-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 20 | .meteocons-drizzle-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 21 | .meteocons-rain-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 22 | .meteocons-windy-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 23 | .meteocons-sunrise { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 24 | .meteocons-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 25 | .meteocons-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 26 | .meteocons-eclipse { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 27 | .meteocons-mist { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 28 | .meteocons-wind { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 29 | .meteocons-snowflake { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 30 | .meteocons-cloud-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 31 | .meteocons-cloud-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 32 | .meteocons-fog-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 33 | .meteocons-fog-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 34 | .meteocons-fog-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 35 | .meteocons-fog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 36 | .meteocons-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 37 | .meteocons-cloud-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 38 | .meteocons-cloud-flash-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 39 | .meteocons-drizzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 40 | .meteocons-rain { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 41 | .meteocons-windy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 42 | .meteocons-windy-rain { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 43 | .meteocons-snow { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 44 | .meteocons-snow-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 45 | .meteocons-snow-heavy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 46 | .meteocons-hail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 47 | .meteocons-clouds { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 48 | .meteocons-clouds-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -------------------------------------------------------------------------------- /source/assets/css/fonts/linecons/css/linecons-ie7.css: -------------------------------------------------------------------------------- 1 | [class^="linecons-"], [class*=" linecons-"] { 2 | font-family: 'linecons'; 3 | font-style: normal; 4 | font-weight: normal; 5 | 6 | /* fix buttons height */ 7 | line-height: 1em; 8 | 9 | /* you can be more comfortable with increased icons size */ 10 | /* font-size: 120%; */ 11 | } 12 | 13 | .linecons-music { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 14 | .linecons-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 15 | .linecons-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 16 | .linecons-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 17 | .linecons-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 18 | .linecons-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 19 | .linecons-videocam { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 20 | .linecons-camera { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 21 | .linecons-photo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 22 | .linecons-attach { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 23 | .linecons-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 24 | .linecons-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 25 | .linecons-tag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 26 | .linecons-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 27 | .linecons-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 28 | .linecons-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 29 | .linecons-location { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 30 | .linecons-cup { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 31 | .linecons-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 32 | .linecons-doc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 33 | .linecons-note { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 34 | .linecons-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 35 | .linecons-params { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 36 | .linecons-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 37 | .linecons-sound { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 38 | .linecons-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 39 | .linecons-lightbulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 40 | .linecons-tv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 41 | .linecons-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 42 | .linecons-mobile { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 43 | .linecons-cd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 44 | .linecons-inbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 45 | .linecons-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 46 | .linecons-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 47 | .linecons-paper-plane { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 48 | .linecons-fire { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 49 | .linecons-graduation-cap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 50 | .linecons-megaphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 51 | .linecons-database { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 52 | .linecons-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 53 | .linecons-beaker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 54 | .linecons-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 55 | .linecons-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 56 | .linecons-food { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 57 | .linecons-shop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 58 | .linecons-diamond { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 59 | .linecons-t-shirt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 60 | .linecons-wallet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -------------------------------------------------------------------------------- /source/js/back-to-top.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | var $button = $('#back-to-top'); 3 | var $footer = $('footer.footer'); 4 | var $mainColumn = $('.column-main'); 5 | var $leftSidebar = $('.column-left'); 6 | var $rightSidebar = $('.column-right'); 7 | var lastScrollTop = 0; 8 | var rightMargin = 20; 9 | var bottomMargin = 20; 10 | var lastState = null; 11 | var state = { 12 | base: { 13 | classname: 'card has-text-centered', 14 | left: '', 15 | width: 64, 16 | bottom: bottomMargin, 17 | 'border-radius': 4 18 | } 19 | }; 20 | state['desktop-hidden'] = Object.assign({}, state.base, { 21 | classname: state.base.classname + ' rise-up', 22 | }); 23 | state['desktop-visible'] = Object.assign({}, state['desktop-hidden'], { 24 | classname: state['desktop-hidden'].classname + ' fade-in', 25 | }); 26 | state['desktop-dock'] = Object.assign({}, state['desktop-visible'], { 27 | classname: state['desktop-visible'].classname + ' fade-in', 28 | width: 40, 29 | 'border-radius': '50%' 30 | }); 31 | state['mobile-hidden'] = Object.assign({}, state.base, { 32 | classname: state.base.classname + ' fade-in', 33 | right: rightMargin 34 | }); 35 | state['mobile-visible'] = Object.assign({}, state['mobile-hidden'], { 36 | classname: state['mobile-hidden'].classname + ' rise-up', 37 | }); 38 | 39 | function isStateEquals(prev, next) { 40 | for (var prop in prev) { 41 | if (!next.hasOwnProperty(prop) || next[prop] !== prev[prop]) { 42 | return false; 43 | } 44 | } 45 | for (var prop in next) { 46 | if (!prev.hasOwnProperty(prop) || prev[prop] !== prev[prop]) { 47 | return false; 48 | } 49 | } 50 | return true; 51 | } 52 | 53 | function applyState(state) { 54 | if (lastState !== null && isStateEquals(lastState, state)) { 55 | return; 56 | } 57 | $button.attr('class', state.classname); 58 | for (let prop in state) { 59 | if (prop === 'classname') { 60 | continue; 61 | } 62 | $button.css(prop, state[prop]); 63 | } 64 | lastState = state; 65 | } 66 | 67 | function isDesktop() { 68 | return window.innerWidth >= 1078; 69 | } 70 | 71 | function isTablet() { 72 | return window.innerWidth >= 768 && !isDesktop(); 73 | } 74 | 75 | function isScrollUp() { 76 | return $(window).scrollTop() < lastScrollTop && $(window).scrollTop() > 0; 77 | } 78 | 79 | function hasLeftSidebar() { 80 | return $leftSidebar.length > 0; 81 | } 82 | 83 | function hasRightSidebar() { 84 | return $rightSidebar.length > 0; 85 | } 86 | 87 | function getRightSidebarBottom() { 88 | if (!hasRightSidebar()) { 89 | return 0; 90 | } 91 | return Math.max.apply(null, $rightSidebar.find('.widget').map(function () { 92 | return $(this).offset().top + $(this).outerHeight(true); 93 | })); 94 | } 95 | 96 | function getScrollTop() { 97 | return $(window).scrollTop(); 98 | } 99 | 100 | function getScrollBottom() { 101 | return $(window).scrollTop() + $(window).height(); 102 | } 103 | 104 | function getButtonWidth() { 105 | return $button.outerWidth(true); 106 | } 107 | 108 | function getButtonHeight() { 109 | return $button.outerHeight(true); 110 | } 111 | 112 | function updateScrollTop() { 113 | lastScrollTop = $(window).scrollTop(); 114 | } 115 | 116 | function update() { 117 | // desktop mode or tablet mode with only right sidebar enabled 118 | if (isDesktop() || (isTablet() && !hasLeftSidebar() && hasRightSidebar())) { 119 | var nextState; 120 | var padding = ($mainColumn.outerWidth() - $mainColumn.width()) / 2; 121 | var maxLeft = $(window).width() - getButtonWidth() - rightMargin; 122 | var maxBottom = $footer.offset().top + getButtonHeight() / 2 + bottomMargin; 123 | if (getScrollTop() == 0 || getScrollBottom() < getRightSidebarBottom() + padding + getButtonHeight()) { 124 | nextState = state['desktop-hidden']; 125 | } else if (getScrollBottom() < maxBottom) { 126 | nextState = state['desktop-visible']; 127 | } else { 128 | nextState = Object.assign({}, state['desktop-dock'], { 129 | bottom: getScrollBottom() - maxBottom + bottomMargin 130 | }); 131 | } 132 | 133 | var left = $mainColumn.offset().left + $mainColumn.outerWidth() + padding; 134 | nextState = Object.assign({}, nextState, { 135 | left: Math.min(left, maxLeft) 136 | }); 137 | applyState(nextState); 138 | } else { 139 | // mobile and tablet mode 140 | if (!isScrollUp()) { 141 | applyState(state['mobile-hidden']); 142 | } else { 143 | applyState(state['mobile-visible']); 144 | } 145 | updateScrollTop(); 146 | } 147 | } 148 | 149 | update(); 150 | $(window).resize(update); 151 | $(window).scroll(update); 152 | 153 | $('#back-to-top').on('click', function () { 154 | $('body, html').animate({ scrollTop: 0 }, 400); 155 | }); 156 | }); 157 | -------------------------------------------------------------------------------- /source/assets/css/fonts/meteocons/css/meteocons-ie7.css: -------------------------------------------------------------------------------- 1 | [class^="meteocons-"], [class*=" meteocons-"] { 2 | font-family: 'meteocons'; 3 | font-style: normal; 4 | font-weight: normal; 5 | 6 | /* fix buttons height */ 7 | line-height: 1em; 8 | 9 | /* you can be more comfortable with increased icons size */ 10 | /* font-size: 120%; */ 11 | } 12 | 13 | .meteocons-windy-rain-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 14 | .meteocons-snow-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 15 | .meteocons-snow-heavy-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 16 | .meteocons-hail-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 17 | .meteocons-clouds-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 18 | .meteocons-clouds-flash-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 19 | .meteocons-temperature { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 20 | .meteocons-compass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 21 | .meteocons-na { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 22 | .meteocons-celcius { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 23 | .meteocons-fahrenheit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 24 | .meteocons-clouds-flash-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 25 | .meteocons-sun-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 26 | .meteocons-moon-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 27 | .meteocons-cloud-sun-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 28 | .meteocons-cloud-moon-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 29 | .meteocons-cloud-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 30 | .meteocons-cloud-flash-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 31 | .meteocons-drizzle-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 32 | .meteocons-rain-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 33 | .meteocons-windy-inv { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 34 | .meteocons-sunrise { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 35 | .meteocons-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 36 | .meteocons-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 37 | .meteocons-eclipse { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 38 | .meteocons-mist { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 39 | .meteocons-wind { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 40 | .meteocons-snowflake { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 41 | .meteocons-cloud-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 42 | .meteocons-cloud-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 43 | .meteocons-fog-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 44 | .meteocons-fog-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 45 | .meteocons-fog-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 46 | .meteocons-fog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 47 | .meteocons-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 48 | .meteocons-cloud-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 49 | .meteocons-cloud-flash-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 50 | .meteocons-drizzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 51 | .meteocons-rain { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 52 | .meteocons-windy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 53 | .meteocons-windy-rain { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 54 | .meteocons-snow { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 55 | .meteocons-snow-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 56 | .meteocons-snow-heavy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 57 | .meteocons-hail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 58 | .meteocons-clouds { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } 59 | .meteocons-clouds-flash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -------------------------------------------------------------------------------- /source/assets/js/lozad.js: -------------------------------------------------------------------------------- 1 | /*! lozad.js - v1.14.0 - 2019-10-19 2 | * https://github.com/ApoorvSaxena/lozad.js 3 | * Copyright (c) 2019 Apoorv Saxena; Licensed MIT */ 4 | 5 | 6 | (function (global, factory) { 7 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 8 | typeof define === 'function' && define.amd ? define(factory) : 9 | (global = global || self, global.lozad = factory()); 10 | }(this, function () { 'use strict'; 11 | 12 | /** 13 | * Detect IE browser 14 | * @const {boolean} 15 | * @private 16 | */ 17 | var isIE = typeof document !== 'undefined' && document.documentMode; 18 | 19 | var defaultConfig = { 20 | rootMargin: '0px', 21 | threshold: 0, 22 | load: function load(element) { 23 | if (element.nodeName.toLowerCase() === 'picture') { 24 | var img = document.createElement('img'); 25 | if (isIE && element.getAttribute('data-iesrc')) { 26 | img.src = element.getAttribute('data-iesrc'); 27 | } 28 | 29 | if (element.getAttribute('data-alt')) { 30 | img.alt = element.getAttribute('data-alt'); 31 | } 32 | 33 | element.append(img); 34 | } 35 | 36 | if (element.nodeName.toLowerCase() === 'video' && !element.getAttribute('data-src')) { 37 | if (element.children) { 38 | var childs = element.children; 39 | var childSrc = void 0; 40 | for (var i = 0; i <= childs.length - 1; i++) { 41 | childSrc = childs[i].getAttribute('data-src'); 42 | if (childSrc) { 43 | childs[i].src = childSrc; 44 | } 45 | } 46 | 47 | element.load(); 48 | } 49 | } 50 | 51 | if (element.getAttribute('data-src')) { 52 | element.src = element.getAttribute('data-src'); 53 | } 54 | 55 | if (element.getAttribute('data-srcset')) { 56 | element.setAttribute('srcset', element.getAttribute('data-srcset')); 57 | } 58 | 59 | if (element.getAttribute('data-background-image')) { 60 | element.style.backgroundImage = 'url(\'' + element.getAttribute('data-background-image').split(',').join('\'),url(\'') + '\')'; 61 | } else if (element.getAttribute('data-background-image-set')) { 62 | var imageSetLinks = element.getAttribute('data-background-image-set').split(','); 63 | var firstUrlLink = imageSetLinks[0].substr(0, imageSetLinks[0].indexOf(' ')) || imageSetLinks[0]; // Substring before ... 1x 64 | firstUrlLink = firstUrlLink.indexOf('url(') === -1 ? 'url(' + firstUrlLink + ')' : firstUrlLink; 65 | if (imageSetLinks.length === 1) { 66 | element.style.backgroundImage = firstUrlLink; 67 | } else { 68 | element.setAttribute('style', (element.getAttribute('style') || '') + ('background-image: ' + firstUrlLink + '; background-image: -webkit-image-set(' + imageSetLinks + '); background-image: image-set(' + imageSetLinks + ')')); 69 | } 70 | } 71 | 72 | if (element.getAttribute('data-toggle-class')) { 73 | element.classList.toggle(element.getAttribute('data-toggle-class')); 74 | } 75 | }, 76 | loaded: function loaded() {} 77 | }; 78 | 79 | function markAsLoaded(element) { 80 | element.setAttribute('data-loaded', true); 81 | } 82 | 83 | var isLoaded = function isLoaded(element) { 84 | return element.getAttribute('data-loaded') === 'true'; 85 | }; 86 | 87 | var onIntersection = function onIntersection(load, loaded) { 88 | return function (entries, observer) { 89 | entries.forEach(function (entry) { 90 | if (entry.intersectionRatio > 0 || entry.isIntersecting) { 91 | observer.unobserve(entry.target); 92 | 93 | if (!isLoaded(entry.target)) { 94 | load(entry.target); 95 | markAsLoaded(entry.target); 96 | loaded(entry.target); 97 | } 98 | } 99 | }); 100 | }; 101 | }; 102 | 103 | var getElements = function getElements(selector) { 104 | var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document; 105 | 106 | if (selector instanceof Element) { 107 | return [selector]; 108 | } 109 | 110 | if (selector instanceof NodeList) { 111 | return selector; 112 | } 113 | 114 | return root.querySelectorAll(selector); 115 | }; 116 | 117 | function lozad () { 118 | var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.lozad'; 119 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 120 | 121 | var _Object$assign = Object.assign({}, defaultConfig, options), 122 | root = _Object$assign.root, 123 | rootMargin = _Object$assign.rootMargin, 124 | threshold = _Object$assign.threshold, 125 | load = _Object$assign.load, 126 | loaded = _Object$assign.loaded; 127 | 128 | var observer = void 0; 129 | 130 | if (typeof window !== 'undefined' && window.IntersectionObserver) { 131 | observer = new IntersectionObserver(onIntersection(load, loaded), { 132 | root: root, 133 | rootMargin: rootMargin, 134 | threshold: threshold 135 | }); 136 | } 137 | 138 | return { 139 | observe: function observe() { 140 | var elements = getElements(selector, root); 141 | 142 | for (var i = 0; i < elements.length; i++) { 143 | if (isLoaded(elements[i])) { 144 | continue; 145 | } 146 | 147 | if (observer) { 148 | observer.observe(elements[i]); 149 | continue; 150 | } 151 | 152 | load(elements[i]); 153 | markAsLoaded(elements[i]); 154 | loaded(elements[i]); 155 | } 156 | }, 157 | triggerLoad: function triggerLoad(element) { 158 | if (isLoaded(element)) { 159 | return; 160 | } 161 | 162 | load(element); 163 | markAsLoaded(element); 164 | loaded(element); 165 | }, 166 | 167 | observer: observer 168 | }; 169 | } 170 | 171 | return lozad; 172 | 173 | })); 174 | -------------------------------------------------------------------------------- /layout/widget/profile.ftl: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 32 | 64 | <#if settings.profile_follow_url?? && settings.profile_follow_url!=''> 65 |
    66 | 关注我 67 |
    68 | 69 | <#--
    --> 70 | <#-- 71 | <#-- target="_blank">关注我--> 72 | <#--
    --> 73 |
    74 | <#if settings.social_github?? && settings.social_github!=''> 75 | 77 | 78 | 79 | 80 | <#if settings.social_qq?? && settings.social_qq!=''> 81 | 83 | 84 | 85 | 86 | <#if settings.social_weibo?? && settings.social_weibo!=''> 87 | 89 | 90 | 91 | 92 | <#if settings.social_twitter?? && settings.social_twitter!=''> 93 | 95 | 96 | 97 | 98 | <#if settings.social_facebook?? && settings.social_facebook!=''> 99 | 101 | 102 | 103 | 104 | <#if settings.social_email?? && settings.social_email!=''> 105 | 107 | 108 | 109 | 110 | <#if settings.social_telegram?? && settings.social_telegram!=''> 111 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |
    120 |
    121 |
    -------------------------------------------------------------------------------- /photos.ftl: -------------------------------------------------------------------------------- 1 | <#include "./layout/common/navbar.ftl"> 2 | <#include "./layout/common/head.ftl"> 3 | 4 | 5 | 6 | 7 | 8 | ${options.photos_title!} - ${blog_title!} 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | <@global.head /> 28 | 29 | 30 | 31 | <#include "layout/plugin/style.theme.ftl"> 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | <@navbar 'page' /> 40 |
    41 |
    42 | <@photoTag method="listTeams"> 43 | <#list teams as item> 44 |

    ${item.team!}

    45 |
    46 | <#list item.photos?sort_by('takeTime')?reverse as photo> 47 | <#if photo_index gte options.photos_page_size> 48 | <#break> 49 | 50 | 77 | 78 |
    79 | 80 | 81 |
    82 |
    83 | <#include "./layout/common/footer.ftl"> 84 | <#include "./layout/plugin/back-to-top.ftl"> 85 | 86 | 87 | 88 | 89 | 90 | 91 | 127 | 164 | 165 | -------------------------------------------------------------------------------- /source/css/bundle.css: -------------------------------------------------------------------------------- 1 | #back-to-top{position:fixed;padding:8px 0;transition:.4s ease opacity,.4s ease width,.4s ease transform,.4s ease border-radius;opacity:0;line-height:24px;outline:0;transform:translateY(120px)}#back-to-top.fade-in{opacity:1}#back-to-top.rise-up{transform:translateY(0)}.ins-section-container{position:relative;background:#f7f7f7}.ins-section{font-size:14px;line-height:16px}.ins-section .ins-search-item,.ins-section .ins-section-header{padding:8px 15px}.ins-section .ins-section-header{color:#9a9a9a;}.ins-section .ins-slug{margin-left:5px;color:#9a9a9a}.ins-section .ins-slug:before{content:'('}.ins-section .ins-slug:after{content:')'}.ins-section .ins-search-item .ins-search-preview,.ins-section .ins-search-item header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ins-section .ins-search-item header .ins-title{margin-left:8px}.ins-section .ins-search-item .ins-search-preview{height:15px;font-size:12px;color:#9a9a9a;margin:5px 0 0 20px}.ins-section .ins-search-item.active,.ins-section .ins-search-item:hover{color:#fff;background:#3273dc}.ins-section .ins-search-item.active .ins-search-preview,.ins-section .ins-search-item.active .ins-slug,.ins-section .ins-search-item:hover .ins-search-preview,.ins-section .ins-search-item:hover .ins-slug{color:#fff}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#3273dc;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.searchbox{display:none;perspective:50em;top:0;left:0;width:100%;height:100%;z-index:100;background:rgba(0,0,0,.7);transform-origin:0;perspective-origin:top center}.searchbox.show{display:block}.searchbox,.searchbox .searchbox-container{position:fixed}.searchbox .searchbox-container{overflow:hidden}.searchbox .searchbox-selectable{cursor:pointer}.searchbox .searchbox-input-wrapper{position:relative}.searchbox .searchbox-input-wrapper .searchbox-input{font-weight: 400 !important;width:100%;border:none;outline:0;font-size:16px;box-shadow:0 1px 2px 0 rgba(0,0,0,0.05);font-weight:200;border-radius:0;background:#fff;line-height:20px;box-sizing:border-box;padding:12px 28px 12px 20px;border-bottom:1px solid #e2e2e2}.searchbox .searchbox-input-wrapper .searchbox-close{top:50%;right:6px;width:20px;height:20px;line-height:20px;font-size:16px;margin-top:-11px;position:absolute;text-align:center;display:inline-block}.searchbox .searchbox-input-wrapper .searchbox-close:hover{color:#3273dc}.searchbox .searchbox-result-wrapper{left:0;right:0;top:45px;bottom:0;overflow-y:auto;position:absolute}.searchbox .searchbox-container{border-radius:2px;left:50%;top:100px;width:540px;z-index:101;bottom:100px;margin-left:-270px;box-sizing:border-box}@media screen and (max-width:559px),screen and (max-height:479px){.searchbox .searchbox-container{top:0;left:0;margin:0;width:100%;height:100%;background:#f7f7f7}} 2 | 3 | .ant-tag { 4 | font-family: Chinese Quote, -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Helvetica Neue, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 5 | font-size: 14px; 6 | font-variant: tabular-nums; 7 | line-height: 1.5; 8 | color: rgba(0, 0, 0, .65); 9 | -webkit-box-sizing: border-box; 10 | box-sizing: border-box; 11 | margin: 0; 12 | padding: 5px 15px; 13 | list-style: none; 14 | display: inline-block; 15 | border-radius: 2px; 16 | border: 1px solid #d9d9d9; 17 | background: #fafafa; 18 | font-size: 12px; 19 | -webkit-transition: all .3s cubic-bezier(.215, .61, .355, 1); 20 | transition: all .3s cubic-bezier(.215, .61, .355, 1); 21 | opacity: 1; 22 | margin-right: 8px; 23 | cursor: pointer; 24 | white-space:nowrap; 25 | opacity: .8; 26 | font-weight: 400; 27 | text-transform: uppercase; 28 | } 29 | 30 | .ant-tag:hover { 31 | opacity:1; 32 | border-color:#91d5ff 33 | } 34 | 35 | .ant-tag, .ant-tag a, .ant-tag a:hover { 36 | color:rgba(0, 0, 0, .65) 37 | } 38 | 39 | .ant-tag-pink { 40 | color: #eb2f96; 41 | background: #fff0f6; 42 | border-color:#ffadd2 43 | } 44 | 45 | .ant-tag-pink-inverse { 46 | background: #eb2f96; 47 | border-color: #eb2f96; 48 | color:#fff 49 | } 50 | 51 | .ant-tag-magenta { 52 | color: #eb2f96; 53 | background: #fff0f6; 54 | border-color:#ffadd2 55 | } 56 | 57 | .ant-tag-magenta-inverse { 58 | background: #eb2f96; 59 | border-color: #eb2f96; 60 | color:#fff 61 | } 62 | 63 | .ant-tag-red { 64 | color: #f5222d; 65 | background: #fff1f0; 66 | border-color:#ffa39e 67 | } 68 | 69 | .ant-tag-red-inverse { 70 | background: #f5222d; 71 | border-color: #f5222d; 72 | color:#fff 73 | } 74 | 75 | .ant-tag-volcano { 76 | color: #fa541c; 77 | background: #fff2e8; 78 | border-color:#ffbb96 79 | } 80 | 81 | .ant-tag-volcano-inverse { 82 | background: #fa541c; 83 | border-color: #fa541c; 84 | color:#fff 85 | } 86 | 87 | .ant-tag-orange { 88 | color: #fa8c16; 89 | background: #fff7e6; 90 | border-color:#ffd591 91 | } 92 | 93 | .ant-tag-orange-inverse { 94 | background: #fa8c16; 95 | border-color: #fa8c16; 96 | color:#fff 97 | } 98 | 99 | .ant-tag-yellow { 100 | color: #fadb14; 101 | background: #feffe6; 102 | border-color:#fffb8f 103 | } 104 | 105 | .ant-tag-yellow-inverse { 106 | background: #fadb14; 107 | border-color: #fadb14; 108 | color:#fff 109 | } 110 | 111 | .ant-tag-gold { 112 | color: #faad14; 113 | background: #fffbe6; 114 | border-color:#ffe58f 115 | } 116 | 117 | .ant-tag-gold-inverse { 118 | background: #faad14; 119 | border-color: #faad14; 120 | color:#fff 121 | } 122 | 123 | .ant-tag-cyan { 124 | color: #13c2c2; 125 | background: #e6fffb; 126 | border-color:#87e8de 127 | } 128 | 129 | .ant-tag-cyan-inverse { 130 | background: #13c2c2; 131 | border-color: #13c2c2; 132 | color:#fff 133 | } 134 | 135 | .ant-tag-lime { 136 | color: #a0d911; 137 | background: #fcffe6; 138 | border-color:#eaff8f 139 | } 140 | 141 | .ant-tag-lime-inverse { 142 | background: #a0d911; 143 | border-color: #a0d911; 144 | color:#fff 145 | } 146 | 147 | .ant-tag-green { 148 | color: #52c41a; 149 | background: #f6ffed; 150 | border-color:#b7eb8f 151 | } 152 | 153 | .ant-tag-green-inverse { 154 | background: #52c41a; 155 | border-color: #52c41a; 156 | color:#fff 157 | } 158 | 159 | .ant-tag-blue { 160 | color: #1890ff; 161 | background: #e6f7ff; 162 | border-color:#91d5ff 163 | } 164 | 165 | .ant-tag-blue-inverse { 166 | background: #1890ff; 167 | border-color: #1890ff; 168 | color:#fff 169 | } 170 | 171 | .ant-tag-geekblue { 172 | color: #2f54eb; 173 | background: #f0f5ff; 174 | border-color:#adc6ff 175 | } 176 | 177 | .ant-tag-geekblue-inverse { 178 | background: #2f54eb; 179 | border-color: #2f54eb; 180 | color:#fff 181 | } 182 | 183 | .ant-tag-purple { 184 | color: #722ed1; 185 | background: #f9f0ff; 186 | border-color:#d3adf7 187 | } 188 | 189 | .ant-tag-purple-inverse { 190 | background: #722ed1; 191 | border-color: #722ed1; 192 | color:#fff 193 | } 194 | -------------------------------------------------------------------------------- /source/js/bundle.js: -------------------------------------------------------------------------------- 1 | // main.js 2 | (function($){$('.article img:not(".not-gallery-item")').each(function(){if($(this).parent("a").length===0){$(this).wrap('');if(this.alt){$(this).after('
    '+this.alt+"
    ")}}});if(typeof(moment)==="function"){$(".article-meta time").each(function(){$(this).text(moment($(this).attr("datetime")).fromNow())})}$(".article > .content > table").each(function(){if($(this).width()>$(this).parent().width()){$(this).wrap('
    ')}});function adjustNavbar(){const navbarWidth=$(".navbar-main .navbar-start").outerWidth()+$(".navbar-main .navbar-end").outerWidth();if($(document).outerWidth()');if(typeof(IcarusThemeSettings)!=="undefined"&&typeof(IcarusThemeSettings.article)!=="undefined"&&typeof(IcarusThemeSettings.article.highlight)!=="undefined"){if(typeof(ClipboardJS)!=="undefined"&&IcarusThemeSettings.article.highlight.clipboard){$("figure.highlight").each(function(){var id="code-"+Date.now()+(Math.random()*1000|0);var button='';$(this).attr("id",id);if($(this).find("figcaption").length){$(this).find("figcaption").prepend(button)}else{$(this).prepend("
    "+button+"
    ")}});new ClipboardJS(".highlight .copy")}var fold=IcarusThemeSettings.article.highlight.fold;if(fold.trim()){var button=''+(fold==="unfolded"?'':'')+"";$("figure.highlight").each(function(){if($(this).find("figcaption").length){$(this).find("figcaption").prepend(button)}else{$(this).prepend("
    "+button+"
    ")}});function toggleFold(codeBlock,isFolded){var $toggle=$(codeBlock).find(".fold i");!isFolded?$(codeBlock).removeClass("folded"):$(codeBlock).addClass("folded");!isFolded?$toggle.removeClass("fa-angle-right"):$toggle.removeClass("fa-angle-down");!isFolded?$toggle.addClass("fa-angle-down"):$toggle.addClass("fa-angle-right")}$("figure.highlight").each(function(){toggleFold(this,fold==="folded")});$("figure.highlight figcaption .fold").click(function(){var $code=$(this).closest("figure.highlight");toggleFold($code.eq(0),!$code.hasClass("folded"))})}}var $toc=$("#toc");if($toc.length>0){var $mask=$("
    ");$mask.attr("id","toc-mask");$("body").append($mask);function toggleToc(){$toc.toggleClass("is-active");$mask.toggleClass("is-active")}$toc.on("click",toggleToc);$mask.on("click",toggleToc);$(".navbar-main .catalogue").on("click",toggleToc)}})(jQuery); 3 | 4 | // animation.js 5 | (function(){function $(){return Array.prototype.slice.call(document.querySelectorAll.apply(document,arguments))}$("body > .navbar, body > .section, body > .footer").forEach(function(element){element.style.transition="0s";element.style.opacity="0"});document.querySelector("body > .navbar").style.transform="translateY(-100px)";[".column-main > .card",".column-left > .card, .column-right-shadow > .card",".column-right > .card"].map(function(selector){$(selector).forEach(function(element){element.style.transition="0s";element.style.opacity="0";element.style.transform="scale(0.8)";element.style.transformOrigin="center top"})});setTimeout(function(){$("body > .navbar, body > .section, body > .footer").forEach(function(element){element.style.opacity="1";element.style.transition="opacity 0.3s ease-out, transform 0.3s ease-out"});document.querySelector("body > .navbar").style.transform="translateY(0)";[".column-main > .card",".column-left > .card, .column-right-shadow > .card",".column-right > .card"].map(function(selector){var i=1;$(selector).forEach(function(element){setTimeout(function(){element.style.opacity="1";element.style.transform="";element.style.transition="opacity 0.3s ease-out, transform 0.3s ease-out"},i*100);i++})})})})(); 6 | 7 | // back-to-top.js 8 | $(document).ready(function(){var $button=$('#back-to-top');var $footer=$('footer.footer');var $mainColumn=$('.column-main');var $leftSidebar=$('.column-left');var $rightSidebar=$('.column-right');var lastScrollTop=0;var rightMargin=20;var bottomMargin=20;var lastState=null;var state={base:{classname:'card has-text-centered',left:'',width:64,bottom:bottomMargin,'border-radius':4}};state['desktop-hidden']=Object.assign({},state.base,{classname:state.base.classname+' rise-up',});state['desktop-visible']=Object.assign({},state['desktop-hidden'],{classname:state['desktop-hidden'].classname+' fade-in',});state['desktop-dock']=Object.assign({},state['desktop-visible'],{classname:state['desktop-visible'].classname+' fade-in',width:40,'border-radius':'50%'});state['mobile-hidden']=Object.assign({},state.base,{classname:state.base.classname+' fade-in',right:rightMargin});state['mobile-visible']=Object.assign({},state['mobile-hidden'],{classname:state['mobile-hidden'].classname+' rise-up',});function isStateEquals(prev,next){for(var prop in prev){if(!next.hasOwnProperty(prop)||next[prop]!==prev[prop]){return false}}for(var prop in next){if(!prev.hasOwnProperty(prop)||prev[prop]!==prev[prop]){return false}}return true}function applyState(state){if(lastState!==null&&isStateEquals(lastState,state)){return}$button.attr('class',state.classname);for(let prop in state){if(prop==='classname'){continue}$button.css(prop,state[prop])}lastState=state}function isDesktop(){return window.innerWidth>=1078}function isTablet(){return window.innerWidth>=768&&!isDesktop()}function isScrollUp(){return $(window).scrollTop()0}function hasLeftSidebar(){return $leftSidebar.length>0}function hasRightSidebar(){return $rightSidebar.length>0}function getRightSidebarBottom(){if(!hasRightSidebar()){return 0}return Math.max.apply(null,$rightSidebar.find('.widget').map(function(){return $(this).offset().top+$(this).outerHeight(true)}))}function getScrollTop(){return $(window).scrollTop()}function getScrollBottom(){return $(window).scrollTop()+$(window).height()}function getButtonWidth(){return $button.outerWidth(true)}function getButtonHeight(){return $button.outerHeight(true)}function updateScrollTop(){lastScrollTop=$(window).scrollTop()}function update(){if(isDesktop()||(isTablet()&&!hasLeftSidebar()&&hasRightSidebar())){var nextState;var padding=($mainColumn.outerWidth()-$mainColumn.width())/2;var maxLeft=$(window).width()-getButtonWidth()-rightMargin;var maxBottom=$footer.offset().top+getButtonHeight()/2+bottomMargin;if(getScrollTop()==0||getScrollBottom() p > .gallery-item').length){$('.justified-gallery > p > .gallery-item').unwrap()}$('.justified-gallery').justifiedGallery()}}); 12 | 13 | 14 | -------------------------------------------------------------------------------- /source/css/widget_pin.css: -------------------------------------------------------------------------------- 1 | /*@import url("https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600,700,800");*/ 2 | .blog-slider { 3 | position: relative; 4 | width: 100%; 5 | margin: auto; 6 | padding: 25px; 7 | border-radius: 2px; 8 | height: 250px; 9 | transition: all .3s; 10 | } 11 | @media screen and (max-width: 992px) { 12 | .blog-slider { 13 | /*max-width: 680px;*/ 14 | /*height: 400px;*/ 15 | } 16 | } 17 | @media screen and (max-width: 769px) { 18 | .blog-slider { 19 | /*min-height: 500px;*/ 20 | height: auto; 21 | /*margin: 80px auto;*/ 22 | margin-top: 80px; 23 | } 24 | } 25 | /*@media screen and (max-height: 500px) and (min-width: 992px) {*/ 26 | /* .blog-slider {*/ 27 | /* height: 350px;*/ 28 | /* }*/ 29 | /*}*/ 30 | .blog-slider__item { 31 | display: flex; 32 | align-items: center; 33 | } 34 | @media screen and (max-width: 768px) { 35 | .blog-slider__item { 36 | flex-direction: column; 37 | } 38 | } 39 | .blog-slider__item.swiper-slide-active .blog-slider__img img { 40 | opacity: 1; 41 | transition-delay: .3s; 42 | } 43 | .blog-slider__item.swiper-slide-active .blog-slider__content > * { 44 | opacity: 1; 45 | transform: none; 46 | } 47 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(1) { 48 | transition-delay: 0.3s; 49 | } 50 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(2) { 51 | transition-delay: 0.4s; 52 | } 53 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(3) { 54 | transition-delay: 0.5s; 55 | } 56 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(4) { 57 | transition-delay: 0.6s; 58 | } 59 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(5) { 60 | transition-delay: 0.7s; 61 | } 62 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(6) { 63 | transition-delay: 0.8s; 64 | } 65 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(7) { 66 | transition-delay: 0.9s; 67 | } 68 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(8) { 69 | transition-delay: 1s; 70 | } 71 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(9) { 72 | transition-delay: 1.1s; 73 | } 74 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(10) { 75 | transition-delay: 1.2s; 76 | } 77 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(11) { 78 | transition-delay: 1.3s; 79 | } 80 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(12) { 81 | transition-delay: 1.4s; 82 | } 83 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(13) { 84 | transition-delay: 1.5s; 85 | } 86 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(14) { 87 | transition-delay: 1.6s; 88 | } 89 | .blog-slider__item.swiper-slide-active .blog-slider__content > *:nth-child(15) { 90 | transition-delay: 1.7s; 91 | } 92 | .blog-slider__img { 93 | width: 300px; 94 | flex-shrink: 0; 95 | height: 200px; 96 | background-image: linear-gradient(147deg, #fffcf9, #cde8f6); 97 | box-shadow: 3px 4px 12px 0 rgba(0,0,0,0.2); 98 | border-radius: 2px; 99 | transform: translateX(-40px); 100 | overflow: hidden; 101 | } 102 | .blog-slider__img:after { 103 | content: ''; 104 | position: absolute; 105 | top: 0; 106 | left: 0; 107 | width: 100%; 108 | height: 100%; 109 | /*background-image: linear-gradient(147deg, #fff9fb 0%, #fd3838 74%);*/ 110 | border-radius: 2px; 111 | opacity: 0.2; 112 | } 113 | .blog-slider__img img { 114 | width: 100%; 115 | height: 100%; 116 | object-fit: cover; 117 | display: block; 118 | opacity: 0; 119 | border-radius: 2px; 120 | transition: all .3s; 121 | } 122 | @media screen and (max-width: 768px) { 123 | .blog-slider__img { 124 | transform: translateY(-50%); 125 | width: 90%; 126 | } 127 | } 128 | @media screen and (max-width: 576px) { 129 | .blog-slider__img { 130 | width: 95%; 131 | } 132 | } 133 | /*@media screen and (max-height: 500px) and (min-width: 992px) {*/ 134 | /* .blog-slider__img {*/ 135 | /* height: 270px;*/ 136 | /* }*/ 137 | /*}*/ 138 | .blog-slider__content { 139 | padding-right: 25px; 140 | } 141 | @media screen and (max-width: 768px) { 142 | .blog-slider__content { 143 | margin-top: -80px; 144 | text-align: center; 145 | padding: 0 30px; 146 | } 147 | } 148 | @media screen and (max-width: 576px) { 149 | .blog-slider__content { 150 | padding: 0; 151 | } 152 | } 153 | .blog-slider__content > * { 154 | opacity: 0; 155 | transform: translateY(25px); 156 | transition: all .4s; 157 | } 158 | .blog-slider__code { 159 | color: #7b7992; 160 | margin-bottom: 10px; 161 | display: block; 162 | font-weight: 500; 163 | } 164 | .blog-slider__title { 165 | /*color: #0d0925;*/ 166 | margin-bottom: 10px; 167 | } 168 | .blog-slider__title a{ 169 | } 170 | .blog-slider__text { 171 | /*color: #4e4a67;*/ 172 | margin-bottom: 20px; 173 | line-height: 1.5em; 174 | } 175 | .blog-slider__button { 176 | display: inline-flex; 177 | background-image: linear-gradient(149deg, #6c2bfe, #7e8dfd 49.58%); 178 | padding: 8px 25px; 179 | border-radius: 2px; 180 | color: #fff; 181 | box-shadow: 3px 4px 12px 0 rgba(0,0,0,0.2); 182 | text-decoration: none; 183 | font-weight: 500; 184 | justify-content: center; 185 | text-align: center; 186 | letter-spacing: 1px; 187 | } 188 | @media screen and (max-width: 576px) { 189 | .blog-slider__button { 190 | /*width: 100%;*/ 191 | } 192 | } 193 | .blog-slider .swiper-container-horizontal > .swiper-pagination-bullets, .blog-slider .swiper-pagination-custom, .blog-slider .swiper-pagination-fraction { 194 | bottom: 10px; 195 | left: 0; 196 | width: 100%; 197 | } 198 | .blog-slider__pagination { 199 | position: absolute; 200 | z-index: 21; 201 | right: 20px; 202 | width: 11px !important; 203 | text-align: center; 204 | left: auto !important; 205 | top: 50%; 206 | bottom: auto !important; 207 | transform: translateY(-50%); 208 | } 209 | @media screen and (max-width: 768px) { 210 | .blog-slider__title { 211 | /*white-space:nowrap;*/ 212 | /*overflow:hidden;*/ 213 | /*text-overflow:ellipsis; /这里的ellipsis的英文名字就是省略的意思/*/ 214 | } 215 | .blog-slider__pagination { 216 | transform: translateX(-50%); 217 | left: 50% !important; 218 | top: 190px; 219 | width: 100% !important; 220 | display: flex; 221 | justify-content: center; 222 | align-items: center; 223 | } 224 | 225 | } 226 | .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { 227 | margin: 8px 0; 228 | } 229 | .swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet { 230 | margin: 10px 4px !important; 231 | } 232 | @media screen and (max-width: 768px) { 233 | .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet { 234 | margin: 0px 5px; 235 | } 236 | } 237 | .blog-slider__pagination .swiper-pagination-bullet { 238 | width: 11px; 239 | height: 11px; 240 | display: block; 241 | border-radius: 10px; 242 | background: #062744; 243 | opacity: 0.2; 244 | transition: all .3s; 245 | } 246 | .blog-slider__pagination .swiper-pagination-bullet-active { 247 | opacity: 1; 248 | background: linear-gradient(149deg, #6c2bfe, #7e8dfd 49.58%); 249 | height: 30px; 250 | box-shadow: 0px 0px 20px rgba(126, 141, 253, 0.3); 251 | } 252 | @media screen and (max-width: 768px) { 253 | .blog-slider__pagination .swiper-pagination-bullet-active { 254 | height: 11px; 255 | width: 30px; 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /source/assets/js/xenon-toggles.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Toggles 3 | * 4 | * Non-animation 5 | */ 6 | 7 | 8 | ;(function($, window, undefined) 9 | { 10 | "use strict"; 11 | 12 | $(document).ready(function() 13 | { 14 | 15 | // Chat Toggler 16 | $('a[data-toggle="chat"]').each(function(i, el) 17 | { 18 | $(el).on('click', function(ev) 19 | { 20 | ev.preventDefault(); 21 | 22 | public_vars.$body.toggleClass('chat-open'); 23 | 24 | if($.isFunction($.fn.perfectScrollbar)) 25 | { 26 | setTimeout(function() 27 | { 28 | public_vars.$chat.find('.chat_inner').perfectScrollbar('update'); 29 | $(window).trigger('xenon.resize'); 30 | }, 1); 31 | } 32 | }); 33 | }); 34 | 35 | 36 | // Settings Pane Toggler 37 | $('a[data-toggle="settings-pane"]').each(function(i, el) 38 | { 39 | $(el).on('click', function(ev) 40 | { 41 | ev.preventDefault(); 42 | 43 | var use_animation = attrDefault($(el), 'animate', false) && ! isxs(); 44 | 45 | var scroll = { 46 | top: $(document).scrollTop(), 47 | toTop: 0 48 | }; 49 | 50 | if(public_vars.$body.hasClass('settings-pane-open')) 51 | { 52 | scroll.toTop = scroll.top; 53 | } 54 | 55 | TweenMax.to(scroll, (use_animation ? .1 : 0), {top: scroll.toTop, roundProps: ['top'], ease: scroll.toTop < 10 ? null : Sine.easeOut, onUpdate: function() 56 | { 57 | $(window).scrollTop( scroll.top ); 58 | }, 59 | onComplete: function() 60 | { 61 | if(use_animation) 62 | { 63 | // With Animation 64 | public_vars.$settingsPaneIn.addClass('with-animation'); 65 | 66 | // Opening 67 | if( ! public_vars.$settingsPane.is(':visible')) 68 | { 69 | public_vars.$body.addClass('settings-pane-open'); 70 | 71 | var height = public_vars.$settingsPane.outerHeight(true); 72 | 73 | public_vars.$settingsPane.css({ 74 | height: 0 75 | }); 76 | 77 | TweenMax.to(public_vars.$settingsPane, .25, {css: {height: height}, ease: Circ.easeInOut, onComplete: function() 78 | { 79 | public_vars.$settingsPane.css({height: ''}); 80 | }}); 81 | 82 | public_vars.$settingsPaneIn.addClass('visible'); 83 | } 84 | // Closing 85 | else 86 | { 87 | public_vars.$settingsPaneIn.addClass('closing'); 88 | 89 | TweenMax.to(public_vars.$settingsPane, .25, {css: {height: 0}, delay: .15, ease: Power1.easeInOut, onComplete: function() 90 | { 91 | public_vars.$body.removeClass('settings-pane-open'); 92 | public_vars.$settingsPane.css({height: ''}); 93 | public_vars.$settingsPaneIn.removeClass('closing visible'); 94 | }}); 95 | } 96 | } 97 | else 98 | { 99 | // Without Animation 100 | public_vars.$body.toggleClass('settings-pane-open'); 101 | public_vars.$settingsPaneIn.removeClass('visible'); 102 | public_vars.$settingsPaneIn.removeClass('with-animation'); 103 | } 104 | } 105 | }); 106 | }); 107 | }); 108 | 109 | 110 | 111 | // Sidebar Toggle 112 | $('a[data-toggle="sidebar"]').each(function(i, el) 113 | { 114 | $(el).on('click', function(ev) 115 | { 116 | ev.preventDefault(); 117 | 118 | 119 | if(public_vars.$sidebarMenu.hasClass('collapsed')) 120 | { 121 | public_vars.$sidebarMenu.removeClass('collapsed'); 122 | ps_init(); 123 | } 124 | else 125 | { 126 | public_vars.$sidebarMenu.addClass('collapsed'); 127 | ps_destroy(); 128 | } 129 | 130 | $(window).trigger('xenon.resize'); 131 | }); 132 | }); 133 | 134 | 135 | 136 | // Mobile Menu Trigger 137 | $('a[data-toggle="mobile-menu"]').on('click', function(ev) 138 | { 139 | ev.preventDefault(); 140 | 141 | public_vars.$mainMenu.add(public_vars.$sidebarProfile).toggleClass('mobile-is-visible'); 142 | ps_destroy(); 143 | }); 144 | 145 | 146 | 147 | // Mobile Menu Trigger for Horizontal Menu 148 | $('a[data-toggle="mobile-menu-horizontal"]').on('click', function(ev) 149 | { 150 | ev.preventDefault(); 151 | 152 | public_vars.$horizontalMenu.toggleClass('mobile-is-visible'); 153 | 154 | }); 155 | 156 | 157 | 158 | // Mobile Menu Trigger for Sidebar & Horizontal Menu 159 | $('a[data-toggle="mobile-menu-both"]').on('click', function(ev) 160 | { 161 | ev.preventDefault(); 162 | 163 | public_vars.$mainMenu.toggleClass('mobile-is-visible both-menus-visible'); 164 | public_vars.$horizontalMenu.toggleClass('mobile-is-visible both-menus-visible'); 165 | 166 | }); 167 | 168 | 169 | 170 | // Mobile User Info Menu Trigger 171 | $('a[data-toggle="user-info-menu"]').on('click', function(ev) 172 | { 173 | ev.preventDefault(); 174 | 175 | public_vars.$userInfoMenu.toggleClass('mobile-is-visible'); 176 | 177 | }); 178 | 179 | 180 | 181 | // Mobile User Info Menu Trigger for Horizontal Menu 182 | $('a[data-toggle="user-info-menu-horizontal"]').on('click', function(ev) 183 | { 184 | ev.preventDefault(); 185 | 186 | public_vars.$userInfoMenuHor.find('.nav.nav-userinfo').toggleClass('mobile-is-visible'); 187 | 188 | }); 189 | 190 | 191 | 192 | // Panel Close 193 | $('body').on('click', '.panel a[data-toggle="remove"]', function(ev) 194 | { 195 | ev.preventDefault(); 196 | 197 | var $panel = $(this).closest('.panel'), 198 | $panel_parent = $panel.parent(); 199 | 200 | $panel.remove(); 201 | 202 | if($panel_parent.children().length == 0) 203 | { 204 | $panel_parent.remove(); 205 | } 206 | }); 207 | 208 | 209 | 210 | // Panel Reload 211 | $('body').on('click', '.panel a[data-toggle="reload"]', function(ev) 212 | { 213 | ev.preventDefault(); 214 | 215 | var $panel = $(this).closest('.panel'); 216 | 217 | // This is just a simulation, nothing is going to be reloaded 218 | $panel.append('
    '); 219 | 220 | var $pd = $panel.find('.panel-disabled'); 221 | 222 | setTimeout(function() 223 | { 224 | $pd.fadeOut('fast', function() 225 | { 226 | $pd.remove(); 227 | }); 228 | 229 | }, 500 + 300 * (Math.random() * 5)); 230 | }); 231 | 232 | 233 | 234 | // Panel Expand/Collapse Toggle 235 | $('body').on('click', '.panel a[data-toggle="panel"]', function(ev) 236 | { 237 | ev.preventDefault(); 238 | 239 | var $panel = $(this).closest('.panel'); 240 | 241 | $panel.toggleClass('collapsed'); 242 | }); 243 | 244 | 245 | 246 | // Loading Text toggle 247 | $('[data-loading-text]').each(function(i, el) // Temporary for demo purpose only 248 | { 249 | var $this = $(el); 250 | 251 | $this.on('click', function(ev) 252 | { 253 | $this.button('loading'); 254 | 255 | setTimeout(function(){ $this.button('reset'); }, 1800); 256 | }); 257 | }); 258 | 259 | 260 | 261 | 262 | // Popovers and tooltips 263 | $('[data-toggle="popover"]').each(function(i, el) 264 | { 265 | var $this = $(el), 266 | placement = attrDefault($this, 'placement', 'right'), 267 | trigger = attrDefault($this, 'trigger', 'click'), 268 | popover_class = $this.get(0).className.match(/(popover-[a-z0-9]+)/i); 269 | 270 | $this.popover({ 271 | placement: placement, 272 | trigger: trigger 273 | }); 274 | 275 | if(popover_class) 276 | { 277 | $this.removeClass(popover_class[1]); 278 | 279 | $this.on('show.bs.popover', function(ev) 280 | { 281 | setTimeout(function() 282 | { 283 | var $popover = $this.next(); 284 | $popover.addClass(popover_class[1]); 285 | 286 | }, 0); 287 | }); 288 | } 289 | }); 290 | 291 | $('[data-toggle="tooltip"]').each(function(i, el) 292 | { 293 | var $this = $(el), 294 | placement = attrDefault($this, 'placement', 'top'), 295 | trigger = attrDefault($this, 'trigger', 'hover'), 296 | tooltip_class = $this.get(0).className.match(/(tooltip-[a-z0-9]+)/i); 297 | 298 | $this.tooltip({ 299 | placement: placement, 300 | trigger: trigger 301 | }); 302 | 303 | if(tooltip_class) 304 | { 305 | $this.removeClass(tooltip_class[1]); 306 | 307 | $this.on('show.bs.tooltip', function(ev) 308 | { 309 | setTimeout(function() 310 | { 311 | var $tooltip = $this.next(); 312 | $tooltip.addClass(tooltip_class[1]); 313 | 314 | }, 0); 315 | }); 316 | } 317 | }); 318 | 319 | }); 320 | 321 | })(jQuery, window); --------------------------------------------------------------------------------