wy 2 years ago
parent
commit
b5bb1d90bc
  1. 3
      README.md
  2. 298
      new-page.html
  3. BIN
      static/apple-touch-icon.png
  4. 1
      static/css/index-mobile.1.0.20.min.css
  5. 1
      static/css/index.1.0.17.min.css
  6. 1
      static/css/notes.1.0.0.min.css
  7. BIN
      static/favicon.ico
  8. 150
      static/iconfont/iconfont.1.0.2.css
  9. BIN
      static/iconfont/iconfont.1.0.2.ttf
  10. BIN
      static/iconfont/iconfont.1.0.2.woff
  11. BIN
      static/iconfont/iconfont.1.0.2.woff2
  12. BIN
      static/img/wechat.png
  13. 614
      static/js/index.1.0.11.min.js
  14. 614
      static/js/index.js
  15. 1
      static/js/notes.1.0.2.min.js
  16. 30
      static/js/notes.js
  17. BIN
      static/logo/logo-8s.png
  18. BIN
      static/logo/logo-dark-8s.png

3
README.md

@ -14,3 +14,6 @@ https://svgedit.netlify.app/editor/index.html
https://uutool.cn/svg2png/
https://www.helloxjn.com

298
new-page.html

@ -9,22 +9,22 @@
<meta name="keywords" content="个人网站 学习笔记 全栈开发">
<meta name="description" content="个人学习笔记">
<meta name="author" content="项佳男">
<link rel="shortcut icon" href="https://www.helloxjn.com/static/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="https://www.helloxjn.com/static/apple-touch-icon.png">
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="/static/apple-touch-icon.png">
<link rel="stylesheet" href="/static/bootstrap-4.6.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://www.helloxjn.com/static/css/index.1.0.17.min.css">
<link rel="stylesheet" href="https://www.helloxjn.com/static/iconfont/iconfont.1.0.2.css">
<link rel="stylesheet" href="https://www.helloxjn.com/static/css/notes.1.0.0.min.css">
<link rel="stylesheet" href="https://www.helloxjn.com/static/css/index-mobile.1.0.20.min.css">
<link rel="stylesheet" href="/static/css/index.1.0.17.min.css">
<link rel="stylesheet" href="/static/iconfont/iconfont.1.0.2.css">
<link rel="stylesheet" href="/static/css/notes.1.0.0.min.css">
<link rel="stylesheet" href="/static/css/index-mobile.1.0.20.min.css">
</head>
<body id="page-top" class="politics_version ">
<body id="page-top" class="politics_version">
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark fixed-top " id="mainNav">
<div class="container">
<a href="javascript:void(0)" id="switch_dark" class="icon iconfont toggle toggle--on ">&#xe619;</a>
<a class="navbar-brand js-scroll-trigger" href="/">
<img class="logo img-fluid" src="https://www.helloxjn.com/static/logo/logo-8s.png" alt="" style="width: 108px;margin-left: 4px"/>
<img class="logo-dark img-fluid" src="https://www.helloxjn.com/static/logo/logo-dark-8s.png" alt="" style="width: 108px;margin-left: 4px"/>
<img class="logo img-fluid" src="/static/logo/logo-8s.png" alt="" style="width: 108px;margin-left: 4px"/>
<img class="logo-dark img-fluid" src="/static/logo/logo-dark-8s.png" alt="" style="width: 108px;margin-left: 4px"/>
</a>
<button class="navbar-toggler navbar-toggler-left " type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<i class="icon iconfont" style="font-size: 23px; line-height: 25px;">&#xe62a;</i>
@ -32,19 +32,19 @@
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item ">
<a class="nav-link js-scroll-trigger iconfont" href="/home">&#xe627;首页</a>
<a class="nav-link js-scroll-trigger iconfont" href="/home">&#xe627;首页</a>
</li>
<li class="nav-item active">
<a class="nav-link js-scroll-trigger iconfont" href="/notes">&#xe635;笔记</a>
<a class="nav-link js-scroll-trigger iconfont" href="/notes">&#xe635;笔记</a>
</li>
<li class="nav-item ">
<a class="nav-link js-scroll-trigger iconfont" href="/opus">&#xe62d;作品</a>
<a class="nav-link js-scroll-trigger iconfont" href="/opus">&#xe62d;作品</a>
</li>
<li class="nav-item ">
<a class="nav-link js-scroll-trigger iconfont" href="/about">&#xe728;关于</a>
<a class="nav-link js-scroll-trigger iconfont" href="/about">&#xe728;关于</a>
</li>
<li class="nav-item ">
<a class="nav-link js-scroll-trigger iconfont" href="/settings">&#xe639;管理</a>
<a class="nav-link js-scroll-trigger iconfont" href="/settings">&#xe639;管理</a>
</li>
</ul>
</div>
@ -286,24 +286,24 @@
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://element.eleme.cn/#/zh-CN/component/installation" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe601;</i>
</div>
<h2>Element UI</h2>
</div>
</a>
<a href="https://element.eleme.cn/#/zh-CN/component/installation" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe601;</i>
</div>
<h2>Element UI</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_api ">
<a href="https://docs.djangoproject.com/zh-hans/3.0/" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb7b;</i>
</div>
<h2>Django 3.0</h2>
<a href="https://docs.djangoproject.com/zh-hans/3.0/" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb7b;</i>
</div>
</a>
<h2>Django 3.0</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_api ">
<a href="https://www.django-rest-framework.org" target="_blank">
@ -326,104 +326,104 @@
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://v4.bootcss.com" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe600;</i>
</div>
<h2>Bootstrap 4</h2>
</div>
</a>
<a href="https://v4.bootcss.com" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe600;</i>
</div>
<h2>Bootstrap 4</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_api ">
<a href="https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe660;</i>
</div>
<h2>微信沙箱</h2>
</div>
</a>
<a href="https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe660;</i>
</div>
<h2>微信沙箱</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_api ">
<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe660;</i>
</div>
<h2>微信小程序</h2>
</div>
</a>
<a href="https://developers.weixin.qq.com/miniprogram/dev/framework/" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe660;</i>
</div>
<h2>微信小程序</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://www.bootcdn.cn" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe6c3;</i>
</div>
<h2>BootCDN</h2>
</div>
</a>
<a href="https://www.bootcdn.cn" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe6c3;</i>
</div>
<h2>BootCDN</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_middle ">
<a href="https://www.runoob.com/redis/redis-tutorial.html" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe61a;</i>
</div>
<h2>Redis</h2>
</div>
</a>
<a href="https://www.runoob.com/redis/redis-tutorial.html" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe61a;</i>
</div>
<h2>Redis</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_middle ">
<a href="https://www.rabbitmq.com" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xec75;</i>
</div>
<h2>RabbitMQ</h2>
</div>
</a>
<a href="https://www.rabbitmq.com" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xec75;</i>
</div>
<h2>RabbitMQ</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_middle ">
<a href="https://www.celerycn.io" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb5b;</i>
</div>
<h2>Celery</h2>
</div>
</a>
<a href="https://www.celerycn.io" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb5b;</i>
</div>
<h2>Celery</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_api ">
<a href="https://channels.readthedocs.io/en/latest/index.html" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb7b;</i>
</div>
<h2>Channels</h2>
</div>
</a>
<a href="https://channels.readthedocs.io/en/latest/index.html" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xeb7b;</i>
</div>
<h2>Channels</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://isotope.metafizzy.co" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe655;</i>
</div>
<h2>Isotope</h2>
</div>
</a>
<a href="https://isotope.metafizzy.co" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe655;</i>
</div>
<h2>Isotope</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://cn.vitejs.dev" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe8ad;</i>
</div>
<h2>Vite</h2>
</div>
</a>
<a href="https://cn.vitejs.dev" target="_blank">
<div class="services-inner-box api-single clearfix " ontouchstart="">
<div class="ser-icon">
<i class="icon iconfont">&#xe8ad;</i>
</div>
<h2>Vite</h2>
</div>
</a>
</div>
<div class="col-md-4 api-grid api_html ">
<a href="https://animate.style" target="_blank">
@ -451,58 +451,52 @@
<!-- 页脚 -->
<div class="copyrights section ">
<div class="container">
<div class="footer-distributed clearfix">
<div class="footer-left">
<span class="footer-links" style="font-size: 0">
<a class="iconfont " href="/home">&#xe627;首页<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont active" href="/notes">&#xe635;笔记<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/opus">&#xe62d;作品<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/about">&#xe728;关于<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/settings">&#xe639;管理<span class="iconfont">&#xe63b;</span></a>
<a data-toggle="modal" data-target=".bs-example-modal-sm" href="javascript:0">
<span class="iconfont">&#xe660;&#xe63b;</span>
</a>
<a href="mailto:xiang9872@gmail.com">
<span class="iconfont">&#xe60b;&nbsp;&nbsp;</span>
</a>
<input type="hidden" name="csrfmiddlewaretoken" value="5lBQ5xj5EBk5t4PIWItBy5HCG3eALtW4iuvTkcwaEKL67Xm7gEzBj0tJn3p948Wd">
</span>
</div>
<div class="footer-right">
<span class="footer-links" style="font-size: 0">
<a href="https://github.com/xiangjianan" target="_blank">@xiangjianan</a>
<span class="iconfont">&#xe63b;</span>
<a class="footer-links-gov" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=23018402000172" target="_blank"><span ><img src="/static/img/gov.png" alt=""> </span>黑公网安备 23018402000172号</a>
<span class="iconfont">&#xe63b;</span>
<a class="footer-links-gov" href="https://beian.miit.gov.cn" target="_blank">黑ICP备2021001307号-1</a>
</span>
</div>
</div>
<div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel">
<div class="modal-dialog modal-sm" style="width: 200px;" role="document">
<div class="modal-content" style="width: 200px;border-radius: 10px;border: none">
<img src="/static/img/wechat.png" style="width: 180px;margin: 10px" alt="微信:inMyLife2021">
</div>
</div>
<div class="container">
<div class="footer-distributed clearfix">
<div class="footer-left">
<span class="footer-links" style="font-size: 0">
<a class="iconfont " href="/home">&#xe627;首页<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont active" href="/notes">&#xe635;笔记<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/opus">&#xe62d;作品<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/about">&#xe728;关于<span class="iconfont">&#xe63b;</span></a>
<a class="iconfont " href="/settings">&#xe639;管理<span class="iconfont">&#xe63b;</span></a>
<a data-toggle="modal" data-target=".bs-example-modal-sm" href="javascript:0">
<span class="iconfont">&#xe660;&#xe63b;</span>
</a>
<a href="mailto:xiang9872@gmail.com">
<span class="iconfont">&#xe60b;&nbsp;&nbsp;</span>
</a>
<input type="hidden" name="csrfmiddlewaretoken" value="5lBQ5xj5EBk5t4PIWItBy5HCG3eALtW4iuvTkcwaEKL67Xm7gEzBj0tJn3p948Wd">
</span>
</div>
<div class="footer-right">
<span class="footer-links" style="font-size: 0">
<a href="https://github.com/xiangjianan" target="_blank">@xiangjianan</a>
<span class="iconfont">&#xe63b;</span>
<a class="footer-links-gov" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=23018402000172" target="_blank">备案号:黑ICP备2021001307号</a>
<span class="iconfont">&#xe63b;</span>
<a class="footer-links-gov" href="https://beian.miit.gov.cn" target="_blank">黑ICP备2021001307号-1</a>
</span>
</div>
</div>
<div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel">
<div class="modal-dialog modal-sm" style="width: 200px;" role="document">
<div class="modal-content" style="width: 200px;border-radius: 10px;border: none">
<img src="/static/img/wechat.png" style="width: 180px;margin: 10px" alt="微信:inMyLife2021">
</div>
</div>
</div>
</div>
</div>
<a href="#" id="scroll-to-top" class="dmtop global-radius" ontouchstart="">
<span class="icon iconfont" style="font-size: 23px;">&#xe626;</span>
<span class="icon iconfont" style="font-size: 23px;">&#xe626;</span>
</a>
</body>
<!-- CDN -->
<script src="/static/jquery-3.6.0/jquery.min.js"></script>
<script src="/static/bootstrap-4.6.1/js/bootstrap.min.js"></script>
<script src="https://www.helloxjn.com/static/js/index.1.0.11.min.js"></script>
<script src="https://www.helloxjn.com/static/js/notes.1.0.2.min.js"></script>
<script src="/static/js/index.1.0.11.min.js"></script>
<script src="/static/js/notes.1.0.2.min.js"></script>
<script>
console.log(`Hello, there is nothing here.`);
</script>

