├── settings.gradle ├── package.json ├── templates ├── assets │ ├── img │ │ ├── loading.gif │ │ ├── 20200212-38ce26bb0bd0d.gif │ │ ├── 20200212-6dafa53ecf4e3.gif │ │ └── 20200212-e056a5f2914d6.gif │ ├── iconfont │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ ├── iconfont.woff2 │ │ ├── iconfont.css │ │ └── iconfont.json │ ├── webfonts │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.ttf │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.woff │ │ └── fa-regular-400.woff2 │ ├── css │ │ ├── noscript.min.css │ │ ├── images │ │ │ ├── close.svg │ │ │ ├── arrow.svg │ │ │ └── spinner.svg │ │ ├── noscript.css │ │ └── main.min.css │ └── js │ │ ├── browser.min.js │ │ ├── breakpoints.min.js │ │ ├── main.js │ │ ├── jquery.lazyload.js │ │ ├── util.js │ │ └── jquery.poptrox.min.js ├── macro │ └── photo.html ├── modules │ ├── header.html │ └── footer.html ├── layout.html └── index.html ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature_request.zh.yml │ └── bug_report.zh.yml └── workflows │ └── build.yml ├── annotation-setting.yaml ├── .gitignore ├── theme.yaml ├── .all-contributorsrc ├── LICENSE ├── gradlew.bat ├── settings.yaml ├── README.md └── gradlew /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'theme-timeplus' 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "halo-theme-timeplus", 3 | "version": "1.0.3", 4 | "dependencies": { 5 | } 6 | } -------------------------------------------------------------------------------- /templates/assets/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/img/loading.gif -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /templates/assets/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /templates/assets/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/iconfont/iconfont.woff -------------------------------------------------------------------------------- /templates/assets/iconfont/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/iconfont/iconfont.woff2 -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /templates/assets/img/20200212-38ce26bb0bd0d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/img/20200212-38ce26bb0bd0d.gif -------------------------------------------------------------------------------- /templates/assets/img/20200212-6dafa53ecf4e3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/img/20200212-6dafa53ecf4e3.gif -------------------------------------------------------------------------------- /templates/assets/img/20200212-e056a5f2914d6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/img/20200212-e056a5f2914d6.gif -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /templates/assets/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chengzhongxue/halo-theme-timeplus/HEAD/templates/assets/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: 对 Timeplus 有其他问题 4 | url: https://0206.ink 5 | about: 如果你还有其他疑问,可以加群沟通。 -------------------------------------------------------------------------------- /templates/assets/css/noscript.min.css: -------------------------------------------------------------------------------- 1 | body.is-preload #wrapper:before{display:none}body.is-preload #main .thumb{pointer-events:auto;opacity:1}body.is-preload #header{-moz-transform:none;-webkit-transform:none;-ms-transform:none;transform:none} -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /annotation-setting.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1alpha1 2 | kind: AnnotationSetting 3 | metadata: 4 | generateName: annotation-setting- 5 | spec: 6 | targetRef: 7 | group: "core.halo.run" 8 | kind: Photo 9 | formSchema: 10 | - $formkit: "color" 11 | name: "nameColor" 12 | value: "#ffffff" 13 | label: "字体颜色颜色" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | *.local 13 | 14 | # Editor directories and files 15 | .vscode/* 16 | !.vscode/extensions.json 17 | .idea 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | 24 | .gradle 25 | build 26 | -------------------------------------------------------------------------------- /templates/assets/css/images/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /templates/assets/css/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /templates/assets/css/images/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /templates/assets/css/noscript.css: -------------------------------------------------------------------------------- 1 | /* 2 | Multiverse by HTML5 UP 3 | html5up.net | @ajlkn 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | /* Wrapper */ 8 | 9 | body.is-preload #wrapper:before { 10 | display: none; 11 | } 12 | 13 | /* Main */ 14 | 15 | body.is-preload #main .thumb { 16 | pointer-events: auto; 17 | opacity: 1; 18 | } 19 | 20 | /* Header */ 21 | 22 | body.is-preload #header { 23 | -moz-transform: none; 24 | -webkit-transform: none; 25 | -ms-transform: none; 26 | transform: none; 27 | } -------------------------------------------------------------------------------- /theme.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: theme.halo.run/v1alpha1 2 | kind: Theme 3 | metadata: 4 | name: theme-timeplus 5 | annotations: 6 | # Add supports for Halo App Store 7 | # https://halo.run/store/apps/app-ihpQC 8 | "store.halo.run/app-id": "app-ihpQC" 9 | spec: 10 | displayName: TimePlus 11 | author: 12 | name: 困困鱼 13 | website: "https://kunkunyu.com" 14 | description: 移植自zhheo-TimePlus适配Halo2.x的TimePlus主题 15 | logo: "https://kunkunyu.com/upload/cf44650dc27ca55b28bb0f8d3e48a93.png" 16 | website: "https://kunkunyu.com?preview-theme=theme-timeplus" 17 | repo: "https://github.com/chengzhongxue/halo-theme-timeplus" 18 | settingName: "theme-timeplus-setting" 19 | configMapName: "theme-timeplus-configMap" 20 | version: "1.0.3" 21 | require: ">=2.8.0" 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.zh.yml: -------------------------------------------------------------------------------- 1 | name: 新特性建议 2 | description: 提交新特性建议 3 | body: 4 | - type: markdown 5 | id: preface 6 | attributes: 7 | value: "你好!在开始之前,我们非常推荐阅读一遍[《开源最佳实践》](https://github.com/LinuxSuRen/open-source-best-practice),这会在很大程度上提高我们彼此的效率。" 8 | - type: markdown 9 | id: environment 10 | attributes: 11 | value: "## 环境信息" 12 | - type: input 13 | id: version 14 | attributes: 15 | label: "你当前使用的版本" 16 | description: "可以在管理后台的关于页面中找到。" 17 | - type: markdown 18 | id: details 19 | attributes: 20 | value: "## 详细信息" 21 | - type: textarea 22 | id: description 23 | attributes: 24 | label: "描述一下此特性" 25 | validations: 26 | required: true 27 | - type: textarea 28 | id: additional-information 29 | attributes: 30 | label: "附加信息" 31 | description: "如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。" -------------------------------------------------------------------------------- /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "commitType": "docs", 8 | "commitConvention": "angular", 9 | "contributors": [ 10 | { 11 | "login": "chengzhongxue", 12 | "name": "困困鱼", 13 | "avatar_url": "https://avatars.githubusercontent.com/u/89380218?v=4", 14 | "profile": "https://github.com/chengzhongxue", 15 | "contributions": [ 16 | "infra", 17 | "test", 18 | "code" 19 | ] 20 | }, 21 | { 22 | "login": "Roozenlz", 23 | "name": "Roozen", 24 | "avatar_url": "https://avatars.githubusercontent.com/u/93673944?v=4", 25 | "profile": "http://roozen.top", 26 | "contributions": [ 27 | "infra", 28 | "test", 29 | "code" 30 | ] 31 | } 32 | ], 33 | "contributorsPerLine": 7, 34 | "skipCi": true, 35 | "repoType": "github", 36 | "repoHost": "https://github.com", 37 | "projectName": "halo-theme-timeplus", 38 | "projectOwner": "chengzhongxue" 39 | } 40 | -------------------------------------------------------------------------------- /templates/macro/photo.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |

[[${photo.spec.displayName}]]

7 |

8 |

[[${photo.spec.description}]]

9 |

