-
-
-
-
-

-
-
+
+
+
+
+
+
+
+
-
+
-
-
+
+
diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png
new file mode 100644
index 0000000..bfb38e8
Binary files /dev/null and b/static/apple-touch-icon.png differ
diff --git a/static/css/index-mobile.1.0.20.min.css b/static/css/index-mobile.1.0.20.min.css
new file mode 100644
index 0000000..5b9faaa
--- /dev/null
+++ b/static/css/index-mobile.1.0.20.min.css
@@ -0,0 +1 @@
+@media only screen and (min-width:992px) and (max-width:1199px){.services-inner-box h2{left:100px}.services-inner-box{padding:5px}.services-inner-box h2{top:20px;font-size:18px}.services-inner-box p{bottom:-5px}.home-bottom div{line-height:90px;font-size:30px}.heading h1{font-size:25px}.home-bottom{height:90px}.about-img{width:90%}.demo-grid:hover .demo-title,.opus-grid:hover .opus-title{color:#4a4b65}#demo.body_dark .demo-grid:hover .demo-title,#opus.body_dark .opus-grid:hover .opus-title{color:#aaa}.like-wrapper{margin-left:63px}.article-single h2{font-size:20px!important}}@media (min-width:768px) and (max-width:991px){.services-inner-box h2{left:95px}.navbar-dark .navbar-brand{width:120px}.navbar-dark .navbar-nav .nav-link::after{display:none}.navbar-dark .navbar-toggler{color:#333;border-color:#333;-webkit-transition:all .5s;transition:all .5s}.navbar-dark.body_dark .navbar-toggler{color:#ddd;border-color:#ddd;-webkit-transition:all .5s;transition:all .5s}#about .message-box h3,.section-title h3{font-size:28px;margin:0 0 15px}#about img{margin-top:53px}.section-title p{font-size:14px}.filter-button-group button{padding:5px 10px;margin:4px 2px}.filter-button-group{text-align:center!important;margin:0}.post-box{margin-bottom:30px}.footer-distributed .footer-left{text-align:center}.toggle{margin:0!important}.heading h1{font-size:25px;letter-spacing:.15em}.heading p{font-size:14px}.section{padding:100px 0 53px}.section-title{margin-bottom:20px}.post-box .date{padding:5px 10px}body::after{background-size:auto 100%}.navbar{padding:.5rem 1rem}#mainNav .navbar-collapse{padding:0}#git{padding-bottom:20px}#contact .section-title,#git .section-title{margin-bottom:30px}.home-bottom{padding:10px 25px;margin:3px 0}.home-bottom div{line-height:80px;font-size:25px}.navbar-dark .navbar-nav .nav-item,.navbar-dark .navbar-nav .nav-item.active,.navbar-dark .navbar-nav .nav-item:hover{border-bottom:2px solid transparent!important}.heading .h1-top{margin-top:100px}.about-img{width:100%}.footer-right{float:left!important}.copyrights{padding:3px 0 0!important}.services-inner-box{padding:0;margin:20px 0 0}.ser-icon i{display:none}.services-inner-box h2{top:20px;left:20px;font-size:16px}.services-inner-box p{margin-bottom:.7rem}.footer-distributed{margin:10px 0}.footer-links a,.footer-links span{font-size:11px!important}.footer-links img{width:14px}#contact{padding:20px 0 60px}.api-menu,.note-menu{margin-bottom:15px}.api-single,.note-single{margin:12px 0 18px}body{background-size:auto 100%}.clock{top:4rem}.demo-grid:hover .demo-title,.opus-grid:hover .opus-title{color:#4a4b65}#demo.body_dark .demo-grid:hover .demo-title,#opus.body_dark .opus-grid:hover .opus-title{color:#aaa}.like-wrapper{bottom:3%;left:50%;margin-left:55px}.like{font-size:12px}.article-all{padding:0}.article-title h3{font-size:28px;margin:0 0 15px}.article-single h2{font-size:18px!important}}@media (max-width:767px){.navbar-dark .navbar-brand{width:120px}.navbar-dark .navbar-nav .nav-link::after{display:none}.navbar-dark .navbar-toggler{color:#333;border-color:#333;-webkit-transition:all .5s;transition:all .5s}.navbar-dark.body_dark .navbar-toggler{color:#ddd;border-color:#ddd;-webkit-transition:all .5s;transition:all .5s}#about .message-box h3,.section-title h3{font-size:28px;margin:0 0 15px}#about img{margin-top:20px}.section-title p{font-size:14px}.filter-button-group button{padding:5px 10px;margin:4px 2px}.filter-button-group{text-align:center!important;margin:0}.post-box{margin-bottom:30px}.footer-distributed .footer-left{text-align:center}.toggle{margin:0!important}.heading h1{font-size:25px;letter-spacing:.15em}.heading p{font-size:14px}.section{padding:100px 0 53px}.section-title{margin-bottom:20px}.post-box .date{padding:5px 10px}body::after{background-size:auto 100%}.navbar{padding:.5rem 1rem}#mainNav .navbar-collapse{padding:0}#git{padding-bottom:20px}#contact .section-title,#git .section-title{margin-bottom:30px}.home-bottom{padding:10px 25px;margin:0}.home-bottom div{line-height:80px;font-size:25px}.navbar-dark .navbar-nav .nav-item,.navbar-dark .navbar-nav .nav-item.active,.navbar-dark .navbar-nav .nav-item:hover{border-bottom:2px solid transparent!important}.heading .h1-top{margin-top:110px}.about-img{width:100%}.footer-right{float:left!important}.copyrights{padding:2px 0 0!important}.services-inner-box{padding:0;margin:20px 0 0}.services-inner-box h2{top:20px;left:100px}.services-inner-box p{margin-bottom:.7rem}.footer-distributed{margin:10px 0}.footer-links a,.footer-links span{font-size:11px!important}.footer-links img{width:14px}#contact{padding:20px 0 60px}.api-menu,.note-menu{margin-bottom:15px}.api-single,.note-single{margin:12px 0 18px}body{background-size:auto 100%}.clock{top:5rem}.demo-grid:hover .demo-title,.opus-grid:hover .opus-title{color:#4a4b65}#demo.body_dark .demo-grid:hover .demo-title,#opus.body_dark .opus-grid:hover .opus-title{color:#aaa}.like-wrapper{bottom:3%;left:50%;margin-left:55px}.like{font-size:12px}.article-all{padding:0}.article-title h3{font-size:28px;margin:0 0 15px}.article-single h2{font-size:20px!important}}@media only screen and (min-width:280px) and (max-width:599px){.navbar-dark .navbar-brand{width:120px}.navbar-dark .navbar-nav .nav-link::after{display:none}.navbar-dark .navbar-toggler{color:#333;border-color:#333;-webkit-transition:all .5s;transition:all .5s}.navbar-dark.body_dark .navbar-toggler{color:#ddd;border-color:#ddd;-webkit-transition:all .5s;transition:all .5s}#about .message-box h3,.section-title h3{font-size:28px;margin:0 0 15px}#about img{margin-top:20px}.section-title p{font-size:14px}.filter-button-group button{padding:5px 10px;margin:4px 2px}.filter-button-group{text-align:center!important;margin:0}.post-box{margin-bottom:30px}.footer-distributed .footer-left{text-align:center}.toggle{margin:0!important}.heading h1{font-size:25px;letter-spacing:.15em}.heading p{font-size:14px}.section{padding:100px 0 45px}.section-title{margin-bottom:20px}.post-box .date{padding:5px 10px}body::after{background-size:auto 100%}.navbar{padding:.5rem 1rem}#mainNav .navbar-collapse{padding:0}#git{padding-bottom:20px}#contact .section-title,#git .section-title{margin-bottom:30px}.home-bottom{height:70px;padding:10px;margin:0}.home-bottom div{line-height:50px;font-size:22px}.navbar-dark .navbar-nav .nav-item,.navbar-dark .navbar-nav .nav-item.active,.navbar-dark .navbar-nav .nav-item:hover{border-bottom:2px solid transparent!important}.heading .h1-top{margin-top:110px}.about-img{width:100%}.footer-right{float:left!important}.copyrights{padding:8px 0!important}.article-single,.services-inner-box{padding:0;margin:20px 0 0;-webkit-box-shadow:.1rem .1rem .2rem var(--greyLight-2),-.1rem -.1rem .2rem var(--white);box-shadow:.1rem .1rem .2rem var(--greyLight-2),-.1rem -.1rem .2rem var(--white)}.article-single:active,.services-inner-box:active{-webkit-box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem #fff;box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem #fff}.article-single.body_dark,.services-inner-box.body_dark{-webkit-box-shadow:.1rem .1rem .2rem rgba(0,0,0,.4),-.1rem -.1rem .2rem rgba(66,66,66,.4);box-shadow:.1rem .1rem .2rem rgba(0,0,0,.4),-.1rem -.1rem .2rem rgba(66,66,66,.4)}.article-single.body_dark:active,.services-inner-box.body_dark:active{-webkit-box-shadow:inset .1rem .1rem .2rem var(--greyDark),inset -.1rem -.1rem .2rem var(--primary-dark-2);box-shadow:inset .1rem .1rem .2rem var(--greyDark),inset -.1rem -.1rem .2rem var(--primary-dark-2)}.services-inner-box h2{top:20px;left:100px}.services-inner-box p{margin-bottom:.7rem}.footer-distributed{margin:10px 0}.footer-links a,.footer-links span{font-size:12px!important}.footer-links img{width:16px}#contact{padding:20px 0 60px}.api-menu,.note-menu{margin-bottom:15px}.api-single,.note-single{margin:12px 0 18px}body{background-size:auto 100%}.demo-grid:hover .demo-title,.opus-grid:hover .opus-title{color:#4a4b65}#demo.body_dark .demo-grid:hover .demo-title,#opus.body_dark .opus-grid:hover .opus-title{color:#aaa}.like-wrapper{bottom:6%;left:50%;margin-left:50px}.like{font-size:12px}.dmtop.show{bottom:82px}.footer-right{display:none}#about .message-box p{-o-user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-khtml-user-select:none;user-select:none}.article-single{height:80px!important;padding:10px!important;margin:10px 0 12px!important}.article-single h2{font-size:20px!important;margin-right:5px!important}.article-single p{right:20px!important;bottom:0!important;margin-bottom:10px!important}#contact .contact_form,#sendMessageButton,.body-login .btn,.checkbox__1 label,.clock,.home-bottom div{-webkit-box-shadow:.1rem .1rem .2rem var(--greyLight-2),-.1rem -.1rem .2rem var(--white);box-shadow:.1rem .1rem .2rem var(--greyLight-2),-.1rem -.1rem .2rem var(--white)}#contact.body_dark #sendMessageButton,#contact.body_dark .checkbox__1 label,#contact.body_dark .contact_form,#home.body_dark .home-bottom div,body.body_dark .btn-default,body.body_dark .clock{-webkit-box-shadow:.1rem .1rem .2rem var(--greyDark),-.1rem -.1rem .2rem var(--primary-dark);box-shadow:.1rem .1rem .2rem var(--greyDark),-.1rem -.1rem .2rem var(--primary-dark)}#contact .contact_form .form-group,#sendMessageButton:active,.body-login .btn:active,.body-login .form-group .input,.checkbox__1 input:checked~label,.clock .marker,.home-bottom div:active{-webkit-box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem var(--white);box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem var(--white)}#contact.body_dark #sendMessageButton:active,#contact.body_dark .checkbox__1 input:checked~label,#contact.body_dark .contact_form .form-group,#home.body_dark .home-bottom div:active,body.body_dark .body-login .form-group .input,body.body_dark .btn-default:active,body.body_dark .clock .marker,body.body_dark .clock .marker::after{box-shadow:inset .1rem .1rem .2rem var(--greyDark),inset -.1rem -.1rem .2rem var(--primary-dark-2)}.dmtop{-webkit-box-shadow:.1rem .1rem .2rem rgba(0,0,0,.12),-.1rem -.1rem .2rem rgba(255,255,255,.7);box-shadow:.1rem .1rem .2rem rgba(0,0,0,.12),-.1rem -.1rem .2rem rgba(255,255,255,.7)}.dmtop:active{-webkit-box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem #fff;box-shadow:inset .1rem .1rem .2rem var(--greyLight-2),inset -.1rem -.1rem .2rem #fff}}
\ No newline at end of file
diff --git a/static/css/index.1.0.17.min.css b/static/css/index.1.0.17.min.css
new file mode 100644
index 0000000..30565d6
--- /dev/null
+++ b/static/css/index.1.0.17.min.css
@@ -0,0 +1 @@
+:root{--primary-light:#8abdff;--primary:#6d5dfc;--light-navbar:#E4EBF8;--dark-navbar:#191c23;--primary-dark:#2f2f32;--primary-dark-2:#39393c;--greyLight-1:#E4EBF8;--greyLight-2:#c8d0e7;--greyLight-3:#1c1c1d;--greyDark:#091318;--greyBodyDark:#1a1d24;--a-dark-hover:#68a7eb;--white:#ffffff;--darkorange:rgb(255, 153, 0)}body{color:#999;font-size:14px;-webkit-font-smoothing:antialiased;font-family:"Microsoft Yahei Light","Microsoft Yahei",PingFangSC-Regular,Helvetica,sans-serif;line-height:1.80857;background-color:var(--greyLight-1);letter-spacing:.1em;-o-user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-khtml-user-select:none;user-select:none}#about .message-box p,.blog{-o-user-select:text;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;-khtml-user-select:text;user-select:text}#mainNav .logo,#mainNav .logo-dark,#mainNav.body_dark .logo,#mainNav.body_dark .logo-dark,#sendMessageButton,.about-img img,.btn,.btn-hover-new,.btn:hover,.checkbox__1 label,.checkbox__1 label span,.clock,.clock .marker,.clock .marker span,.clock .marker::after,.contact_form,.contact_form .form-control,.contact_form .form-group,.contact_form .input,.demo-grid:hover .demo-title,.demo-single,.demo-single:hover,.demo-title,.filter-button-group button,.footer-links span,.go-back,.heading h1,.heading h3 span,.heading h3 span:hover,.home-bottom div,.home-bottom div:hover,.like,.navbar-brand p,.navbar-dark .navbar-nav .nav-item,.navbar-dark .navbar-nav .nav-item:hover,.navbar-dark .navbar-nav .nav-link::after,.navbar.body_dark .navbar-brand p,.opus-grid:hover .opus-title,.opus-single,.opus-single:hover,.opus-title,.post-box,.post-box .post-thumb::before,.post-box:hover,.post-info span,.section,.section.body_dark .post-box .post-thumb::before,.services-inner-box,.services-inner-box i,.services-inner-box p span,.services-inner-box:hover,.text-primary,.toggle,a,body,code,h3,h3:hover,td,th{-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}a{color:#1f1f1f;text-decoration:none!important;outline:0!important}a:hover{color:var(--darkorange)}h1,h2,h3,h4,h5,h6{letter-spacing:0;font-weight:400;position:relative;padding:0 0 10px 0;font-weight:400;line-height:120%!important;color:#333;margin:0}h1{font-size:24px}h2{font-size:22px}h3{font-size:18px}h4{font-size:16px}h5{font-size:14px}h6{font-size:13px}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#212121;text-decoration:none!important;opacity:1}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{opacity:.8}li,ol,ul{margin:0;list-style:none;padding:0}img{width:100%}.navbar{background-color:rgba(0,0,0,0)}.navbar-dark{-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s}.navbar-dark .navbar-nav .nav-item{border-bottom:2px solid transparent}.navbar-dark .navbar-nav .nav-item:hover{border-bottom:2px solid #333}.navbar-dark .navbar-nav .nav-item.active{border-bottom:2px solid var(--darkorange)}.footer-links a.active,.navbar-dark .navbar-nav .nav-item.active a{color:var(--darkorange)!important}.navbar-dark .navbar-nav .nav-link{width:100%;text-align:center;color:#fff;font-size:14px;position:relative}.navbar-dark .navbar-nav .nav-link:hover{color:#fff}.navbar-dark .navbar-nav .nav-link.active{font-weight:600}.navbar-dark .navbar-nav .nav-link::after{content:'';width:0;height:3px;background:#fff;position:absolute;bottom:0;left:0;right:0;text-align:center;margin:0 auto;border-radius:0;z-index:-1}.navbar-dark .navbar-nav .nav-link.active::after{width:50%}.show-none{top:-60px}#mainNav.navbar-shrink{background-color:var(--light-navbar);-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;box-shadow:.15rem .15rem .3rem rgba(0,0,0,.08),0 0 0 transparent}#mainNav .nav-link,#mainNav .nav-link:hover{color:var(--greyBodyDark)}#mainNav.navbar-shrink .nav-link,#mainNav.navbar-shrink .nav-link:hover{color:var(--greyBodyDark)}.navbar{padding:0}#mainNav .navbar-collapse{padding:.5rem 0}button:focus{outline:0!important}.section{display:block;position:relative;overflow:hidden;padding:120px 0 88px}.section-title{display:block;position:relative;margin-bottom:30px}.section-title h3{font-size:38px;line-height:62px;margin:0 0 15px;padding:0;color:#222;text-transform:none;letter-spacing:10px}.btn-hover-new{color:#333;position:relative;background-color:#fff;overflow:hidden;padding:0 18px;display:inline-block}.sim-btn{line-height:55px;height:55px;width:90%;border-radius:.3em;text-align:center;margin-right:auto;margin-left:auto;margin-top:0;cursor:pointer}.btn-hover-new:hover{color:#fff;background-color:#333}.services-inner-box{position:relative;padding:15px;background:var(--greyLight-1);margin-bottom:30px;border-radius:1em;-webkit-box-shadow:.2rem .2rem .4rem var(--greyLight-2),-.2rem -.2rem .4rem var(--white);box-shadow:.2rem .2rem .4rem var(--greyLight-2),-.2rem -.2rem .4rem var(--white)}.article-single:active,.services-inner-box:active{-webkit-box-shadow:inset .2rem .2rem .4rem var(--greyLight-2),inset -.2rem -.2rem .4rem #fff;box-shadow:inset .2rem .2rem .4rem var(--greyLight-2),inset -.2rem -.2rem .4rem #fff}.article-single{position:relative;height:100px;margin:20px 0 20px;padding:15px;border-radius:1em;-webkit-box-shadow:.2rem .2rem .4rem var(--greyLight-2),-.2rem -.2rem .4rem var(--white);box-shadow:.2rem .2rem .4rem var(--greyLight-2),-.2rem -.2rem .4rem var(--white);-o-user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-khtml-user-select:none;user-select:none}.article-single h2{position:absolute;font-size:21px;font-weight:600;top:25px;left:30px;margin-right:20px}.ser-icon{float:left;width:90px;height:90px;text-align:center;line-height:90px}.ser-icon i{font-size:50px;color:#333}.services-inner-box h2{position:absolute;font-size:22px;font-weight:600;top:30px;left:120px;padding-right:10px}.article-single p,.services-inner-box p{color:#333;position:absolute;right:20px;bottom:0}.services-inner-box p span{color:#333}.article-single:active>h2,.services-inner-box:active>h2{color:var(--darkorange)}.isotope-item{z-index:2}.isotope-hidden.isotope-item{pointer-events:none;z-index:1}.isotope,.isotope .isotope-item{-webkit-transition-duration:.8s;-moz-transition-duration:.8s;transition-duration:.8s}.isotope{-webkit-transition-property:height,width;-moz-transition-property:height,width;transition-property:height,width}.isotope .isotope-item{-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;transition-property:transform,opacity}.filter-button-group{border-radius:0;margin:10px 0;display:inline-block}.filter-button-group button.active{color:var(--darkorange);outline:0;background:rgba(0,0,0,0);box-shadow:inset .15rem .15rem .2rem var(--greyLight-2),inset -.15rem -.15rem .2rem #fff}.filter-button-group button{border:none;color:#333;letter-spacing:1px;font-weight:600;font-size:14px;cursor:pointer;background:rgba(0,0,0,0);padding:8px 24px;margin:0 3px;border-radius:.3em;outline:0;box-shadow:.1rem .1rem .2rem var(--greyLight-2),-.1rem -.1rem .2rem var(--white)}.footer-links{list-style:none;padding:0;margin:0}.footer-links a,.footer-links span{color:#999;font-size:13px}.footer-links a.footer-links-gov{font-size:12px}.footer-links img{position:relative;width:17px;top:-1px}.footer a:hover,.footer-links a .iconfont:hover,.footer-links a:hover{color:var(--darkorange)!important}.copyrights{box-sizing:border-box;width:100%;text-align:left;padding:25px 0!important;overflow:hidden;box-shadow:0 0 0 transparent,-.2rem -.2rem .4rem rgba(255,255,255,.45)}.footer-distributed .footer-left{float:left}.footer-distributed .footer-right{float:right}.footer-distributed .footer-links{margin:0 0 10px;padding:0}.footer-distributed .footer-links a{line-height:1.8;text-decoration:none}.copyrights .modal .modal-dialog{position:fixed;left:50%;margin-left:-100px;bottom:130px}.copyrights .modal img{border-radius:.3em}.dmtop.show{bottom:85px;z-index:10}.dmtop{background-color:var(--greyLight-1);z-index:100;width:50px;height:50px;line-height:47px;position:fixed;bottom:-100px;border-radius:3px;right:50px;text-align:center;font-size:28px;color:#777!important;cursor:pointer;-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;transition:all .5s ease-in-out;box-shadow:.2rem .2rem .4rem rgba(0,0,0,.12),-.2rem -.2rem .4rem rgba(255,255,255,.7)}.dmtop:active{-webkit-box-shadow:inset .2rem .2rem .4rem var(--greyLight-2),inset -.2rem -.2rem .4rem #fff;box-shadow:inset .2rem .2rem .4rem var(--greyLight-2),inset -.2rem -.2rem .4rem #fff}.navbar-brand{width:120px;height:32px;margin:-1px 0 0;padding:0}.navbar-brand p{margin:0;padding:0 10px;text-align:center;color:#000}.toggle{position:relative;display:inline-block;width:50px;height:38px;font-size:45px!important;line-height:38px;margin-right:5px;color:var(--greyBodyDark);transition:all .5s}.toggle:hover{color:#222}#mainNav .logo,#mainNav .logo-dark,#mainNav.body_dark .logo,#mainNav.body_dark .logo-dark{position:absolute}#mainNav .logo,#mainNav.body_dark .logo-dark{opacity:1}#mainNav .logo-dark,#mainNav.body_dark .logo{opacity:0}.navbar.body_dark .navbar-brand p{color:#f2f3f4}.navbar-dark.body_dark .navbar-nav .nav-item:hover{border-bottom:2px solid #f2f3f5}.navbar-dark.body_dark .navbar-nav .nav-item.active{border-bottom:2px solid var(--a-dark-hover)}.navbar-dark.body_dark .navbar-nav .nav-item.active a,body.body_dark .footer-links a.active{color:var(--a-dark-hover)!important}.article-single.body_dark,.services-inner-box.body_dark,body.body_dark .dmtop{background-color:var(--greyBodyDark);box-shadow:.2rem .2rem .4rem rgba(0,0,0,.4),-.2rem -.2rem .4rem rgba(66,66,66,.4)}body.body_dark .dmtop{color:#999!important}.section.body_dark .post-info{background-color:#3f3f3f}#contact.body_dark .contact_form .form-control{color:#dedede;background-color:rgba(255,255,255,.99);box-shadow:0 5px 14px rgba(0,0,0,.1)}#contact.body_dark .btn-hover-new{background-color:#333}.section.body_dark .post-box{box-shadow:0 0 15px var(--greyBodyDark)}.section.body_dark .post-box:hover .post-thumb::before{opacity:.9}.section.body_dark .post-box .post-thumb::before{opacity:0}#mainNav.navbar-shrink.body_dark{background-color:var(--dark-navbar)}#mainNav.body_dark .nav-link,#mainNav.body_dark .nav-link:hover{color:#f2f3f5}#mainNav.navbar-shrink.body_dark .nav-link,#mainNav.navbar-shrink.body_dark .nav-link:hover{color:#f2f3f5}body.body_dark{background-color:var(--greyBodyDark)}#mainNav.body_dark .nav-link::after{background:#f2f3f5}#mainNav.navbar-shrink.body_dark{box-shadow:.15rem .15rem .3rem rgba(0,0,0,.38),0 0 0 transparent}#mainNav.navbar-shrink.body_dark .nav-link::after{background:#f2f3f5}.section.body_dark .btn-hover-new{color:#ddd}.section.body_dark .btn-hover-new:hover{color:#000;background-color:#eee}h2.body_dark,h3.body_dark{color:#dedede}.filter-button-group button.active.body_dark{color:var(--a-dark-hover);background:rgba(0,0,0,0);box-shadow:inset .15rem .15rem .2rem var(--greyDark),inset -.15rem -.15rem .2rem var(--primary-dark-2)}.filter-button-group button.body_dark{color:#ddd;background:rgba(166,166,166,0);box-shadow:.1rem .1rem .2rem var(--greyDark),-.1rem -.1rem .2rem var(--primary-dark)}.article-single.body_dark p,.section.body_dark .post-info span,.services-inner-box.body_dark .ser-icon i,.services-inner-box.body_dark h2,.services-inner-box.body_dark p span{color:#d0d0d0}.article-single.body_dark:active>h2,.services-inner-box.body_dark:active h2{color:var(--a-dark-hover)}.body_dark .img-fluid{opacity:.9}.article-single.body_dark:active,.services-inner-box.body_dark:active,body.body_dark .dmtop:active{-webkit-box-shadow:inset .2rem .2rem .4rem var(--greyDark),inset -.2rem -.2rem .4rem var(--primary-dark-2);box-shadow:inset .2rem .2rem .4rem var(--greyDark),inset -.2rem -.2rem .4rem var(--primary-dark-2)}.toggle.body_dark{color:#e1e1e1}.toggle.body_dark:hover{color:#f1f1f1}.copyrights.body_dark .footer a:hover,.copyrights.body_dark .footer-links a .iconfont:hover,.copyrights.body_dark .footer-links a:hover{color:var(--a-dark-hover)!important}.copyrights.body_dark .footer-links a,.copyrights.body_dark .footer-links span{color:#666}.copyrights.body_dark{box-shadow:0 0 0 transparent,-.2rem -.2rem .4rem rgba(66,66,66,.3)}
\ No newline at end of file
diff --git a/static/css/notes.1.0.0.min.css b/static/css/notes.1.0.0.min.css
new file mode 100644
index 0000000..6d0ec18
--- /dev/null
+++ b/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}
\ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..92a43ca
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/static/iconfont/iconfont.1.0.2.css b/static/iconfont/iconfont.1.0.2.css
new file mode 100644
index 0000000..8b00b0e
--- /dev/null
+++ b/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";
+}
+
diff --git a/static/iconfont/iconfont.1.0.2.ttf b/static/iconfont/iconfont.1.0.2.ttf
new file mode 100644
index 0000000..a9c8997
Binary files /dev/null and b/static/iconfont/iconfont.1.0.2.ttf differ
diff --git a/static/iconfont/iconfont.1.0.2.woff b/static/iconfont/iconfont.1.0.2.woff
new file mode 100644
index 0000000..6a60a26
Binary files /dev/null and b/static/iconfont/iconfont.1.0.2.woff differ
diff --git a/static/iconfont/iconfont.1.0.2.woff2 b/static/iconfont/iconfont.1.0.2.woff2
new file mode 100644
index 0000000..0b4d294
Binary files /dev/null and b/static/iconfont/iconfont.1.0.2.woff2 differ
diff --git a/static/img/wechat.png b/static/img/wechat.png
new file mode 100644
index 0000000..5b183c7
Binary files /dev/null and b/static/img/wechat.png differ
diff --git a/static/js/index.1.0.11.min.js b/static/js/index.1.0.11.min.js
new file mode 100644
index 0000000..9db1244
--- /dev/null
+++ b/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("").appendTo("head"),
+ o = i('
').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: () => {
+ }
+ })
+});
\ No newline at end of file
diff --git a/static/js/index.js b/static/js/index.js
new file mode 100644
index 0000000..9db1244
--- /dev/null
+++ b/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("").appendTo("head"),
+ o = i('
').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: () => {
+ }
+ })
+});
\ No newline at end of file
diff --git a/static/js/notes.1.0.2.min.js b/static/js/notes.1.0.2.min.js
new file mode 100644
index 0000000..da07201
--- /dev/null
+++ b/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})});
\ No newline at end of file
diff --git a/static/js/notes.js b/static/js/notes.js
new file mode 100644
index 0000000..73267d1
--- /dev/null
+++ b/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,
+ });
+});
+
diff --git a/static/logo/logo-8s.png b/static/logo/logo-8s.png
new file mode 100644
index 0000000..804b5d8
Binary files /dev/null and b/static/logo/logo-8s.png differ
diff --git a/static/logo/logo-dark-8s.png b/static/logo/logo-dark-8s.png
new file mode 100644
index 0000000..d91d3f1
Binary files /dev/null and b/static/logo/logo-dark-8s.png differ