BIN
static/apple-touch-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

1
static/css/index-mobile.1.0.20.min.css

File diff suppressed because one or more lines are too long

1
static/css/index.1.0.17.min.css

File diff suppressed because one or more lines are too long

1
static/css/notes.1.0.0.min.css

@ -0,0 +1 @@
.api-single,.note-single{margin:25px 0 25px}#api{padding-top:0}.api-menu,.note-menu{margin-bottom:10px}.api-grid,.note-grid{padding-left:25px;padding-right:25px}

BIN
static/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

150
static/iconfont/iconfont.1.0.2.css

@ -0,0 +1,150 @@
@font-face {
font-family: "iconfont"; /* Project id 2374637 */
src: url('iconfont.1.0.2.woff2?t=1636012998858') format('woff2'),
url('iconfont.1.0.2.woff?t=1636012998858') format('woff'),
url('iconfont.1.0.2.ttf?t=1636012998858') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-jilu:before {
content: "\e66b";
}
.icon-dianzan2:before {
content: "\e602";
}
.icon-zan:before {
content: "\e61b";
}
.icon-detailscomments:before {
content: "\e618";
}
.icon-weibiaoti-:before {
content: "\e60e";
}
.icon-guanyu2:before {
content: "\e728";
}
.icon-hammer:before {
content: "\e87c";
}
.icon-ziyuan:before {
content: "\e635";
}
.icon-shezhi2:before {
content: "\e639";
}
.icon-shuju-zuopinlei:before {
content: "\e62d";
}
.icon-B:before {
content: "\e6fc";
}
.icon-zhiyuanshouye6:before {
content: "\e627";
}
.icon-redis:before {
content: "\e61a";
}
.icon-celery:before {
content: "\eb5b";
}
.icon-rabbitmq:before {
content: "\ec75";
}
.icon-youjian5:before {
content: "\e60b";
}
.icon-dingwei:before {
content: "\e656";
}
.icon-vertical_line:before {
content: "\e63b";
}
.icon-deng:before {
content: "\e619";
}
.icon-Html:before {
content: "\e696";
}
.icon-CDNjiasu:before {
content: "\e6c3";
}
.icon-iconfont:before {
content: "\e610";
}
.icon-jquery:before {
content: "\e655";
}
.icon-xiazai:before {
content: "\e601";
}
.icon-bootstrap:before {
content: "\e600";
}
.icon-API1:before {
content: "\e692";
}
.icon-vue1:before {
content: "\e8ad";
}
.icon-suanfamoxing:before {
content: "\e616";
}
.icon-django:before {
content: "\eb7b";
}
.icon-linux:before {
content: "\e63a";
}
.icon-python:before {
content: "\e68e";
}
.icon-icon_on_the_top:before {
content: "\e626";
}
.icon-weixin:before {
content: "\e660";
}
.icon-menu-fill:before {
content: "\e62a";
}

BIN
static/iconfont/iconfont.1.0.2.ttf

Binary file not shown.

BIN
static/iconfont/iconfont.1.0.2.woff

Binary file not shown.

BIN
static/iconfont/iconfont.1.0.2.woff2

Binary file not shown.

BIN
static/img/wechat.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

614
static/js/index.1.0.11.min.js

@ -0,0 +1,614 @@
!function (t, i, s) {
"use strict";
var e, n = t.document, o = t.Modernizr, r = function (t) {
return t.charAt(0).toUpperCase() + t.slice(1)
}, a = "Moz Webkit O Ms".split(" "), h = function (t) {
var i, s = n.documentElement.style;
if ("string" == typeof s[t]) return t;
t = r(t);
for (var e = 0, o = a.length; o > e; e++) if (i = a[e] + t, "string" == typeof s[i]) return i
}, l = h("transform"), u = h("transitionProperty"), c = {
csstransforms: function () {
return !!l
}, csstransforms3d: function () {
var t = !!h("perspective");
if (t) {
var s = " -o- -moz- -ms- -webkit- -khtml- ".split(" "),
e = "@media (" + s.join("transform-3d),(") + "modernizr)",
n = i("<style>" + e + "{#modernizr{height:3px}}</style>").appendTo("head"),
o = i('<div id="modernizr" />').appendTo("html");
t = 3 === o.height(), o.remove(), n.remove()
}
return t
}, csstransitions: function () {
return !!u
}
};
if (o) for (e in c) o.hasOwnProperty(e) || o.addTest(e, c[e]); else {
o = t.Modernizr = {_version: "1.6ish: miniModernizr for Isotope"};
var d, f = " ";
for (e in c) d = c[e](), o[e] = d, f += " " + (d ? "" : "no-") + e;
i("html").addClass(f)
}
if (o.csstransforms) {
var m = o.csstransforms3d ? {
translate: function (t) {
return "translate3d(" + t[0] + "px, " + t[1] + "px, 0) "
}, scale: function (t) {
return "scale3d(" + t + ", " + t + ", 1) "
}
} : {
translate: function (t) {
return "translate(" + t[0] + "px, " + t[1] + "px) "
}, scale: function (t) {
return "scale(" + t + ") "
}
}, p = function (t, s, e) {
var n, o, r = i.data(t, "isoTransform") || {}, a = {}, h = {};
a[s] = e, i.extend(r, a);
for (n in r) o = r[n], h[n] = m[n](o);
var u = h.translate || "", c = h.scale || "", d = u + c;
i.data(t, "isoTransform", r), t.style[l] = d
};
i.cssNumber.scale = !0, i.cssHooks.scale = {
set: function (t, i) {
p(t, "scale", i)
}, get: function (t, s) {
var e = i.data(t, "isoTransform");
return e && e.scale ? e.scale : 1
}
}, i.fx.step.scale = function (t) {
i.cssHooks.scale.set(t.elem, t.now + t.unit)
}, i.cssNumber.translate = !0, i.cssHooks.translate = {
set: function (t, i) {
p(t, "translate", i)
}, get: function (t, s) {
var e = i.data(t, "isoTransform");
return e && e.translate ? e.translate : [0, 0]
}
}
}
var y, g;
o.csstransitions && (y = {
WebkitTransitionProperty: "webkitTransitionEnd",
MozTransitionProperty: "transitionend",
OTransitionProperty: "oTransitionEnd otransitionend",
transitionProperty: "transitionend"
}[u], g = h("transitionDuration"));
var v, _ = i.event, A = i.event.handle ? "handle" : "dispatch";
_.special.smartresize = {
setup: function () {
i(this).bind("resize", _.special.smartresize.handler)
}, teardown: function () {
i(this).unbind("resize", _.special.smartresize.handler)
}, handler: function (t, i) {
var s = this, e = arguments;
t.type = "smartresize", v && clearTimeout(v), v = setTimeout(function () {
_[A].apply(s, e)
}, "execAsap" === i ? 0 : 100)
}
}, i.fn.smartresize = function (t) {
return t ? this.bind("smartresize", t) : this.trigger("smartresize", ["execAsap"])
}, i.Isotope = function (t, s, e) {
this.element = i(s), this._create(t), this._init(e)
};
var w = ["width", "height"], C = i(t);
i.Isotope.settings = {
resizable: !0,
layoutMode: "masonry",
containerClass: "isotope",
itemClass: "isotope-item",
hiddenClass: "isotope-hidden",
hiddenStyle: {opacity: 0, scale: .001},
visibleStyle: {opacity: 1, scale: 1},
containerStyle: {position: "relative", overflow: "hidden"},
animationEngine: "best-available",
animationOptions: {queue: !1, duration: 800},
sortBy: "original-order",
sortAscending: !0,
resizesContainer: !0,
transformsEnabled: !0,
itemPositionDataEnabled: !1
}, i.Isotope.prototype = {
_create: function (t) {
this.options = i.extend({}, i.Isotope.settings, t), this.styleQueue = [], this.elemCount = 0;
var s = this.element[0].style;
this.originalStyle = {};
var e = w.slice(0);
for (var n in this.options.containerStyle) e.push(n);
for (var o = 0, r = e.length; r > o; o++) n = e[o], this.originalStyle[n] = s[n] || "";
this.element.css(this.options.containerStyle), this._updateAnimationEngine(), this._updateUsingTransforms();
var a = {
"original-order": function (t, i) {
return i.elemCount++, i.elemCount
}, random: function () {
return Math.random()
}
};
this.options.getSortData = i.extend(this.options.getSortData, a), this.reloadItems(), this.offset = {
left: parseInt(this.element.css("padding-left") || 0, 10),
top: parseInt(this.element.css("padding-top") || 0, 10)
};
var h = this;
setTimeout(function () {
h.element.addClass(h.options.containerClass)
}, 0), this.options.resizable && C.bind("smartresize.isotope", function () {
h.resize()
}), this.element.delegate("." + this.options.hiddenClass, "click", function () {
return !1
})
}, _getAtoms: function (t) {
var i = this.options.itemSelector, s = i ? t.filter(i).add(t.find(i)) : t, e = {position: "absolute"};
return s = s.filter(function (t, i) {
return 1 === i.nodeType
}), this.usingTransforms && (e.left = 0, e.top = 0), s.css(e).addClass(this.options.itemClass), this.updateSortData(s, !0), s
}, _init: function (t) {
this.$filteredAtoms = this._filter(this.$allAtoms), this._sort(), this.reLayout(t)
}, option: function (t) {
if (i.isPlainObject(t)) {
this.options = i.extend(!0, this.options, t);
var s;
for (var e in t) s = "_update" + r(e), this[s] && this[s]()
}
}, _updateAnimationEngine: function () {
var t, i = this.options.animationEngine.toLowerCase().replace(/[ _\-]/g, "");
switch (i) {
case "css":
case "none":
t = !1;
break;
case "jquery":
t = !0;
break;
default:
t = !o.csstransitions
}
this.isUsingJQueryAnimation = t, this._updateUsingTransforms()
}, _updateTransformsEnabled: function () {
this._updateUsingTransforms()
}, _updateUsingTransforms: function () {
var t = this.usingTransforms = this.options.transformsEnabled && o.csstransforms && o.csstransitions && !this.isUsingJQueryAnimation;
t || (delete this.options.hiddenStyle.scale, delete this.options.visibleStyle.scale), this.getPositionStyles = t ? this._translate : this._positionAbs
}, _filter: function (t) {
var i = "" === this.options.filter ? "*" : this.options.filter;
if (!i) return t;
var s = this.options.hiddenClass, e = "." + s, n = t.filter(e), o = n;
if ("*" !== i) {
o = n.filter(i);
var r = t.not(e).not(i).addClass(s);
this.styleQueue.push({$el: r, style: this.options.hiddenStyle})
}
return this.styleQueue.push({$el: o, style: this.options.visibleStyle}), o.removeClass(s), t.filter(i)
}, updateSortData: function (t, s) {
var e, n, o = this, r = this.options.getSortData;
t.each(function () {
e = i(this), n = {};
for (var t in r) s || "original-order" !== t ? n[t] = r[t](e, o) : n[t] = i.data(this, "isotope-sort-data")[t];
i.data(this, "isotope-sort-data", n)
})
}, _sort: function () {
var t = this.options.sortBy, i = this._getSorter, s = this.options.sortAscending ? 1 : -1,
e = function (e, n) {
var o = i(e, t), r = i(n, t);
return o === r && "original-order" !== t && (o = i(e, "original-order"), r = i(n, "original-order")), (o > r ? 1 : r > o ? -1 : 0) * s
};
this.$filteredAtoms.sort(e)
}, _getSorter: function (t, s) {
return i.data(t, "isotope-sort-data")[s]
}, _translate: function (t, i) {
return {translate: [t, i]}
}, _positionAbs: function (t, i) {
return {left: t, top: i}
}, _pushPosition: function (t, i, s) {
i = Math.round(i + this.offset.left), s = Math.round(s + this.offset.top);
var e = this.getPositionStyles(i, s);
this.styleQueue.push({
$el: t,
style: e
}), this.options.itemPositionDataEnabled && t.data("isotope-item-position", {x: i, y: s})
}, layout: function (t, i) {
var s = this.options.layoutMode;
if (this["_" + s + "Layout"](t), this.options.resizesContainer) {
var e = this["_" + s + "GetContainerSize"]();
this.styleQueue.push({$el: this.element, style: e})
}
this._processStyleQueue(t, i), this.isLaidOut = !0
}, _processStyleQueue: function (t, s) {
var e, n, r, a, h = this.isLaidOut && this.isUsingJQueryAnimation ? "animate" : "css",
l = this.options.animationOptions, u = this.options.onLayout;
if (n = function (t, i) {
i.$el[h](i.style, l)
}, this._isInserting && this.isUsingJQueryAnimation) n = function (t, i) {
e = i.$el.hasClass("no-transition") ? "css" : h, i.$el[e](i.style, l)
}; else if (s || u || l.complete) {
var c = !1, d = [s, u, l.complete], f = this;
if (r = !0, a = function () {
if (!c) {
for (var i, s = 0, e = d.length; e > s; s++) i = d[s], "function" == typeof i && i.call(f.element, t, f);
c = !0
}
}, this.isUsingJQueryAnimation && "animate" === h) l.complete = a, r = !1; else if (o.csstransitions) {
for (var m, p = 0, v = this.styleQueue[0], _ = v && v.$el; !_ || !_.length;) {
if (m = this.styleQueue[p++], !m) return;
_ = m.$el
}
var A = parseFloat(getComputedStyle(_[0])[g]);
A > 0 && (n = function (t, i) {
i.$el[h](i.style, l).one(y, a)
}, r = !1)
}
}
i.each(this.styleQueue, n), r && a(), this.styleQueue = []
}, resize: function () {
this["_" + this.options.layoutMode + "ResizeChanged"]() && this.reLayout()
}, reLayout: function (t) {
this["_" + this.options.layoutMode + "Reset"](), this.layout(this.$filteredAtoms, t)
}, addItems: function (t, i) {
var s = this._getAtoms(t);
this.$allAtoms = this.$allAtoms.add(s), i && i(s)
}, insert: function (t, i) {
this.element.append(t);
var s = this;
this.addItems(t, function (t) {
var e = s._filter(t);
s._addHideAppended(e), s._sort(), s.reLayout(), s._revealAppended(e, i)
})
}, appended: function (t, i) {
var s = this;
this.addItems(t, function (t) {
s._addHideAppended(t), s.layout(t), s._revealAppended(t, i)
})
}, _addHideAppended: function (t) {
this.$filteredAtoms = this.$filteredAtoms.add(t), t.addClass("no-transition"), this._isInserting = !0, this.styleQueue.push({
$el: t,
style: this.options.hiddenStyle
})
}, _revealAppended: function (t, i) {
var s = this;
setTimeout(function () {
t.removeClass("no-transition"), s.styleQueue.push({
$el: t,
style: s.options.visibleStyle
}), s._isInserting = !1, s._processStyleQueue(t, i)
}, 10)
}, reloadItems: function () {
this.$allAtoms = this._getAtoms(this.element.children())
}, remove: function (t, i) {
this.$allAtoms = this.$allAtoms.not(t), this.$filteredAtoms = this.$filteredAtoms.not(t);
var s = this, e = function () {
t.remove(), i && i.call(s.element)
};
t.filter(":not(." + this.options.hiddenClass + ")").length ? (this.styleQueue.push({
$el: t,
style: this.options.hiddenStyle
}), this._sort(), this.reLayout(e)) : e()
}, shuffle: function (t) {
this.updateSortData(this.$allAtoms), this.options.sortBy = "random", this._sort(), this.reLayout(t)
}, destroy: function () {
var t = this.usingTransforms, i = this.options;
this.$allAtoms.removeClass(i.hiddenClass + " " + i.itemClass).each(function () {
var i = this.style;
i.position = "", i.top = "", i.left = "", i.opacity = "", t && (i[l] = "")
});
var s = this.element[0].style;
for (var e in this.originalStyle) s[e] = this.originalStyle[e];
this.element.unbind(".isotope").undelegate("." + i.hiddenClass, "click").removeClass(i.containerClass).removeData("isotope"), C.unbind(".isotope")
}, _getSegments: function (t) {
var i, s = this.options.layoutMode, e = t ? "rowHeight" : "columnWidth", n = t ? "height" : "width",
o = t ? "rows" : "cols", a = this.element[n](),
h = this.options[s] && this.options[s][e] || this.$filteredAtoms["outer" + r(n)](!0) || a;
i = Math.floor(a / h), i = Math.max(i, 1), this[s][o] = i, this[s][e] = h
}, _checkIfSegmentsChanged: function (t) {
var i = this.options.layoutMode, s = t ? "rows" : "cols", e = this[i][s];
return this._getSegments(t), this[i][s] !== e
}, _masonryReset: function () {
this.masonry = {}, this._getSegments();
var t = this.masonry.cols;
for (this.masonry.colYs = []; t--;) this.masonry.colYs.push(0)
}, _masonryLayout: function (t) {
var s = this, e = s.masonry;
t.each(function () {
var t = i(this), n = Math.ceil(t.outerWidth(!0) / e.columnWidth);
if (n = Math.min(n, e.cols), 1 === n) s._masonryPlaceBrick(t, e.colYs); else {
var o, r, a = e.cols + 1 - n, h = [];
for (r = 0; a > r; r++) o = e.colYs.slice(r, r + n), h[r] = Math.max.apply(Math, o);
s._masonryPlaceBrick(t, h)
}
})
}, _masonryPlaceBrick: function (t, i) {
for (var s = Math.min.apply(Math, i), e = 0, n = 0, o = i.length; o > n; n++) if (i[n] === s) {
e = n;
break
}
var r = this.masonry.columnWidth * e, a = s;
this._pushPosition(t, r, a);
var h = s + t.outerHeight(!0), l = this.masonry.cols + 1 - o;
for (n = 0; l > n; n++) this.masonry.colYs[e + n] = h
}, _masonryGetContainerSize: function () {
var t = Math.max.apply(Math, this.masonry.colYs);
return {height: t}
}, _masonryResizeChanged: function () {
return this._checkIfSegmentsChanged()
}, _fitRowsReset: function () {
this.fitRows = {x: 0, y: 0, height: 0}
}, _fitRowsLayout: function (t) {
var s = this, e = this.element.width(), n = this.fitRows;
t.each(function () {
var t = i(this), o = t.outerWidth(!0), r = t.outerHeight(!0);
0 !== n.x && o + n.x > e && (n.x = 0, n.y = n.height), s._pushPosition(t, n.x, n.y), n.height = Math.max(n.y + r, n.height), n.x += o
})
}, _fitRowsGetContainerSize: function () {
return {height: this.fitRows.height}
}, _fitRowsResizeChanged: function () {
return !0
}, _cellsByRowReset: function () {
this.cellsByRow = {index: 0}, this._getSegments(), this._getSegments(!0)
}, _cellsByRowLayout: function (t) {
var s = this, e = this.cellsByRow;
t.each(function () {
var t = i(this), n = e.index % e.cols, o = Math.floor(e.index / e.cols),
r = (n + .5) * e.columnWidth - t.outerWidth(!0) / 2,
a = (o + .5) * e.rowHeight - t.outerHeight(!0) / 2;
s._pushPosition(t, r, a), e.index++
})
}, _cellsByRowGetContainerSize: function () {
return {height: Math.ceil(this.$filteredAtoms.length / this.cellsByRow.cols) * this.cellsByRow.rowHeight + this.offset.top}
}, _cellsByRowResizeChanged: function () {
return this._checkIfSegmentsChanged()
}, _straightDownReset: function () {
this.straightDown = {y: 0}
}, _straightDownLayout: function (t) {
var s = this;
t.each(function (t) {
var e = i(this);
s._pushPosition(e, 0, s.straightDown.y), s.straightDown.y += e.outerHeight(!0)
})
}, _straightDownGetContainerSize: function () {
return {height: this.straightDown.y}
}, _straightDownResizeChanged: function () {
return !0
}, _masonryHorizontalReset: function () {
this.masonryHorizontal = {}, this._getSegments(!0);
var t = this.masonryHorizontal.rows;
for (this.masonryHorizontal.rowXs = []; t--;) this.masonryHorizontal.rowXs.push(0)
}, _masonryHorizontalLayout: function (t) {
var s = this, e = s.masonryHorizontal;
t.each(function () {
var t = i(this), n = Math.ceil(t.outerHeight(!0) / e.rowHeight);
if (n = Math.min(n, e.rows), 1 === n) s._masonryHorizontalPlaceBrick(t, e.rowXs); else {
var o, r, a = e.rows + 1 - n, h = [];
for (r = 0; a > r; r++) o = e.rowXs.slice(r, r + n), h[r] = Math.max.apply(Math, o);
s._masonryHorizontalPlaceBrick(t, h)
}
})
}, _masonryHorizontalPlaceBrick: function (t, i) {
for (var s = Math.min.apply(Math, i), e = 0, n = 0, o = i.length; o > n; n++) if (i[n] === s) {
e = n;
break
}
var r = s, a = this.masonryHorizontal.rowHeight * e;
this._pushPosition(t, r, a);
var h = s + t.outerWidth(!0), l = this.masonryHorizontal.rows + 1 - o;
for (n = 0; l > n; n++) this.masonryHorizontal.rowXs[e + n] = h
}, _masonryHorizontalGetContainerSize: function () {
var t = Math.max.apply(Math, this.masonryHorizontal.rowXs);
return {width: t}
}, _masonryHorizontalResizeChanged: function () {
return this._checkIfSegmentsChanged(!0)
}, _fitColumnsReset: function () {
this.fitColumns = {x: 0, y: 0, width: 0}
}, _fitColumnsLayout: function (t) {
var s = this, e = this.element.height(), n = this.fitColumns;
t.each(function () {
var t = i(this), o = t.outerWidth(!0), r = t.outerHeight(!0);
0 !== n.y && r + n.y > e && (n.x = n.width, n.y = 0), s._pushPosition(t, n.x, n.y), n.width = Math.max(n.x + o, n.width), n.y += r
})
}, _fitColumnsGetContainerSize: function () {
return {width: this.fitColumns.width}
}, _fitColumnsResizeChanged: function () {
return !0
}, _cellsByColumnReset: function () {
this.cellsByColumn = {index: 0}, this._getSegments(), this._getSegments(!0)
}, _cellsByColumnLayout: function (t) {
var s = this, e = this.cellsByColumn;
t.each(function () {
var t = i(this), n = Math.floor(e.index / e.rows), o = e.index % e.rows,
r = (n + .5) * e.columnWidth - t.outerWidth(!0) / 2,
a = (o + .5) * e.rowHeight - t.outerHeight(!0) / 2;
s._pushPosition(t, r, a), e.index++
})
}, _cellsByColumnGetContainerSize: function () {
return {width: Math.ceil(this.$filteredAtoms.length / this.cellsByColumn.rows) * this.cellsByColumn.columnWidth}
}, _cellsByColumnResizeChanged: function () {
return this._checkIfSegmentsChanged(!0)
}, _straightAcrossReset: function () {
this.straightAcross = {x: 0}
}, _straightAcrossLayout: function (t) {
var s = this;
t.each(function (t) {
var e = i(this);
s._pushPosition(e, s.straightAcross.x, 0), s.straightAcross.x += e.outerWidth(!0)
})
}, _straightAcrossGetContainerSize: function () {
return {width: this.straightAcross.x}
}, _straightAcrossResizeChanged: function () {
return !0
}
}, i.fn.imagesLoaded = function (t) {
function s() {
t.call(n, o)
}
function e(t) {
var n = t.target;
n.src !== a && -1 === i.inArray(n, h) && (h.push(n), --r <= 0 && (setTimeout(s), o.unbind(".imagesLoaded", e)))
}
var n = this, o = n.find("img").add(n.filter("img")), r = o.length,
a = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==", h = [];
return r || s(), o.bind("load.imagesLoaded error.imagesLoaded", e).each(function () {
var t = this.src;
this.src = a, this.src = t
}), n
};
var z = function (i) {
t.console && t.console.error(i)
};
i.fn.isotope = function (t, s) {
if ("string" == typeof t) {
var e = Array.prototype.slice.call(arguments, 1);
this.each(function () {
var s = i.data(this, "isotope");
return s ? i.isFunction(s[t]) && "_" !== t.charAt(0) ? void s[t].apply(s, e) : void z("no such method '" + t + "' for isotope instance") : void z("cannot call methods on isotope prior to initialization; attempted to call method '" + t + "'")
})
} else this.each(function () {
var e = i.data(this, "isotope");
e ? (e.option(t), e._init(s)) : i.data(this, "isotope", new i.Isotope(t, this, s))
});
return this
}
}(window, jQuery);
let $mainNav = $("#mainNav");
let $body = $("body");
let $scroll_to_top = $("#scroll-to-top");
// 页面顶部时,导航栏背景透明
let toggle_flag = true;
$('.navbar-toggler').click(() => {
let all_class = $mainNav.attr('class');
if (all_class.indexOf('navbar-shrink') === -1) {
$mainNav.addClass('navbar-shrink');
} else {
if ($mainNav.offset().top <= 10) {
$mainNav.removeClass("navbar-shrink");
}
}
toggle_flag = false;
});
// 移动端点击空白处,隐藏菜单
$body.click(() => {
$('.navbar-collapse').collapse('hide');
if (toggle_flag) { // 阻止事件冒泡
if ($mainNav.offset().top <= 10) {
$mainNav.removeClass("navbar-shrink");
}
}
toggle_flag = true;
});
// 移动端点击菜单后,隐藏菜单
$('.js-scroll-trigger').click(() => {
$('.navbar-collapse').collapse('hide');
});
// 导航栏自动隐藏
let previousTop = 0;
$(window).scroll(() => {
let currentTop = $(window).scrollTop();
if (currentTop - previousTop < -10) {
// 下划
$mainNav.removeClass("show-none");
previousTop = currentTop;
} else if (currentTop - previousTop > 10) {
// 上划
$mainNav.addClass("show-none");
$('.navbar-collapse').collapse('hide');
previousTop = currentTop;
}
if (currentTop < 60) {
// 首页常显示
$mainNav.removeClass("show-none");
}
});
// 非顶部刷新时,设置导航栏不透明
let navbarCollapse = () => {
if ($mainNav.offset().top > 10) {
$mainNav.addClass("navbar-shrink");
} else {
$mainNav.removeClass("navbar-shrink");
}
};
navbarCollapse();
$(window).scroll(navbarCollapse);
// 底部滚动
$(window).scroll(() => {
if ($(window).scrollTop() < 100) {
$scroll_to_top.removeClass('show');
} else {
$scroll_to_top.addClass('show');
}
});
$scroll_to_top.click(function (e) {
e.preventDefault()
$('html,body').animate({
scrollTop: 0
}, 700);
});
// 主题切换
let like_color = 'darkorange';
let like_color0 = '#888888';
if ($('body').hasClass('body_dark')) {
$('.article-single').addClass('body_dark');
like_color = '#68a7eb';
like_color0 = '#777777';
}
let set_light = () => {
$('.body_dark').removeClass('body_dark');
$('#logo').attr('src', 'logo/logo.png');
like_color = 'darkorange';
like_color0 = '#888888';
let headHTML = document.getElementsByTagName('head')[0].innerHTML;
headHTML = headHTML.replace(/1A1D24/, "E4EBF8");
document.getElementsByTagName('head')[0].innerHTML = headHTML;
};
let set_dark = () => {
$('#logo').attr('src', 'logo/logo-dark.png');
$('body').addClass('body_dark');
$('.section-title h3').addClass('body_dark');
$('#mainNav').addClass('body_dark');
$('#switch_dark').addClass('body_dark');
$('.navbar-toggler').addClass('body_dark');
$('.blog').addClass('body_dark');
$('.section').addClass('body_dark');
$('.section button').addClass('body_dark');
$('#home').addClass('body_dark');
$('#notes .services-inner-box').addClass('body_dark');
$('#api .services-inner-box').addClass('body_dark');
$('#opus .opus-single').addClass('body_dark');
$('#demo .demo-single').addClass('body_dark');
$('#contact .contact_form').addClass('body_dark');
$('.article-single').addClass('body_dark');
like_color = '#68a7eb';
like_color0 = '#777777';
let headHTML = document.getElementsByTagName('head')[0].innerHTML;
headHTML = headHTML.replace(/E4EBF8/, "1A1D24");
document.getElementsByTagName('head')[0].innerHTML = headHTML;
};
$('.toggle').click(function (e) {
$(this).toggleClass('toggle--on')
.toggleClass('toggle--off')
.addClass('toggle--moving');
setTimeout(() => {
$(this).removeClass('toggle--moving');
}, 200);
let is_dark = $('body').hasClass('body_dark');
$('.clock div').css('transition', 'all .3s ease-in-out');
setTimeout(() => {
$('.clock div.minutes').css('transition', 'none');
$('.clock div.hours').css('transition', 'none');
}, 400);
setTimeout(() => {
if (!is_dark) {
set_dark();
} else {
set_light();
}
}, 100);
$.ajax({
url: '/toggle_dark/',
type: 'post',
data: {
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val(),
'is_dark': is_dark,
},
success: () => {
}
})
});

614
static/js/index.js

@ -0,0 +1,614 @@
!function (t, i, s) {
"use strict";
var e, n = t.document, o = t.Modernizr, r = function (t) {
return t.charAt(0).toUpperCase() + t.slice(1)
}, a = "Moz Webkit O Ms".split(" "), h = function (t) {
var i, s = n.documentElement.style;
if ("string" == typeof s[t]) return t;
t = r(t);
for (var e = 0, o = a.length; o > e; e++) if (i = a[e] + t, "string" == typeof s[i]) return i
}, l = h("transform"), u = h("transitionProperty"), c = {
csstransforms: function () {
return !!l
}, csstransforms3d: function () {
var t = !!h("perspective");
if (t) {
var s = " -o- -moz- -ms- -webkit- -khtml- ".split(" "),
e = "@media (" + s.join("transform-3d),(") + "modernizr)",
n = i("<style>" + e + "{#modernizr{height:3px}}</style>").appendTo("head"),
o = i('<div id="modernizr" />').appendTo("html");
t = 3 === o.height(), o.remove(), n.remove()
}
return t
}, csstransitions: function () {
return !!u
}
};
if (o) for (e in c) o.hasOwnProperty(e) || o.addTest(e, c[e]); else {
o = t.Modernizr = {_version: "1.6ish: miniModernizr for Isotope"};
var d, f = " ";
for (e in c) d = c[e](), o[e] = d, f += " " + (d ? "" : "no-") + e;
i("html").addClass(f)
}
if (o.csstransforms) {
var m = o.csstransforms3d ? {
translate: function (t) {
return "translate3d(" + t[0] + "px, " + t[1] + "px, 0) "
}, scale: function (t) {
return "scale3d(" + t + ", " + t + ", 1) "
}
} : {
translate: function (t) {
return "translate(" + t[0] + "px, " + t[1] + "px) "
}, scale: function (t) {
return "scale(" + t + ") "
}
}, p = function (t, s, e) {
var n, o, r = i.data(t, "isoTransform") || {}, a = {}, h = {};
a[s] = e, i.extend(r, a);
for (n in r) o = r[n], h[n] = m[n](o);
var u = h.translate || "", c = h.scale || "", d = u + c;
i.data(t, "isoTransform", r), t.style[l] = d
};
i.cssNumber.scale = !0, i.cssHooks.scale = {
set: function (t, i) {
p(t, "scale", i)
}, get: function (t, s) {
var e = i.data(t, "isoTransform");
return e && e.scale ? e.scale : 1
}
}, i.fx.step.scale = function (t) {
i.cssHooks.scale.set(t.elem, t.now + t.unit)
}, i.cssNumber.translate = !0, i.cssHooks.translate = {
set: function (t, i) {
p(t, "translate", i)
}, get: function (t, s) {
var e = i.data(t, "isoTransform");
return e && e.translate ? e.translate : [0, 0]
}
}
}
var y, g;
o.csstransitions && (y = {
WebkitTransitionProperty: "webkitTransitionEnd",
MozTransitionProperty: "transitionend",
OTransitionProperty: "oTransitionEnd otransitionend",
transitionProperty: "transitionend"
}[u], g = h("transitionDuration"));
var v, _ = i.event, A = i.event.handle ? "handle" : "dispatch";
_.special.smartresize = {
setup: function () {
i(this).bind("resize", _.special.smartresize.handler)
}, teardown: function () {
i(this).unbind("resize", _.special.smartresize.handler)
}, handler: function (t, i) {
var s = this, e = arguments;
t.type = "smartresize", v && clearTimeout(v), v = setTimeout(function () {
_[A].apply(s, e)
}, "execAsap" === i ? 0 : 100)
}
}, i.fn.smartresize = function (t) {
return t ? this.bind("smartresize", t) : this.trigger("smartresize", ["execAsap"])
}, i.Isotope = function (t, s, e) {
this.element = i(s), this._create(t), this._init(e)
};
var w = ["width", "height"], C = i(t);
i.Isotope.settings = {
resizable: !0,
layoutMode: "masonry",
containerClass: "isotope",
itemClass: "isotope-item",
hiddenClass: "isotope-hidden",
hiddenStyle: {opacity: 0, scale: .001},
visibleStyle: {opacity: 1, scale: 1},
containerStyle: {position: "relative", overflow: "hidden"},
animationEngine: "best-available",
animationOptions: {queue: !1, duration: 800},
sortBy: "original-order",
sortAscending: !0,
resizesContainer: !0,
transformsEnabled: !0,
itemPositionDataEnabled: !1
}, i.Isotope.prototype = {
_create: function (t) {
this.options = i.extend({}, i.Isotope.settings, t), this.styleQueue = [], this.elemCount = 0;
var s = this.element[0].style;
this.originalStyle = {};
var e = w.slice(0);
for (var n in this.options.containerStyle) e.push(n);
for (var o = 0, r = e.length; r > o; o++) n = e[o], this.originalStyle[n] = s[n] || "";
this.element.css(this.options.containerStyle), this._updateAnimationEngine(), this._updateUsingTransforms();
var a = {
"original-order": function (t, i) {
return i.elemCount++, i.elemCount
}, random: function () {
return Math.random()
}
};
this.options.getSortData = i.extend(this.options.getSortData, a), this.reloadItems(), this.offset = {
left: parseInt(this.element.css("padding-left") || 0, 10),
top: parseInt(this.element.css("padding-top") || 0, 10)
};
var h = this;
setTimeout(function () {
h.element.addClass(h.options.containerClass)
}, 0), this.options.resizable && C.bind("smartresize.isotope", function () {
h.resize()
}), this.element.delegate("." + this.options.hiddenClass, "click", function () {
return !1
})
}, _getAtoms: function (t) {
var i = this.options.itemSelector, s = i ? t.filter(i).add(t.find(i)) : t, e = {position: "absolute"};
return s = s.filter(function (t, i) {
return 1 === i.nodeType
}), this.usingTransforms && (e.left = 0, e.top = 0), s.css(e).addClass(this.options.itemClass), this.updateSortData(s, !0), s
}, _init: function (t) {
this.$filteredAtoms = this._filter(this.$allAtoms), this._sort(), this.reLayout(t)
}, option: function (t) {
if (i.isPlainObject(t)) {
this.options = i.extend(!0, this.options, t);
var s;
for (var e in t) s = "_update" + r(e), this[s] && this[s]()
}
}, _updateAnimationEngine: function () {
var t, i = this.options.animationEngine.toLowerCase().replace(/[ _\-]/g, "");
switch (i) {
case "css":
case "none":
t = !1;
break;
case "jquery":
t = !0;
break;
default:
t = !o.csstransitions
}
this.isUsingJQueryAnimation = t, this._updateUsingTransforms()
}, _updateTransformsEnabled: function () {
this._updateUsingTransforms()
}, _updateUsingTransforms: function () {
var t = this.usingTransforms = this.options.transformsEnabled && o.csstransforms && o.csstransitions && !this.isUsingJQueryAnimation;
t || (delete this.options.hiddenStyle.scale, delete this.options.visibleStyle.scale), this.getPositionStyles = t ? this._translate : this._positionAbs
}, _filter: function (t) {
var i = "" === this.options.filter ? "*" : this.options.filter;
if (!i) return t;
var s = this.options.hiddenClass, e = "." + s, n = t.filter(e), o = n;
if ("*" !== i) {
o = n.filter(i);
var r = t.not(e).not(i).addClass(s);
this.styleQueue.push({$el: r, style: this.options.hiddenStyle})
}
return this.styleQueue.push({$el: o, style: this.options.visibleStyle}), o.removeClass(s), t.filter(i)
}, updateSortData: function (t, s) {
var e, n, o = this, r = this.options.getSortData;
t.each(function () {
e = i(this), n = {};
for (var t in r) s || "original-order" !== t ? n[t] = r[t](e, o) : n[t] = i.data(this, "isotope-sort-data")[t];
i.data(this, "isotope-sort-data", n)
})
}, _sort: function () {
var t = this.options.sortBy, i = this._getSorter, s = this.options.sortAscending ? 1 : -1,
e = function (e, n) {
var o = i(e, t), r = i(n, t);
return o === r && "original-order" !== t && (o = i(e, "original-order"), r = i(n, "original-order")), (o > r ? 1 : r > o ? -1 : 0) * s
};
this.$filteredAtoms.sort(e)
}, _getSorter: function (t, s) {
return i.data(t, "isotope-sort-data")[s]
}, _translate: function (t, i) {
return {translate: [t, i]}
}, _positionAbs: function (t, i) {
return {left: t, top: i}
}, _pushPosition: function (t, i, s) {
i = Math.round(i + this.offset.left), s = Math.round(s + this.offset.top);
var e = this.getPositionStyles(i, s);
this.styleQueue.push({
$el: t,
style: e
}), this.options.itemPositionDataEnabled && t.data("isotope-item-position", {x: i, y: s})
}, layout: function (t, i) {
var s = this.options.layoutMode;
if (this["_" + s + "Layout"](t), this.options.resizesContainer) {
var e = this["_" + s + "GetContainerSize"]();
this.styleQueue.push({$el: this.element, style: e})
}
this._processStyleQueue(t, i), this.isLaidOut = !0
}, _processStyleQueue: function (t, s) {
var e, n, r, a, h = this.isLaidOut && this.isUsingJQueryAnimation ? "animate" : "css",
l = this.options.animationOptions, u = this.options.onLayout;
if (n = function (t, i) {
i.$el[h](i.style, l)
}, this._isInserting && this.isUsingJQueryAnimation) n = function (t, i) {
e = i.$el.hasClass("no-transition") ? "css" : h, i.$el[e](i.style, l)
}; else if (s || u || l.complete) {
var c = !1, d = [s, u, l.complete], f = this;
if (r = !0, a = function () {
if (!c) {
for (var i, s = 0, e = d.length; e > s; s++) i = d[s], "function" == typeof i && i.call(f.element, t, f);
c = !0
}
}, this.isUsingJQueryAnimation && "animate" === h) l.complete = a, r = !1; else if (o.csstransitions) {
for (var m, p = 0, v = this.styleQueue[0], _ = v && v.$el; !_ || !_.length;) {
if (m = this.styleQueue[p++], !m) return;
_ = m.$el
}
var A = parseFloat(getComputedStyle(_[0])[g]);
A > 0 && (n = function (t, i) {
i.$el[h](i.style, l).one(y, a)
}, r = !1)
}
}
i.each(this.styleQueue, n), r && a(), this.styleQueue = []
}, resize: function () {
this["_" + this.options.layoutMode + "ResizeChanged"]() && this.reLayout()
}, reLayout: function (t) {
this["_" + this.options.layoutMode + "Reset"](), this.layout(this.$filteredAtoms, t)
}, addItems: function (t, i) {
var s = this._getAtoms(t);
this.$allAtoms = this.$allAtoms.add(s), i && i(s)
}, insert: function (t, i) {
this.element.append(t);
var s = this;
this.addItems(t, function (t) {
var e = s._filter(t);
s._addHideAppended(e), s._sort(), s.reLayout(), s._revealAppended(e, i)
})
}, appended: function (t, i) {
var s = this;
this.addItems(t, function (t) {
s._addHideAppended(t), s.layout(t), s._revealAppended(t, i)
})
}, _addHideAppended: function (t) {
this.$filteredAtoms = this.$filteredAtoms.add(t), t.addClass("no-transition"), this._isInserting = !0, this.styleQueue.push({
$el: t,
style: this.options.hiddenStyle
})
}, _revealAppended: function (t, i) {
var s = this;
setTimeout(function () {
t.removeClass("no-transition"), s.styleQueue.push({
$el: t,
style: s.options.visibleStyle
}), s._isInserting = !1, s._processStyleQueue(t, i)
}, 10)
}, reloadItems: function () {
this.$allAtoms = this._getAtoms(this.element.children())
}, remove: function (t, i) {
this.$allAtoms = this.$allAtoms.not(t), this.$filteredAtoms = this.$filteredAtoms.not(t);
var s = this, e = function () {
t.remove(), i && i.call(s.element)
};
t.filter(":not(." + this.options.hiddenClass + ")").length ? (this.styleQueue.push({
$el: t,
style: this.options.hiddenStyle
}), this._sort(), this.reLayout(e)) : e()
}, shuffle: function (t) {
this.updateSortData(this.$allAtoms), this.options.sortBy = "random", this._sort(), this.reLayout(t)
}, destroy: function () {
var t = this.usingTransforms, i = this.options;
this.$allAtoms.removeClass(i.hiddenClass + " " + i.itemClass).each(function () {
var i = this.style;
i.position = "", i.top = "", i.left = "", i.opacity = "", t && (i[l] = "")
});
var s = this.element[0].style;
for (var e in this.originalStyle) s[e] = this.originalStyle[e];
this.element.unbind(".isotope").undelegate("." + i.hiddenClass, "click").removeClass(i.containerClass).removeData("isotope"), C.unbind(".isotope")
}, _getSegments: function (t) {
var i, s = this.options.layoutMode, e = t ? "rowHeight" : "columnWidth", n = t ? "height" : "width",
o = t ? "rows" : "cols", a = this.element[n](),
h = this.options[s] && this.options[s][e] || this.$filteredAtoms["outer" + r(n)](!0) || a;
i = Math.floor(a / h), i = Math.max(i, 1), this[s][o] = i, this[s][e] = h
}, _checkIfSegmentsChanged: function (t) {
var i = this.options.layoutMode, s = t ? "rows" : "cols", e = this[i][s];
return this._getSegments(t), this[i][s] !== e
}, _masonryReset: function () {
this.masonry = {}, this._getSegments();
var t = this.masonry.cols;
for (this.masonry.colYs = []; t--;) this.masonry.colYs.push(0)
}, _masonryLayout: function (t) {
var s = this, e = s.masonry;
t.each(function () {
var t = i(this), n = Math.ceil(t.outerWidth(!0) / e.columnWidth);
if (n = Math.min(n, e.cols), 1 === n) s._masonryPlaceBrick(t, e.colYs); else {
var o, r, a = e.cols + 1 - n, h = [];
for (r = 0; a > r; r++) o = e.colYs.slice(r, r + n), h[r] = Math.max.apply(Math, o);
s._masonryPlaceBrick(t, h)
}
})
}, _masonryPlaceBrick: function (t, i) {
for (var s = Math.min.apply(Math, i), e = 0, n = 0, o = i.length; o > n; n++) if (i[n] === s) {
e = n;
break
}
var r = this.masonry.columnWidth * e, a = s;
this._pushPosition(t, r, a);
var h = s + t.outerHeight(!0), l = this.masonry.cols + 1 - o;
for (n = 0; l > n; n++) this.masonry.colYs[e + n] = h
}, _masonryGetContainerSize: function () {
var t = Math.max.apply(Math, this.masonry.colYs);
return {height: t}
}, _masonryResizeChanged: function () {
return this._checkIfSegmentsChanged()
}, _fitRowsReset: function () {
this.fitRows = {x: 0, y: 0, height: 0}
}, _fitRowsLayout: function (t) {
var s = this, e = this.element.width(), n = this.fitRows;
t.each(function () {
var t = i(this), o = t.outerWidth(!0), r = t.outerHeight(!0);
0 !== n.x && o + n.x > e && (n.x = 0, n.y = n.height), s._pushPosition(t, n.x, n.y), n.height = Math.max(n.y + r, n.height), n.x += o
})
}, _fitRowsGetContainerSize: function () {
return {height: this.fitRows.height}
}, _fitRowsResizeChanged: function () {
return !0
}, _cellsByRowReset: function () {
this.cellsByRow = {index: 0}, this._getSegments(), this._getSegments(!0)
}, _cellsByRowLayout: function (t) {
var s = this, e = this.cellsByRow;
t.each(function () {
var t = i(this), n = e.index % e.cols, o = Math.floor(e.index / e.cols),
r = (n + .5) * e.columnWidth - t.outerWidth(!0) / 2,
a = (o + .5) * e.rowHeight - t.outerHeight(!0) / 2;
s._pushPosition(t, r, a), e.index++
})
}, _cellsByRowGetContainerSize: function () {
return {height: Math.ceil(this.$filteredAtoms.length / this.cellsByRow.cols) * this.cellsByRow.rowHeight + this.offset.top}
}, _cellsByRowResizeChanged: function () {
return this._checkIfSegmentsChanged()
}, _straightDownReset: function () {
this.straightDown = {y: 0}
}, _straightDownLayout: function (t) {
var s = this;
t.each(function (t) {
var e = i(this);
s._pushPosition(e, 0, s.straightDown.y), s.straightDown.y += e.outerHeight(!0)
})
}, _straightDownGetContainerSize: function () {
return {height: this.straightDown.y}
}, _straightDownResizeChanged: function () {
return !0
}, _masonryHorizontalReset: function () {
this.masonryHorizontal = {}, this._getSegments(!0);
var t = this.masonryHorizontal.rows;
for (this.masonryHorizontal.rowXs = []; t--;) this.masonryHorizontal.rowXs.push(0)
}, _masonryHorizontalLayout: function (t) {
var s = this, e = s.masonryHorizontal;
t.each(function () {
var t = i(this), n = Math.ceil(t.outerHeight(!0) / e.rowHeight);
if (n = Math.min(n, e.rows), 1 === n) s._masonryHorizontalPlaceBrick(t, e.rowXs); else {
var o, r, a = e.rows + 1 - n, h = [];
for (r = 0; a > r; r++) o = e.rowXs.slice(r, r + n), h[r] = Math.max.apply(Math, o);
s._masonryHorizontalPlaceBrick(t, h)
}
})
}, _masonryHorizontalPlaceBrick: function (t, i) {
for (var s = Math.min.apply(Math, i), e = 0, n = 0, o = i.length; o > n; n++) if (i[n] === s) {
e = n;
break
}
var r = s, a = this.masonryHorizontal.rowHeight * e;
this._pushPosition(t, r, a);
var h = s + t.outerWidth(!0), l = this.masonryHorizontal.rows + 1 - o;
for (n = 0; l > n; n++) this.masonryHorizontal.rowXs[e + n] = h
}, _masonryHorizontalGetContainerSize: function () {
var t = Math.max.apply(Math, this.masonryHorizontal.rowXs);
return {width: t}
}, _masonryHorizontalResizeChanged: function () {
return this._checkIfSegmentsChanged(!0)
}, _fitColumnsReset: function () {
this.fitColumns = {x: 0, y: 0, width: 0}
}, _fitColumnsLayout: function (t) {
var s = this, e = this.element.height(), n = this.fitColumns;
t.each(function () {
var t = i(this), o = t.outerWidth(!0), r = t.outerHeight(!0);
0 !== n.y && r + n.y > e && (n.x = n.width, n.y = 0), s._pushPosition(t, n.x, n.y), n.width = Math.max(n.x + o, n.width), n.y += r
})
}, _fitColumnsGetContainerSize: function () {
return {width: this.fitColumns.width}
}, _fitColumnsResizeChanged: function () {
return !0
}, _cellsByColumnReset: function () {
this.cellsByColumn = {index: 0}, this._getSegments(), this._getSegments(!0)
}, _cellsByColumnLayout: function (t) {
var s = this, e = this.cellsByColumn;
t.each(function () {
var t = i(this), n = Math.floor(e.index / e.rows), o = e.index % e.rows,
r = (n + .5) * e.columnWidth - t.outerWidth(!0) / 2,
a = (o + .5) * e.rowHeight - t.outerHeight(!0) / 2;
s._pushPosition(t, r, a), e.index++
})
}, _cellsByColumnGetContainerSize: function () {
return {width: Math.ceil(this.$filteredAtoms.length / this.cellsByColumn.rows) * this.cellsByColumn.columnWidth}
}, _cellsByColumnResizeChanged: function () {
return this._checkIfSegmentsChanged(!0)
}, _straightAcrossReset: function () {
this.straightAcross = {x: 0}
}, _straightAcrossLayout: function (t) {
var s = this;
t.each(function (t) {
var e = i(this);
s._pushPosition(e, s.straightAcross.x, 0), s.straightAcross.x += e.outerWidth(!0)
})
}, _straightAcrossGetContainerSize: function () {
return {width: this.straightAcross.x}
}, _straightAcrossResizeChanged: function () {
return !0
}
}, i.fn.imagesLoaded = function (t) {
function s() {
t.call(n, o)
}
function e(t) {
var n = t.target;
n.src !== a && -1 === i.inArray(n, h) && (h.push(n), --r <= 0 && (setTimeout(s), o.unbind(".imagesLoaded", e)))
}
var n = this, o = n.find("img").add(n.filter("img")), r = o.length,
a = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==", h = [];
return r || s(), o.bind("load.imagesLoaded error.imagesLoaded", e).each(function () {
var t = this.src;
this.src = a, this.src = t
}), n
};
var z = function (i) {
t.console && t.console.error(i)
};
i.fn.isotope = function (t, s) {
if ("string" == typeof t) {
var e = Array.prototype.slice.call(arguments, 1);
this.each(function () {
var s = i.data(this, "isotope");
return s ? i.isFunction(s[t]) && "_" !== t.charAt(0) ? void s[t].apply(s, e) : void z("no such method '" + t + "' for isotope instance") : void z("cannot call methods on isotope prior to initialization; attempted to call method '" + t + "'")
})
} else this.each(function () {
var e = i.data(this, "isotope");
e ? (e.option(t), e._init(s)) : i.data(this, "isotope", new i.Isotope(t, this, s))
});
return this
}
}(window, jQuery);
let $mainNav = $("#mainNav");
let $body = $("body");
let $scroll_to_top = $("#scroll-to-top");
// 页面顶部时,导航栏背景透明
let toggle_flag = true;
$('.navbar-toggler').click(() => {
let all_class = $mainNav.attr('class');
if (all_class.indexOf('navbar-shrink') === -1) {
$mainNav.addClass('navbar-shrink');
} else {
if ($mainNav.offset().top <= 10) {
$mainNav.removeClass("navbar-shrink");
}
}
toggle_flag = false;
});
// 移动端点击空白处,隐藏菜单
$body.click(() => {
$('.navbar-collapse').collapse('hide');
if (toggle_flag) { // 阻止事件冒泡
if ($mainNav.offset().top <= 10) {
$mainNav.removeClass("navbar-shrink");
}
}
toggle_flag = true;
});
// 移动端点击菜单后,隐藏菜单
$('.js-scroll-trigger').click(() => {
$('.navbar-collapse').collapse('hide');
});
// 导航栏自动隐藏
let previousTop = 0;
$(window).scroll(() => {
let currentTop = $(window).scrollTop();
if (currentTop - previousTop < -10) {
// 下划
$mainNav.removeClass("show-none");
previousTop = currentTop;
} else if (currentTop - previousTop > 10) {
// 上划
$mainNav.addClass("show-none");
$('.navbar-collapse').collapse('hide');
previousTop = currentTop;
}
if (currentTop < 60) {
// 首页常显示
$mainNav.removeClass("show-none");
}
});
// 非顶部刷新时,设置导航栏不透明
let navbarCollapse = () => {
if ($mainNav.offset().top > 10) {
$mainNav.addClass("navbar-shrink");
} else {
$mainNav.removeClass("navbar-shrink");
}
};
navbarCollapse();
$(window).scroll(navbarCollapse);
// 底部滚动
$(window).scroll(() => {
if ($(window).scrollTop() < 100) {
$scroll_to_top.removeClass('show');
} else {
$scroll_to_top.addClass('show');
}
});
$scroll_to_top.click(function (e) {
e.preventDefault()
$('html,body').animate({
scrollTop: 0
}, 700);
});
// 主题切换
let like_color = 'darkorange';
let like_color0 = '#888888';
if ($('body').hasClass('body_dark')) {
$('.article-single').addClass('body_dark');
like_color = '#68a7eb';
like_color0 = '#777777';
}
let set_light = () => {
$('.body_dark').removeClass('body_dark');
$('#logo').attr('src', 'logo/logo.png');
like_color = 'darkorange';
like_color0 = '#888888';
let headHTML = document.getElementsByTagName('head')[0].innerHTML;
headHTML = headHTML.replace(/1A1D24/, "E4EBF8");
document.getElementsByTagName('head')[0].innerHTML = headHTML;
};
let set_dark = () => {
$('#logo').attr('src', 'logo/logo-dark.png');
$('body').addClass('body_dark');
$('.section-title h3').addClass('body_dark');
$('#mainNav').addClass('body_dark');
$('#switch_dark').addClass('body_dark');
$('.navbar-toggler').addClass('body_dark');
$('.blog').addClass('body_dark');
$('.section').addClass('body_dark');
$('.section button').addClass('body_dark');
$('#home').addClass('body_dark');
$('#notes .services-inner-box').addClass('body_dark');
$('#api .services-inner-box').addClass('body_dark');
$('#opus .opus-single').addClass('body_dark');
$('#demo .demo-single').addClass('body_dark');
$('#contact .contact_form').addClass('body_dark');
$('.article-single').addClass('body_dark');
like_color = '#68a7eb';
like_color0 = '#777777';
let headHTML = document.getElementsByTagName('head')[0].innerHTML;
headHTML = headHTML.replace(/E4EBF8/, "1A1D24");
document.getElementsByTagName('head')[0].innerHTML = headHTML;
};
$('.toggle').click(function (e) {
$(this).toggleClass('toggle--on')
.toggleClass('toggle--off')
.addClass('toggle--moving');
setTimeout(() => {
$(this).removeClass('toggle--moving');
}, 200);
let is_dark = $('body').hasClass('body_dark');
$('.clock div').css('transition', 'all .3s ease-in-out');
setTimeout(() => {
$('.clock div.minutes').css('transition', 'none');
$('.clock div.hours').css('transition', 'none');
}, 400);
setTimeout(() => {
if (!is_dark) {
set_dark();
} else {
set_light();
}
}, 100);
$.ajax({
url: '/toggle_dark/',
type: 'post',
data: {
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val(),
'is_dark': is_dark,
},
success: () => {
}
})
});

1
static/js/notes.1.0.2.min.js

@ -0,0 +1 @@
window.onresize=(()=>{$(window).width()>=768&&$(".button-group button.active").click()});let $grid_note=$(".note-list").isotope({itemSelector:".note-grid"});$(".note-menu").on("click","button",function(){$(this).addClass("active").siblings().removeClass("active");let t=$(this).attr("data-filter");$grid_note.isotope({filter:t})});let $grid_api=$(".api-list").isotope({itemSelector:".api-grid"});$(".api-menu").on("click","button",function(){$(this).addClass("active").siblings().removeClass("active");let t=$(this).attr("data-filter");$grid_api.isotope({filter:t})});

30
static/js/notes.js

@ -0,0 +1,30 @@
// 桌面端窗口自适应
window.onresize = () => {
if ($(window).width() >= 768) {
$('.button-group button.active').click();
}
};
// 笔记分类
let $grid_note = $('.note-list').isotope({
itemSelector: '.note-grid',
});
$('.note-menu').on('click', 'button', function () {
$(this).addClass('active').siblings().removeClass('active');
let filterValue = $(this).attr('data-filter');
$grid_note.isotope({
filter: filterValue,
});
});
// API分类
let $grid_api = $('.api-list').isotope({
itemSelector: '.api-grid',
});
$('.api-menu').on('click', 'button', function () {
$(this).addClass('active').siblings().removeClass('active');
let filterValue = $(this).attr('data-filter');
$grid_api.isotope({
filter: filterValue,
});
});

BIN
static/logo/logo-8s.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
static/logo/logo-dark-8s.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Loading…
Cancel
Save