10 |
  • 13 | [[${group.spec.displayName}]] 14 |
  • 15 |
    16 |
    -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Roozen 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 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.zh.yml: -------------------------------------------------------------------------------- 1 | name: Bug 反馈 2 | description: 提交 Bug 反馈 3 | labels: [ bug ] 4 | body: 5 | - type: markdown 6 | id: preface 7 | attributes: 8 | value: | 9 | 感谢你花时间填写此错误报告!在开始之前,我们非常推荐阅读一遍[《开源最佳实践》](https://github.com/LinuxSuRen/open-source-best-practice),这会在很大程度上提高我们彼此的效率。 10 | - type: markdown 11 | id: environment 12 | attributes: 13 | value: "## 环境信息" 14 | - type: input 15 | id: version 16 | validations: 17 | required: true 18 | attributes: 19 | label: "是什么版本出现了此问题?" 20 | description: "可以在管理后台的关于页面中找到。" 21 | - type: input 22 | id: site-url 23 | attributes: 24 | label: "在线站点地址" 25 | description: "如果可以的话,请提供你的站点地址。这可能会帮助我们更好的定位问题。" 26 | placeholder: "ex. https://halo.run" 27 | validations: 28 | required: false 29 | - type: markdown 30 | id: details 31 | attributes: 32 | value: "## 详细信息" 33 | - type: textarea 34 | id: what-happened 35 | attributes: 36 | label: "发生了什么?" 37 | description: "最好还告诉我们,你预计会发生什么。" 38 | validations: 39 | required: true 40 | - type: textarea 41 | id: logs 42 | attributes: 43 | label: "相关日志输出" 44 | description: "请复制并粘贴任何相关的日志输出。 这将自动格式化为代码,因此无需反引号。" 45 | render: shell 46 | - type: textarea 47 | id: additional-information 48 | attributes: 49 | label: "附加信息" 50 | description: "如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。" 51 | -------------------------------------------------------------------------------- /templates/modules/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 38 | 39 | -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
    28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /templates/modules/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 | 6 | 7 |
    8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 |
    18 | 19 | 20 |
    21 | 22 | 73 | 77 |
    78 |
    79 | 80 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /templates/assets/js/browser.min.js: -------------------------------------------------------------------------------- 1 | /* browser.js v1.0 | @ajlkn | MIT licensed */ 2 | var browser = function() { 3 | "use strict"; 4 | var e = { 5 | name: null, 6 | version: null, 7 | os: null, 8 | osVersion: null, 9 | touch: null, 10 | mobile: null, 11 | _canUse: null, 12 | canUse: function(n) { 13 | e._canUse || (e._canUse = document.createElement("div")); 14 | var o = e._canUse.style 15 | , r = n.charAt(0).toUpperCase() + n.slice(1); 16 | return n in o || "Moz" + r in o || "Webkit" + r in o || "O" + r in o || "ms" + r in o 17 | }, 18 | init: function() { 19 | var n, o, r, i, t = navigator.userAgent; 20 | for (n = "other", 21 | o = 0, 22 | r = [["firefox", /Firefox\/([0-9\.]+)/], ["bb", /BlackBerry.+Version\/([0-9\.]+)/], ["bb", /BB[0-9]+.+Version\/([0-9\.]+)/], ["opera", /OPR\/([0-9\.]+)/], ["opera", /Opera\/([0-9\.]+)/], ["edge", /Edge\/([0-9\.]+)/], ["safari", /Version\/([0-9\.]+).+Safari/], ["chrome", /Chrome\/([0-9\.]+)/], ["ie", /MSIE ([0-9]+)/], ["ie", /Trident\/.+rv:([0-9]+)/]], 23 | i = 0; i < r.length; i++) 24 | if (t.match(r[i][1])) { 25 | n = r[i][0], 26 | o = parseFloat(RegExp.$1); 27 | break 28 | } 29 | for (e.name = n, 30 | e.version = o, 31 | n = "other", 32 | o = 0, 33 | r = [["ios", /([0-9_]+) like Mac OS X/, function(e) { 34 | return e.replace("_", ".").replace("_", "") 35 | } 36 | ], ["ios", /CPU like Mac OS X/, function(e) { 37 | return 0 38 | } 39 | ], ["wp", /Windows Phone ([0-9\.]+)/, null], ["android", /Android ([0-9\.]+)/, null], ["mac", /Macintosh.+Mac OS X ([0-9_]+)/, function(e) { 40 | return e.replace("_", ".").replace("_", "") 41 | } 42 | ], ["windows", /Windows NT ([0-9\.]+)/, null], ["bb", /BlackBerry.+Version\/([0-9\.]+)/, null], ["bb", /BB[0-9]+.+Version\/([0-9\.]+)/, null], ["linux", /Linux/, null], ["bsd", /BSD/, null], ["unix", /X11/, null]], 43 | i = 0; i < r.length; i++) 44 | if (t.match(r[i][1])) { 45 | n = r[i][0], 46 | o = parseFloat(r[i][2] ? r[i][2](RegExp.$1) : RegExp.$1); 47 | break 48 | } 49 | e.os = n, 50 | e.osVersion = o, 51 | e.touch = "wp" == e.os ? navigator.msMaxTouchPoints > 0 : !!("ontouchstart"in window), 52 | e.mobile = "wp" == e.os || "android" == e.os || "ios" == e.os || "bb" == e.os 53 | } 54 | }; 55 | return e.init(), 56 | e 57 | }(); 58 | !function(e, n) { 59 | "function" == typeof define && define.amd ? define([], n) : "object" == typeof exports ? module.exports = n() : e.browser = n() 60 | }(this, function() { 61 | return browser 62 | }); 63 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build distribution theme 2 | 3 | on: 4 | release: 5 | types: 6 | - created 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | - name: Set up Node.js 14 | uses: actions/setup-node@v3 15 | with: 16 | node-version: 16 17 | - name: Compress zip 18 | run: | 19 | PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json) 20 | PRE_ZIP_FOLDER=halo-theme-timeplus-${PACKAGE_VERSION} 21 | ARTIFACT_NAME=${PRE_ZIP_FOLDER}.zip 22 | ARTIFACT_PATHNAME=dist/${ARTIFACT_NAME} 23 | echo "halo-theme-timeplus version $PACKAGE_VERSION" 24 | echo "Artifact name: ${ARTIFACT_NAME}" 25 | echo "Artifact pathname: ${ARTIFACT_PATHNAME}" 26 | echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV 27 | echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV 28 | echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV 29 | echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV 30 | mkdir $PRE_ZIP_FOLDER 31 | mkdir dist 32 | cp -r theme.yaml settings.yaml annotation-setting.yaml templates $PRE_ZIP_FOLDER/ 33 | zip -r $ARTIFACT_PATHNAME $PRE_ZIP_FOLDER 34 | - name: Upload artifact 35 | uses: actions/upload-artifact@v3 36 | with: 37 | name: halo-theme-timeplus 38 | path: | 39 | dist/*.zip 40 | retention-days: 7 41 | 42 | github-release: 43 | runs-on: ubuntu-latest 44 | if: github.event_name == 'release' 45 | steps: 46 | - uses: actions/checkout@v3 47 | with: 48 | submodules: false 49 | - name: Set up Node.js 50 | uses: actions/setup-node@v3 51 | with: 52 | node-version: 16 53 | - name: Compress zip 54 | run: | 55 | PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json) 56 | PRE_ZIP_FOLDER=halo-theme-timeplus-${PACKAGE_VERSION} 57 | ARTIFACT_NAME=${PRE_ZIP_FOLDER}.zip 58 | ARTIFACT_PATHNAME=dist/${ARTIFACT_NAME} 59 | echo "halo-theme-timeplus version $PACKAGE_VERSION" 60 | echo "Artifact name: ${ARTIFACT_NAME}" 61 | echo "Artifact pathname: ${ARTIFACT_PATHNAME}" 62 | echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >> $GITHUB_ENV 63 | echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV 64 | echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV 65 | echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV 66 | mkdir $PRE_ZIP_FOLDER 67 | mkdir dist 68 | cp -r theme.yaml settings.yaml annotation-setting.yaml templates $PRE_ZIP_FOLDER/ 69 | zip -r $ARTIFACT_PATHNAME $PRE_ZIP_FOLDER 70 | - name: Upload a release asset 71 | uses: actions/github-script@v2 72 | with: 73 | github-token: ${{secrets.GITHUB_TOKEN}} 74 | script: | 75 | const fs = require('fs').promises; 76 | const { repo: { owner, repo }, sha } = context; 77 | console.log({ owner, repo, sha }); 78 | const releaseId = process.env.RELEASE_ID 79 | const artifactPathName = process.env.ARTIFACT_PATHNAME 80 | const artifactName = process.env.ARTIFACT_NAME 81 | console.log('Releasing', releaseId, artifactPathName, artifactName) 82 | await github.repos.uploadReleaseAsset({ 83 | owner, repo, 84 | release_id: releaseId, 85 | name: artifactName, 86 | data: await fs.readFile(artifactPathName) 87 | }); 88 | -------------------------------------------------------------------------------- /settings.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1alpha1 2 | kind: Setting 3 | metadata: 4 | name: theme-timeplus-setting 5 | spec: 6 | forms: 7 | - group: basics 8 | label: 基础 9 | formSchema: 10 | - $formkit: text 11 | name: siteTitle 12 | label: 站点标题 13 | placeholder: 请输入站点标题 14 | value: 困困鱼 15 | - $formkit: text 16 | name: subTitle 17 | label: 站点副标题 18 | placeholder: 请输入站点标题 19 | value: 时光相册 20 | - $formkit: text 21 | name: zmkiabout 22 | label: 底栏前缀 23 | placeholder: 请输入底栏前缀 24 | value: 困困鱼 25 | - $formkit: textarea 26 | name: zmkiabouts 27 | label: 底栏后缀 28 | value: 分享生活的小事 29 | placeholder: 请输入底栏后缀 30 | - $formkit: attachment 31 | name: logo 32 | label: Logo 33 | value: https://0206.ink/upload/645fac04e203a.jpeg 34 | - $formkit: text 35 | name: icp 36 | label: ICP 备案 37 | placeholder: 请输入 ICP 备案号 38 | help: 格式:皖ICP备 xxxxxxxx 号 39 | - $formkit: text 40 | name: gongan 41 | label: 公安备案 42 | placeholder: 请输入公安备案号 43 | help: 格式:皖公网安备 xxxxxxxx 号 44 | 45 | - group: about 46 | label: 关于 47 | formSchema: 48 | - $formkit: textarea 49 | name: description 50 | label: 描述 51 | value: 想用照片记录一下生活,可能不会是摄影图展示,它只是记录我当时点滴的快乐。 52 | placeholder: 请输入描述 53 | - $formkit: repeater 54 | name: socialMedia 55 | label: 社交媒体 56 | value: [ ] 57 | children: 58 | - $formkit: select 59 | name: icon 60 | label: 图标 61 | options: 62 | - label: 电子邮箱 63 | value: icon-mail-line 64 | - label: 微信 65 | value: icon-wechat2 66 | - label: 公众号 67 | value: icon-weixingongzhonghao 68 | - label: 腾讯 QQ 69 | value: icon-qq-line 70 | - label: 新浪微博 71 | value: icon-weibo-line 72 | - label: 知乎 73 | value: icon-zhihu-line 74 | - label: 豆瓣 75 | value: icon-douban-line 76 | - label: 哔哩哔哩 77 | value: icon-bilibili-line 78 | - label: GitHub 79 | value: icon-github-line 80 | - label: GitLab 81 | value: icon-gitlab-line 82 | - label: 百度 83 | value: icon-baidu-line 84 | - label: 掘金 85 | value: icon-juejin 86 | - label: 语雀 87 | value: icon-yuque 88 | - label: 博客园 89 | value: icon-CN_cnblogs 90 | - label: CSDN 91 | value: icon-csdn1 92 | - label: LeetCode 93 | value: icon-leetcode 94 | - label: 头条 95 | value: icon-jinritoutiao 96 | - label: 抖音 / TikTok 97 | value: icon-douyin 98 | - label: Telegram 99 | value: icon-telegram-line 100 | - label: Facebook 101 | value: icon-facebook-box-line 102 | - label: Instagram 103 | value: icon-instagram-line 104 | - label: LinkedIn 105 | value: icon-linkedin-box-line 106 | - label: Twitter 107 | value: icon-twitter-line 108 | - label: Slack 109 | value: icon-slack-line 110 | - label: Discord 111 | value: icon-discord-line 112 | - label: YouTube 113 | value: icon-youtube-line 114 | - label: Steam 115 | value: icon-steam-fill 116 | - label: Dribbble 117 | value: icon-dribbble-line 118 | - $formkit: text 119 | name: name 120 | label: 名称 121 | - $formkit: url 122 | name: url 123 | label: 链接 124 | 125 | -------------------------------------------------------------------------------- /templates/assets/js/breakpoints.min.js: -------------------------------------------------------------------------------- 1 | /* breakpoints.js v1.0 | @ajlkn | MIT licensed */ 2 | var breakpoints = function() { 3 | "use strict"; 4 | function e(e) { 5 | t.init(e) 6 | } 7 | var t = { 8 | list: null, 9 | media: {}, 10 | events: [], 11 | init: function(e) { 12 | t.list = e, 13 | window.addEventListener("resize", t.poll), 14 | window.addEventListener("orientationchange", t.poll), 15 | window.addEventListener("load", t.poll), 16 | window.addEventListener("fullscreenchange", t.poll) 17 | }, 18 | active: function(e) { 19 | var n, a, s, i, r, d, c; 20 | if (!(e in t.media)) { 21 | if (">=" == e.substr(0, 2) ? (a = "gte", 22 | n = e.substr(2)) : "<=" == e.substr(0, 2) ? (a = "lte", 23 | n = e.substr(2)) : ">" == e.substr(0, 1) ? (a = "gt", 24 | n = e.substr(1)) : "<" == e.substr(0, 1) ? (a = "lt", 25 | n = e.substr(1)) : "!" == e.substr(0, 1) ? (a = "not", 26 | n = e.substr(1)) : (a = "eq", 27 | n = e), 28 | n && n in t.list) 29 | if (i = t.list[n], 30 | Array.isArray(i)) { 31 | if (r = parseInt(i[0]), 32 | d = parseInt(i[1]), 33 | isNaN(r)) { 34 | if (isNaN(d)) 35 | return; 36 | c = i[1].substr(String(d).length) 37 | } else 38 | c = i[0].substr(String(r).length); 39 | if (isNaN(r)) 40 | switch (a) { 41 | case "gte": 42 | s = "screen"; 43 | break; 44 | case "lte": 45 | s = "screen and (max-width: " + d + c + ")"; 46 | break; 47 | case "gt": 48 | s = "screen and (min-width: " + (d + 1) + c + ")"; 49 | break; 50 | case "lt": 51 | s = "screen and (max-width: -1px)"; 52 | break; 53 | case "not": 54 | s = "screen and (min-width: " + (d + 1) + c + ")"; 55 | break; 56 | default: 57 | s = "screen and (max-width: " + d + c + ")" 58 | } 59 | else if (isNaN(d)) 60 | switch (a) { 61 | case "gte": 62 | s = "screen and (min-width: " + r + c + ")"; 63 | break; 64 | case "lte": 65 | s = "screen"; 66 | break; 67 | case "gt": 68 | s = "screen and (max-width: -1px)"; 69 | break; 70 | case "lt": 71 | s = "screen and (max-width: " + (r - 1) + c + ")"; 72 | break; 73 | case "not": 74 | s = "screen and (max-width: " + (r - 1) + c + ")"; 75 | break; 76 | default: 77 | s = "screen and (min-width: " + r + c + ")" 78 | } 79 | else 80 | switch (a) { 81 | case "gte": 82 | s = "screen and (min-width: " + r + c + ")"; 83 | break; 84 | case "lte": 85 | s = "screen and (max-width: " + d + c + ")"; 86 | break; 87 | case "gt": 88 | s = "screen and (min-width: " + (d + 1) + c + ")"; 89 | break; 90 | case "lt": 91 | s = "screen and (max-width: " + (r - 1) + c + ")"; 92 | break; 93 | case "not": 94 | s = "screen and (max-width: " + (r - 1) + c + "), screen and (min-width: " + (d + 1) + c + ")"; 95 | break; 96 | default: 97 | s = "screen and (min-width: " + r + c + ") and (max-width: " + d + c + ")" 98 | } 99 | } else 100 | s = "(" == i.charAt(0) ? "screen and " + i : i; 101 | t.media[e] = !!s && s 102 | } 103 | return t.media[e] !== !1 && window.matchMedia(t.media[e]).matches 104 | }, 105 | on: function(e, n) { 106 | t.events.push({ 107 | query: e, 108 | handler: n, 109 | state: !1 110 | }), 111 | t.active(e) && n() 112 | }, 113 | poll: function() { 114 | var e, n; 115 | for (e = 0; e < t.events.length; e++) 116 | n = t.events[e], 117 | t.active(n.query) ? n.state || (n.state = !0, 118 | n.handler()) : n.state && (n.state = !1) 119 | } 120 | }; 121 | return e._ = t, 122 | e.on = function(e, n) { 123 | t.on(e, n) 124 | } 125 | , 126 | e.active = function(e) { 127 | return t.active(e) 128 | } 129 | , 130 | e 131 | }(); 132 | !function(e, t) { 133 | "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? module.exports = t() : e.breakpoints = t() 134 | }(this, function() { 135 | return breakpoints 136 | }); 137 | -------------------------------------------------------------------------------- /templates/assets/js/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | Multiverse by HTML5 UP 3 | html5up.net | @ajlkn 4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) 5 | */ 6 | 7 | (function($) { 8 | 9 | var $window = $(window), 10 | $body = $('body'), 11 | $wrapper = $('#wrapper'); 12 | 13 | // Breakpoints. 14 | breakpoints({ 15 | xlarge: [ '1281px', '1680px' ], 16 | large: [ '981px', '1280px' ], 17 | medium: [ '737px', '980px' ], 18 | small: [ '481px', '736px' ], 19 | xsmall: [ null, '480px' ] 20 | }); 21 | 22 | // Hack: Enable IE workarounds. 23 | if (browser.name == 'ie') 24 | $body.addClass('ie'); 25 | 26 | // Touch? 27 | if (browser.mobile) 28 | $body.addClass('touch'); 29 | 30 | // Transitions supported? 31 | if (browser.canUse('transition')) { 32 | 33 | // Play initial animations on page load. 34 | $window.on('load', function() { 35 | window.setTimeout(function() { 36 | $body.removeClass('is-preload'); 37 | }, 100); 38 | }); 39 | 40 | // Prevent transitions/animations on resize. 41 | var resizeTimeout; 42 | 43 | $window.on('resize', function() { 44 | 45 | window.clearTimeout(resizeTimeout); 46 | 47 | $body.addClass('is-resizing'); 48 | 49 | resizeTimeout = window.setTimeout(function() { 50 | $body.removeClass('is-resizing'); 51 | }, 100); 52 | 53 | }); 54 | 55 | } 56 | 57 | // Scroll back to top. 58 | $window.scrollTop(0); 59 | 60 | // Panels. 61 | var $panels = $('.panel'); 62 | 63 | $panels.each(function() { 64 | 65 | var $this = $(this), 66 | $toggles = $('[href="#' + $this.attr('id') + '"]'), 67 | $closer = $('
    ').appendTo($this); 68 | 69 | // Closer. 70 | $closer 71 | .on('click', function(event) { 72 | $this.trigger('---hide'); 73 | }); 74 | 75 | // Events. 76 | $this 77 | .on('click', function(event) { 78 | event.stopPropagation(); 79 | }) 80 | .on('---toggle', function() { 81 | 82 | if ($this.hasClass('active')) 83 | $this.triggerHandler('---hide'); 84 | else 85 | $this.triggerHandler('---show'); 86 | 87 | }) 88 | .on('---show', function() { 89 | 90 | // Hide other content. 91 | if ($body.hasClass('content-active')) 92 | $panels.trigger('---hide'); 93 | 94 | // Activate content, toggles. 95 | $this.addClass('active'); 96 | $toggles.addClass('active'); 97 | 98 | // Activate body. 99 | $body.addClass('content-active'); 100 | 101 | }) 102 | .on('---hide', function() { 103 | 104 | // Deactivate content, toggles. 105 | $this.removeClass('active'); 106 | $toggles.removeClass('active'); 107 | 108 | // Deactivate body. 109 | $body.removeClass('content-active'); 110 | 111 | }); 112 | 113 | // Toggles. 114 | $toggles 115 | .removeAttr('href') 116 | .css('cursor', 'pointer') 117 | .on('click', function(event) { 118 | 119 | event.preventDefault(); 120 | event.stopPropagation(); 121 | 122 | $this.trigger('---toggle'); 123 | 124 | }); 125 | 126 | }); 127 | 128 | // Global events. 129 | $body 130 | .on('click', function(event) { 131 | 132 | if ($body.hasClass('content-active')) { 133 | 134 | event.preventDefault(); 135 | event.stopPropagation(); 136 | 137 | $panels.trigger('---hide'); 138 | 139 | } 140 | 141 | }); 142 | 143 | $window 144 | .on('keyup', function(event) { 145 | 146 | if (event.keyCode == 27 147 | && $body.hasClass('content-active')) { 148 | 149 | event.preventDefault(); 150 | event.stopPropagation(); 151 | 152 | $panels.trigger('---hide'); 153 | 154 | } 155 | 156 | }); 157 | 158 | // Header. 159 | var $header = $('#header'); 160 | 161 | // Links. 162 | $header.find('a').each(function() { 163 | 164 | var $this = $(this), 165 | href = $this.attr('href'); 166 | 167 | // Internal link? Skip. 168 | if (!href 169 | || href.charAt(0) == '#') 170 | return; 171 | 172 | // Redirect on click. 173 | $this 174 | .removeAttr('href') 175 | .css('cursor', 'pointer') 176 | .on('click', function(event) { 177 | 178 | event.preventDefault(); 179 | event.stopPropagation(); 180 | 181 | window.location.href = href; 182 | 183 | }); 184 | 185 | }); 186 | 187 | // Footer. 188 | var $footer = $('#footer'); 189 | 190 | // Copyright. 191 | // This basically just moves the copyright line to the end of the *last* sibling of its current parent 192 | // when the "medium" breakpoint activates, and moves it back when it deactivates. 193 | $footer.find('.copyright').each(function() { 194 | 195 | var $this = $(this), 196 | $parent = $this.parent(), 197 | $lastParent = $parent.parent().children().last(); 198 | 199 | breakpoints.on('<=medium', function() { 200 | $this.appendTo($lastParent); 201 | }); 202 | 203 | breakpoints.on('>medium', function() { 204 | $this.appendTo($parent); 205 | }); 206 | 207 | }); 208 | 209 | // Main. 210 | var $main = $('#main'); 211 | 212 | // Thumbs. 213 | $main.children('.thumb').each(function() { 214 | 215 | var $this = $(this), 216 | $image = $this.find('.image'), $image_img = $image.children('img'), 217 | x; 218 | 219 | // No image? Bail. 220 | if ($image.length == 0) 221 | // return; 222 | 223 | // Image. 224 | // This sets the background of the "image" to the image pointed to by its child 225 | // (which is then hidden). Gives us way more flexibility. 226 | 227 | // Set background. 228 | // $image.css('background-image', 'url(' + $image_img.attr('src') + ')'); 229 | 230 | // Set background position. 231 | // if (x = $image_img.data('position')) 232 | // $image.css('background-position', x); 233 | 234 | // Hide original img. 235 | $image_img.hide(); 236 | 237 | }); 238 | 239 | // Poptrox. 240 | $main.poptrox({ 241 | baseZIndex: 20000, 242 | caption: function($a) { 243 | 244 | var s = ''; 245 | 246 | $a.nextAll().each(function() { 247 | s += this.outerHTML; 248 | }); 249 | 250 | return s; 251 | 252 | }, 253 | fadeSpeed: 300, 254 | onPopupClose: function() { $body.removeClass('modal-active'); }, 255 | onPopupOpen: function() { $body.addClass('modal-active'); }, 256 | overlayOpacity: 0, 257 | popupCloserText: '', 258 | popupHeight: 150, 259 | popupLoaderText: '', 260 | popupSpeed: 300, 261 | popupWidth: 150, 262 | selector: '.thumb > a.image', 263 | usePopupCaption: true, 264 | usePopupCloser: true, 265 | usePopupDefaultStyling: false, 266 | usePopupForceClose: true, 267 | usePopupLoader: true, 268 | usePopupNav: true, 269 | windowMargin: 50 270 | }); 271 | 272 | // Hack: Set margins to 0 when 'xsmall' activates. 273 | breakpoints.on('<=xsmall', function() { 274 | $main[0]._poptrox.windowMargin = 0; 275 | }); 276 | 277 | breakpoints.on('>xsmall', function() { 278 | $main[0]._poptrox.windowMargin = 50; 279 | }); 280 | 281 | })(jQuery); 282 | 283 | 284 | //控制全屏 285 | function enterfullscreen() { //进入全屏 286 | $("#fullscreen").html("退出全屏"); 287 | var docElm = document.documentElement; 288 | //W3C 289 | if(docElm.requestFullscreen) { 290 | docElm.requestFullscreen(); 291 | } 292 | //FireFox 293 | else if(docElm.mozRequestFullScreen) { 294 | docElm.mozRequestFullScreen(); 295 | } 296 | //Chrome等 297 | else if(docElm.webkitRequestFullScreen) { 298 | docElm.webkitRequestFullScreen(); 299 | } 300 | //IE11 301 | else if(elem.msRequestFullscreen) { 302 | elem.msRequestFullscreen(); 303 | } 304 | } 305 | 306 | function exitfullscreen() { //退出全屏 307 | $("#fullscreen").html(''); 308 | if(document.exitFullscreen) { 309 | document.exitFullscreen(); 310 | } else if(document.mozCancelFullScreen) { 311 | document.mozCancelFullScreen(); 312 | } else if(document.webkitCancelFullScreen) { 313 | document.webkitCancelFullScreen(); 314 | } else if(document.msExitFullscreen) { 315 | document.msExitFullscreen(); 316 | } 317 | } 318 | 319 | var a = 0; 320 | $('#fullscreen').on('click', function() { 321 | a++; 322 | a % 2 == 1 ? enterfullscreen() : exitfullscreen(); 323 | }) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 | 5 |

    Halo-Theme-TimePlus

    6 | 7 |

    8 | 9 | Halo version 10 | 11 | 下载总数 12 | 13 | 许可协议 14 |

    15 | 16 |

    17 | 18 | [主题预览](#-预览) | [快速上手](#-安装) | [加入我们](#-讨论) 19 | 20 |

    21 |
    22 | 23 | 24 | 25 | 26 | 29 | 30 |
    27 | 28 |
    31 | 32 | ## 🔥 预览 33 | 34 | | 站点名称 | 站点地址 | 35 | |:------:|:------------------------------------------------:| 36 | | 困困鱼 | https://kunkunyu.com/?preview-theme=theme-timeplus | 37 | | Roozen | https://roozen.top/?preview-theme=theme-timeplus | 38 | 39 | ## 👋 简介 40 | 41 | [Halo-Theme-TimePlus](https://github.com/chengzhongxue/halo-theme-timeplus) 42 | 是一款适用于 [Halo2.x](https://github.com/halo-dev/halo) 的博客主题。 43 | 44 | 移植自 [Typecho](https://typecho.org/) 社区中 45 | 的 [TimePlus](https://github.com/zhheo/TimePlus) 主题,作者是 [张洪Heo](https://github.com/zhheo) 46 | 47 | ## 🚨 注意事项(看我看我) 48 | > **本主题仅用于展示图片**,不包含文章相关模板的实现,因此可以选择作为**副主题**来使用。 49 | > 安装并填写主题相关配置后,可以在站点地址后加上 `?preview-theme=theme-timeplus` 来访问。 50 | > 无需启用本主题,因此不会影响到您现在所使用的主题。 51 | 52 | 1. **本主题依赖图库插件** 53 | 2. 如果安装主题后报错,请仔细查阅[主题说明](https://github.com/chengzhongxue/halo-theme-timeplus) 54 | 与[更新说明](https://github.com/chengzhongxue/halo-theme-timeplus/releases)!!! 55 | 3. 如果还未解决,可以加群求助!!! 56 | 4. 如果群友也解决不了,再考虑提ISSUE!!! 57 | 5. 需要`Halo`版本>=`2.8.0` 58 | 6. **若安装主题后出现500错误,请到主题设置页面,将每个设置项都保存一下!!!** 59 | 60 | ## 🛠 安装 61 | 62 | ### 🚗 自动安装 63 | 64 | 1. 点击 [此链接](https://halo.run/store/apps/app-pqKNX) 进入 Halo 官方应用市场,找到本主题 65 | 2. 点击左下角 `下载` 按钮 66 | 3. 弹出的对话框中,输入自己的网站地址,点击安装 67 | 68 | ### 🚲 手动安装 69 | 70 | #### 🚂 本地安装 71 | 72 | 1. 在 [ Release](https://github.com/chengzhongxue/halo-theme-timeplus/releases) 页面 `下载` 最新主题包 (zip) 73 | 2. 进入 Halo 后台 -> 主题 (左侧面板) 74 | 3. 点击右上角 “主题”, 在弹出的窗口中选择 `安装主题` 75 | 4. 选择下载好的主题包(zip) 76 | 5. 安装完成后的主题将会出现在 “未安装” 内,点击 `启用主题` 77 | 78 | #### 🛸 远程安装 79 | 80 | 1. 复制地址 `https://github.com/chengzhongxue/halo-theme-timeplus` 81 | 2. 进入Halo后台 -> 外观 -> 主题 (左侧面板) 82 | 3. 点击右上方 `安装` 按钮, 然后选择 `远程下载` 83 | 4. 在文本框中粘贴仓库地址后点击下载 84 | 85 | ### 🔌 插件依赖 86 | 87 | > 所有插件均为可选,不安装则不会出现对应功能。 88 | > 部分插件可能已经预设在 Halo 内。 89 | > 部分插件主题尚未适配。 90 | 91 | - 图库插件 [plugin-photos](https://github.com/halo-sigs/plugin-photos/releases) 92 | 93 | 94 | ## 📝 使用 95 | 96 | [文档](https://timeplus.yyds.pink/) 97 | 98 | ## 🔐 许可 99 | 100 | [Halo-Theme-TimePlus](https://github.com/chengzhongxue/halo-theme-timeplus) 使用 [MIT](./LICENSE) 协议开源,请遵守开源协议。 101 | 102 | ## ☕ 赞助 103 | 104 | 如果你觉得这个主题不错,你可以帮作者买一杯咖啡表示鼓励 ☕。(赞助的时候记得加上备注 🥰) 105 | ![sponsor](https://kunkunyu.com/upload/Snipaste_2023-08-22_15-14-02.png) 106 | 107 | | 时间 | 小伙伴 | 平台 | 金额 | 备注 | 108 | |:---------:|:---:|:------:|:--:|:--:| 109 | |2023-8-29|Alan|Wechat|100|☕| 110 | 111 | ## 💬 讨论 112 | 113 | 如果你对主题有什么建议或者意见,欢迎提 PR & issue。 114 | 115 | 想了解更多信息可以加我微信。 116 | 117 | 118 | 119 | ## Contributors ✨ 120 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! 121 | 122 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): 123 | 124 | [![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-) 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 |
    困困鱼
    困困鱼

    🚇 ⚠️ 💻
    Roozen
    Roozen

    🚇 ⚠️ 💻
    137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /templates/assets/iconfont/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "iconfont"; /* Project id 3736806 */ 3 | src: url('iconfont.woff2?t=1675495619599') format('woff2'), 4 | url('iconfont.woff?t=1675495619599') format('woff'), 5 | url('iconfont.ttf?t=1675495619599') format('truetype'); 6 | } 7 | 8 | .iconfont { 9 | font-family: "iconfont" !important; 10 | font-size: 16px; 11 | font-style: normal; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | .icon-arrows-alt-h:before { 17 | content: "\ef28"; 18 | } 19 | 20 | .icon-plus-circle:before { 21 | content: "\f082"; 22 | } 23 | 24 | .icon-csdn1:before { 25 | content: "\e608"; 26 | } 27 | 28 | .icon-CN_cnblogs:before { 29 | content: "\e64d"; 30 | } 31 | 32 | .icon-leetcode:before { 33 | content: "\ebf2"; 34 | } 35 | 36 | .icon-juejin:before { 37 | content: "\e606"; 38 | } 39 | 40 | .icon-weibiaoti-1:before { 41 | content: "\e607"; 42 | } 43 | 44 | .icon-csdn:before { 45 | content: "\e60a"; 46 | } 47 | 48 | .icon-bokeyuan:before { 49 | content: "\e623"; 50 | } 51 | 52 | .icon-yuque:before { 53 | content: "\e880"; 54 | } 55 | 56 | .icon-jinritoutiao:before { 57 | content: "\e68d"; 58 | } 59 | 60 | .icon-weixingongzhonghao:before { 61 | content: "\e605"; 62 | } 63 | 64 | .icon-steam-line:before { 65 | content: "\e75f"; 66 | } 67 | 68 | .icon-steam-fill:before { 69 | content: "\e763"; 70 | } 71 | 72 | .icon-slack-line:before { 73 | content: "\e75c"; 74 | } 75 | 76 | .icon-linkedin-box-line:before { 77 | content: "\e750"; 78 | } 79 | 80 | .icon-telegram-line:before { 81 | content: "\e761"; 82 | } 83 | 84 | .icon-douyin:before { 85 | content: "\e673"; 86 | } 87 | 88 | .icon-wechat2:before { 89 | content: "\e632"; 90 | } 91 | 92 | .icon-phone-line:before { 93 | content: "\e6ac"; 94 | } 95 | 96 | .icon-alipay-line:before { 97 | content: "\e73c"; 98 | } 99 | 100 | .icon-app-store-line:before { 101 | content: "\e73e"; 102 | } 103 | 104 | .icon-baidu-line:before { 105 | content: "\e73f"; 106 | } 107 | 108 | .icon-bilibili-line:before { 109 | content: "\e740"; 110 | } 111 | 112 | .icon-dingding-line:before { 113 | content: "\e743"; 114 | } 115 | 116 | .icon-douban-line:before { 117 | content: "\e744"; 118 | } 119 | 120 | .icon-disqus-line:before { 121 | content: "\e745"; 122 | } 123 | 124 | .icon-discord-line:before { 125 | content: "\e746"; 126 | } 127 | 128 | .icon-dribbble-line:before { 129 | content: "\e747"; 130 | } 131 | 132 | .icon-drive-line:before { 133 | content: "\e748"; 134 | } 135 | 136 | .icon-facebook-box-line:before { 137 | content: "\e749"; 138 | } 139 | 140 | .icon-dropbox-line:before { 141 | content: "\e74a"; 142 | } 143 | 144 | .icon-evernote-line:before { 145 | content: "\e74b"; 146 | } 147 | 148 | .icon-gitlab-line:before { 149 | content: "\e74d"; 150 | } 151 | 152 | .icon-google-line:before { 153 | content: "\e74e"; 154 | } 155 | 156 | .icon-google-play-line:before { 157 | content: "\e74f"; 158 | } 159 | 160 | .icon-instagram-line:before { 161 | content: "\e751"; 162 | } 163 | 164 | .icon-line-fill:before { 165 | content: "\e752"; 166 | } 167 | 168 | .icon-paypal-line:before { 169 | content: "\e757"; 170 | } 171 | 172 | .icon-qq-line:before { 173 | content: "\e759"; 174 | } 175 | 176 | .icon-reddit-line:before { 177 | content: "\e75a"; 178 | } 179 | 180 | .icon-spotify-line:before { 181 | content: "\e75d"; 182 | } 183 | 184 | .icon-stack-overflow-line:before { 185 | content: "\e75e"; 186 | } 187 | 188 | .icon-snapchat-line:before { 189 | content: "\e75b"; 190 | } 191 | 192 | .icon-taobao-line:before { 193 | content: "\e760"; 194 | } 195 | 196 | .icon-twitter-line:before { 197 | content: "\e762"; 198 | } 199 | 200 | .icon-wechat-2-line:before { 201 | content: "\e766"; 202 | } 203 | 204 | .icon-wechat-fill:before { 205 | content: "\e768"; 206 | } 207 | 208 | .icon-wechat-line:before { 209 | content: "\e769"; 210 | } 211 | 212 | .icon-weibo-line:before { 213 | content: "\e76a"; 214 | } 215 | 216 | .icon-whatsapp-line:before { 217 | content: "\e76b"; 218 | } 219 | 220 | .icon-youtube-line:before { 221 | content: "\e76c"; 222 | } 223 | 224 | .icon-zhihu-line:before { 225 | content: "\e76d"; 226 | } 227 | 228 | .icon-wechat-2-fill:before { 229 | content: "\e76e"; 230 | } 231 | 232 | .icon-by:before { 233 | content: "\e601"; 234 | } 235 | 236 | .icon-cc:before { 237 | content: "\e602"; 238 | } 239 | 240 | .icon-nc:before { 241 | content: "\e603"; 242 | } 243 | 244 | .icon-nd:before { 245 | content: "\e604"; 246 | } 247 | 248 | .icon-HAO:before { 249 | content: "\e60e"; 250 | } 251 | 252 | .icon-logo-hao-pro:before { 253 | content: "\f290"; 254 | } 255 | 256 | .icon-logo-hao:before { 257 | content: "\e609"; 258 | } 259 | 260 | .icon-logo-moment:before { 261 | content: "\e6af"; 262 | } 263 | 264 | .icon-indent:before { 265 | content: "\f027"; 266 | } 267 | 268 | .icon-bars:before { 269 | content: "\ef34"; 270 | } 271 | 272 | .icon-mail-line:before { 273 | content: "\e668"; 274 | } 275 | 276 | .icon-github-line:before { 277 | content: "\e74c"; 278 | } 279 | 280 | .icon-moon:before { 281 | content: "\f057"; 282 | } 283 | 284 | .icon-closed-captioning:before { 285 | content: "\ef76"; 286 | } 287 | 288 | .icon-hand-holding:before { 289 | content: "\f000"; 290 | } 291 | 292 | .icon-dice:before { 293 | content: "\ef94"; 294 | } 295 | 296 | .icon-list-ul:before { 297 | content: "\f039"; 298 | } 299 | 300 | .icon-baidu:before { 301 | content: "\e6b6"; 302 | } 303 | 304 | .icon-search:before { 305 | content: "\f0a8"; 306 | } 307 | 308 | .icon-download:before { 309 | content: "\efa5"; 310 | } 311 | 312 | .icon-image:before { 313 | content: "\f024"; 314 | } 315 | 316 | .icon-window-restore:before { 317 | content: "\f159"; 318 | } 319 | 320 | .icon-comment-dots1:before { 321 | content: "\f288"; 322 | } 323 | 324 | .icon-copy:before { 325 | content: "\ef86"; 326 | } 327 | 328 | .icon-bus:before { 329 | content: "\ef58"; 330 | } 331 | 332 | .icon-hotjar:before { 333 | content: "\f1cf"; 334 | } 335 | 336 | .icon-weibo:before { 337 | content: "\f261"; 338 | } 339 | 340 | .icon-robot:before { 341 | content: "\f09a"; 342 | } 343 | 344 | .icon-paste:before { 345 | content: "\f068"; 346 | } 347 | 348 | .icon-link:before { 349 | content: "\f037"; 350 | } 351 | 352 | .icon-qrcode:before { 353 | content: "\f08d"; 354 | } 355 | 356 | .icon-calendar-alt:before { 357 | content: "\ef5a"; 358 | } 359 | 360 | .icon-clock:before { 361 | content: "\ef75"; 362 | } 363 | 364 | .icon-file-word:before { 365 | content: "\efd1"; 366 | } 367 | 368 | .icon-chevron-down:before { 369 | content: "\ef6d"; 370 | } 371 | 372 | .icon-times-circle:before { 373 | content: "\f10a"; 374 | } 375 | 376 | .icon-grip-vertical:before { 377 | content: "\efff"; 378 | } 379 | 380 | .icon-book:before { 381 | content: "\ef46"; 382 | } 383 | 384 | .icon-burn:before { 385 | content: "\ef57"; 386 | } 387 | 388 | .icon-dove:before { 389 | content: "\efa4"; 390 | } 391 | 392 | .icon-arrow-circle-right:before { 393 | content: "\ef23"; 394 | } 395 | 396 | .icon-comment-dots:before { 397 | content: "\ef7e"; 398 | } 399 | 400 | .icon-folder-open:before { 401 | content: "\efdc"; 402 | } 403 | 404 | .icon-file-alt:before { 405 | content: "\efc1"; 406 | } 407 | 408 | .icon-bullseye:before { 409 | content: "\ef56"; 410 | } 411 | 412 | .icon-sliders:before { 413 | content: "\f0bf"; 414 | } 415 | 416 | .icon-tags:before { 417 | content: "\f0f3"; 418 | } 419 | 420 | .icon-comment-alt:before { 421 | content: "\f287"; 422 | } 423 | 424 | .icon-eye:before { 425 | content: "\f28f"; 426 | } 427 | 428 | .icon-arrow-left:before { 429 | content: "\ef26"; 430 | } 431 | 432 | .icon-arrow-right:before { 433 | content: "\ef27"; 434 | } 435 | 436 | .icon-arrow-up:before { 437 | content: "\ef2a"; 438 | } 439 | 440 | .icon-chevron-left:before { 441 | content: "\ef6e"; 442 | } 443 | 444 | .icon-chevron-right:before { 445 | content: "\ef6f"; 446 | } 447 | 448 | .icon-redo-alt:before { 449 | content: "\f094"; 450 | } 451 | 452 | .icon-listol:before { 453 | content: "\e767"; 454 | } 455 | 456 | .icon-arrowup:before { 457 | content: "\e64c"; 458 | } 459 | 460 | .icon-icon-sidebar-scxmtj:before { 461 | content: "\e643"; 462 | } 463 | 464 | .icon-train-public-transport:before { 465 | content: "\e600"; 466 | } 467 | 468 | .icon-a-theconsole-fill:before { 469 | content: "\ea32"; 470 | } 471 | 472 | .icon-shuffle:before { 473 | content: "\e67e"; 474 | } 475 | 476 | .icon-md-train:before { 477 | content: "\e77d"; 478 | } 479 | 480 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015-2021 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | # 21 | # Gradle start up script for POSIX generated by Gradle. 22 | # 23 | # Important for running: 24 | # 25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 26 | # noncompliant, but you have some other compliant shell such as ksh or 27 | # bash, then to run this script, type that shell name before the whole 28 | # command line, like: 29 | # 30 | # ksh Gradle 31 | # 32 | # Busybox and similar reduced shells will NOT work, because this script 33 | # requires all of these POSIX shell features: 34 | # * functions; 35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 37 | # * compound commands having a testable exit status, especially «case»; 38 | # * various built-in commands including «command», «set», and «ulimit». 39 | # 40 | # Important for patching: 41 | # 42 | # (2) This script targets any POSIX shell, so it avoids extensions provided 43 | # by Bash, Ksh, etc; in particular arrays are avoided. 44 | # 45 | # The "traditional" practice of packing multiple parameters into a 46 | # space-separated string is a well documented source of bugs and security 47 | # problems, so this is (mostly) avoided, by progressively accumulating 48 | # options in "$@", and eventually passing that to Java. 49 | # 50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 52 | # see the in-line comments for details. 53 | # 54 | # There are tweaks for specific operating systems such as AIX, CygWin, 55 | # Darwin, MinGW, and NonStop. 56 | # 57 | # (3) This script is generated from the Groovy template 58 | # https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 59 | # within the Gradle project. 60 | # 61 | # You can find Gradle at https://github.com/gradle/gradle/. 62 | # 63 | ############################################################################## 64 | 65 | # Attempt to set APP_HOME 66 | 67 | # Resolve links: $0 may be a link 68 | app_path=$0 69 | 70 | # Need this for daisy-chained symlinks. 71 | while 72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 73 | [ -h "$app_path" ] 74 | do 75 | ls=$( ls -ld "$app_path" ) 76 | link=${ls#*' -> '} 77 | case $link in #( 78 | /*) app_path=$link ;; #( 79 | *) app_path=$APP_HOME$link ;; 80 | esac 81 | done 82 | 83 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit 84 | 85 | APP_NAME="Gradle" 86 | APP_BASE_NAME=${0##*/} 87 | 88 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 89 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 90 | 91 | # Use the maximum available, or set MAX_FD != -1 to use that value. 92 | MAX_FD=maximum 93 | 94 | warn () { 95 | echo "$*" 96 | } >&2 97 | 98 | die () { 99 | echo 100 | echo "$*" 101 | echo 102 | exit 1 103 | } >&2 104 | 105 | # OS specific support (must be 'true' or 'false'). 106 | cygwin=false 107 | msys=false 108 | darwin=false 109 | nonstop=false 110 | case "$( uname )" in #( 111 | CYGWIN* ) cygwin=true ;; #( 112 | Darwin* ) darwin=true ;; #( 113 | MSYS* | MINGW* ) msys=true ;; #( 114 | NONSTOP* ) nonstop=true ;; 115 | esac 116 | 117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 118 | 119 | 120 | # Determine the Java command to use to start the JVM. 121 | if [ -n "$JAVA_HOME" ] ; then 122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 123 | # IBM's JDK on AIX uses strange locations for the executables 124 | JAVACMD=$JAVA_HOME/jre/sh/java 125 | else 126 | JAVACMD=$JAVA_HOME/bin/java 127 | fi 128 | if [ ! -x "$JAVACMD" ] ; then 129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 130 | 131 | Please set the JAVA_HOME variable in your environment to match the 132 | location of your Java installation." 133 | fi 134 | else 135 | JAVACMD=java 136 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 137 | 138 | Please set the JAVA_HOME variable in your environment to match the 139 | location of your Java installation." 140 | fi 141 | 142 | # Increase the maximum file descriptors if we can. 143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 144 | case $MAX_FD in #( 145 | max*) 146 | MAX_FD=$( ulimit -H -n ) || 147 | warn "Could not query maximum file descriptor limit" 148 | esac 149 | case $MAX_FD in #( 150 | '' | soft) :;; #( 151 | *) 152 | ulimit -n "$MAX_FD" || 153 | warn "Could not set maximum file descriptor limit to $MAX_FD" 154 | esac 155 | fi 156 | 157 | # Collect all arguments for the java command, stacking in reverse order: 158 | # * args from the command line 159 | # * the main class name 160 | # * -classpath 161 | # * -D...appname settings 162 | # * --module-path (only if needed) 163 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 164 | 165 | # For Cygwin or MSYS, switch paths to Windows format before running java 166 | if "$cygwin" || "$msys" ; then 167 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 168 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 169 | 170 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 171 | 172 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 173 | for arg do 174 | if 175 | case $arg in #( 176 | -*) false ;; # don't mess with options #( 177 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 178 | [ -e "$t" ] ;; #( 179 | *) false ;; 180 | esac 181 | then 182 | arg=$( cygpath --path --ignore --mixed "$arg" ) 183 | fi 184 | # Roll the args list around exactly as many times as the number of 185 | # args, so each arg winds up back in the position where it started, but 186 | # possibly modified. 187 | # 188 | # NB: a `for` loop captures its iteration list before it begins, so 189 | # changing the positional parameters here affects neither the number of 190 | # iterations, nor the values presented in `arg`. 191 | shift # remove old arg 192 | set -- "$@" "$arg" # push replacement arg 193 | done 194 | fi 195 | 196 | # Collect all arguments for the java command; 197 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of 198 | # shell script including quotes and variable substitutions, so put them in 199 | # double quotes to make sure that they get re-expanded; and 200 | # * put everything else in single quotes, so that it's not re-expanded. 201 | 202 | set -- \ 203 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 204 | -classpath "$CLASSPATH" \ 205 | org.gradle.wrapper.GradleWrapperMain \ 206 | "$@" 207 | 208 | # Use "xargs" to parse quoted args. 209 | # 210 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 211 | # 212 | # In Bash we could simply go: 213 | # 214 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 215 | # set -- "${ARGS[@]}" "$@" 216 | # 217 | # but POSIX shell has neither arrays nor command substitution, so instead we 218 | # post-process each arg (as a line of input to sed) to backslash-escape any 219 | # character that might be a shell metacharacter, then use eval to reverse 220 | # that process (while maintaining the separation between arguments), and wrap 221 | # the whole thing up as a single "set" statement. 222 | # 223 | # This will of course break if any of these variables contains a newline or 224 | # an unmatched quote. 225 | # 226 | 227 | eval "set -- $( 228 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 229 | xargs -n1 | 230 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 231 | tr '\n' ' ' 232 | )" '"$@"' 233 | 234 | exec "$JAVACMD" "$@" 235 | -------------------------------------------------------------------------------- /templates/assets/js/jquery.lazyload.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Lazy Load - jQuery plugin for lazy loading images 3 | * 4 | * Copyright (c) 2007-2013 Mika Tuupola 5 | * 6 | * Licensed under the MIT license: 7 | * http://www.opensource.org/licenses/mit-license.php 8 | * 9 | * Project home: 10 | * http://www.appelsiini.net/projects/lazyload 11 | * 12 | * Version: 1.9.3 13 | * 14 | */ 15 | 16 | (function($, window, document, undefined) { 17 | var $window = $(window); 18 | 19 | $.fn.lazyload = function(options) { 20 | var elements = this; 21 | var $container; 22 | var settings = { 23 | threshold : 0, 24 | failure_limit : 0, 25 | event : "scroll", 26 | effect : "show", 27 | container : window, 28 | data_attribute : "original", 29 | skip_invisible : true, 30 | appear : null, 31 | load : null, 32 | placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" 33 | }; 34 | 35 | function update() { 36 | var counter = 0; 37 | 38 | elements.each(function() { 39 | var $this = $(this); 40 | if (settings.skip_invisible && !$this.is(":visible")) { 41 | return; 42 | } 43 | if ($.abovethetop(this, settings) || 44 | $.leftofbegin(this, settings)) { 45 | /* Nothing. */ 46 | } else if (!$.belowthefold(this, settings) && 47 | !$.rightoffold(this, settings)) { 48 | $this.trigger("appear"); 49 | /* if we found an image we'll load, reset the counter */ 50 | counter = 0; 51 | } else { 52 | if (++counter > settings.failure_limit) { 53 | return false; 54 | } 55 | } 56 | }); 57 | 58 | } 59 | 60 | if(options) { 61 | /* Maintain BC for a couple of versions. */ 62 | if (undefined !== options.failurelimit) { 63 | options.failure_limit = options.failurelimit; 64 | delete options.failurelimit; 65 | } 66 | if (undefined !== options.effectspeed) { 67 | options.effect_speed = options.effectspeed; 68 | delete options.effectspeed; 69 | } 70 | 71 | $.extend(settings, options); 72 | } 73 | 74 | /* Cache container as jQuery as object. */ 75 | $container = (settings.container === undefined || 76 | settings.container === window) ? $window : $(settings.container); 77 | 78 | /* Fire one scroll event per scroll. Not one scroll event per image. */ 79 | if (0 === settings.event.indexOf("scroll")) { 80 | $container.bind(settings.event, function() { 81 | return update(); 82 | }); 83 | } 84 | 85 | this.each(function() { 86 | var self = this; 87 | var $self = $(self); 88 | 89 | self.loaded = false; 90 | 91 | /* If no src attribute given use data:uri. */ 92 | if ($self.attr("src") === undefined || $self.attr("src") === false) { 93 | if ($self.is("img")) { 94 | $self.attr("src", settings.placeholder); 95 | } 96 | } 97 | 98 | /* When appear is triggered load original image. */ 99 | $self.one("appear", function() { 100 | if (!this.loaded) { 101 | if (settings.appear) { 102 | var elements_left = elements.length; 103 | settings.appear.call(self, elements_left, settings); 104 | } 105 | $("") 106 | .bind("load", function() { 107 | 108 | var original = $self.attr("data-" + settings.data_attribute); 109 | $self.hide(); 110 | if ($self.is("img")) { 111 | $self.attr("src", original); 112 | } else { 113 | $self.css("background-image", "url('" + original + "')"); 114 | } 115 | $self[settings.effect](settings.effect_speed); 116 | 117 | self.loaded = true; 118 | 119 | /* Remove image from array so it is not looped next time. */ 120 | var temp = $.grep(elements, function(element) { 121 | return !element.loaded; 122 | }); 123 | elements = $(temp); 124 | 125 | if (settings.load) { 126 | var elements_left = elements.length; 127 | settings.load.call(self, elements_left, settings); 128 | } 129 | }) 130 | .attr("src", $self.attr("data-" + settings.data_attribute)); 131 | } 132 | }); 133 | 134 | /* When wanted event is triggered load original image */ 135 | /* by triggering appear. */ 136 | if (0 !== settings.event.indexOf("scroll")) { 137 | $self.bind(settings.event, function() { 138 | if (!self.loaded) { 139 | $self.trigger("appear"); 140 | } 141 | }); 142 | } 143 | }); 144 | 145 | /* Check if something appears when window is resized. */ 146 | $window.bind("resize", function() { 147 | update(); 148 | }); 149 | 150 | /* With IOS5 force loading images when navigating with back button. */ 151 | /* Non optimal workaround. */ 152 | if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) { 153 | $window.bind("pageshow", function(event) { 154 | if (event.originalEvent && event.originalEvent.persisted) { 155 | elements.each(function() { 156 | $(this).trigger("appear"); 157 | }); 158 | } 159 | }); 160 | } 161 | 162 | /* Force initial check if images should appear. */ 163 | $(document).ready(function() { 164 | update(); 165 | }); 166 | 167 | return this; 168 | }; 169 | 170 | /* Convenience methods in jQuery namespace. */ 171 | /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ 172 | 173 | $.belowthefold = function(element, settings) { 174 | var fold; 175 | 176 | if (settings.container === undefined || settings.container === window) { 177 | fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); 178 | } else { 179 | fold = $(settings.container).offset().top + $(settings.container).height(); 180 | } 181 | 182 | return fold <= $(element).offset().top - settings.threshold; 183 | }; 184 | 185 | $.rightoffold = function(element, settings) { 186 | var fold; 187 | 188 | if (settings.container === undefined || settings.container === window) { 189 | fold = $window.width() + $window.scrollLeft(); 190 | } else { 191 | fold = $(settings.container).offset().left + $(settings.container).width(); 192 | } 193 | 194 | return fold <= $(element).offset().left - settings.threshold; 195 | }; 196 | 197 | $.abovethetop = function(element, settings) { 198 | var fold; 199 | 200 | if (settings.container === undefined || settings.container === window) { 201 | fold = $window.scrollTop(); 202 | } else { 203 | fold = $(settings.container).offset().top; 204 | } 205 | 206 | return fold >= $(element).offset().top + settings.threshold + $(element).height(); 207 | }; 208 | 209 | $.leftofbegin = function(element, settings) { 210 | var fold; 211 | 212 | if (settings.container === undefined || settings.container === window) { 213 | fold = $window.scrollLeft(); 214 | } else { 215 | fold = $(settings.container).offset().left; 216 | } 217 | 218 | return fold >= $(element).offset().left + settings.threshold + $(element).width(); 219 | }; 220 | 221 | $.inviewport = function(element, settings) { 222 | return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && 223 | !$.belowthefold(element, settings) && !$.abovethetop(element, settings); 224 | }; 225 | 226 | /* Custom selectors for your convenience. */ 227 | /* Use as $("img:below-the-fold").something() or */ 228 | /* $("img").filter(":below-the-fold").something() which is faster */ 229 | 230 | $.extend($.expr[":"], { 231 | "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, 232 | "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, 233 | "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, 234 | "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, 235 | "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, 236 | /* Maintain BC for couple of versions. */ 237 | "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, 238 | "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, 239 | "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } 240 | }); 241 | 242 | })(jQuery, window, document); -------------------------------------------------------------------------------- /templates/assets/js/util.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 3 | /** 4 | * Generate an indented list of links from a nav. Meant for use with panel(). 5 | * @return {jQuery} jQuery object. 6 | */ 7 | $.fn.navList = function() { 8 | 9 | var $this = $(this); 10 | $a = $this.find('a'), 11 | b = []; 12 | 13 | $a.each(function() { 14 | 15 | var $this = $(this), 16 | indent = Math.max(0, $this.parents('li').length - 1), 17 | href = $this.attr('href'), 18 | target = $this.attr('target'); 19 | 20 | b.push( 21 | '' + 26 | '' + 27 | $this.text() + 28 | '' 29 | ); 30 | 31 | }); 32 | 33 | return b.join(''); 34 | 35 | }; 36 | 37 | /** 38 | * Panel-ify an element. 39 | * @param {object} userConfig User config. 40 | * @return {jQuery} jQuery object. 41 | */ 42 | $.fn.panel = function(userConfig) { 43 | 44 | // No elements? 45 | if (this.length == 0) 46 | return $this; 47 | 48 | // Multiple elements? 49 | if (this.length > 1) { 50 | 51 | for (var i=0; i < this.length; i++) 52 | $(this[i]).panel(userConfig); 53 | 54 | return $this; 55 | 56 | } 57 | 58 | // Vars. 59 | var $this = $(this), 60 | $body = $('body'), 61 | $window = $(window), 62 | id = $this.attr('id'), 63 | config; 64 | 65 | // Config. 66 | config = $.extend({ 67 | 68 | // Delay. 69 | delay: 0, 70 | 71 | // Hide panel on link click. 72 | hideOnClick: false, 73 | 74 | // Hide panel on escape keypress. 75 | hideOnEscape: false, 76 | 77 | // Hide panel on swipe. 78 | hideOnSwipe: false, 79 | 80 | // Reset scroll position on hide. 81 | resetScroll: false, 82 | 83 | // Reset forms on hide. 84 | resetForms: false, 85 | 86 | // Side of viewport the panel will appear. 87 | side: null, 88 | 89 | // Target element for "class". 90 | target: $this, 91 | 92 | // Class to toggle. 93 | visibleClass: 'visible' 94 | 95 | }, userConfig); 96 | 97 | // Expand "target" if it's not a jQuery object already. 98 | if (typeof config.target != 'jQuery') 99 | config.target = $(config.target); 100 | 101 | // Panel. 102 | 103 | // Methods. 104 | $this._hide = function(event) { 105 | 106 | // Already hidden? Bail. 107 | if (!config.target.hasClass(config.visibleClass)) 108 | return; 109 | 110 | // If an event was provided, cancel it. 111 | if (event) { 112 | 113 | event.preventDefault(); 114 | event.stopPropagation(); 115 | 116 | } 117 | 118 | // Hide. 119 | config.target.removeClass(config.visibleClass); 120 | 121 | // Post-hide stuff. 122 | window.setTimeout(function() { 123 | 124 | // Reset scroll position. 125 | if (config.resetScroll) 126 | $this.scrollTop(0); 127 | 128 | // Reset forms. 129 | if (config.resetForms) 130 | $this.find('form').each(function() { 131 | this.reset(); 132 | }); 133 | 134 | }, config.delay); 135 | 136 | }; 137 | 138 | // Vendor fixes. 139 | $this 140 | .css('-ms-overflow-style', '-ms-autohiding-scrollbar') 141 | .css('-webkit-overflow-scrolling', 'touch'); 142 | 143 | // Hide on click. 144 | if (config.hideOnClick) { 145 | 146 | $this.find('a') 147 | .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)'); 148 | 149 | $this 150 | .on('click', 'a', function(event) { 151 | 152 | var $a = $(this), 153 | href = $a.attr('href'), 154 | target = $a.attr('target'); 155 | 156 | if (!href || href == '#' || href == '' || href == '#' + id) 157 | return; 158 | 159 | // Cancel original event. 160 | event.preventDefault(); 161 | event.stopPropagation(); 162 | 163 | // Hide panel. 164 | $this._hide(); 165 | 166 | // Redirect to href. 167 | window.setTimeout(function() { 168 | 169 | if (target == '_blank') 170 | window.open(href); 171 | else 172 | window.location.href = href; 173 | 174 | }, config.delay + 10); 175 | 176 | }); 177 | 178 | } 179 | 180 | // Event: Touch stuff. 181 | $this.on('touchstart', function(event) { 182 | 183 | $this.touchPosX = event.originalEvent.touches[0].pageX; 184 | $this.touchPosY = event.originalEvent.touches[0].pageY; 185 | 186 | }) 187 | 188 | $this.on('touchmove', function(event) { 189 | 190 | if ($this.touchPosX === null 191 | || $this.touchPosY === null) 192 | return; 193 | 194 | var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX, 195 | diffY = $this.touchPosY - event.originalEvent.touches[0].pageY, 196 | th = $this.outerHeight(), 197 | ts = ($this.get(0).scrollHeight - $this.scrollTop()); 198 | 199 | // Hide on swipe? 200 | if (config.hideOnSwipe) { 201 | 202 | var result = false, 203 | boundary = 20, 204 | delta = 50; 205 | 206 | switch (config.side) { 207 | 208 | case 'left': 209 | result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta); 210 | break; 211 | 212 | case 'right': 213 | result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta)); 214 | break; 215 | 216 | case 'top': 217 | result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta); 218 | break; 219 | 220 | case 'bottom': 221 | result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta)); 222 | break; 223 | 224 | default: 225 | break; 226 | 227 | } 228 | 229 | if (result) { 230 | 231 | $this.touchPosX = null; 232 | $this.touchPosY = null; 233 | $this._hide(); 234 | 235 | return false; 236 | 237 | } 238 | 239 | } 240 | 241 | // Prevent vertical scrolling past the top or bottom. 242 | if (($this.scrollTop() < 0 && diffY < 0) 243 | || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) { 244 | 245 | event.preventDefault(); 246 | event.stopPropagation(); 247 | 248 | } 249 | 250 | }); 251 | 252 | // Event: Prevent certain events inside the panel from bubbling. 253 | $this.on('click touchend touchstart touchmove', function(event) { 254 | event.stopPropagation(); 255 | }); 256 | 257 | // Event: Hide panel if a child anchor tag pointing to its ID is clicked. 258 | $this.on('click', 'a[href="#' + id + '"]', function(event) { 259 | 260 | event.preventDefault(); 261 | event.stopPropagation(); 262 | 263 | config.target.removeClass(config.visibleClass); 264 | 265 | }); 266 | 267 | // Body. 268 | 269 | // Event: Hide panel on body click/tap. 270 | $body.on('click touchend', function(event) { 271 | $this._hide(event); 272 | }); 273 | 274 | // Event: Toggle. 275 | $body.on('click', 'a[href="#' + id + '"]', function(event) { 276 | 277 | event.preventDefault(); 278 | event.stopPropagation(); 279 | 280 | config.target.toggleClass(config.visibleClass); 281 | 282 | }); 283 | 284 | // Window. 285 | 286 | // Event: Hide on ESC. 287 | if (config.hideOnEscape) 288 | $window.on('keydown', function(event) { 289 | 290 | if (event.keyCode == 27) 291 | $this._hide(event); 292 | 293 | }); 294 | 295 | return $this; 296 | 297 | }; 298 | 299 | /** 300 | * Apply "placeholder" attribute polyfill to one or more forms. 301 | * @return {jQuery} jQuery object. 302 | */ 303 | $.fn.placeholder = function() { 304 | 305 | // Browser natively supports placeholders? Bail. 306 | if (typeof (document.createElement('input')).placeholder != 'undefined') 307 | return $(this); 308 | 309 | // No elements? 310 | if (this.length == 0) 311 | return $this; 312 | 313 | // Multiple elements? 314 | if (this.length > 1) { 315 | 316 | for (var i=0; i < this.length; i++) 317 | $(this[i]).placeholder(); 318 | 319 | return $this; 320 | 321 | } 322 | 323 | // Vars. 324 | var $this = $(this); 325 | 326 | // Text, TextArea. 327 | $this.find('input[type=text],textarea') 328 | .each(function() { 329 | 330 | var i = $(this); 331 | 332 | if (i.val() == '' 333 | || i.val() == i.attr('placeholder')) 334 | i 335 | .addClass('polyfill-placeholder') 336 | .val(i.attr('placeholder')); 337 | 338 | }) 339 | .on('blur', function() { 340 | 341 | var i = $(this); 342 | 343 | if (i.attr('name').match(/-polyfill-field$/)) 344 | return; 345 | 346 | if (i.val() == '') 347 | i 348 | .addClass('polyfill-placeholder') 349 | .val(i.attr('placeholder')); 350 | 351 | }) 352 | .on('focus', function() { 353 | 354 | var i = $(this); 355 | 356 | if (i.attr('name').match(/-polyfill-field$/)) 357 | return; 358 | 359 | if (i.val() == i.attr('placeholder')) 360 | i 361 | .removeClass('polyfill-placeholder') 362 | .val(''); 363 | 364 | }); 365 | 366 | // Password. 367 | $this.find('input[type=password]') 368 | .each(function() { 369 | 370 | var i = $(this); 371 | var x = $( 372 | $('
    ') 373 | .append(i.clone()) 374 | .remove() 375 | .html() 376 | .replace(/type="password"/i, 'type="text"') 377 | .replace(/type=password/i, 'type=text') 378 | ); 379 | 380 | if (i.attr('id') != '') 381 | x.attr('id', i.attr('id') + '-polyfill-field'); 382 | 383 | if (i.attr('name') != '') 384 | x.attr('name', i.attr('name') + '-polyfill-field'); 385 | 386 | x.addClass('polyfill-placeholder') 387 | .val(x.attr('placeholder')).insertAfter(i); 388 | 389 | if (i.val() == '') 390 | i.hide(); 391 | else 392 | x.hide(); 393 | 394 | i 395 | .on('blur', function(event) { 396 | 397 | event.preventDefault(); 398 | 399 | var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); 400 | 401 | if (i.val() == '') { 402 | 403 | i.hide(); 404 | x.show(); 405 | 406 | } 407 | 408 | }); 409 | 410 | x 411 | .on('focus', function(event) { 412 | 413 | event.preventDefault(); 414 | 415 | var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']'); 416 | 417 | x.hide(); 418 | 419 | i 420 | .show() 421 | .focus(); 422 | 423 | }) 424 | .on('keypress', function(event) { 425 | 426 | event.preventDefault(); 427 | x.val(''); 428 | 429 | }); 430 | 431 | }); 432 | 433 | // Events. 434 | $this 435 | .on('submit', function() { 436 | 437 | $this.find('input[type=text],input[type=password],textarea') 438 | .each(function(event) { 439 | 440 | var i = $(this); 441 | 442 | if (i.attr('name').match(/-polyfill-field$/)) 443 | i.attr('name', ''); 444 | 445 | if (i.val() == i.attr('placeholder')) { 446 | 447 | i.removeClass('polyfill-placeholder'); 448 | i.val(''); 449 | 450 | } 451 | 452 | }); 453 | 454 | }) 455 | .on('reset', function(event) { 456 | 457 | event.preventDefault(); 458 | 459 | $this.find('select') 460 | .val($('option:first').val()); 461 | 462 | $this.find('input,textarea') 463 | .each(function() { 464 | 465 | var i = $(this), 466 | x; 467 | 468 | i.removeClass('polyfill-placeholder'); 469 | 470 | switch (this.type) { 471 | 472 | case 'submit': 473 | case 'reset': 474 | break; 475 | 476 | case 'password': 477 | i.val(i.attr('defaultValue')); 478 | 479 | x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); 480 | 481 | if (i.val() == '') { 482 | i.hide(); 483 | x.show(); 484 | } 485 | else { 486 | i.show(); 487 | x.hide(); 488 | } 489 | 490 | break; 491 | 492 | case 'checkbox': 493 | case 'radio': 494 | i.attr('checked', i.attr('defaultValue')); 495 | break; 496 | 497 | case 'text': 498 | case 'textarea': 499 | i.val(i.attr('defaultValue')); 500 | 501 | if (i.val() == '') { 502 | i.addClass('polyfill-placeholder'); 503 | i.val(i.attr('placeholder')); 504 | } 505 | 506 | break; 507 | 508 | default: 509 | i.val(i.attr('defaultValue')); 510 | break; 511 | 512 | } 513 | }); 514 | 515 | }); 516 | 517 | return $this; 518 | 519 | }; 520 | 521 | /** 522 | * Moves elements to/from the first positions of their respective parents. 523 | * @param {jQuery} $elements Elements (or selector) to move. 524 | * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations. 525 | */ 526 | $.prioritize = function($elements, condition) { 527 | 528 | var key = '__prioritize'; 529 | 530 | // Expand $elements if it's not already a jQuery object. 531 | if (typeof $elements != 'jQuery') 532 | $elements = $($elements); 533 | 534 | // Step through elements. 535 | $elements.each(function() { 536 | 537 | var $e = $(this), $p, 538 | $parent = $e.parent(); 539 | 540 | // No parent? Bail. 541 | if ($parent.length == 0) 542 | return; 543 | 544 | // Not moved? Move it. 545 | if (!$e.data(key)) { 546 | 547 | // Condition is false? Bail. 548 | if (!condition) 549 | return; 550 | 551 | // Get placeholder (which will serve as our point of reference for when this element needs to move back). 552 | $p = $e.prev(); 553 | 554 | // Couldn't find anything? Means this element's already at the top, so bail. 555 | if ($p.length == 0) 556 | return; 557 | 558 | // Move element to top of parent. 559 | $e.prependTo($parent); 560 | 561 | // Mark element as moved. 562 | $e.data(key, $p); 563 | 564 | } 565 | 566 | // Moved already? 567 | else { 568 | 569 | // Condition is true? Bail. 570 | if (condition) 571 | return; 572 | 573 | $p = $e.data(key); 574 | 575 | // Move element back to its original location (using our placeholder). 576 | $e.insertAfter($p); 577 | 578 | // Unmark element as moved. 579 | $e.removeData(key); 580 | 581 | } 582 | 583 | }); 584 | 585 | }; 586 | 587 | })(jQuery); 588 | 589 | document.write("

    "); -------------------------------------------------------------------------------- /templates/assets/iconfont/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "3736806", 3 | "name": "hao", 4 | "font_family": "iconfont", 5 | "css_prefix_text": "icon-", 6 | "description": "", 7 | "glyphs": [ 8 | { 9 | "icon_id": "5633818", 10 | "name": "arrows-alt-h", 11 | "font_class": "arrows-alt-h", 12 | "unicode": "ef28", 13 | "unicode_decimal": 61224 14 | }, 15 | { 16 | "icon_id": "5634298", 17 | "name": "plus-circle", 18 | "font_class": "plus-circle", 19 | "unicode": "f082", 20 | "unicode_decimal": 61570 21 | }, 22 | { 23 | "icon_id": "3506983", 24 | "name": "csdn", 25 | "font_class": "csdn1", 26 | "unicode": "e608", 27 | "unicode_decimal": 58888 28 | }, 29 | { 30 | "icon_id": "2041684", 31 | "name": "CN_cnblogs", 32 | "font_class": "CN_cnblogs", 33 | "unicode": "e64d", 34 | "unicode_decimal": 58957 35 | }, 36 | { 37 | "icon_id": "15378535", 38 | "name": "leetcode", 39 | "font_class": "leetcode", 40 | "unicode": "ebf2", 41 | "unicode_decimal": 60402 42 | }, 43 | { 44 | "icon_id": "18422914", 45 | "name": "juejin", 46 | "font_class": "juejin", 47 | "unicode": "e606", 48 | "unicode_decimal": 58886 49 | }, 50 | { 51 | "icon_id": "18458782", 52 | "name": "infoQ", 53 | "font_class": "weibiaoti-1", 54 | "unicode": "e607", 55 | "unicode_decimal": 58887 56 | }, 57 | { 58 | "icon_id": "829865", 59 | "name": "csdn", 60 | "font_class": "csdn", 61 | "unicode": "e60a", 62 | "unicode_decimal": 58890 63 | }, 64 | { 65 | "icon_id": "833511", 66 | "name": "博客园", 67 | "font_class": "bokeyuan", 68 | "unicode": "e623", 69 | "unicode_decimal": 58915 70 | }, 71 | { 72 | "icon_id": "4936975", 73 | "name": "yuque", 74 | "font_class": "yuque", 75 | "unicode": "e880", 76 | "unicode_decimal": 59520 77 | }, 78 | { 79 | "icon_id": "13743995", 80 | "name": "jinritoutiao", 81 | "font_class": "jinritoutiao", 82 | "unicode": "e68d", 83 | "unicode_decimal": 59021 84 | }, 85 | { 86 | "icon_id": "28650243", 87 | "name": "微信公众号", 88 | "font_class": "weixingongzhonghao", 89 | "unicode": "e605", 90 | "unicode_decimal": 58885 91 | }, 92 | { 93 | "icon_id": "20818171", 94 | "name": "steam-line", 95 | "font_class": "steam-line", 96 | "unicode": "e75f", 97 | "unicode_decimal": 59231 98 | }, 99 | { 100 | "icon_id": "20818172", 101 | "name": "steam-fill", 102 | "font_class": "steam-fill", 103 | "unicode": "e763", 104 | "unicode_decimal": 59235 105 | }, 106 | { 107 | "icon_id": "20818156", 108 | "name": "slack-line", 109 | "font_class": "slack-line", 110 | "unicode": "e75c", 111 | "unicode_decimal": 59228 112 | }, 113 | { 114 | "icon_id": "20818112", 115 | "name": "linkedin-box-line", 116 | "font_class": "linkedin-box-line", 117 | "unicode": "e750", 118 | "unicode_decimal": 59216 119 | }, 120 | { 121 | "icon_id": "20818178", 122 | "name": "telegram-line", 123 | "font_class": "telegram-line", 124 | "unicode": "e761", 125 | "unicode_decimal": 59233 126 | }, 127 | { 128 | "icon_id": "22273028", 129 | "name": "douyin", 130 | "font_class": "douyin", 131 | "unicode": "e673", 132 | "unicode_decimal": 58995 133 | }, 134 | { 135 | "icon_id": "14629289", 136 | "name": "wechat2", 137 | "font_class": "wechat2", 138 | "unicode": "e632", 139 | "unicode_decimal": 58930 140 | }, 141 | { 142 | "icon_id": "20817466", 143 | "name": "phone-line", 144 | "font_class": "phone-line", 145 | "unicode": "e6ac", 146 | "unicode_decimal": 59052 147 | }, 148 | { 149 | "icon_id": "20818029", 150 | "name": "alipay-line", 151 | "font_class": "alipay-line", 152 | "unicode": "e73c", 153 | "unicode_decimal": 59196 154 | }, 155 | { 156 | "icon_id": "20818039", 157 | "name": "app-store-line", 158 | "font_class": "app-store-line", 159 | "unicode": "e73e", 160 | "unicode_decimal": 59198 161 | }, 162 | { 163 | "icon_id": "20818044", 164 | "name": "baidu-line", 165 | "font_class": "baidu-line", 166 | "unicode": "e73f", 167 | "unicode_decimal": 59199 168 | }, 169 | { 170 | "icon_id": "20818045", 171 | "name": "bilibili-line", 172 | "font_class": "bilibili-line", 173 | "unicode": "e740", 174 | "unicode_decimal": 59200 175 | }, 176 | { 177 | "icon_id": "20818057", 178 | "name": "dingding-line", 179 | "font_class": "dingding-line", 180 | "unicode": "e743", 181 | "unicode_decimal": 59203 182 | }, 183 | { 184 | "icon_id": "20818060", 185 | "name": "douban-line", 186 | "font_class": "douban-line", 187 | "unicode": "e744", 188 | "unicode_decimal": 59204 189 | }, 190 | { 191 | "icon_id": "20818061", 192 | "name": "disqus-line", 193 | "font_class": "disqus-line", 194 | "unicode": "e745", 195 | "unicode_decimal": 59205 196 | }, 197 | { 198 | "icon_id": "20818062", 199 | "name": "discord-line", 200 | "font_class": "discord-line", 201 | "unicode": "e746", 202 | "unicode_decimal": 59206 203 | }, 204 | { 205 | "icon_id": "20818064", 206 | "name": "dribbble-line", 207 | "font_class": "dribbble-line", 208 | "unicode": "e747", 209 | "unicode_decimal": 59207 210 | }, 211 | { 212 | "icon_id": "20818065", 213 | "name": "drive-line", 214 | "font_class": "drive-line", 215 | "unicode": "e748", 216 | "unicode_decimal": 59208 217 | }, 218 | { 219 | "icon_id": "20818068", 220 | "name": "facebook-box-line", 221 | "font_class": "facebook-box-line", 222 | "unicode": "e749", 223 | "unicode_decimal": 59209 224 | }, 225 | { 226 | "icon_id": "20818074", 227 | "name": "dropbox-line", 228 | "font_class": "dropbox-line", 229 | "unicode": "e74a", 230 | "unicode_decimal": 59210 231 | }, 232 | { 233 | "icon_id": "20818085", 234 | "name": "evernote-line", 235 | "font_class": "evernote-line", 236 | "unicode": "e74b", 237 | "unicode_decimal": 59211 238 | }, 239 | { 240 | "icon_id": "20818088", 241 | "name": "gitlab-line", 242 | "font_class": "gitlab-line", 243 | "unicode": "e74d", 244 | "unicode_decimal": 59213 245 | }, 246 | { 247 | "icon_id": "20818092", 248 | "name": "google-line", 249 | "font_class": "google-line", 250 | "unicode": "e74e", 251 | "unicode_decimal": 59214 252 | }, 253 | { 254 | "icon_id": "20818094", 255 | "name": "google-play-line", 256 | "font_class": "google-play-line", 257 | "unicode": "e74f", 258 | "unicode_decimal": 59215 259 | }, 260 | { 261 | "icon_id": "20818106", 262 | "name": "instagram-line", 263 | "font_class": "instagram-line", 264 | "unicode": "e751", 265 | "unicode_decimal": 59217 266 | }, 267 | { 268 | "icon_id": "20818121", 269 | "name": "line-fill", 270 | "font_class": "line-fill", 271 | "unicode": "e752", 272 | "unicode_decimal": 59218 273 | }, 274 | { 275 | "icon_id": "20818138", 276 | "name": "paypal-line", 277 | "font_class": "paypal-line", 278 | "unicode": "e757", 279 | "unicode_decimal": 59223 280 | }, 281 | { 282 | "icon_id": "20818146", 283 | "name": "qq-line", 284 | "font_class": "qq-line", 285 | "unicode": "e759", 286 | "unicode_decimal": 59225 287 | }, 288 | { 289 | "icon_id": "20818153", 290 | "name": "reddit-line", 291 | "font_class": "reddit-line", 292 | "unicode": "e75a", 293 | "unicode_decimal": 59226 294 | }, 295 | { 296 | "icon_id": "20818162", 297 | "name": "spotify-line", 298 | "font_class": "spotify-line", 299 | "unicode": "e75d", 300 | "unicode_decimal": 59229 301 | }, 302 | { 303 | "icon_id": "20818166", 304 | "name": "stack-overflow-line", 305 | "font_class": "stack-overflow-line", 306 | "unicode": "e75e", 307 | "unicode_decimal": 59230 308 | }, 309 | { 310 | "icon_id": "20818168", 311 | "name": "snapchat-line", 312 | "font_class": "snapchat-line", 313 | "unicode": "e75b", 314 | "unicode_decimal": 59227 315 | }, 316 | { 317 | "icon_id": "20818175", 318 | "name": "taobao-line", 319 | "font_class": "taobao-line", 320 | "unicode": "e760", 321 | "unicode_decimal": 59232 322 | }, 323 | { 324 | "icon_id": "20818181", 325 | "name": "twitter-line", 326 | "font_class": "twitter-line", 327 | "unicode": "e762", 328 | "unicode_decimal": 59234 329 | }, 330 | { 331 | "icon_id": "20818193", 332 | "name": "wechat-2-line", 333 | "font_class": "wechat-2-line", 334 | "unicode": "e766", 335 | "unicode_decimal": 59238 336 | }, 337 | { 338 | "icon_id": "20818195", 339 | "name": "wechat-fill", 340 | "font_class": "wechat-fill", 341 | "unicode": "e768", 342 | "unicode_decimal": 59240 343 | }, 344 | { 345 | "icon_id": "20818198", 346 | "name": "wechat-line", 347 | "font_class": "wechat-line", 348 | "unicode": "e769", 349 | "unicode_decimal": 59241 350 | }, 351 | { 352 | "icon_id": "20818200", 353 | "name": "weibo-line", 354 | "font_class": "weibo-line", 355 | "unicode": "e76a", 356 | "unicode_decimal": 59242 357 | }, 358 | { 359 | "icon_id": "20818206", 360 | "name": "whatsapp-line", 361 | "font_class": "whatsapp-line", 362 | "unicode": "e76b", 363 | "unicode_decimal": 59243 364 | }, 365 | { 366 | "icon_id": "20818213", 367 | "name": "youtube-line", 368 | "font_class": "youtube-line", 369 | "unicode": "e76c", 370 | "unicode_decimal": 59244 371 | }, 372 | { 373 | "icon_id": "20818220", 374 | "name": "zhihu-line", 375 | "font_class": "zhihu-line", 376 | "unicode": "e76d", 377 | "unicode_decimal": 59245 378 | }, 379 | { 380 | "icon_id": "20818226", 381 | "name": "wechat-2-fill", 382 | "font_class": "wechat-2-fill", 383 | "unicode": "e76e", 384 | "unicode_decimal": 59246 385 | }, 386 | { 387 | "icon_id": "12095053", 388 | "name": "by", 389 | "font_class": "by", 390 | "unicode": "e601", 391 | "unicode_decimal": 58881 392 | }, 393 | { 394 | "icon_id": "12095056", 395 | "name": "cc", 396 | "font_class": "cc", 397 | "unicode": "e602", 398 | "unicode_decimal": 58882 399 | }, 400 | { 401 | "icon_id": "12095063", 402 | "name": "nc", 403 | "font_class": "nc", 404 | "unicode": "e603", 405 | "unicode_decimal": 58883 406 | }, 407 | { 408 | "icon_id": "12095066", 409 | "name": "nd", 410 | "font_class": "nd", 411 | "unicode": "e604", 412 | "unicode_decimal": 58884 413 | }, 414 | { 415 | "icon_id": "32816778", 416 | "name": "HAO", 417 | "font_class": "HAO", 418 | "unicode": "e60e", 419 | "unicode_decimal": 58894 420 | }, 421 | { 422 | "icon_id": "32796142", 423 | "name": "logo-hao-copy", 424 | "font_class": "logo-hao-pro", 425 | "unicode": "f290", 426 | "unicode_decimal": 62096 427 | }, 428 | { 429 | "icon_id": "32787589", 430 | "name": "logo-hao", 431 | "font_class": "logo-hao", 432 | "unicode": "e609", 433 | "unicode_decimal": 58889 434 | }, 435 | { 436 | "icon_id": "16440935", 437 | "name": "logo-moment", 438 | "font_class": "logo-moment", 439 | "unicode": "e6af", 440 | "unicode_decimal": 59055 441 | }, 442 | { 443 | "icon_id": "5634161", 444 | "name": "indent", 445 | "font_class": "indent", 446 | "unicode": "f027", 447 | "unicode_decimal": 61479 448 | }, 449 | { 450 | "icon_id": "5633834", 451 | "name": "bars", 452 | "font_class": "bars", 453 | "unicode": "ef34", 454 | "unicode_decimal": 61236 455 | }, 456 | { 457 | "icon_id": "20817029", 458 | "name": "mail-line", 459 | "font_class": "mail-line", 460 | "unicode": "e668", 461 | "unicode_decimal": 58984 462 | }, 463 | { 464 | "icon_id": "20818096", 465 | "name": "github-line", 466 | "font_class": "github-line", 467 | "unicode": "e74c", 468 | "unicode_decimal": 59212 469 | }, 470 | { 471 | "icon_id": "5634247", 472 | "name": "moon", 473 | "font_class": "moon", 474 | "unicode": "f057", 475 | "unicode_decimal": 61527 476 | }, 477 | { 478 | "icon_id": "5633944", 479 | "name": "closed-captioning", 480 | "font_class": "closed-captioning", 481 | "unicode": "ef76", 482 | "unicode_decimal": 61302 483 | }, 484 | { 485 | "icon_id": "5634114", 486 | "name": "hand-holding", 487 | "font_class": "hand-holding", 488 | "unicode": "f000", 489 | "unicode_decimal": 61440 490 | }, 491 | { 492 | "icon_id": "5633983", 493 | "name": "dice", 494 | "font_class": "dice", 495 | "unicode": "ef94", 496 | "unicode_decimal": 61332 497 | }, 498 | { 499 | "icon_id": "5634194", 500 | "name": "list-ul", 501 | "font_class": "list-ul", 502 | "unicode": "f039", 503 | "unicode_decimal": 61497 504 | }, 505 | { 506 | "icon_id": "386278", 507 | "name": "baidu", 508 | "font_class": "baidu", 509 | "unicode": "e6b6", 510 | "unicode_decimal": 59062 511 | }, 512 | { 513 | "icon_id": "5634346", 514 | "name": "search", 515 | "font_class": "search", 516 | "unicode": "f0a8", 517 | "unicode_decimal": 61608 518 | }, 519 | { 520 | "icon_id": "5634003", 521 | "name": "download", 522 | "font_class": "download", 523 | "unicode": "efa5", 524 | "unicode_decimal": 61349 525 | }, 526 | { 527 | "icon_id": "5634158", 528 | "name": "image", 529 | "font_class": "image", 530 | "unicode": "f024", 531 | "unicode_decimal": 61476 532 | }, 533 | { 534 | "icon_id": "5634542", 535 | "name": "window-restore", 536 | "font_class": "window-restore", 537 | "unicode": "f159", 538 | "unicode_decimal": 61785 539 | }, 540 | { 541 | "icon_id": "5634960", 542 | "name": "comment-dots", 543 | "font_class": "comment-dots1", 544 | "unicode": "f288", 545 | "unicode_decimal": 62088 546 | }, 547 | { 548 | "icon_id": "5633967", 549 | "name": "copy", 550 | "font_class": "copy", 551 | "unicode": "ef86", 552 | "unicode_decimal": 61318 553 | }, 554 | { 555 | "icon_id": "5633878", 556 | "name": "bus", 557 | "font_class": "bus", 558 | "unicode": "ef58", 559 | "unicode_decimal": 61272 560 | }, 561 | { 562 | "icon_id": "5634718", 563 | "name": "hotjar", 564 | "font_class": "hotjar", 565 | "unicode": "f1cf", 566 | "unicode_decimal": 61903 567 | }, 568 | { 569 | "icon_id": "5634903", 570 | "name": "weibo", 571 | "font_class": "weibo", 572 | "unicode": "f261", 573 | "unicode_decimal": 62049 574 | }, 575 | { 576 | "icon_id": "5634330", 577 | "name": "robot", 578 | "font_class": "robot", 579 | "unicode": "f09a", 580 | "unicode_decimal": 61594 581 | }, 582 | { 583 | "icon_id": "5634271", 584 | "name": "paste", 585 | "font_class": "paste", 586 | "unicode": "f068", 587 | "unicode_decimal": 61544 588 | }, 589 | { 590 | "icon_id": "5634192", 591 | "name": "link", 592 | "font_class": "link", 593 | "unicode": "f037", 594 | "unicode_decimal": 61495 595 | }, 596 | { 597 | "icon_id": "5634313", 598 | "name": "qrcode", 599 | "font_class": "qrcode", 600 | "unicode": "f08d", 601 | "unicode_decimal": 61581 602 | }, 603 | { 604 | "icon_id": "5633882", 605 | "name": "calendar-alt", 606 | "font_class": "calendar-alt", 607 | "unicode": "ef5a", 608 | "unicode_decimal": 61274 609 | }, 610 | { 611 | "icon_id": "5633943", 612 | "name": "clock", 613 | "font_class": "clock", 614 | "unicode": "ef75", 615 | "unicode_decimal": 61301 616 | }, 617 | { 618 | "icon_id": "5634058", 619 | "name": "file-word", 620 | "font_class": "file-word", 621 | "unicode": "efd1", 622 | "unicode_decimal": 61393 623 | }, 624 | { 625 | "icon_id": "5633931", 626 | "name": "chevron-down", 627 | "font_class": "chevron-down", 628 | "unicode": "ef6d", 629 | "unicode_decimal": 61293 630 | }, 631 | { 632 | "icon_id": "5634458", 633 | "name": "times-circle", 634 | "font_class": "times-circle", 635 | "unicode": "f10a", 636 | "unicode_decimal": 61706 637 | }, 638 | { 639 | "icon_id": "5634113", 640 | "name": "grip-vertical", 641 | "font_class": "grip-vertical", 642 | "unicode": "efff", 643 | "unicode_decimal": 61439 644 | }, 645 | { 646 | "icon_id": "5633858", 647 | "name": "book", 648 | "font_class": "book", 649 | "unicode": "ef46", 650 | "unicode_decimal": 61254 651 | }, 652 | { 653 | "icon_id": "5633877", 654 | "name": "burn", 655 | "font_class": "burn", 656 | "unicode": "ef57", 657 | "unicode_decimal": 61271 658 | }, 659 | { 660 | "icon_id": "5634002", 661 | "name": "dove", 662 | "font_class": "dove", 663 | "unicode": "efa4", 664 | "unicode_decimal": 61348 665 | }, 666 | { 667 | "icon_id": "5633812", 668 | "name": "arrow-circle-right", 669 | "font_class": "arrow-circle-right", 670 | "unicode": "ef23", 671 | "unicode_decimal": 61219 672 | }, 673 | { 674 | "icon_id": "5633958", 675 | "name": "comment-dots", 676 | "font_class": "comment-dots", 677 | "unicode": "ef7e", 678 | "unicode_decimal": 61310 679 | }, 680 | { 681 | "icon_id": "5634073", 682 | "name": "folder-open", 683 | "font_class": "folder-open", 684 | "unicode": "efdc", 685 | "unicode_decimal": 61404 686 | }, 687 | { 688 | "icon_id": "5634038", 689 | "name": "file-alt", 690 | "font_class": "file-alt", 691 | "unicode": "efc1", 692 | "unicode_decimal": 61377 693 | }, 694 | { 695 | "icon_id": "5633876", 696 | "name": "bullseye", 697 | "font_class": "bullseye", 698 | "unicode": "ef56", 699 | "unicode_decimal": 61270 700 | }, 701 | { 702 | "icon_id": "5634373", 703 | "name": "sliders-h", 704 | "font_class": "sliders", 705 | "unicode": "f0bf", 706 | "unicode_decimal": 61631 707 | }, 708 | { 709 | "icon_id": "5634433", 710 | "name": "tags", 711 | "font_class": "tags", 712 | "unicode": "f0f3", 713 | "unicode_decimal": 61683 714 | }, 715 | { 716 | "icon_id": "5634959", 717 | "name": "comment-alt", 718 | "font_class": "comment-alt", 719 | "unicode": "f287", 720 | "unicode_decimal": 62087 721 | }, 722 | { 723 | "icon_id": "5634971", 724 | "name": "eye", 725 | "font_class": "eye", 726 | "unicode": "f28f", 727 | "unicode_decimal": 62095 728 | }, 729 | { 730 | "icon_id": "5633815", 731 | "name": "arrow-left", 732 | "font_class": "arrow-left", 733 | "unicode": "ef26", 734 | "unicode_decimal": 61222 735 | }, 736 | { 737 | "icon_id": "5633816", 738 | "name": "arrow-right", 739 | "font_class": "arrow-right", 740 | "unicode": "ef27", 741 | "unicode_decimal": 61223 742 | }, 743 | { 744 | "icon_id": "5633820", 745 | "name": "arrow-up", 746 | "font_class": "arrow-up", 747 | "unicode": "ef2a", 748 | "unicode_decimal": 61226 749 | }, 750 | { 751 | "icon_id": "5633932", 752 | "name": "chevron-left", 753 | "font_class": "chevron-left", 754 | "unicode": "ef6e", 755 | "unicode_decimal": 61294 756 | }, 757 | { 758 | "icon_id": "5633933", 759 | "name": "chevron-right", 760 | "font_class": "chevron-right", 761 | "unicode": "ef6f", 762 | "unicode_decimal": 61295 763 | }, 764 | { 765 | "icon_id": "5634323", 766 | "name": "redo-alt", 767 | "font_class": "redo-alt", 768 | "unicode": "f094", 769 | "unicode_decimal": 61588 770 | }, 771 | { 772 | "icon_id": "836718", 773 | "name": "list-ol", 774 | "font_class": "listol", 775 | "unicode": "e767", 776 | "unicode_decimal": 59239 777 | }, 778 | { 779 | "icon_id": "433860", 780 | "name": "arrow-up", 781 | "font_class": "arrowup", 782 | "unicode": "e64c", 783 | "unicode_decimal": 58956 784 | }, 785 | { 786 | "icon_id": "5652805", 787 | "name": "icon-side bar-scxmtj", 788 | "font_class": "icon-sidebar-scxmtj", 789 | "unicode": "e643", 790 | "unicode_decimal": 58947 791 | }, 792 | { 793 | "icon_id": "21169476", 794 | "name": "train-public-transport", 795 | "font_class": "train-public-transport", 796 | "unicode": "e600", 797 | "unicode_decimal": 58880 798 | }, 799 | { 800 | "icon_id": "24342573", 801 | "name": "the console-fill", 802 | "font_class": "a-theconsole-fill", 803 | "unicode": "ea32", 804 | "unicode_decimal": 59954 805 | }, 806 | { 807 | "icon_id": "1251292", 808 | "name": "shuffle", 809 | "font_class": "shuffle", 810 | "unicode": "e67e", 811 | "unicode_decimal": 59006 812 | }, 813 | { 814 | "icon_id": "11102802", 815 | "name": "md-train", 816 | "font_class": "md-train", 817 | "unicode": "e77d", 818 | "unicode_decimal": 59261 819 | } 820 | ] 821 | } 822 | -------------------------------------------------------------------------------- /templates/assets/js/jquery.poptrox.min.js: -------------------------------------------------------------------------------- 1 | /* jquery.poptrox.js v2.5.2-dev | (c) @ajlkn | github.com/ajlkn/jquery.poptrox | MIT licensed */ 2 | !function(e) { 3 | e.fn.poptrox_disableSelection = function() { 4 | return e(this).css("user-select", "none").css("-khtml-user-select", "none").css("-moz-user-select", "none").css("-o-user-select", "none").css("-webkit-user-select", "none") 5 | } 6 | , 7 | e.fn.poptrox = function(o) { 8 | if (0 == this.length) 9 | return e(this); 10 | if (this.length > 1) { 11 | for (var t = 0; t < this.length; t++) 12 | e(this[t]).poptrox(o); 13 | return e(this) 14 | } 15 | var p, i, s = e.extend({ 16 | preload: !1, 17 | baseZIndex: 1e3, 18 | fadeSpeed: 300, 19 | overlayColor: "#000000", 20 | overlayOpacity: .6, 21 | overlayClass: "poptrox-overlay", 22 | windowMargin: 50, 23 | windowHeightPad: 0, 24 | selector: "a", 25 | caption: null, 26 | parent: "body", 27 | popupSpeed: 300, 28 | popupWidth: 200, 29 | popupHeight: 100, 30 | popupIsFixed: !1, 31 | useBodyOverflow: !1, 32 | usePopupEasyClose: !0, 33 | usePopupForceClose: !1, 34 | usePopupLoader: !0, 35 | usePopupCloser: !0, 36 | usePopupCaption: !1, 37 | usePopupNav: !1, 38 | usePopupDefaultStyling: !0, 39 | popupBackgroundColor: "#FFFFFF", 40 | popupTextColor: "#000000", 41 | popupLoaderTextSize: "2em", 42 | popupCloserBackgroundColor: "#000000", 43 | popupCloserTextColor: "#FFFFFF", 44 | popupCloserTextSize: "20px", 45 | popupPadding: 10, 46 | popupCaptionHeight: 60, 47 | popupCaptionTextSize: null, 48 | popupBlankCaptionText: "(untitled)", 49 | popupCloserText: "×", 50 | popupLoaderText: "••••", 51 | popupClass: "poptrox-popup", 52 | popupSelector: null, 53 | popupLoaderSelector: ".loader", 54 | popupCloserSelector: ".closer", 55 | popupCaptionSelector: ".caption", 56 | popupNavPreviousSelector: ".nav-previous", 57 | popupNavNextSelector: ".nav-next", 58 | onPopupClose: null, 59 | onPopupOpen: null 60 | }, o), r = e(this), n = e("body"), a = e('
    '), l = e(window), u = [], d = 0, h = !1, g = new Array, f = function() { 61 | p = l.width(), 62 | i = l.height() + s.windowHeightPad; 63 | var e = Math.abs(x.width() - x.outerWidth()) 64 | , o = Math.abs(x.height() - x.outerHeight()) 65 | , t = p - 2 * s.windowMargin - e 66 | , r = i - 2 * s.windowMargin - o; 67 | x.css("min-width", s.popupWidth).css("min-height", s.popupHeight), 68 | v.children().css("max-width", t).css("max-height", r) 69 | }; 70 | s.usePopupLoader || (s.popupLoaderSelector = null), 71 | s.usePopupCloser || (s.popupCloserSelector = null), 72 | s.usePopupCaption || (s.popupCaptionSelector = null), 73 | s.usePopupNav || (s.popupNavPreviousSelector = null, 74 | s.popupNavNextSelector = null); 75 | var x; 76 | x = e(s.popupSelector ? s.popupSelector : '
    ' + (s.popupLoaderSelector ? '
    ' + s.popupLoaderText + "
    " : "") + '
    ' + (s.popupCaptionSelector ? '
    ' : "") + (s.popupCloserSelector ? '' + s.popupCloserText + "" : "") + (s.popupNavPreviousSelector ? '' : "") + (s.popupNavNextSelector ? '' : "") + "
    "); 77 | var v = x.find(".pic") 78 | , w = e() 79 | , b = x.find(s.popupLoaderSelector) 80 | , m = x.find(s.popupCaptionSelector) 81 | , C = x.find(s.popupCloserSelector) 82 | , y = x.find(s.popupNavNextSelector) 83 | , S = x.find(s.popupNavPreviousSelector) 84 | , P = y.add(S); 85 | if (s.usePopupDefaultStyling && (x.css("background", s.popupBackgroundColor).css("color", s.popupTextColor).css("padding", s.popupPadding + "px"), 86 | m.length > 0 && (x.css("padding-bottom", s.popupCaptionHeight + "px"), 87 | m.css("position", "absolute").css("left", "0").css("bottom", "0").css("width", "100%").css("text-align", "center").css("height", s.popupCaptionHeight + "px").css("line-height", s.popupCaptionHeight + "px"), 88 | s.popupCaptionTextSize && m.css("font-size", popupCaptionTextSize)), 89 | C.length > 0 && C.html(s.popupCloserText).css("font-size", s.popupCloserTextSize).css("background", s.popupCloserBackgroundColor).css("color", s.popupCloserTextColor).css("display", "block").css("width", "40px").css("height", "40px").css("line-height", "40px").css("text-align", "center").css("position", "absolute").css("text-decoration", "none").css("outline", "0").css("top", "0").css("right", "-40px"), 90 | b.length > 0 && b.html("").css("position", "relative").css("font-size", s.popupLoaderTextSize).on("startSpinning", function(o) { 91 | var t = e("
    " + s.popupLoaderText + "
    "); 92 | t.css("height", Math.floor(s.popupHeight / 2) + "px").css("overflow", "hidden").css("line-height", Math.floor(s.popupHeight / 2) + "px").css("text-align", "center").css("margin-top", Math.floor((x.height() - t.height() + (m.length > 0 ? m.height() : 0)) / 2)).css("color", s.popupTextColor ? s.popupTextColor : "").on("xfin", function() { 93 | t.fadeTo(300, .5, function() { 94 | t.trigger("xfout") 95 | }) 96 | }).on("xfout", function() { 97 | t.fadeTo(300, .05, function() { 98 | t.trigger("xfin") 99 | }) 100 | }).trigger("xfin"), 101 | b.append(t) 102 | }).on("stopSpinning", function(e) { 103 | var o = b.find("div"); 104 | o.remove() 105 | }), 106 | 2 == P.length)) { 107 | P.css("font-size", "75px").css("text-align", "center").css("color", "#fff").css("text-shadow", "none").css("height", "100%").css("position", "absolute").css("top", "0").css("opacity", "0.35").css("cursor", "pointer").css("box-shadow", "inset 0px 0px 10px 0px rgba(0,0,0,0)").poptrox_disableSelection(); 108 | var k, T; 109 | s.usePopupEasyClose ? (k = "100px", 110 | T = "100px") : (k = "75%", 111 | T = "25%"), 112 | y.css("right", "0").css("width", k).html('
    >
    '), 113 | S.css("left", "0").css("width", T).html('
    <
    ') 114 | } 115 | return l.on("resize orientationchange", function() { 116 | f() 117 | }), 118 | m.on("update", function(e, o) { 119 | o && 0 != o.length || (o = s.popupBlankCaptionText), 120 | m.html(o) 121 | }), 122 | C.css("cursor", "pointer").on("click", function(e) { 123 | return e.preventDefault(), 124 | e.stopPropagation(), 125 | x.trigger("poptrox_close"), 126 | !0 127 | }), 128 | y.on("click", function(e) { 129 | e.stopPropagation(), 130 | e.preventDefault(), 131 | x.trigger("poptrox_next") 132 | }), 133 | S.on("click", function(e) { 134 | e.stopPropagation(), 135 | e.preventDefault(), 136 | x.trigger("poptrox_previous") 137 | }), 138 | a.css("position", "fixed").css("left", 0).css("top", 0).css("z-index", s.baseZIndex).css("width", "100%").css("height", "100%").css("text-align", "center").css("cursor", "pointer").appendTo(s.parent).prepend('
    ').append('
    ').hide().on("touchmove", function(e) { 139 | return !1 140 | }).on("click", function(e) { 141 | e.preventDefault(), 142 | e.stopPropagation(), 143 | x.trigger("poptrox_close") 144 | }), 145 | x.css("display", "inline-block").css("vertical-align", "middle").css("position", "relative").css("z-index", 1).css("cursor", "auto").appendTo(a).hide().on("poptrox_next", function() { 146 | var e = d + 1; 147 | e >= u.length && (e = 0), 148 | x.trigger("poptrox_switch", [e]) 149 | }).on("poptrox_previous", function() { 150 | var e = d - 1; 151 | e < 0 && (e = u.length - 1), 152 | x.trigger("poptrox_switch", [e]) 153 | }).on("poptrox_reset", function() { 154 | f(), 155 | x.data("width", s.popupWidth).data("height", s.popupHeight), 156 | b.hide().trigger("stopSpinning"), 157 | m.hide(), 158 | C.hide(), 159 | P.hide(), 160 | v.hide(), 161 | w.attr("src", "").detach() 162 | }).on("poptrox_open", function(e, o) { 163 | return !!h || (h = !0, 164 | s.useBodyOverflow && n.css("overflow", "hidden"), 165 | s.onPopupOpen && s.onPopupOpen(), 166 | x.addClass("loading"), 167 | void a.fadeTo(s.fadeSpeed, 1, function() { 168 | x.trigger("poptrox_switch", [o, !0]) 169 | })) 170 | }).on("poptrox_switch", function(o, t, p) { 171 | var i; 172 | if (!p && h) 173 | return !0; 174 | if (h = !0, 175 | x.addClass("loading").css("width", x.data("width")).css("height", x.data("height")), 176 | m.hide(), 177 | w.attr("src") && w.attr("src", ""), 178 | w.detach(), 179 | i = u[t], 180 | w = i.object, 181 | w.off("load"), 182 | v.css("text-indent", "-9999px").show().append(w), 183 | "ajax" == i.type ? e.get(i.src, function(e) { 184 | w.html(e), 185 | w.trigger("load") 186 | }) : w.attr("src", i.src), 187 | "image" != i.type) { 188 | var r, n; 189 | r = i.width, 190 | n = i.height, 191 | "%" == r.slice(-1) && (r = parseInt(r.substring(0, r.length - 1)) / 100 * l.width()), 192 | "%" == n.slice(-1) && (n = parseInt(n.substring(0, n.length - 1)) / 100 * l.height()), 193 | w.css("position", "relative").css("outline", "0").css("z-index", s.baseZIndex + 100).width(r).height(n) 194 | } 195 | b.trigger("startSpinning").fadeIn(300), 196 | x.show(), 197 | s.popupIsFixed ? (x.removeClass("loading").width(s.popupWidth).height(s.popupHeight), 198 | w.on("load", function() { 199 | w.off("load"), 200 | b.hide().trigger("stopSpinning"), 201 | m.trigger("update", [i.captionText]).fadeIn(s.fadeSpeed), 202 | C.fadeIn(s.fadeSpeed), 203 | v.css("text-indent", 0).hide().fadeIn(s.fadeSpeed, function() { 204 | h = !1 205 | }), 206 | d = t, 207 | P.fadeIn(s.fadeSpeed) 208 | })) : w.on("load", function() { 209 | f(), 210 | w.off("load"), 211 | b.hide().trigger("stopSpinning"); 212 | var e = w.width() 213 | , o = w.height() 214 | , p = function() { 215 | m.trigger("update", [i.captionText]).fadeIn(s.fadeSpeed), 216 | C.fadeIn(s.fadeSpeed), 217 | v.css("text-indent", 0).hide().fadeIn(s.fadeSpeed, function() { 218 | h = !1 219 | }), 220 | d = t, 221 | P.fadeIn(s.fadeSpeed), 222 | x.removeClass("loading").data("width", e).data("height", o).css("width", "auto").css("height", "auto") 223 | }; 224 | e == x.data("width") && o == x.data("height") ? p() : x.animate({ 225 | width: e, 226 | height: o 227 | }, s.popupSpeed, "swing", p) 228 | }), 229 | "image" != i.type && w.trigger("load") 230 | }).on("poptrox_close", function() { 231 | return !(!h || s.usePopupForceClose) || (h = !0, 232 | x.hide().trigger("poptrox_reset"), 233 | s.onPopupClose && s.onPopupClose(), 234 | void a.fadeOut(s.fadeSpeed, function() { 235 | s.useBodyOverflow && n.css("overflow", "auto"), 236 | h = !1 237 | })) 238 | }).trigger("poptrox_reset"), 239 | s.usePopupEasyClose ? (m.on("click", "a", function(e) { 240 | e.stopPropagation() 241 | }), 242 | x.css("cursor", "pointer").on("click", function(e) { 243 | e.stopPropagation(), 244 | e.preventDefault(), 245 | x.trigger("poptrox_close") 246 | })) : x.on("click", function(e) { 247 | e.stopPropagation() 248 | }), 249 | l.keydown(function(e) { 250 | if (x.is(":visible")) 251 | switch (e.keyCode) { 252 | case 37: 253 | case 32: 254 | if (s.usePopupNav) 255 | return x.trigger("poptrox_previous"), 256 | !1; 257 | break; 258 | case 39: 259 | if (s.usePopupNav) 260 | return x.trigger("poptrox_next"), 261 | !1; 262 | break; 263 | case 27: 264 | return x.trigger("poptrox_close"), 265 | !1 266 | } 267 | }), 268 | r.find(s.selector).each(function(o) { 269 | var t, p, i = e(this), r = i.find("img"), n = i.data("poptrox"); 270 | if ("ignore" != n && i.attr("href")) { 271 | if (t = { 272 | src: i.attr("href"), 273 | captionText: r.attr("title"), 274 | width: null, 275 | height: null, 276 | type: null, 277 | object: null, 278 | options: null 279 | }, 280 | s.caption) { 281 | if ("function" == typeof s.caption) 282 | c = s.caption(i); 283 | else if ("selector"in s.caption) { 284 | var a; 285 | a = i.find(s.caption.selector), 286 | "attribute"in s.caption ? c = a.attr(s.caption.attribute) : (c = a.html(), 287 | s.caption.remove === !0 && a.remove()) 288 | } 289 | } else 290 | c = r.attr("title"); 291 | if (t.captionText = c, 292 | n) { 293 | var l = n.split(","); 294 | 0 in l && (t.type = l[0]), 295 | 1 in l && (p = l[1].match(/([0-9%]+)x([0-9%]+)/), 296 | p && 3 == p.length && (t.width = p[1], 297 | t.height = p[2])), 298 | 2 in l && (t.options = l[2]) 299 | } 300 | if (!t.type) 301 | switch (p = t.src.match(/\/\/([a-z0-9\.]+)\/.*/), 302 | (!p || p.length < 2) && (p = [!1]), 303 | p[1]) { 304 | case "api.soundcloud.com": 305 | t.type = "soundcloud"; 306 | break; 307 | case "youtu.be": 308 | t.type = "youtube"; 309 | break; 310 | case "vimeo.com": 311 | t.type = "vimeo"; 312 | break; 313 | case "wistia.net": 314 | t.type = "wistia"; 315 | break; 316 | case "bcove.me": 317 | t.type = "bcove"; 318 | break; 319 | default: 320 | t.type = "image" 321 | } 322 | switch (p = t.src.match(/\/\/[a-z0-9\.]+\/(.*)/), 323 | t.type) { 324 | case "iframe": 325 | t.object = e(''), 326 | t.object.on("click", function(e) { 327 | e.stopPropagation() 328 | }).css("cursor", "auto"), 329 | t.width && t.height || (t.width = "600", 330 | t.height = "400"); 331 | break; 332 | case "ajax": 333 | t.object = e('
    '), 334 | t.object.on("click", function(e) { 335 | e.stopPropagation() 336 | }).css("cursor", "auto").css("overflow", "auto"), 337 | t.width && t.height || (t.width = "600", 338 | t.height = "400"); 339 | break; 340 | case "soundcloud": 341 | t.object = e(''), 342 | t.src = "//w.soundcloud.com/player/?url=" + escape(t.src) + (t.options ? "&" + t.options : ""), 343 | t.width = "600", 344 | t.height = "166"; 345 | break; 346 | case "youtube": 347 | t.object = e(''), 348 | t.src = "//www.youtube.com/embed/" + p[1] + (t.options ? "?" + t.options : ""), 349 | t.width && t.height || (t.width = "800", 350 | t.height = "480"); 351 | break; 352 | case "vimeo": 353 | t.object = e(''), 354 | t.src = "//player.vimeo.com/video/" + p[1] + (t.options ? "?" + t.options : ""), 355 | t.width && t.height || (t.width = "800", 356 | t.height = "480"); 357 | break; 358 | case "wistia": 359 | t.object = e(''), 360 | t.src = "//fast.wistia.net/" + p[1] + (t.options ? "?" + t.options : ""), 361 | t.width && t.height || (t.width = "800", 362 | t.height = "480"); 363 | break; 364 | case "bcove": 365 | t.object = e(''), 366 | t.src = "//bcove.me/" + p[1] + (t.options ? "?" + t.options : ""), 367 | t.width && t.height || (t.width = "640", 368 | t.height = "360"); 369 | break; 370 | default: 371 | if (t.object = e(''), 372 | s.preload) { 373 | var p = document.createElement("img"); 374 | p.src = t.src, 375 | g.push(p) 376 | } 377 | t.width = i.attr("width"), 378 | t.height = i.attr("height") 379 | } 380 | "file:" == window.location.protocol && t.src.match(/^\/\//) && (t.src = "http:" + t.src), 381 | u.push(t), 382 | r.removeAttr("title"), 383 | i.removeAttr("href").css("cursor", "pointer").css("outline", 0).on("click", function(e) { 384 | e.preventDefault(), 385 | e.stopPropagation(), 386 | x.trigger("poptrox_open", [o]) 387 | }) 388 | } 389 | }), 390 | r.prop("_poptrox", s), 391 | r 392 | } 393 | }(jQuery); 394 | -------------------------------------------------------------------------------- /templates/assets/css/main.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300italic,400,400italic);:root{--heo-white:#fff;--heo-white-op:rgba(255, 255, 255, 0.2);--heo-black:#000;--heo-black-op:rgba(0, 0, 0, 0.2);--heo-none:#00000000;--heo-gray:#999999;--heo-gray-op:#9999992b;--heo-vip:#e5a80d;--heo-main:var(--heo-theme);--heo-main-op:var(--heo-theme-op);--heo-main-none:var(--heo-theme-none);--heo-shadow-theme:0 8px 12px -3px var(--heo-theme-op);--heo-shadow-blackdeep:0 2px 16px -3px rgba(0, 0, 0, .15);--heo-shadow-main:0 8px 12px -3px var(--heo-main-op);--heo-shadow-blue:0 8px 12px -3px rgba(40, 109, 234, .20);--heo-shadow-white:0 8px 12px -3px rgba(255, 255, 255, .20);--heo-shadow-black:0 0 12px 4px rgba(0, 0, 0, .05);--heo-shadow-yellow:0px 38px 77px -26px rgba(255, 201, 62, .12);--heo-shadow-red:0 8px 12px -3px #ee7d7936;--heo-shadow-green:0 8px 12px -3px #87ee7936;--heo-logo-color:linear-gradient(215deg, #4584ff 0%, #cf0db9 100%);--heo-snackbar-time:5s;--style-border:1px solid var(--heo-card-border);--style-border-always:1px solid var(--heo-card-border);--style-border-hover:1px solid var(--heo-main);--style-border-hover-always:1px solid var(--heo-main);--style-border-dashed:1px dashed var(--heo-theme-op)}::selection{background:var(--heo-fontcolor);color:var(--heo-background)}:root{--heo-theme:#0084FF;--heo-theme-op:#0084FF23;--heo-theme-op-deep:#0084ffdd;--heo-theme-none:#0084FF00;--heo-blue:#0084FF;--heo-red:#FF3842;--heo-pink:#FF7C7C;--heo-green:#57bd6a;--heo-yellow:#ffc93e;--heo-yellow-op:#ffc93e30;--heo-orange:#ff953e;--heo-fontcolor:#F7F7FA;--heo-background:#18171d;--heo-reverse:#fff;--heo-maskbg:rgba(0, 0, 0, 0.6);--heo-maskbgdeep:rgba(0, 0, 0, 0.85);--heo-hovertext:#0A84FF;--heo-ahoverbg:#fff;--heo-lighttext:#f2b94b;--heo-secondtext:#a1a2b8;--heo-scrollbar:rgba(200, 200, 223, 0.4);--heo-card-btn-bg:#30343f;--heo-post-blockquote-bg:#000;--heo-post-tabs-bg:#121212;--heo-secondbg:#30343f;--heo-shadow-nav:0 5px 20px 0px rgba(28, 28, 28, 0.4);--heo-card-bg:#1d1e22;--heo-card-bg-op:var(--heo-white-op);--heo-card-bg-none:#1d1b2600;--heo-shadow-lightblack:0 5px 12px -5px rgba(102, 68, 68, 0.0);--heo-shadow-light2black:0 5px 12px -5px rgba(102, 68, 68, 0.0);--heo-card-border:#282829;--heo-shadow-border:0 8px 16px -4px #00000050;--style-border-forever:2px solid var(--heo-lighttext)}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{background-color:#ececec}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#1f2224}li{list-style-type:none}.icon-zmki{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.zmki_px{border:0;height:100%;left:0;position:absolute;top:0;width:100%;object-fit:cover;cursor:pointer;outline:0}@media screen and (max-width:1221px){.zmki_wap{display:none}#fullscreen{display:none!important;padding:0!important}}.nav-item-name::before{display:none!important}@media (max-width:768px){.zmki_px{background-image:url(../img/20200212-6dafa53ecf4e3.gif);background-size:100% 100%}}@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-ratio:3){.zmki_px{background-image:url(../img/20200212-38ce26bb0bd0d.gif);background-size:100% 100%}}@media only screen and (device-width:375px) and (device-height:667px){.zmki_px{background-image:url(../img/20200212-e056a5f2914d6.gif);background-size:100% 100%}}.zm{background-color:red}@-moz-keyframes spinner{0%{-moz-transform:rotate(0);-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spinner{0%{-moz-transform:rotate(0);-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spinner{0%{-moz-transform:rotate(0);-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinner{0%{-moz-transform:rotate(0);-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-webkit-transform:rotate(359deg);-ms-transform:rotate(359deg);transform:rotate(359deg)}}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}table{border-collapse:collapse;border-spacing:0}body{-webkit-text-size-adjust:none}mark{background-color:transparent;color:inherit}input::-moz-focus-inner{border:0;padding:0}input,select,textarea{-moz-appearance:none;-webkit-appearance:none;-ms-appearance:none;appearance:none}@-ms-viewport{width:device-width}body{-ms-overflow-style:scrollbar}@media screen and (max-width:480px){body,html{min-width:320px}}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#242629}body.is-preload *,body.is-preload :after,body.is-preload :before{-moz-animation:none!important;-webkit-animation:none!important;-ms-animation:none!important;animation:none!important;-moz-transition:none!important;-webkit-transition:none!important;-ms-transition:none!important;transition:none!important}body.is-resizing *,body.is-resizing :after,body.is-resizing :before{-moz-animation:none!important;-webkit-animation:none!important;-ms-animation:none!important;animation:none!important;-moz-transition:none!important;-webkit-transition:none!important;-ms-transition:none!important;transition:none!important}body,input,select,textarea{color:#a0a0a1;font-family:"Source Sans Pro",Helvetica,sans-serif;font-size:15pt;font-weight:300;letter-spacing:.025em;line-height:1.65}@media screen and (max-width:1680px){body,input,select,textarea{font-size:11pt}}a{-moz-transition:color .2s ease-in-out,border-bottom-color .2s ease-in-out;-webkit-transition:color .2s ease-in-out,border-bottom-color .2s ease-in-out;-ms-transition:color .2s ease-in-out,border-bottom-color .2s ease-in-out;transition:color .2s ease-in-out,border-bottom-color .2s ease-in-out;color:#b5b5b5;text-decoration:none}a:hover{border-bottom-color:transparent;color:var(--heo-theme)}b,strong{color:#fff;font-weight:300}em,i{font-style:italic}p{margin:0 0 2em 0}h1,h2,h3,h4,h5,h6{color:#fff;font-weight:700;line-height:0;margin:0 0 16px 0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit;text-decoration:none}h1{font-size:2em}h2{font-size:2.25em;line-height:1}h3{font-size:1.1em}h4{font-size:1em}h5{font-size:.9em}h6{font-size:.7em}@media screen and (max-width:736px){h2{font-size:1em}h3{font-size:.9em}h4{font-size:.8em}h5{font-size:.7em}h6{font-size:.7em}}sub{font-size:.8em;position:relative;top:.5em}sup{font-size:.8em;position:relative;top:-.5em}blockquote{border-left:4px #36383c;font-style:italic;margin:0 0 2em 0;padding:.5em 0 .5em 2em}code{background:#34363b;border:solid 1px #36383c;font-family:"Courier New",monospace;font-size:.9em;margin:0 .25em;padding:.25em .65em}pre{-webkit-overflow-scrolling:touch;font-family:"Courier New",monospace;font-size:.9em;margin:0 0 2em 0}pre code{display:block;line-height:1.75;padding:1em 1.5em;overflow-x:auto}hr{border:0;border-bottom:solid 1px #36383c;margin:2em 0}hr.major{margin:3em 0}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.button,button,input[type=button],input[type=reset],input[type=submit]{-moz-appearance:none;-webkit-appearance:none;-ms-appearance:none;appearance:none;-moz-transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out,color .2s ease-in-out;-webkit-transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out,color .2s ease-in-out;-ms-transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out,color .2s ease-in-out;transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out,color .2s ease-in-out;background-color:transparent;border:0;border-radius:0;box-shadow:inset 0 0 0 2px #36383c;color:#fff!important;cursor:pointer;display:inline-block;font-size:.9em;font-weight:300;height:3.05556em;letter-spacing:.1em;line-height:3.05556em;padding:0 2.5em;text-align:center;text-decoration:none;text-transform:uppercase;white-space:nowrap}.button:hover,button:hover,input[type=button]:hover,input[type=reset]:hover,input[type=submit]:hover{box-shadow:inset 0 0 0 2px #34a58e;color:#34a58e!important}.button:hover:active,button:hover:active,input[type=button]:hover:active,input[type=reset]:hover:active,input[type=submit]:hover:active{background-color:rgba(52,165,142,.15);color:#34a58e!important}.button.icon,button.icon,input[type=button].icon,input[type=reset].icon,input[type=submit].icon{padding-left:1.35em}.button.icon:before,button.icon:before,input[type=button].icon:before,input[type=reset].icon:before,input[type=submit].icon:before{margin-right:.5em}.button.fit,button.fit,input[type=button].fit,input[type=reset].fit,input[type=submit].fit{width:100%}.button.small,button.small,input[type=button].small,input[type=reset].small,input[type=submit].small{font-size:.8em}.button.large,button.large,input[type=button].large,input[type=reset].large,input[type=submit].large{font-size:1.35em}.button.primary,button.primary,input[type=button].primary,input[type=reset].primary,input[type=submit].primary{background-color:#34a58e;box-shadow:none}.button.primary:hover,button.primary:hover,input[type=button].primary:hover,input[type=reset].primary:hover,input[type=submit].primary:hover{background-color:#47c5ab;color:#fff!important}.button.primary:hover:active,button.primary:hover:active,input[type=button].primary:hover:active,input[type=reset].primary:hover:active,input[type=submit].primary:hover:active{background-color:#287e6d}.button.disabled,.button:disabled,button.disabled,button:disabled,input[type=button].disabled,input[type=button]:disabled,input[type=reset].disabled,input[type=reset]:disabled,input[type=submit].disabled,input[type=submit]:disabled{pointer-events:none;opacity:.35}form{margin:0 0 2em 0}form>:last-child{margin-bottom:0}form>.fields{display:-moz-flex;display:-webkit-flex;display:-ms-flex;display:flex;-moz-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:calc(100% + 3em);margin:-1.5em 0 2em -1.5em}form>.fields>.field{-moz-flex-grow:0;-webkit-flex-grow:0;-ms-flex-grow:0;flex-grow:0;-moz-flex-shrink:0;-webkit-flex-shrink:0;-ms-flex-shrink:0;flex-shrink:0;padding:1.5em 0 0 1.5em;width:calc(100% - 1.5em)}form>.fields>.field.half{width:calc(50% - .75em)}form>.fields>.field.third{width:calc(100%/3 - .5em)}form>.fields>.field.quarter{width:calc(25% - .375em)}@media screen and (max-width:736px){form>.fields{width:calc(100% + 3em);margin:-1.5em 0 2em -1.5em}form>.fields>.field{padding:1.5em 0 0 1.5em;width:calc(100% - 1.5em)}form>.fields>.field.half{width:calc(100% - 1.5em)}form>.fields>.field.third{width:calc(100% - 1.5em)}form>.fields>.field.quarter{width:calc(100% - 1.5em)}}label{color:#fff;display:block;font-size:.9em;font-weight:300;margin:0 0 1em 0}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{-moz-appearance:none;-webkit-appearance:none;-ms-appearance:none;appearance:none;background:#34363b;border:0;border-radius:0;color:#a0a0a1;display:block;outline:0;padding:0 1em;text-decoration:none;width:100%}input[type=email]:invalid,input[type=password]:invalid,input[type=search]:invalid,input[type=tel]:invalid,input[type=text]:invalid,input[type=url]:invalid,select:invalid,textarea:invalid{box-shadow:none}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{box-shadow:inset 0 0 0 2px #34a58e}select{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='%2336383c' /%3E%3C/svg%3E");background-size:1.25rem;background-repeat:no-repeat;background-position:calc(100% - 1rem) center;height:2.75em;padding-right:2.75em;text-overflow:ellipsis}select option{color:#fff;background:#242629}select:focus::-ms-value{background-color:transparent}select::-ms-expand{display:none}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select{height:2.75em}textarea{padding:.75em 1em}input[type=checkbox],input[type=radio]{-moz-appearance:none;-webkit-appearance:none;-ms-appearance:none;appearance:none;display:block;float:left;margin-right:-2em;opacity:0;width:1em;z-index:-1}input[type=checkbox]+label,input[type=radio]+label{text-decoration:none;color:#a0a0a1;cursor:pointer;display:inline-block;font-size:1em;font-weight:300;padding-left:2.4em;padding-right:.75em;position:relative}input[type=checkbox]+label:before,input[type=radio]+label:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;text-transform:none!important;font-family:'Font Awesome 5 Free';font-weight:900}input[type=checkbox]+label:before,input[type=radio]+label:before{background:#34363b;content:'';display:inline-block;font-size:.8em;height:2.0625em;left:0;line-height:2.0625em;position:absolute;text-align:center;top:0;width:2.0625em}input[type=checkbox]:checked+label:before,input[type=radio]:checked+label:before{background:#34a58e;border-color:#34a58e;color:#fff;content:'\f00c'}input[type=checkbox]:focus+label:before,input[type=radio]:focus+label:before{box-shadow:0 0 0 2px #34a58e}input[type=radio]+label:before{border-radius:100%}::-webkit-input-placeholder{color:#707071!important;opacity:1}:-moz-placeholder{color:#707071!important;opacity:1}::-moz-placeholder{color:#707071!important;opacity:1}:-ms-input-placeholder{color:#707071!important;opacity:1}.iconfont{text-decoration:none;border-bottom:none;position:relative}.iconfont>.label{display:none}.iconfont:before{line-height:inherit}ol{list-style:decimal;margin:0 0 2em 0;padding-left:1.25em}ol li{padding-left:.25em}ul{list-style:disc;margin:0 0 2em 0;padding-left:1em}ul.alt{list-style:none;padding-left:0}ul.alt li{border-top:solid 1px #36383c;padding:.5em 0}ul.alt li:first-child{border-top:0;padding-top:0}dl{margin:0 0 2em 0}dl dt{display:block;font-weight:300;margin:0 0 1em 0}dl dd{margin-left:2em}ul.actions{display:-moz-flex;display:-webkit-flex;display:-ms-flex;display:flex;cursor:default;list-style:none;margin-left:-1em;padding-left:0}ul.actions li{padding:0 0 0 1em;vertical-align:middle}ul.actions.special{-moz-justify-content:center;-webkit-justify-content:center;-ms-justify-content:center;justify-content:center;width:100%;margin-left:0}ul.actions.special li:first-child{padding-left:0}ul.actions.stacked{-moz-flex-direction:column;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-left:0}ul.actions.stacked li{padding:1.3em 0 0 0}ul.actions.stacked li:first-child{padding-top:0}ul.actions.fit{width:calc(100% + 1em)}ul.actions.fit li{-moz-flex-grow:1;-webkit-flex-grow:1;-ms-flex-grow:1;flex-grow:1;-moz-flex-shrink:1;-webkit-flex-shrink:1;-ms-flex-shrink:1;flex-shrink:1;width:100%}ul.actions.fit li>*{width:100%}ul.actions.fit.stacked{width:100%}@media screen and (max-width:480px){ul.actions:not(.fixed){-moz-flex-direction:column;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-left:0;width:100%!important}ul.actions:not(.fixed) li{-moz-flex-grow:1;-webkit-flex-grow:1;-ms-flex-grow:1;flex-grow:1;-moz-flex-shrink:1;-webkit-flex-shrink:1;-ms-flex-shrink:1;flex-shrink:1;padding:1em 0 0 0;text-align:center;width:100%}ul.actions:not(.fixed) li>*{width:100%}ul.actions:not(.fixed) li:first-child{padding-top:0}ul.actions:not(.fixed) li .button,ul.actions:not(.fixed) li button,ul.actions:not(.fixed) li input[type=button],ul.actions:not(.fixed) li input[type=reset],ul.actions:not(.fixed) li input[type=submit]{width:100%}ul.actions:not(.fixed) li .button.icon:before,ul.actions:not(.fixed) li button.icon:before,ul.actions:not(.fixed) li input[type=button].icon:before,ul.actions:not(.fixed) li input[type=reset].icon:before,ul.actions:not(.fixed) li input[type=submit].icon:before{margin-left:-.5rem}}ul.icons{cursor:default;list-style:none;padding-left:0;display:flex}ul.icons li{margin-right:.5rem}ul.icons li:last-child{padding-right:0}ul.icons li .iconfont:before{font-size:28px;height:28px;margin:auto;display:contents}ul.icons li .iconfont{color:var(--heo-card-bg);width:40px;height:40px;border-radius:40px;background:var(--heo-fontcolor);display:flex;align-items:center;justify-content:center;transition:.3s}ul.icons li:hover .iconfont{color:var(--heo-fontcolor);background:var(--heo-theme)}.table-wrapper{-webkit-overflow-scrolling:touch;overflow-x:auto}table{margin:0 0 2em 0;width:100%}table tbody tr{border:solid 1px #36383c;border-left:0;border-right:0}table tbody tr:nth-child(2n+1){background-color:#34363b}table td{padding:.75em .75em}table th{color:#fff;font-size:.9em;font-weight:300;padding:0 .75em .75em .75em;text-align:left}table thead{border-bottom:solid 2px #36383c}table tfoot{border-top:solid 2px #36383c}table.alt{border-collapse:separate}table.alt tbody tr td{border:solid 1px #36383c;border-left-width:0;border-top-width:0}table.alt tbody tr td:first-child{border-left-width:1px}table.alt tbody tr:first-child td{border-top-width:1px}table.alt thead{border-bottom:0}table.alt tfoot{border-top:0}.panel{padding:4em 4em 2em 4em;-moz-transform:translateY(100vh);-webkit-transform:translateY(100vh);-ms-transform:translateY(100vh);transform:translateY(100vh);-moz-transition:-moz-transform .5s ease;-webkit-transition:-webkit-transform .5s ease;-ms-transition:-ms-transform .5s ease;transition:transform .5s ease;-webkit-overflow-scrolling:touch;background:rgba(36,38,41,.975);bottom:80px;left:0;max-height:calc(80vh - 4em);overflow-y:auto;position:fixed;width:100%;z-index:10001}.panel.active{-moz-transform:translateY(1px);-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}.panel>.inner{margin:0 auto;max-width:100%;width:75em}.panel>.inner.split{display:-moz-flex;display:-webkit-flex;display:-ms-flex;display:flex}.panel>.inner.split>div{margin-left:4em;width:50%}.panel>.inner.split>:first-child{margin-left:0}.panel>.closer{-moz-transition:opacity .2s ease-in-out;-webkit-transition:opacity .2s ease-in-out;-ms-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;background-image:url(images/close.svg);background-position:center;background-repeat:no-repeat;background-size:3em;cursor:pointer;height:5em;opacity:.25;position:absolute;right:0;top:0;width:5em;z-index:2}.panel>.closer:hover{opacity:1}@media screen and (max-width:1280px){.panel{padding:3em 3em 1em 3em}.panel>.inner.split>div{margin-left:3em}.panel>.closer{background-size:2.5em;background-position:75% 25%}}@media screen and (max-width:980px){.panel>.inner.split{-moz-flex-direction:column;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.panel>.inner.split>div{margin-left:0;width:100%}}@media screen and (max-width:736px){.panel{-moz-transform:translateY(-100vh);-webkit-transform:translateY(-100vh);-ms-transform:translateY(-100vh);transform:translateY(-100vh);padding:4em 2em 2em 2em;bottom:auto;top:calc(4em - 1px)}.panel.active{-moz-transform:translateY(0);-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.poptrox-overlay{-webkit-tap-highlight-color:rgba(255,255,255,0);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:blur(20px);background:var(--heo-maskbgdeep)}.poptrox-popup{background:rgba(31,34,36,.925);box-shadow:0 1em 3em .5em rgba(0,0,0,.25);cursor:default;border-radius:12px;overflow:hidden}.poptrox-popup:before{-moz-transition:opacity .2s ease-in-out;-webkit-transition:opacity .2s ease-in-out;-ms-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;background-image:-moz-linear-gradient(to left,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0)),-moz-linear-gradient(to right,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0));background-image:-webkit-linear-gradient(to left,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0)),-webkit-linear-gradient(to right,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0));background-image:-ms-linear-gradient(to left,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0)),-ms-linear-gradient(to right,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0));background-image:linear-gradient(to left,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0)),linear-gradient(to right,rgba(31,34,36,.35),rgba(31,34,36,0) 10em,rgba(31,34,36,0));content:'';display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1;opacity:1}.poptrox-popup .closer{-moz-transition:opacity .2s ease-in-out;-webkit-transition:opacity .2s ease-in-out;-ms-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;background-image:url(images/close.svg);background-position:center;background-repeat:no-repeat;background-size:3em;height:5em;opacity:0;position:absolute;right:0;top:0;width:5em;z-index:2}.poptrox-popup .nav-next,.poptrox-popup .nav-previous{-moz-transition:opacity .2s ease-in-out;-webkit-transition:opacity .2s ease-in-out;-ms-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;background-image:url(images/arrow.svg);background-position:center;background-repeat:no-repeat;background-size:5em;cursor:pointer;height:8em;margin-top:-4em;opacity:0;position:absolute;top:50%;width:6em;z-index:2}.poptrox-popup .nav-previous{-moz-transform:scaleX(-1);-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1);left:0}.poptrox-popup .nav-next{right:0}.poptrox-popup .caption{padding:2em 2em .1em 2em;background-image:-moz-linear-gradient(to top,rgba(16,16,16,.45) 25%,rgba(16,16,16,0) 100%);background-image:-webkit-linear-gradient(to top,rgba(16,16,16,.45) 25%,rgba(16,16,16,0) 100%);background-image:-ms-linear-gradient(to top,rgba(16,16,16,.45) 25%,rgba(16,16,16,0) 100%);background-image:linear-gradient(to top,rgba(16,16,16,.45) 25%,rgba(16,16,16,0) 100%);bottom:0;cursor:default;left:0;position:absolute;text-align:left;width:100%;z-index:2;padding-bottom:2rem;display:flex;flex-direction:column}.poptrox-popup .caption h2,.poptrox-popup .caption h3,.poptrox-popup .caption h4,.poptrox-popup .caption h5,.poptrox-popup .caption h6{margin:0;font-weight:700}.poptrox-popup .caption p{color:#fff;font-size:15px;margin:4px 0!important}.poptrox-popup .loader{-moz-animation:spinner 1s infinite linear!important;-webkit-animation:spinner 1s infinite linear!important;-ms-animation:spinner 1s infinite linear!important;animation:spinner 1s infinite linear!important;background-image:url(images/spinner.svg);background-position:center;background-repeat:no-repeat;background-size:contain;display:block;font-size:2em;height:2em;left:50%;line-height:2em;margin:-1em 0 0 -1em;opacity:.25;position:absolute;text-align:center;top:50%;width:2em}.poptrox-popup:hover .closer,.poptrox-popup:hover .nav-next,.poptrox-popup:hover .nav-previous{opacity:.5}.poptrox-popup:hover .closer:hover,.poptrox-popup:hover .nav-next:hover,.poptrox-popup:hover .nav-previous:hover{opacity:1}.poptrox-popup.loading:before{opacity:0}body.touch .poptrox-popup .closer,body.touch .poptrox-popup .nav-next,body.touch .poptrox-popup .nav-previous{opacity:1!important}.tag-categorys{display:flex}.tag-categorys a{padding:4px 6px;border-radius:8px;background:var(--heo-black-op);font-size:12px;color:var(--heo-fontcolor);transition:.3s;z-index:1;margin:12px 0 0 12px}.tag-categorys a:hover{background:var(--heo-theme);color:var(--heo-white)}.poptrox-popup .tag-categorys a{margin:0}@media screen and (max-width:980px){.poptrox-popup .closer{background-size:3em}.poptrox-popup .nav-next,.poptrox-popup .nav-previous{background-size:4em}}@media screen and (max-width:736px){.poptrox-popup:before{display:none}.poptrox-popup .caption{display:none!important}.poptrox-popup .closer,.poptrox-popup .nav-next,.poptrox-popup .nav-previous{display:none!important}.nav-item .nav-item-child{top:30px}}#wrapper{-moz-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-moz-filter .5s ease;-webkit-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-webkit-filter .5s ease;-ms-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-ms-filter .5s ease;transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,filter .5s ease;position:relative}#wrapper:after{pointer-events:none;-moz-transition:opacity .5s ease,visibility .5s;-webkit-transition:opacity .5s ease,visibility .5s;-ms-transition:opacity .5s ease,visibility .5s;transition:opacity .5s ease,visibility .5s;background:rgba(36,38,41,.5);content:'';display:block;height:100%;left:0;opacity:0;position:absolute;top:0;visibility:hidden;width:100%;z-index:1}body.ie #wrapper:after{background:rgba(36,38,41,.8)}body.modal-active #wrapper:after{pointer-events:auto;opacity:0;visibility:visible;z-index:10003}#wrapper:before{-moz-animation:spinner 1s infinite linear!important;-webkit-animation:spinner 1s infinite linear!important;-ms-animation:spinner 1s infinite linear!important;animation:spinner 1s infinite linear!important;pointer-events:none;-moz-transition:top .75s ease-in-out,opacity .35s ease-out,visibility .35s;-webkit-transition:top .75s ease-in-out,opacity .35s ease-out,visibility .35s;-ms-transition:top .75s ease-in-out,opacity .35s ease-out,visibility .35s;transition:top .75s ease-in-out,opacity .35s ease-out,visibility .35s;background-image:url(images/spinner.svg);background-position:center;background-repeat:no-repeat;background-size:contain;content:'';display:block;font-size:2em;height:2em;left:50%;line-height:2em;margin:-1em 0 0 -1em;opacity:0;position:fixed;text-align:center;top:75%;visibility:hidden;width:2em}body.is-preload #wrapper:before{-moz-transition:opacity 1s ease-out!important;-webkit-transition:opacity 1s ease-out!important;-ms-transition:opacity 1s ease-out!important;transition:opacity 1s ease-out!important;-moz-transition-delay:.5s!important;-webkit-transition-delay:.5s!important;-ms-transition-delay:.5s!important;transition-delay:.5s!important;opacity:.25;top:50%;visibility:visible}body{padding:0 0 4em 0}#header{-moz-transform:translateY(0);-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-moz-transition:-moz-transform 1s ease;-webkit-transition:-webkit-transform 1s ease;-ms-transition:-ms-transform 1s ease;transition:transform 1s ease;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:rgba(18,18,18,.8);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:blur(20px);top:calc(100vh - 80px);height:80px;left:0;line-height:1;padding:0 1.5em;position:fixed;user-select:none;width:100%;z-index:10002;display:flex;align-items:center}body.is-preload #header{-moz-transform:translateY(4em);-webkit-transform:translateY(4em);-ms-transform:translateY(4em);transform:translateY(4em)}#header h1{color:#a0a0a1;display:flex;font-size:1em;line-height:4.5em;height:4em;margin:0;vertical-align:middle;align-items:center}#header h1 a{border:0;color:inherit;line-height:1}#header h1 a:hover{color:inherit!important}#header nav{margin-left:auto}#header nav>ul{list-style:none;margin:0;padding:0;display:flex}#header nav>ul>li{display:flex;padding:0;position:relative;list-style-type:none;justify-content:center}#header .discription{margin-left:8px}.nav-item .nav-item-child{position:absolute;bottom:30px;flex-direction:column;margin-bottom:0;padding:8px;align-items:center;background:var(--heo-maskbg);border-radius:8px;display:flex;height:fit-content;transition:.3s;opacity:0;pointer-events:none;backdrop-filter:blur(10px)}.nav-item .category-parent{border-radius:6px;transition:.3s;font-size:14px}.nav-item .category-parent:hover{background:var(--heo-theme)}.nav-item:hover .nav-item-child{display:flex;opacity:1;pointer-events:all}#header nav>ul>li a{-moz-transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-ms-transition:background-color .5s ease;transition:background-color .5s ease;border:0;color:#fff;display:inline-block;letter-spacing:.1em;padding:0 1.65em;text-transform:uppercase;padding:8px 16px;border-radius:8px;white-space:nowrap}#header nav>ul>li a.icon:before{color:#505051;float:right;margin-left:.75em}#header nav>ul>li a:hover{color:#fff!important}#header nav>ul>li a.active{background-color:var(--heo-secondbg)}.site-logo{width:30px;height:30px;border-radius:20px;margin-right:1rem}@media screen and (max-width:736px){body{padding:4em 0 0 0}#header{-moz-transform:translateY(0);-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);bottom:auto;height:60px;padding:0 1em;top:0}body.is-preload #header{-moz-transform:translateY(-3.4em);-webkit-transform:translateY(-3.4em);-ms-transform:translateY(-3.4em);transform:translateY(-3.4em)}#header h1{font-size:.9em}#header nav>ul>li a{font-size:.9em;padding:8px 16px;border-radius:8px}#header .discription{display:none}}.alt{background-color:red;border-radius:10px;font-size:15px}#main{-moz-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-moz-filter .5s ease;-webkit-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-webkit-filter .5s ease;-ms-transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,-ms-filter .5s ease;transition:-moz-filter .5s ease,-webkit-filter .5s ease,-ms-filter .5s ease,filter .5s ease;display:-moz-flex;display:-webkit-flex;display:-ms-flex;display:flex;-moz-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-tap-highlight-color:rgba(255,255,255,0)}#main .thumb{-moz-transition:opacity 1.25s ease-in-out;-webkit-transition:opacity 1.25s ease-in-out;-ms-transition:opacity 1.25s ease-in-out;transition:opacity 1.25s ease-in-out;pointer-events:auto;-webkit-tap-highlight-color:rgba(255,255,255,0);opacity:1;overflow:hidden;position:relative}#main .thumb:after{background-image:-moz-linear-gradient(to top,rgba(10,17,25,.35) 5%,rgba(10,17,25,0) 35%);background-image:-webkit-linear-gradient(to top,rgba(10,17,25,.35) 5%,rgba(10,17,25,0) 35%);background-image:-ms-linear-gradient(to top,rgba(10,17,25,.35) 5%,rgba(10,17,25,0) 35%);background-image:linear-gradient(to top,rgba(10,17,25,.35) 5%,rgba(10,17,25,0) 35%);pointer-events:none;background-size:cover;content:'';display:block;height:100%;left:0;position:absolute;top:0;width:100%}#main .thumb>.image{-webkit-tap-highlight-color:rgba(255,255,255,0);background-position:center;background-repeat:no-repeat;background-size:cover;border:0;height:100%;left:0;position:absolute;top:0;width:100%}#main .thumb>h2{pointer-events:none;bottom:1.875em;font-size:.8em;left:16px;margin:0;position:absolute;z-index:1}#main .thumb>p{display:none}#main:after{pointer-events:none;-moz-transition:opacity .5s ease,visibility .5s;-webkit-transition:opacity .5s ease,visibility .5s;-ms-transition:opacity .5s ease,visibility .5s;transition:opacity .5s ease,visibility .5s;background:rgba(36,38,41,.25);content:'';display:block;height:100%;left:0;opacity:0;position:absolute;top:0;visibility:hidden;width:100%;z-index:1}body.ie #main:after{background:rgba(36,38,41,.55)}body.content-active #main:after{pointer-events:auto;opacity:1;visibility:visible;backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:blur(20px);background:var(--heo-maskbgdeep)}body.is-preload #main .thumb{pointer-events:none;opacity:0}#main .thumb{-moz-transition-delay:2.525s;-webkit-transition-delay:2.525s;-ms-transition-delay:2.525s;transition-delay:2.525s;height:calc(40vh - 2em);min-height:20em;width:25%}#main .thumb:nth-child(1){-moz-transition-delay:.65s;-webkit-transition-delay:.65s;-ms-transition-delay:.65s;transition-delay:.65s}#main .thumb:nth-child(2){-moz-transition-delay:.8s;-webkit-transition-delay:.8s;-ms-transition-delay:.8s;transition-delay:.8s}#main .thumb:nth-child(3){-moz-transition-delay:.95s;-webkit-transition-delay:.95s;-ms-transition-delay:.95s;transition-delay:.95s}#main .thumb:nth-child(4){-moz-transition-delay:1.1s;-webkit-transition-delay:1.1s;-ms-transition-delay:1.1s;transition-delay:1.1s}#main .thumb:nth-child(5){-moz-transition-delay:1.25s;-webkit-transition-delay:1.25s;-ms-transition-delay:1.25s;transition-delay:1.25s}#main .thumb:nth-child(6){-moz-transition-delay:1.4s;-webkit-transition-delay:1.4s;-ms-transition-delay:1.4s;transition-delay:1.4s}#main .thumb:nth-child(7){-moz-transition-delay:1.55s;-webkit-transition-delay:1.55s;-ms-transition-delay:1.55s;transition-delay:1.55s}#main .thumb:nth-child(8){-moz-transition-delay:1.7s;-webkit-transition-delay:1.7s;-ms-transition-delay:1.7s;transition-delay:1.7s}#main .thumb:nth-child(9){-moz-transition-delay:1.85s;-webkit-transition-delay:1.85s;-ms-transition-delay:1.85s;transition-delay:1.85s}#main .thumb:nth-child(10){-moz-transition-delay:2s;-webkit-transition-delay:2s;-ms-transition-delay:2s;transition-delay:2s}#main .thumb:nth-child(11){-moz-transition-delay:2.15s;-webkit-transition-delay:2.15s;-ms-transition-delay:2.15s;transition-delay:2.15s}#main .thumb:nth-child(12){-moz-transition-delay:2.3s;-webkit-transition-delay:2.3s;-ms-transition-delay:2.3s;transition-delay:2.3s}@media screen and (max-width:1680px){#main .thumb{-moz-transition-delay:2.075s;-webkit-transition-delay:2.075s;-ms-transition-delay:2.075s;transition-delay:2.075s;height:calc(40vh - 2em);min-height:20em;width:33.33333%}#main .thumb:nth-child(1){-moz-transition-delay:.65s;-webkit-transition-delay:.65s;-ms-transition-delay:.65s;transition-delay:.65s}#main .thumb:nth-child(2){-moz-transition-delay:.8s;-webkit-transition-delay:.8s;-ms-transition-delay:.8s;transition-delay:.8s}#main .thumb:nth-child(3){-moz-transition-delay:.95s;-webkit-transition-delay:.95s;-ms-transition-delay:.95s;transition-delay:.95s}#main .thumb:nth-child(4){-moz-transition-delay:1.1s;-webkit-transition-delay:1.1s;-ms-transition-delay:1.1s;transition-delay:1.1s}#main .thumb:nth-child(5){-moz-transition-delay:1.25s;-webkit-transition-delay:1.25s;-ms-transition-delay:1.25s;transition-delay:1.25s}#main .thumb:nth-child(6){-moz-transition-delay:1.4s;-webkit-transition-delay:1.4s;-ms-transition-delay:1.4s;transition-delay:1.4s}#main .thumb:nth-child(7){-moz-transition-delay:1.55s;-webkit-transition-delay:1.55s;-ms-transition-delay:1.55s;transition-delay:1.55s}#main .thumb:nth-child(8){-moz-transition-delay:1.7s;-webkit-transition-delay:1.7s;-ms-transition-delay:1.7s;transition-delay:1.7s}#main .thumb:nth-child(9){-moz-transition-delay:1.85s;-webkit-transition-delay:1.85s;-ms-transition-delay:1.85s;transition-delay:1.85s}}@media screen and (max-width:1280px){#main .thumb{-moz-transition-delay:1.625s;-webkit-transition-delay:1.625s;-ms-transition-delay:1.625s;transition-delay:1.625s;height:calc(40vh - 2em);min-height:20em;width:50%}#main .thumb:nth-child(1){-moz-transition-delay:.65s;-webkit-transition-delay:.65s;-ms-transition-delay:.65s;transition-delay:.65s}#main .thumb:nth-child(2){-moz-transition-delay:.8s;-webkit-transition-delay:.8s;-ms-transition-delay:.8s;transition-delay:.8s}#main .thumb:nth-child(3){-moz-transition-delay:.95s;-webkit-transition-delay:.95s;-ms-transition-delay:.95s;transition-delay:.95s}#main .thumb:nth-child(4){-moz-transition-delay:1.1s;-webkit-transition-delay:1.1s;-ms-transition-delay:1.1s;transition-delay:1.1s}#main .thumb:nth-child(5){-moz-transition-delay:1.25s;-webkit-transition-delay:1.25s;-ms-transition-delay:1.25s;transition-delay:1.25s}#main .thumb:nth-child(6){-moz-transition-delay:1.4s;-webkit-transition-delay:1.4s;-ms-transition-delay:1.4s;transition-delay:1.4s}}@media screen and (max-width:980px){#main .thumb{-moz-transition-delay:2.075s;-webkit-transition-delay:2.075s;-ms-transition-delay:2.075s;transition-delay:2.075s;height:calc(28.57143vh - 1.33333em);min-height:18em;width:50%}#main .thumb:nth-child(1){-moz-transition-delay:.65s;-webkit-transition-delay:.65s;-ms-transition-delay:.65s;transition-delay:.65s}#main .thumb:nth-child(2){-moz-transition-delay:.8s;-webkit-transition-delay:.8s;-ms-transition-delay:.8s;transition-delay:.8s}#main .thumb:nth-child(3){-moz-transition-delay:.95s;-webkit-transition-delay:.95s;-ms-transition-delay:.95s;transition-delay:.95s}#main .thumb:nth-child(4){-moz-transition-delay:1.1s;-webkit-transition-delay:1.1s;-ms-transition-delay:1.1s;transition-delay:1.1s}#main .thumb:nth-child(5){-moz-transition-delay:1.25s;-webkit-transition-delay:1.25s;-ms-transition-delay:1.25s;transition-delay:1.25s}#main .thumb:nth-child(6){-moz-transition-delay:1.4s;-webkit-transition-delay:1.4s;-ms-transition-delay:1.4s;transition-delay:1.4s}#main .thumb:nth-child(7){-moz-transition-delay:1.55s;-webkit-transition-delay:1.55s;-ms-transition-delay:1.55s;transition-delay:1.55s}#main .thumb:nth-child(8){-moz-transition-delay:1.7s;-webkit-transition-delay:1.7s;-ms-transition-delay:1.7s;transition-delay:1.7s}#main .thumb:nth-child(9){-moz-transition-delay:1.85s;-webkit-transition-delay:1.85s;-ms-transition-delay:1.85s;transition-delay:1.85s}}@media screen and (max-width:480px){#main .thumb{-moz-transition-delay:1.175s;-webkit-transition-delay:1.175s;-ms-transition-delay:1.175s;transition-delay:1.175s;height:calc(40vh - 2em);min-height:18em;width:100%}#main .thumb:nth-child(1){-moz-transition-delay:.65s;-webkit-transition-delay:.65s;-ms-transition-delay:.65s;transition-delay:.65s}#main .thumb:nth-child(2){-moz-transition-delay:.8s;-webkit-transition-delay:.8s;-ms-transition-delay:.8s;transition-delay:.8s}#main .thumb:nth-child(3){-moz-transition-delay:.95s;-webkit-transition-delay:.95s;-ms-transition-delay:.95s;transition-delay:.95s}}#footer .copyright{color:#b5b5b5;font-size:15px}#footer .copyright a{color:inherit} --------------------------------------------------------------------------------