├── .DS_Store ├── .gitignore ├── 404.php ├── README.md ├── archive.php ├── assets ├── .DS_Store ├── backdrop │ ├── backdrop1.js │ ├── backdrop2.js │ ├── backdrop3.js │ ├── backdrop4.js │ ├── backdrop5.js │ └── backdrop6.js ├── css │ ├── joe.archive.min.css │ ├── joe.archive.min.scss │ ├── joe.census.min.css │ ├── joe.census.min.scss │ ├── joe.global.min.css │ ├── joe.global.min.scss │ ├── joe.index.min.css │ ├── joe.index.min.scss │ ├── joe.live.min.css │ ├── joe.live.min.scss │ ├── joe.mode.min.css │ ├── joe.mode.min.scss │ ├── joe.normalize.min.css │ ├── joe.normalize.min.scss │ ├── joe.post.min.css │ ├── joe.post.min.scss │ ├── joe.responsive.min.css │ ├── joe.responsive.min.scss │ ├── joe.video.min.css │ ├── joe.video.min.scss │ ├── joe.wallpaper.min.css │ └── joe.wallpaper.min.scss ├── cursor │ ├── cursor1.js │ ├── cursor10.js │ ├── cursor11.js │ ├── cursor2.js │ ├── cursor3.js │ ├── cursor4.js │ ├── cursor5.js │ ├── cursor6.js │ ├── cursor7.js │ ├── cursor8.js │ └── cursor9.js ├── img │ ├── .DS_Store │ ├── aside_author_image.jpg │ ├── lazyload.jpg │ ├── link.png │ └── wap_aside_image.jpg ├── js │ ├── joe.archive.js │ ├── joe.archive.min.js │ ├── joe.census.js │ ├── joe.census.min.js │ ├── joe.global.js │ ├── joe.global.min.js │ ├── joe.index.js │ ├── joe.index.min.js │ ├── joe.leaving.js │ ├── joe.leaving.min.js │ ├── joe.live.js │ ├── joe.live.min.js │ ├── joe.post_page.js │ ├── joe.post_page.min.js │ ├── joe.short.js │ ├── joe.short.min.js │ ├── joe.video.js │ ├── joe.video.min.js │ ├── joe.wallpaper.js │ └── joe.wallpaper.min.js ├── json │ ├── joe.live.json │ └── joe.owo.json ├── lib │ ├── 3dtag │ │ └── 3dtag.min.js │ ├── APlayer@1.10.1 │ │ ├── APlayer.min.css │ │ └── APlayer.min.js │ ├── animate.css@4.1.1 │ │ └── animate.min.css │ ├── clipboard@2.0.11 │ │ └── clipboard.min.js │ ├── draggabilly@3.0.0 │ │ └── draggabilly.min.js │ ├── echarts@5.4.0 │ │ └── echarts.min.js │ ├── extend │ │ └── extend.min.js │ ├── fancybox@3.5.7 │ │ ├── fancybox.min.css │ │ └── fancybox.min.js │ ├── font-awesome@4.7.0 │ │ ├── FontAwesome.otf │ │ ├── font-awesome.min.css │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── jquery@3.6.1 │ │ └── jquery.min.js │ ├── lazysizes@5.3.2 │ │ └── lazysizes.min.js │ ├── prism │ │ ├── prism.min.css │ │ └── prism.min.js │ ├── qmsg │ │ ├── qmsg.min.css │ │ └── qmsg.min.js │ ├── scroll │ │ └── scroll.min.js │ ├── sketchpad │ │ └── sketchpad.min.js │ ├── smooth │ │ └── smooth.min.js │ ├── swiper@5.4.5 │ │ ├── swiper.min.css │ │ └── swiper.min.js │ └── wowjs@1.1.3 │ │ └── wow.min.js ├── owo │ ├── aru │ │ ├── E4B88DE587BAE68980E69699_2x.png │ │ ├── E4B88DE8AFB4E8AF9D_2x.png │ │ ├── E4B88DE9AB98E585B4_2x.png │ │ ├── E4B8ADE58880_2x.png │ │ ├── E4B8ADE68C87_2x.png │ │ ├── E4B8ADE69EAA_2x.png │ │ ├── E4BAB2E4BAB2_2x.png │ │ ├── E4BEBFE4BEBF_2x.png │ │ ├── E582BBE7AC91_2x.png │ │ ├── E58685E4BCA4_2x.png │ │ ├── E587BBE68E8C_2x.png │ │ ├── E58FA3E6B0B4_2x.png │ │ ├── E59090E8888C_2x.png │ │ ├── E59090E8A180E58092E59CB0_2x.png │ │ ├── E59090_2x.png │ │ ├── E591B2E78999_2x.png │ │ ├── E592BDE6B094_2x.png │ │ ├── E593ADE6B3A3_2x.png │ │ ├── E5969CE69E81E8808CE6B3A3_2x.png │ │ ├── E596B7E6B0B4_2x.png │ │ ├── E596B7E8A180_2x.png │ │ ├── E59D90E7AD89_2x.png │ │ ├── E5A4A7E59BA7_2x.png │ │ ├── E5AEB3E7BE9E_2x.png │ │ ├── E5B08FE68092_2x.png │ │ ├── E5B08FE79CBCE79D9B_2x.png │ │ ├── E5B0B4E5B0AC_2x.png │ │ ├── E5BE97E6848F_2x.png │ │ ├── E6838AE5969C_2x.png │ │ ├── E683B3E4B880E683B3_2x.png │ │ ├── E684A4E68092_2x.png │ │ ├── E68987E880B3E58589_2x.png │ │ ├── E68A95E9998D_2x.png │ │ ├── E68AA0E9BCBB_2x.png │ │ ├── E68ABDE7839F_2x.png │ │ ├── E697A0E5A588_2x.png │ │ ├── E697A0E68980E8B093_2x.png │ │ ├── E697A0E8AFAD_2x.png │ │ ├── E69A97E59CB0E8A782E5AF9F_2x.png │ │ ├── E69C9FE5BE85_2x.png │ │ ├── E6ACA2E591BC_2x.png │ │ ├── E6B197_2x.png │ │ ├── E6B7B1E6809D_2x.png │ │ ├── E78B82E6B197_2x.png │ │ ├── E78CAEE88AB1_2x.png │ │ ├── E78CAEE9BB84E7939C_2x.png │ │ ├── E79AB1E79C89_2x.png │ │ ├── E79C8BE4B88DE8A781_2x.png │ │ ├── E79C8BE783ADE997B9_2x.png │ │ ├── E882BFE58C85_2x.png │ │ ├── E884B8E7BAA2_2x.png │ │ ├── E89CA1E7839B_2x.png │ │ ├── E8A385E5A4A7E6ACBE_2x.png │ │ ├── E8A782E5AF9F_2x.png │ │ ├── E8B59EE4B880E4B8AA_2x.png │ │ ├── E982AAE681B6_2x.png │ │ ├── E99481E79C89_2x.png │ │ ├── E99481E79C90_2x.png │ │ ├── E995BFE88D89_2x.png │ │ ├── E998B4E69A97_2x.png │ │ ├── E9AB98E585B4_2x.png │ │ ├── E9BB91E7BABF_2x.png │ │ └── E9BC93E68E8C_2x.png │ └── paopao │ │ ├── E4B88DE9AB98E585B4_2x.png │ │ ├── E4B996_2x.png │ │ ├── E4BDA0E68782E79A84_2x.png │ │ ├── E4BEBFE4BEBF_2x.png │ │ ├── E586B7_2x.png │ │ ├── E58B89E5BCBA_2x.png │ │ ├── E59083E7939C_2x.png │ │ ├── E59083E7BF94_2x.png │ │ ├── E59090E8888C_2x.png │ │ ├── E59090_2x.png │ │ ├── E59180E592A9E788B9_2x.png │ │ ├── E591B5E591B5_2x.png │ │ ├── E591BC_2x.png │ │ ├── E592A6_2x.png │ │ ├── E59388E59388_2x.png │ │ ├── E5958A_2x.png │ │ ├── E596B7_2x.png │ │ ├── E5989AE7919F_2x.png │ │ ├── E5A4A7E68B87E68C87_2x.png │ │ ├── E5A4AAE5BC80E5BF83_2x.png │ │ ├── E5A4AAE998B3_2x.png │ │ ├── E5A794E5B188_2x.png │ │ ├── E5B08FE4B996_2x.png │ │ ├── E5B08FE7BAA2E884B8_2x.png │ │ ├── E5BC80E5BF83_2x.png │ │ ├── E5BCB1_2x.png │ │ ├── E5BDA9E899B9_2x.png │ │ ├── E5BF83E7A28E_2x.png │ │ ├── E68092_2x.png │ │ ├── E6838AE593AD_2x.png │ │ ├── E6838AE68190_2x.png │ │ ├── E6838AE8AEB6_2x.png │ │ ├── E68792E5BE97E79086_2x.png │ │ ├── E6898BE7BAB8_2x.png │ │ ├── E68C96E9BCBB_2x.png │ │ ├── E68D82E598B4E7AC91_2x.png │ │ ├── E6989FE6989FE69C88E4BAAE_2x.png │ │ ├── E6B197_2x.png │ │ ├── E6B299E58F91_2x.png │ │ ├── E6B3AA_2x.png │ │ ├── E6BB91E7A8BD_2x.png │ │ ├── E781AFE6B3A1_2x.png │ │ ├── E788B1E5BF83_2x.png │ │ ├── E78A80E588A9_2x.png │ │ ├── E78B82E6B197_2x.png │ │ ├── E78B97E5A4B4_2x.png │ │ ├── E78EABE791B0_2x.png │ │ ├── E7949FE6B094_2x.png │ │ ├── E79691E997AE_2x.png │ │ ├── E79C9FE6A392_2x.png │ │ ├── E79DA1E8A789_2x.png │ │ ├── E7A4BCE789A9_2x.png │ │ ├── E7AC91E5B0BF_2x.png │ │ ├── E7AC91E79CBC_2x.png │ │ ├── E7BAA2E9A286E5B7BE_2x.png │ │ ├── E8839CE588A9_2x.png │ │ ├── E88AB1E5BF83_2x.png │ │ ├── E88CB6E69DAF_2x.png │ │ ├── E88DAFE4B8B8_2x.png │ │ ├── E89B8BE7B395_2x.png │ │ ├── E89CA1E7839B_2x.png │ │ ├── E98499E8A786_2x.png │ │ ├── E985B7_2x.png │ │ ├── E985B8E788BD_2x.png │ │ ├── E992B1E5B881_2x.png │ │ ├── E992B1_2x.png │ │ ├── E998B4E999A9_2x.png │ │ ├── E99FB3E4B990_2x.png │ │ ├── E9A699E89589_2x.png │ │ ├── E9BB91E7BABF_2x.png │ │ ├── OK_2x.png │ │ ├── haha_2x.png │ │ └── what_2x.png ├── thumb │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 16.jpg │ ├── 17.jpg │ ├── 18.jpg │ ├── 19.jpg │ ├── 2.jpg │ ├── 20.jpg │ ├── 21.jpg │ ├── 22.jpg │ ├── 23.jpg │ ├── 24.jpg │ ├── 25.jpg │ ├── 26.jpg │ ├── 27.jpg │ ├── 28.jpg │ ├── 29.jpg │ ├── 3.jpg │ ├── 30.jpg │ ├── 31.jpg │ ├── 32.jpg │ ├── 33.jpg │ ├── 34.jpg │ ├── 35.jpg │ ├── 36.jpg │ ├── 37.jpg │ ├── 38.jpg │ ├── 39.jpg │ ├── 4.jpg │ ├── 40.jpg │ ├── 41.jpg │ ├── 42.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ └── 9.jpg └── typecho │ ├── config │ ├── css │ │ ├── joe.config.min.css │ │ └── joe.config.min.scss │ └── js │ │ └── joe.config.min.js │ └── write │ ├── css │ ├── joe.write.min.css │ └── joe.write.min.scss │ ├── dist │ └── index.bundle.js │ ├── js │ ├── _actions.js │ ├── _create.js │ ├── _tools.js │ └── index.js │ ├── json │ ├── character.json │ ├── emoji.json │ └── expression.json │ ├── package.json │ ├── parse │ ├── parse.js │ └── parse.min.js │ └── rollup.config.js ├── census.php ├── core ├── backup.php ├── core.php ├── factory.php ├── function.php ├── parse.php ├── phpmailer.php ├── route.php ├── short.php ├── smtp.php └── widget.php ├── friends.php ├── functions.php ├── index.php ├── leaving.php ├── library ├── player.php └── sitemap.php ├── live.php ├── package.json ├── page.php ├── post.php ├── public ├── article.php ├── aside.php ├── batten.php ├── comment.php ├── config.php ├── copyright.php ├── footer.php ├── handle.php ├── header.php ├── include.php ├── operate.php └── related.php ├── screenshot.png ├── video.php └── wallpaper.php /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Joe 2 | 3 | > 一款基于 Typecho 博客的双栏极致优化主题 4 | 5 | - QQ 交流群:1011268145 6 | - Git 仓库:https://github.com/HaoOuBa/Joe 7 | - 主题宗旨:简洁、超强、开源、精华 8 | 9 | #### 重要提醒 10 | 11 | 如果首页列表一直加载中,超过十几秒都没有出来,表示加载失败了,可以尝试下面方案解决下,如果还是不行可以联系QQ我帮你看下:2323333339 12 | 「进入后台」-「设置」-「永久链接设置」-「是否使用地址重写功能」-「不启用」 13 | 14 | #### 主题简介: 15 | 16 | 1. 整包仅 1.3Mb,却实现超强功能,极其迅速的响应(在开发时,都是使用 30000 篇文章进行开发测试) 17 | 2. 全站变量名、类名统一规范,重在方便更多人参与二开与拓展 18 | 3. 主题开箱即用,没有任何复杂的操作,无需像其他主题去特意创建个分类等。 19 | 4. 主题启用后,会置换 Typecho 的默认编辑器,采用 Joe 独家开发的编辑器 20 | 5. 主题响应式布局,不依赖任何响应式框架,采用 Joe 独家响应式 21 | 6. 主题在一切可能暴露的接口上,屏蔽 sql 注入、xss 攻击风险,提供安全保障 22 | 7. 内置超强视频功能、包含直播功能、全网影视功能、文章内插入视频功能 23 | 8. 主题 SEO 极致优化,Lighthouse SEO 跑分彪满 100 分 24 | 9. 主题色彩全局公用、小白轻松直接修改整站自定义主题色 25 | 10. 主题内置代码高亮、无需借助任何插件、支持 200 种语言 26 | 11. 主题首发极强画图回复功能,为你的博客带来用户互动,不再像传统博客那样,仅限文字 27 | 12. 主题内置 sitemap、百度推送、友链、回复可见等,无需依赖任何插件 28 | 29 | #### 主题开发 30 | 31 | 1. 开发时请使用 `VSCode编辑器` ,编辑器插件:`scss-to-css`(根据官方文档进行下载依赖库) 和 `minify` 32 | 2. css 代码由 scss 编译成.min.css 文件 33 | 3. js 代码由 minify 压缩成.min.js 文件 34 | 35 | #### 主题目录介绍(非实时) 36 | 37 | ├── assets 主题静态资源 38 | 39 | ├── core 主题核心文件夹 40 | 41 | ├── library 主题内集成第三方库 42 | 43 | ├── public 共用的一些模块文件 44 | 45 | ├── typecho 46 | 47 | │ ├── config 主题外观、功能设置的样式脚本目录 48 | 49 | │ └── write Joe 编辑器目录 50 | 51 | ├── 404.php 404 页面 52 | 53 | ├── archive.php 搜索页面 54 | 55 | ├── friends.php 友情链接页面 56 | 57 | ├── functions.php 主题的外观、功能设置 58 | 59 | ├── index.php 博客首页页面 60 | 61 | ├── leaving.php 留言板页面 62 | 63 | ├── live.php 虎牙直播页面 64 | 65 | ├── package.json 主题发布至 NPM 仓库使用(勿动) 66 | 67 | ├── page.php 独立页面 68 | 69 | ├── post.php 文章页面 70 | 71 | ├── screenshot.php 主题截图图片 72 | 73 | ├── video.php 全网影视页面 74 | 75 | └── wallpaper.php 壁纸页面 76 | -------------------------------------------------------------------------------- /assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/.DS_Store -------------------------------------------------------------------------------- /assets/backdrop/backdrop1.js: -------------------------------------------------------------------------------- 1 | !function(){function e(){let e=document.getElementsByTagName("script"),t=e.length,n=e[t-1];return{length:t,z:-510,opacity:n.getAttribute("opacity")||.5,color:n.getAttribute("color")||"0,0,0",count:n.getAttribute("count")||99}}function t(){W=i.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,H=i.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}function n(){o.clearRect(0,0,W,H);var e,t,i=[x].concat(d);d.forEach(function(n){n.x+=n.xa,n.y+=n.ya,n.xa=n.xa*(n.x>W||n.x<0?-1:1),n.ya=n.ya*(n.y>H||n.y<0?-1:1),o.fillRect(n.x-.5,n.y-.5,1,1);for(let c=0;ce.max/2&&(n.x=n.x-.03*x_diff,n.y=n.y-.03*y_diff),t=(e.max-distance)/e.max,o.beginPath(),o.lineWidth=t/2,o.strokeStyle="rgba("+a.color+","+(t+.2)+")",o.moveTo(n.x,n.y),o.lineTo(e.x,e.y),o.stroke()));i.splice(i.indexOf(n),1)}),y(n)}var i=document.createElement("canvas"),o=i.getContext("2d"),a=e();i.id="c_n"+a.length,i.style.cssText="position:fixed;top:0;left:0;pointer-events:none;z-index:"+a.z+";opacity:"+a.opacity,document.getElementsByTagName("body")[0].appendChild(i),t(),window.onresize=t;var c=Math.random,d=[];for(let e=0;e5?"right":"left",i=1e3,n=200,s=0-n,e=this._width+n,a=0,r=0,l="right"===t?s:e,c=Math.round(o(0,this._height));/^(top|min)$/i.test(this._options.verticalPosition)?c=0+n:/^(middle|center)$/i.test(this._options.verticalPosition)?c=this._height/2:/^(bottom|max)$/i.test(this._options.verticalPosition)&&(c=this._height-n);for(var _=[],p=new h(l,c),d=new h(l,c),u=null,f=Math.round(o(0,360)),b=0;!(i<=0);){if(i--,a=Math.round((1*Math.random()-.2)*this._options.horizontalSpeed),r=Math.round((1*Math.random()-.5)*(.25*this._height)),u=new h,u.copy(d),"right"===t){if(u.add(a,r),d.x>=e)break}else if("left"===t&&(u.subtract(a,r),d.x<=s))break;_.push({point1:new h(p.x,p.y),point2:new h(d.x,d.y),point3:u,color:f,delay:b,dir:t,alpha:0,phase:0}),p.copy(d),d.copy(u),b+=4,f+=this._options.colorCycleSpeed}this._ribbons.push(_)},_drawRibbonSection:function(t){if(t){if(t.phase>=1&&t.alpha<=0)return!0;if(t.delay<=0){if(t.phase+=.02,t.alpha=1*Math.sin(t.phase),t.alpha=t.alpha<=0?0:t.alpha,t.alpha=t.alpha>=1?1:t.alpha,this._options.animateSections){var i=.1*Math.sin(1+t.phase*Math.PI/2);"right"===t.dir?(t.point1.add(i,0),t.point2.add(i,0),t.point3.add(i,0)):(t.point1.subtract(i,0),t.point2.subtract(i,0),t.point3.subtract(i,0)),t.point1.add(0,i),t.point2.add(0,i),t.point3.add(0,i)}}else t.delay-=.5;var n=this._options.colorSaturation,o=this._options.colorBrightness,s="hsla("+t.color+", "+n+", "+o+", "+t.alpha+" )";this._context.save(),0!==this._options.parallaxAmount&&this._context.translate(0,this._scroll*this._options.parallaxAmount),this._context.beginPath(),this._context.moveTo(t.point1.x,t.point1.y),this._context.lineTo(t.point2.x,t.point2.y),this._context.lineTo(t.point3.x,t.point3.y),this._context.fillStyle=s,this._context.fill(),this._options.strokeSize>0&&(this._context.lineWidth=this._options.strokeSize,this._context.strokeStyle=s,this._context.lineCap="round",this._context.stroke()),this._context.restore()}return!1},_onDraw:function(){for(var t=0,i=this._ribbons.length;t=s&&(this._ribbons[n]=null)}this._ribbons.length=finish+arcStagger*colors.length;let e=window.innerWidth*DPR,n=window.innerHeight*DPR;const o=.5*n/colors.length,i=e/2,r=n+o*rainbowHeight+(n-colors.length*o)/3,l=e/2+colors.length*o*2,s=n;let c=document.getElementById("rainbow").getContext("2d");c.clearRect(0,0,e,n),c.globalAlpha=1,c.lineWidth=o;for(let e=colors.length-1;e>-1;e--){const[n,d]=colors[e],h=r+e*(o/2-1),m=l-e*o/2,g=s-e*o/2,p=tau*(a-e*arcStagger)+start,u=clamp(start,tau*finish+start,p);if(c.beginPath(),c.shadowColor=n,c.strokeStyle=n,c.ellipse(i,h,m,g,0,start,u,!1),c.lineCap="round",c.stroke(),c.closePath(),t)sparkles.push(makeSparkle({cx:i,cy:h,radiusX:m,radiusY:g,endAngle:Math.random()*Math.PI+Math.PI,lineWidth:o,color:boolRandom()?"#fff":d}));else for(let a=0;a.2&&i>.2&&d.push({x:t,y:e,opacity:n-.03,rad:i-.2,color:o})}sparkles=d,t?requestAnimationFrame(function(){animate(finish+colors.length*arcStagger)}):requestAnimationFrame(function(){animate(a+inc)})}let canvasDom=document.createElement("canvas");canvasDom.setAttribute("id","rainbow"),canvasDom.setAttribute("style","z-index: -510;position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;"),document.body.appendChild(canvasDom);const DPR=window.devicePixelRatio,colors=[["#EC008C","#f957b6"],["#EF4136","#ff7972"],["yellow","#fff"],["lime","#7aff7a"],["#27AAE1","#5ec8f2"],["#662D91","#a158d8"]],tau=2*Math.PI,start=Math.PI,finish=.5,inc=.007,rainbowHeight=.5,arcStagger=.05,sparklesInPerStripe=3;let sparkles=[];const clamp=(a,t,e)=>Math.min(Math.max(a,e),t),boolRandom=()=>!Math.round(Math.random()),sizeCanvas=()=>{radius=clamp(15,50,window.innerWidth/60/DPR);const a=document.getElementById("rainbow");a.width=window.innerWidth*DPR,a.height=window.innerHeight*DPR},addRandom=function(a){return(boolRandom()?-1:1)*Math.random()*a},makeSparkle=({cx:a,cy:t,radiusX:e,radiusY:n,endAngle:o,lineWidth:i,color:r})=>({x:a+e*Math.cos(o)+addRandom(i),y:t+n*Math.sin(o)+addRandom(i),opacity:1,color:r,rad:Math.max(radius*Math.random()*DPR,15)});sizeCanvas(),requestAnimationFrame(function(){animate()}),window.addEventListener("resize",sizeCanvas); -------------------------------------------------------------------------------- /assets/backdrop/backdrop6.js: -------------------------------------------------------------------------------- 1 | !function(){function e(e,t,n){return Number(e.getAttribute(t))||n}function t(){for(r.clearRect(0,0,h,s),a=[{x:0,y:.7*s+f},{x:0,y:.7*s-f}];a[1].xs||l<0?i(e):l}var o=document.getElementsByTagName("script"),c=o[o.length-1];config={z:e(c,"zIndex",-510),a:e(c,"alpha",.5),s:e(c,"size",90)};var a,l,d=document.createElement("canvas"),r=d.getContext("2d"),g=window.devicePixelRatio||1,h=window.innerWidth,s=window.innerHeight,f=config.s,u=Math,m=0,x=2*u.PI,y=u.cos,p=u.random;d.width=h*g,d.height=s*g,r.scale(g,g),r.globalAlpha=config.a,d.style.cssText="opacity: "+config.a+";position:fixed;top:0;left:0;z-index: "+config.z+";width:100%;height:100%;pointer-events:none;",document.getElementsByTagName("body")[0].appendChild(d),document.onclick=t,document.ontouchstart=t,t()}(); -------------------------------------------------------------------------------- /assets/css/joe.archive.min.css: -------------------------------------------------------------------------------- 1 | .joe_archive{border-radius:var(--radius-wrap);padding:0 15px;background:var(--background);box-shadow:var(--box-shadow)}.joe_archive__title{display:flex;align-items:center;height:45px;line-height:45px;color:var(--main);border-bottom:1px solid var(--classC)}.joe_archive__title-icon{width:20px;height:20px;min-width:20px;min-height:20px;margin-right:5px}.joe_archive__title-title{display:flex;align-items:center}.joe_archive__title-title .muted{color:var(--theme);margin:0 5px}.joe_archive__empty{display:flex;align-items:center;justify-content:center;flex-direction:column;padding:50px 0;color:var(--routine)}.joe_archive__empty-icon{margin-bottom:30px;fill:var(--routine)} 2 | -------------------------------------------------------------------------------- /assets/css/joe.archive.min.scss: -------------------------------------------------------------------------------- 1 | /* 搜索页的样式 */ 2 | .joe_archive { 3 | border-radius: var(--radius-wrap); 4 | padding: 0 15px; 5 | background: var(--background); 6 | box-shadow: var(--box-shadow); 7 | &__title { 8 | display: flex; 9 | align-items: center; 10 | height: 45px; 11 | line-height: 45px; 12 | color: var(--main); 13 | border-bottom: 1px solid var(--classC); 14 | &-icon { 15 | width: 20px; 16 | height: 20px; 17 | min-width: 20px; 18 | min-height: 20px; 19 | margin-right: 5px; 20 | } 21 | &-title { 22 | display: flex; 23 | align-items: center; 24 | .muted { 25 | color: var(--theme); 26 | margin: 0 5px; 27 | } 28 | } 29 | } 30 | &__empty { 31 | display: flex; 32 | align-items: center; 33 | justify-content: center; 34 | flex-direction: column; 35 | padding: 50px 0; 36 | color: var(--routine); 37 | &-icon { 38 | margin-bottom: 30px; 39 | fill: var(--routine); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /assets/css/joe.census.min.css: -------------------------------------------------------------------------------- 1 | .joe_census__basic{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px;margin-bottom:15px}.joe_census__basic-item.list{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px}.joe_census__basic-item.list .list{display:flex;align-items:center;justify-content:space-between;background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-inner) var(--radius-wrap) var(--radius-wrap) var(--radius-inner);padding:15px 15px 12px}.joe_census__basic-item.list .list .count{display:flex;flex-direction:column;justify-content:space-between;height:100%}.joe_census__basic-item.list .list .count h6{font-size:12px;margin-bottom:10px;color:var(--seat)}.joe_census__basic-item.list .list .count p{font-size:28px;font-weight:700}.joe_census__basic-item.list .list .icon{fill:var(--classA)}.joe_census__basic-item.list .list:nth-child(1){border-left:5px solid #1cc88a;color:#1cc88a}.joe_census__basic-item.list .list:nth-child(2){border-left:5px solid #36b9cc;color:#36b9cc}.joe_census__basic-item.list .list:nth-child(3){border-left:5px solid #2196f3;color:#2196f3}.joe_census__basic-item.list .list:nth-child(4){border-left:5px solid #9c27b0;color:#9c27b0}.joe_census__basic-item.category{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__basic-item.category #category{height:230px}.joe_census__lately{background:var(--background);margin-bottom:15px;border-radius:var(--radius-wrap);box-shadow:var(--box-shadow)}.joe_census__lately .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classC);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__lately .content{padding:15px}.joe_census__lately .content #lately{height:300px}.joe_census__server{display:grid;grid-template-columns:repeat(2, 1fr);gap:15px;margin-bottom:15px}.joe_census__server-item{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__server-item .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classC);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__server-item .title .count{color:var(--minor);font-size:12px}.joe_census__server-item .title .count .split{margin:0 5px}.joe_census__server-item .content{padding:15px}.joe_census__server-item .content #work,.joe_census__server-item .content #flow{height:315px}.joe_census__filing{background:var(--background);box-shadow:var(--box-shadow);border-radius:var(--radius-wrap)}.joe_census__filing .title{display:flex;align-items:center;height:45px;padding:0 12px;border-bottom:1px solid var(--classC);color:var(--main);justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.joe_census__filing .content{padding:15px}.joe_census__filing .content .item{position:relative}.joe_census__filing .content .item:last-child .wrapper{padding-bottom:0}.joe_census__filing .content .item .head{position:absolute;top:14px;width:13px;height:13px;background:var(--classC);border-radius:50%}.joe_census__filing .content .item .tail{position:absolute;left:6px;top:0;width:1px;height:100%;background:var(--classC)}.joe_census__filing .content .item .wrapper{padding-left:30px;padding-bottom:15px}.joe_census__filing .content .item .wrapper .panel{position:relative;display:flex;align-items:center;justify-content:space-between;color:var(--routine);cursor:pointer;background:var(--classD);padding:10px;height:40px;border-radius:4px}.joe_census__filing .content .item .wrapper .panel svg{width:10px;height:10px;fill:var(--minor);-webkit-transform:rotate(180deg);transform:rotate(180deg);transition:-webkit-transform 0.25s;transition:transform 0.25s;transition:transform 0.25s, -webkit-transform 0.25s}.joe_census__filing .content .item .wrapper .panel.in svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.joe_census__filing .content .item .wrapper .panel::before{content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:-8px;width:0;height:0;border-right:8px solid var(--classD);border-top:8px solid transparent;border-bottom:8px solid transparent}.joe_census__filing .content .item .wrapper .panel-body{display:none;padding:15px 15px 0 15px}.joe_census__filing .content .item .wrapper .panel-body li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:15px}.joe_census__filing .content .item .wrapper .panel-body li:last-child{margin-bottom:0}.joe_census__filing .content .item .wrapper .panel-body li a{color:var(--routine)}.joe_census__filing .content .item .wrapper .panel-body li a:hover{color:var(--theme)}.joe_census__filing .content .item.load{padding-top:15px}.joe_census__filing .content .item.load .head{top:25px;background:#2db7f5}.joe_census__filing .content .item.load .button{position:relative;margin-left:30px;border:none;background:#2db7f5;color:#fff;border-radius:4px;padding:0 12px;height:34px;font-size:13px}.joe_census__filing .content .item.load .button::before{content:'';position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:-8px;width:0;height:0;border-right:8px solid #2db7f5;border-top:8px solid transparent;border-bottom:8px solid transparent} 2 | -------------------------------------------------------------------------------- /assets/css/joe.mode.min.css: -------------------------------------------------------------------------------- 1 | html{--theme: #409eff;--background: #fff;--main: #303133;--routine: #606266;--minor: #909399;--seat: #c0c4cc;--classA: #dcdfe6;--classB: #e4e7ed;--classC: #ebeef5;--classD: #f2f6fc;--radius-wrap: 8px;--radius-inner: 4px;--text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);--box-shadow: 0px 0px 20px -5px rgba(158, 158, 158, 0.22)}html[data-night='night'] body{--theme: #54b5db;--background: #232323;--main: #999;--routine: #888;--minor: #777;--seat: #666;--classA: #515253;--classB: #454545;--classC: #414243;--classD: #303030;--text-shadow: none;--box-shadow: none}html[data-night='night'] body::before{background:#121212;z-index:-500}html[data-night='night'] .joe_header__above-logo img{display:none}html[data-night='night'] .joe_header__above-logo svg{display:block}html[data-night='night'] .joe_detail__article-video .episodes .box .item:not(.active){background:var(--classC)}html[data-night='night'] .joe_detail__article blockquote{background:var(--classD);color:var(--routine);border-color:var(--classA)}html[data-night='night'] .joe_detail__article code:not([class]){background:#fdf0ec38;color:#a6aba8}html[data-night='night'] .joe_detail__article-anote{color:#ffffff9c}html[data-night='night'] .joe_detail__article-abtn{color:#ffffff9c}html[data-night='night'] .joe_detail__overdue-wrapper{background:var(--classD)} 2 | -------------------------------------------------------------------------------- /assets/css/joe.mode.min.scss: -------------------------------------------------------------------------------- 1 | /* 昼夜模式专用css */ 2 | /* 以下配色为全球公认的一套色彩值,如无必要,无需修改下方色彩值(主题色可以修改) */ 3 | html { 4 | --theme: #409eff; 5 | --background: #fff; 6 | --main: #303133; 7 | --routine: #606266; 8 | --minor: #909399; 9 | --seat: #c0c4cc; 10 | --classA: #dcdfe6; 11 | --classB: #e4e7ed; 12 | --classC: #ebeef5; 13 | --classD: #f2f6fc; 14 | --radius-wrap: 8px; 15 | --radius-inner: 4px; 16 | --text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); 17 | --box-shadow: 0px 0px 20px -5px rgba(158, 158, 158, 0.22); 18 | } 19 | 20 | /* 黑夜模式的配色方案 */ 21 | html[data-night='night'] body { 22 | --theme: #54b5db; 23 | --background: #232323; 24 | --main: #999; 25 | --routine: #888; 26 | --minor: #777; 27 | --seat: #666; 28 | --classA: #515253; 29 | --classB: #454545; 30 | --classC: #414243; 31 | --classD: #303030; 32 | --text-shadow: none; 33 | --box-shadow: none; 34 | } 35 | 36 | /* 此处用于修改黑夜模式下没有覆盖到的小地方的样式 */ 37 | html[data-night='night'] { 38 | /* 这里务必不能修改!!! */ 39 | body::before { 40 | background: #121212; 41 | z-index: -500; 42 | } 43 | .joe_header__above-logo img { 44 | display: none; 45 | } 46 | .joe_header__above-logo svg { 47 | display: block; 48 | } 49 | /* 自定义的样式,写在这个下面 */ 50 | .joe_detail__article-video .episodes .box .item:not(.active) { 51 | background: var(--classC); 52 | } 53 | .joe_detail__article blockquote { 54 | background: var(--classD); 55 | color: var(--routine); 56 | border-color: var(--classA); 57 | } 58 | .joe_detail__article code:not([class]) { 59 | background: #fdf0ec38; 60 | color: #a6aba8; 61 | } 62 | .joe_detail__article-anote { 63 | color: #ffffff9c; 64 | } 65 | .joe_detail__article-abtn { 66 | color: #ffffff9c; 67 | } 68 | .joe_detail__overdue-wrapper { 69 | background: var(--classD); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /assets/css/joe.normalize.min.css: -------------------------------------------------------------------------------- 1 | *{margin:0;padding:0;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{border-radius:4px;background:var(--seat)}::-webkit-scrollbar-track{background:transparent}::-moz-selection{color:#fff;background:var(--theme)}::selection{color:#fff;background:var(--theme)}body{font-size:14px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}body::before{content:'';position:fixed;top:0;left:0;right:0;bottom:0;z-index:-520;pointer-events:none}input[type='text']{-webkit-appearance:none;border-radius:0;font-size:13px;font-weight:500}iframe{display:block;border:none;margin:0 auto;vertical-align:middle}textarea{font-size:14px;resize:none;-webkit-appearance:none}li{list-style:none}a{text-decoration:none}h1,h2,h3,h4,h5,h6{font-weight:500}img{border:0;vertical-align:middle}img[src=''],img:not([src]){border:0;opacity:0}svg,canvas{vertical-align:middle}button{cursor:pointer;-webkit-appearance:none;font-size:13px}table{border-collapse:collapse;border-spacing:0}.joe_main{min-width:0;flex:1;padding:15px 0}.joe_container{display:flex;width:100%;margin:0 auto;padding:0 15px}@media (min-width: 576px){.joe_container{max-width:540px}}@media (min-width: 768px){.joe_container{max-width:720px}}@media (min-width: 992px){.joe_container{max-width:960px}}@media (min-width: 1200px){.joe_container{max-width:1140px}}@media (min-width: 1400px){.joe_container{max-width:1320px}} 2 | -------------------------------------------------------------------------------- /assets/css/joe.normalize.min.scss: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | outline: none; 6 | -webkit-tap-highlight-color: transparent; 7 | } 8 | 9 | ::-webkit-scrollbar { 10 | width: 8px; 11 | height: 8px; 12 | } 13 | 14 | ::-webkit-scrollbar-thumb { 15 | border-radius: 4px; 16 | background: var(--seat); 17 | } 18 | 19 | ::-webkit-scrollbar-track { 20 | background: transparent; 21 | } 22 | 23 | ::selection { 24 | color: #fff; 25 | background: var(--theme); 26 | } 27 | 28 | body { 29 | font-size: 14px; 30 | -webkit-font-smoothing: antialiased; 31 | -moz-osx-font-smoothing: grayscale; 32 | padding-bottom: constant(safe-area-inset-bottom); 33 | padding-bottom: env(safe-area-inset-bottom); 34 | } 35 | 36 | body::before { 37 | content: ''; 38 | position: fixed; 39 | top: 0; 40 | left: 0; 41 | right: 0; 42 | bottom: 0; 43 | z-index: -520; 44 | pointer-events: none; 45 | } 46 | 47 | input[type='text'] { 48 | -webkit-appearance: none; 49 | border-radius: 0; 50 | font-size: 13px; 51 | font-weight: 500; 52 | } 53 | 54 | iframe { 55 | display: block; 56 | border: none; 57 | margin: 0 auto; 58 | vertical-align: middle; 59 | } 60 | 61 | textarea { 62 | font-size: 14px; 63 | resize: none; 64 | -webkit-appearance: none; 65 | } 66 | 67 | li { 68 | list-style: none; 69 | } 70 | 71 | a { 72 | text-decoration: none; 73 | } 74 | 75 | h1, 76 | h2, 77 | h3, 78 | h4, 79 | h5, 80 | h6 { 81 | font-weight: 500; 82 | } 83 | 84 | img { 85 | border: 0; 86 | vertical-align: middle; 87 | } 88 | 89 | img[src=''], 90 | img:not([src]) { 91 | border: 0; 92 | opacity: 0; 93 | } 94 | 95 | svg, 96 | canvas { 97 | vertical-align: middle; 98 | } 99 | 100 | button { 101 | cursor: pointer; 102 | -webkit-appearance: none; 103 | font-size: 13px; 104 | } 105 | 106 | table { 107 | border-collapse: collapse; 108 | border-spacing: 0; 109 | } 110 | 111 | .joe_main { 112 | min-width: 0; 113 | flex: 1; 114 | padding: 15px 0; 115 | } 116 | 117 | .joe_container { 118 | display: flex; 119 | width: 100%; 120 | margin: 0 auto; 121 | padding: 0 15px; 122 | } 123 | 124 | @media (min-width: 576px) { 125 | .joe_container { 126 | max-width: 540px; 127 | } 128 | } 129 | @media (min-width: 768px) { 130 | .joe_container { 131 | max-width: 720px; 132 | } 133 | } 134 | @media (min-width: 992px) { 135 | .joe_container { 136 | max-width: 960px; 137 | } 138 | } 139 | @media (min-width: 1200px) { 140 | .joe_container { 141 | max-width: 1140px; 142 | } 143 | } 144 | @media (min-width: 1400px) { 145 | .joe_container { 146 | max-width: 1320px; 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /assets/css/joe.post.min.css: -------------------------------------------------------------------------------- 1 | .joe_bread{padding-top:15px}.joe_bread__bread{display:flex;align-items:center}.joe_bread__bread .line{color:var(--seat);padding:0 8px}.joe_bread__bread .item{color:var(--minor);white-space:nowrap}.joe_bread__bread .item .link{color:var(--routine);transition:color 0.35s}.joe_bread__bread .item .link:hover{color:var(--theme)}.joe_bread__bread .item .icon{width:15px;height:15px;min-width:15px;min-height:15px;fill:var(--routine);margin-right:2px}.joe_bread__bread .item:first-child{display:flex;align-items:center}.joe_post__pagination{display:flex;justify-content:space-between}.joe_post__pagination-item{margin-bottom:15px}.joe_post__pagination-item a{display:block;height:32px;line-height:32px;padding:0 15px;color:#fff;border-radius:3px;background:var(--theme);font-size:12px;box-shadow:var(--box-shadow)}.joe_post__pagination-item a:hover{-webkit-animation:pulse 1s;animation:pulse 1s;box-shadow:0 0 0 20px rgba(255,255,255,0)}.joe_post__pagination-item.next{margin-left:auto}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 var(--theme)}}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--theme)}} 2 | -------------------------------------------------------------------------------- /assets/css/joe.post.min.scss: -------------------------------------------------------------------------------- 1 | /* 文章页面的样式 */ 2 | .joe_bread { 3 | padding-top: 15px; 4 | &__bread { 5 | display: flex; 6 | align-items: center; 7 | .line { 8 | color: var(--seat); 9 | padding: 0 8px; 10 | } 11 | .item { 12 | color: var(--minor); 13 | white-space: nowrap; 14 | .link { 15 | color: var(--routine); 16 | transition: color 0.35s; 17 | &:hover { 18 | color: var(--theme); 19 | } 20 | } 21 | .icon { 22 | width: 15px; 23 | height: 15px; 24 | min-width: 15px; 25 | min-height: 15px; 26 | fill: var(--routine); 27 | margin-right: 2px; 28 | } 29 | &:first-child { 30 | display: flex; 31 | align-items: center; 32 | } 33 | } 34 | } 35 | } 36 | 37 | .joe_post { 38 | &__pagination { 39 | display: flex; 40 | justify-content: space-between; 41 | &-item { 42 | margin-bottom: 15px; 43 | a { 44 | display: block; 45 | height: 32px; 46 | line-height: 32px; 47 | padding: 0 15px; 48 | color: #fff; 49 | border-radius: 3px; 50 | background: var(--theme); 51 | font-size: 12px; 52 | box-shadow: var(--box-shadow); 53 | &:hover{ 54 | animation: pulse 1s; 55 | box-shadow: 0 0 0 20px rgba(255, 255, 255, 0); 56 | } 57 | } 58 | &.next { 59 | margin-left: auto; 60 | } 61 | } 62 | } 63 | } 64 | 65 | @keyframes pulse { 66 | 0% { 67 | box-shadow: 0 0 0 0 var(--theme); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /assets/cursor/cursor1.js: -------------------------------------------------------------------------------- 1 | "use strict";$(function(){function t(t,i){if(!(t instanceof i)){throw new TypeError("Cannot call a class as a function")}}var i=Object.assign||function(t){for(var i=1;it.area.width||i.position.y>t.area.height){return t.circles.splice(n,1)}i.move()}),0==this.circles.length&&(this.stop=!0)}},{key:"draw",value:function(){this.circles.forEach(function(t){return t.draw()})}}]),i)})();new ((function(){function i(){t(this,i),(this.computerCanvas=document.createElement("canvas")),(this.renderCanvas=document.createElement("canvas")),(this.computerContext=this.computerCanvas.getContext("2d")),(this.renderContext=this.renderCanvas.getContext("2d")),(this.globalWidth=window.innerWidth),(this.globalHeight=window.innerHeight),(this.booms=[]),(this.running=!1)}return(n(i,[{key:"handleMouseDown",value:function(t){var i=new o({origin:{x:t.clientX,y:t.clientY},context:this.computerContext,area:{width:this.globalWidth,height:this.globalHeight}});i.init(),this.booms.push(i),this.running||this.run()}},{key:"handlePageHide",value:function(){(this.booms=[]),(this.running=!1)}},{key:"init",value:function(){var t=this.renderCanvas.style;(t.position="fixed"),(t.top=t.left=0),(t.zIndex="5201314"),(t.pointerEvents="none"),(t.width=this.renderCanvas.width=this.computerCanvas.width=this.globalWidth),(t.height=this.renderCanvas.height=this.computerCanvas.height=this.globalHeight),document.body.append(this.renderCanvas),window.addEventListener("mousedown",this.handleMouseDown.bind(this)),window.addEventListener("pagehide",this.handlePageHide.bind(this))}},{key:"run",value:function(){var t=this;if(((this.running=!0),0==this.booms.length)){return(this.running=!1)}requestAnimationFrame(this.run.bind(this)),this.computerContext.clearRect(0,0,this.globalWidth,this.globalHeight),this.renderContext.clearRect(0,0,this.globalWidth,this.globalHeight),this.booms.forEach(function(i,n){if(i.stop){return t.booms.splice(n,1)}i.move(),i.draw()}),this.renderContext.drawImage(this.computerCanvas,0,0,this.globalWidth,this.globalHeight)}}]),i)})())().init()}); -------------------------------------------------------------------------------- /assets/cursor/cursor10.js: -------------------------------------------------------------------------------- 1 | $(function(){function t(t){function i(t){d=document.createElement("canvas"),f=d.getContext("2d"),d.style.top="0px",d.style.left="0px",d.style.pointerEvents="none",r?(d.style.position="absolute",u.appendChild(d),d.width=u.clientWidth,d.height=u.clientHeight):(d.style.position="fixed",document.body.appendChild(d),d.width=p,d.height=y),e(),a()}function e(){u.addEventListener("mousemove",h),u.addEventListener("touchmove",o),u.addEventListener("touchstart",o),window.addEventListener("resize",n)}function n(t){p=window.innerWidth,y=window.innerHeight,r?(d.width=u.clientWidth,d.height=u.clientHeight):(d.width=p,d.height=y)}function o(t){if(t.touches.length>0)for(let i=0;i=0;t--)g[t].lifeSpan<0&&g.splice(t,1)}function a(){l(),requestAnimationFrame(a)}function c(t,i,e){const n=Math.floor(60*Math.random()+60);this.initialLifeSpan=n,this.lifeSpan=n,this.velocity={x:(Math.random()<.5?-1:1)*(Math.random()/10),y:-1*Math.random()-.4},this.position={x:t,y:i},this.canv=e,this.baseDimension=4,this.update=function(t){this.position.x+=this.velocity.x,this.position.y+=this.velocity.y,this.velocity.x+=2*(Math.random()<.5?-1:1)/75,this.velocity.y-=Math.random()/600,this.lifeSpan--;const i=.2+(this.initialLifeSpan-this.lifeSpan)/this.initialLifeSpan;t.fillStyle="#e6f1f7",t.strokeStyle="#3a92c5",t.beginPath(),t.arc(this.position.x-this.baseDimension/2*i,this.position.y-this.baseDimension/2,this.baseDimension*i,0,2*Math.PI),t.stroke(),t.fill(),t.closePath()}}let d,f,r=t&&t.element,u=r||document.body,p=window.innerWidth,y=window.innerHeight,m={x:p/2,y:p/2},g=[],w=[];i()}new t}); -------------------------------------------------------------------------------- /assets/cursor/cursor11.js: -------------------------------------------------------------------------------- 1 | $(function(){function t(t){function e(){d=document.createElement("canvas"),r=d.getContext("2d"),d.style.top="0px",d.style.left="0px",d.style.pointerEvents="none",f?(d.style.position="absolute",u.appendChild(d),d.width=u.clientWidth,d.height=u.clientHeight):(d.style.position="fixed",document.body.appendChild(d),d.width=x,d.height=g),r.font="12px serif",r.textBaseline="middle",r.textAlign="center",p.forEach(t=>{let e=r.measureText(t),i=document.createElement("canvas"),n=i.getContext("2d");i.width=e.width,i.height=2*e.actualBoundingBoxAscent,n.textAlign="center",n.font="12px serif",n.textBaseline="middle",n.fillText(t,i.width/2,e.actualBoundingBoxAscent),w.push(i)}),i(),l()}function i(){u.addEventListener("mousemove",h),u.addEventListener("touchmove",o),u.addEventListener("touchstart",o),window.addEventListener("resize",n)}function n(t){x=window.innerWidth,g=window.innerHeight,f?(d.width=u.clientWidth,d.height=u.clientHeight):(d.width=x,d.height=g)}function o(t){if(t.touches.length>0)for(let e=0;e=0;t--)y[t].lifeSpan<0&&y.splice(t,1)}function l(){s(),requestAnimationFrame(l)}function c(t,e,i){const n=Math.floor(60*Math.random()+80);this.initialLifeSpan=n,this.lifeSpan=n,this.velocity={x:(Math.random()<.5?-1:1)*(Math.random()/2),y:1+Math.random()},this.position={x:t,y:e},this.canv=i,this.update=function(t){this.position.x+=this.velocity.x,this.position.y+=this.velocity.y,this.lifeSpan--,this.velocity.x+=2*(Math.random()<.5?-1:1)/75,this.velocity.y-=Math.random()/300;const e=Math.max(this.lifeSpan/this.initialLifeSpan,0),i=2*this.lifeSpan,n=.0174533*i;t.translate(this.position.x,this.position.y),t.rotate(n),t.drawImage(this.canv,-this.canv.width/2*e,-this.canv.height/2,this.canv.width*e,this.canv.height*e),t.rotate(-n),t.translate(-this.position.x,-this.position.y)}}let d,r,f=t&&t.element,u=f||document.body,p=["❄️"],x=window.innerWidth,g=window.innerHeight,m={x:x/2,y:x/2},y=[],w=[];e()}new t}); -------------------------------------------------------------------------------- /assets/cursor/cursor3.js: -------------------------------------------------------------------------------- 1 | $(function(){var e=0;$(document).on("click",function(t){var n=new Array("富强","民主","文明","和谐","自由","平等","公正","法治","爱国","敬业","诚信","友善"),o=$("").text(n[e]);e=(e+1)%n.length;var a=t.pageX,c=t.pageY;o.css({"z-index":5201314,top:c-20,left:a,position:"absolute",color:"var(--theme)","user-select":"none"}),$("body").append(o),o.animate({top:c-180,opacity:0},1500,function(){o.remove();});});}); -------------------------------------------------------------------------------- /assets/cursor/cursor4.js: -------------------------------------------------------------------------------- 1 | $(function(){"use strict";!function(e,t,a){function n(){for(var e=0;e{let e=v.measureText(B),i=document.createElement("canvas"),n=i.getContext("2d");i.width=e.width,i.height=e.actualBoundingBoxAscent+e.actualBoundingBoxDescent,n.fillStyle=t,n.textAlign="center",n.font="21px serif",n.textBaseline="middle",n.fillText(B,i.width/2,e.actualBoundingBoxAscent),m.push(i)}),i(),a()}function i(){u.addEventListener("mousemove",h),u.addEventListener("touchmove",o),u.addEventListener("touchstart",o),window.addEventListener("resize",n)}function n(t){f=window.innerWidth,x=window.innerHeight,r?(w.width=u.clientWidth,w.height=u.clientHeight):(w.width=f,w.height=x)}function o(t){if(t.touches.length>0)for(let e=0;e{if(r){const e=u.getBoundingClientRect();p.x=t.clientX-e.left,p.y=t.clientY-e.top}else p.x=t.clientX,p.y=t.clientY;const e=Math.hypot(p.x-g.x,p.y-g.y);e>1.5&&(s(p.x,p.y,m[Math.floor(Math.random()*d.length)]),g.x=p.x,g.y=p.y)})}function s(t,e,i){y.push(new c(t,e,i))}function l(){v.clearRect(0,0,f,x);for(let t=0;t=0;t--)y[t].lifeSpan<0&&y.splice(t,1)}function a(){l(),requestAnimationFrame(a)}function c(t,e,i){const n=Math.floor(30*Math.random()+60);this.initialLifeSpan=n,this.lifeSpan=n,this.velocity={x:(Math.random()<.5?-1:1)*(Math.random()/2),y:.7*Math.random()+.9},this.position={x:t,y:e},this.canv=i,this.update=function(t){this.position.x+=this.velocity.x,this.position.y+=this.velocity.y,this.lifeSpan--,this.velocity.y+=.02;const e=Math.max(this.lifeSpan/this.initialLifeSpan,0);t.drawImage(this.canv,this.position.x-this.canv.width/2*e,this.position.y-this.canv.height/2,this.canv.width*e,this.canv.height*e)}}let d=t&&t.colors||["#D61C59","#E7D84B","#1B8798"],r=t&&t.element,u=r||document.body,f=window.innerWidth,x=window.innerHeight;const p={x:f/2,y:f/2},g={x:f/2,y:f/2},y=[],m=[];let w,v;const B="*";e()}new t}); -------------------------------------------------------------------------------- /assets/cursor/cursor7.js: -------------------------------------------------------------------------------- 1 | $(function(){function A(A){function t(){d=document.createElement("canvas"),a=d.getContext("2d"),d.style.top="0px",d.style.left="0px",d.style.pointerEvents="none",s?(d.style.position="absolute",p.appendChild(d),d.width=p.clientWidth,d.height=p.clientHeight):(d.style.position="fixed",document.body.appendChild(d),d.width=u,d.height=m),e(),c()}function e(){p.addEventListener("mousemove",o),p.addEventListener("touchmove",n),p.addEventListener("touchstart",n),window.addEventListener("resize",i)}function i(A){u=window.innerWidth,m=window.innerHeight,s?(d.width=p.clientWidth,d.height=p.clientHeight):(d.width=u,d.height=m)}function n(A){if(A.touches.length>0)for(let t=0;t=0;A--)w[A].lifeSpan<0&&w.splice(A,1)}function c(){h(),requestAnimationFrame(c)}function l(A,t,e){const i=40;this.initialLifeSpan=i,this.lifeSpan=i,this.position={x:A,y:t},this.image=e,this.update=function(A){this.lifeSpan--;const t=Math.max(this.lifeSpan/this.initialLifeSpan,0);A.globalAlpha=t,A.drawImage(this.image,this.position.x,this.position.y)}}let d,a,s=A&&A.element,p=s||document.body,u=window.innerWidth,m=window.innerHeight,E={x:u/2,y:u/2},w=[],C=new Image;C.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAATCAYAAACk9eypAAAAAXNSR0IArs4c6QAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADKADAAQAAAABAAAAEwAAAAAChpcNAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAABqElEQVQoFY3SPUvDQBgH8BREpRHExYiDgmLFl6WC+AYmWeyLg4i7buJX8DMpOujgyxGvUYeCgzhUQUSKKLUS0+ZyptXh8Z5Ti621ekPyJHl+uftfomhaf9Ei5JyxXKfynyEA6EYcLHpwyflT958GAQ7DTABNHd8EbtDbEH2BD5QEQmi2mM8P/Iq+A0SzszEg+3sPjDnDdVEtQKQbMUidHD3xVzf6A9UDEmEm+8h9KTqTVUjT+vB53aHrCbAPiceYq1dQI1Aqv4EhMll0jzv+Y0yiRgCnLRSYyDQHVoqUXe4uKL9l+L7GXC4vkMhE6eW/AOJs9k583ORDUyXMZ8F5SVHVVnllmPNKSFagAJ5DofaqGXw/gHBYg51dIldkmknY3tguv3jOtHR4+MqAzaraJXbEhqHhcQlwGSOi5pytVQHZLN5s0WNe8HPrLYlFsO20RPHkImxsbmHdLJFI76th7Z4SeuF53hTeFLvhRCJRCTKZKxgdnRDbW+iozFJbBMw14/ElwGYc0egMBMFzT21f5Rog33Z7dX02GBm7WV5ZfT5Nn5bE3zuCDe9UxdTpNvK+5AAAAABJRU5ErkJggg==",t()}new A}); -------------------------------------------------------------------------------- /assets/cursor/cursor8.js: -------------------------------------------------------------------------------- 1 | $(function(){function t(t){function e(){a=document.createElement("canvas"),v=a.getContext("2d"),a.style.top="0px",a.style.left="0px",a.style.pointerEvents="none",w?(a.style.position="absolute",f.appendChild(a),a.width=f.clientWidth,a.height=f.clientHeight):(a.style.position="fixed",document.body.appendChild(a),a.width=M,a.height=W),v.font="16px serif",v.textBaseline="middle",v.textAlign="center";let i=v.measureText(p),t=document.createElement("canvas"),e=t.getContext("2d");t.width=i.width,t.height=2*i.actualBoundingBoxAscent,e.textAlign="center",e.font="16px serif",e.textBaseline="middle",e.fillText(p,t.width/2,i.actualBoundingBoxAscent),u=t;let o=0;for(o=0;o0)if(w){const t=f.getBoundingClientRect();L.x=i.touches[0].clientX-t.left,L.y=i.touches[0].clientY-t.top}else L.x=i.touches[0].clientX,L.y=i.touches[0].clientY}function l(i){if(w){const t=f.getBoundingClientRect();L.x=i.clientX-t.left,L.y=i.clientY-t.top}else L.x=i.clientX,L.y=i.clientY}function s(){for(a.width=a.width,q[0].position.x=L.x,q[0].position.y=L.y,i=1;i0&&y(i-1,i,t),i=e-A-1&&(q[i].velocity.y>0&&(q[i].velocity.y=H*-q[i].velocity.y),q[i].position.y=e-A-1),q[i].position.x>=n-A&&(q[i].velocity.x>0&&(q[i].velocity.x=H*-q[i].velocity.x),q[i].position.x=n-A-1),q[i].position.x<0&&(q[i].velocity.x<0&&(q[i].velocity.x=H*-q[i].velocity.x),q[i].position.x=0),q[i].draw(v)}}function h(){s(),requestAnimationFrame(h)}function d(i,t){this.X=i,this.Y=t}function y(i,t,e){let n=q[i].position.x-q[t].position.x,o=q[i].position.y-q[t].position.y,c=Math.sqrt(n*n+o*o);if(c>m){let i=X*(c-m);e.X+=n/c*i,e.Y+=o/c*i}}function x(i){this.position={x:L.x,y:L.y},this.velocity={x:0,y:0},this.canv=i,this.draw=function(i){i.drawImage(this.canv,this.position.x-this.canv.width/2,this.position.y-this.canv.height/2,this.canv.width,this.canv.height)}}let a,v,u,p=t&&t.emoji||"🤪",w=t&&t.element,f=w||document.body,r=7,g=.01,m=10,X=10,Y=1,B=50,b=10,E=.1,C=.1,A=11,H=.7,M=window.innerWidth,W=window.innerHeight,L={x:M/2,y:M/2},q=[];e()}new t}); -------------------------------------------------------------------------------- /assets/cursor/cursor9.js: -------------------------------------------------------------------------------- 1 | $(function(){function t(t){function e(){v=document.createElement("canvas"),M=v.getContext("2d"),v.style.top="0px",v.style.left="0px",v.style.pointerEvents="none",r?(v.style.position="absolute",u.appendChild(v),v.width=u.clientWidth,v.height=u.clientHeight):(v.style.position="fixed",document.body.appendChild(v),v.width=f,v.height=p),M.font="21px serif",M.textBaseline="middle",M.textAlign="center",d.forEach(t=>{let e=M.measureText(t),i=document.createElement("canvas"),n=i.getContext("2d");i.width=e.width,i.height=2*e.actualBoundingBoxAscent,n.textAlign="center",n.font="21px serif",n.textBaseline="middle",n.fillText(t,i.width/2,e.actualBoundingBoxAscent),w.push(i)}),i(),c()}function i(){u.addEventListener("mousemove",h,{passive:!0}),u.addEventListener("touchmove",o,{passive:!0}),u.addEventListener("touchstart",o,{passive:!0}),window.addEventListener("resize",n)}function n(t){f=window.innerWidth,p=window.innerHeight,r?(v.width=u.clientWidth,v.height=u.clientHeight):(v.width=f,v.height=p)}function o(t){if(t.touches.length>0)for(let e=0;e{if(r){const e=u.getBoundingClientRect();m.x=t.clientX-e.left,m.y=t.clientY-e.top}else m.x=t.clientX,m.y=t.clientY;const e=Math.hypot(m.x-x.x,m.y-x.y);e>1&&(s(m.x,m.y,w[Math.floor(Math.random()*d.length)]),x.x=m.x,x.y=m.y,y=t.timeStamp)})}function s(t,e,i){g.push(new l(t,e,i))}function a(){M.clearRect(0,0,f,p);for(let t=0;t=0;t--)g[t].lifeSpan<0&&g.splice(t,1)}function c(){a(),requestAnimationFrame(c)}function l(t,e,i){const n=Math.floor(60*Math.random()+80);this.initialLifeSpan=n,this.lifeSpan=n,this.velocity={x:(Math.random()<.5?-1:1)*(Math.random()/2),y:.4*Math.random()+.8},this.position={x:t,y:e},this.canv=i,this.update=function(t){this.position.x+=this.velocity.x,this.position.y+=this.velocity.y,this.lifeSpan--,this.velocity.y+=.05;const e=Math.max(this.lifeSpan/this.initialLifeSpan,0);t.drawImage(this.canv,this.position.x-this.canv.width/2*e,this.position.y-this.canv.height/2,this.canv.width*e,this.canv.height*e)}}const d=t&&t.emoji||["😀","😂","😆","😊"];let r=t&&t.element,u=r||document.body,f=window.innerWidth,p=window.innerHeight;const m={x:f/2,y:f/2},x={x:f/2,y:f/2};let y=0;const g=[],w=[];let v,M;e()}new t}); -------------------------------------------------------------------------------- /assets/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/img/.DS_Store -------------------------------------------------------------------------------- /assets/img/aside_author_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/img/aside_author_image.jpg -------------------------------------------------------------------------------- /assets/img/lazyload.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/img/lazyload.jpg -------------------------------------------------------------------------------- /assets/img/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/img/link.png -------------------------------------------------------------------------------- /assets/img/wap_aside_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/img/wap_aside_image.jpg -------------------------------------------------------------------------------- /assets/js/joe.archive.js: -------------------------------------------------------------------------------- 1 | /* 搜索页面需要用到的JS */ 2 | document.addEventListener('DOMContentLoaded', function () { 3 | /* 激活列表特效 */ 4 | { 5 | var wow = $('.joe_archive__list').attr('data-wow'); 6 | if (wow !== 'off' && wow) 7 | new WOW({ 8 | boxClass: 'wow', 9 | animateClass: 'animated '.concat(wow), 10 | offset: 0, 11 | mobile: true, 12 | live: true, 13 | scrollContainer: null 14 | }).init(); 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /assets/js/joe.archive.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",function(){var t=$(".joe_archive__list").attr("data-wow");"off"!==t&&t&&new WOW({boxClass:"wow",animateClass:"animated ".concat(t),offset:0,mobile:!0,live:!0,scrollContainer:null}).init()}); -------------------------------------------------------------------------------- /assets/js/joe.census.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",()=>{{const e=t=>{if(!t)return"0 B";const e=1e3,o=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],a=Math.floor(Math.log(t)/Math.log(e));return(t/Math.pow(e,a)).toPrecision(3)+" "+o[a]},o=t=>t<1024?parseInt(t)+" MB":parseInt(t/1024)+" GB",a=[],n=[],i=[],l=document.querySelector("#flow"),s=document.querySelector("#work"),r=l&&echarts.init(l),c=s&&echarts.init(s);function t(){$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"server_status"},success(l){l.status||Qmsg.warning("服务器接口异常!");{$(".joe_census__server-item .count .core").html(`${l.cpu[1]} 核`),$(".joe_census__server-item .count .ram").html(`${o(l.memory.memTotal)}`),$(".joe_census__server-item .count .up").html(`总发送:${e(l.upTotal)}`),$(".joe_census__server-item .count .down").html(`总接收:${e(l.downTotal)}`);const t=new Date,s=String(t.getHours()).padStart(2,0),c=String(t.getMinutes()).padStart(2,0),m=String(t.getSeconds()).padStart(2,0),d=`${s}:${c}:${m}`;a.push(d),n.push(l.up),i.push(l.down),a.length>5&&a.shift(),n.length>5&&n.shift(),i.length>5&&i.shift(),r.setOption({title:{subtext:"单位 KB/s"},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},xAxis:{axisTick:{show:!1},type:"category",boundaryGap:!1,data:a},yAxis:{type:"value"},series:[{type:"line",name:"上行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#f39494",areaStyle:{color:"#f39494"},lineStyle:{width:2,color:"#f39494"}}},stack:"总量",data:n},{type:"line",name:"下行",smooth:!0,showSymbol:!1,itemStyle:{normal:{color:"#9dd3e8",areaStyle:{color:"#9dd3e8"},lineStyle:{width:2,color:"#9dd3e8"}}},stack:"总量",data:i}]})}{const t=l.cpu[0],e=Math.round(l.memory.memRealUsed/l.memory.memTotal*1e3)/10,o=Math.round(l.memory.memCached/l.memory.memTotal*1e3)/10,a=Math.round(l.memory.memBuffers/l.memory.memTotal*1e3)/10,n=Math.round(l.load.one/l.load.max*100)>100?100:Math.round(l.load.one/l.load.max*100);c.setOption({title:{subtext:"单位 百分比"},tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},grid:{left:"3%",right:"3%",bottom:"3%",containLabel:!0},xAxis:{type:"category",axisTick:{show:!1},data:["CPU占用","内存占用","系统缓冲","内存缓冲","系统负载"]},yAxis:{type:"value",max:100},series:{data:[{name:"CPU占用",value:t,itemStyle:{color:"#b3c25a"}},{name:"内存占用",value:e,itemStyle:{color:"#67b580"}},{name:"系统缓冲",value:a,itemStyle:{color:"#86ba71"}},{name:"内存缓冲",value:o,itemStyle:{color:"#feb041"}},{name:"系统负载",value:n,itemStyle:{color:"#fd7e55"}}],type:"bar",showBackground:!0,label:{show:!0,color:"#ffffff",formatter:t=>`${t.data.value}%`},backgroundStyle:{color:"rgba(180, 180, 180, 0.2)"}}})}setTimeout(t,2e3)}})}l&&s&&t()}{const t=document.querySelector("#category"),e=echarts.init(t),o=[];$(".joe_census__basic-item.category ul li").each((t,e)=>{o.push({name:e.getAttribute("data-name"),value:e.getAttribute("data-value")})}),e.setOption({tooltip:{trigger:"item"},series:[{type:"pie",roseType:"area",itemStyle:{borderRadius:8},data:o}]})}{const t=document.querySelector("#lately"),e=echarts.init(t);$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"comment_lately"},success(t){e.setOption({title:{subtext:"单位 数量"},tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},grid:{left:"3%",right:"3%",bottom:"3%",containLabel:!0},xAxis:{type:"category",axisTick:{show:!1},data:t.categories},yAxis:{type:"value"},series:{name:"数量",itemStyle:{normal:{color:"#91cc75",lineStyle:{width:2,color:"#91cc75"}}},data:t.series,type:"line",smooth:!0}})}})}{let t=0;function e(){"loading..."!==$(".joe_census__filing .button").html()&&$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"article_filing",page:++t},success(t){if(!t.length)return $(".joe_census__filing .item.load").remove(),Qmsg.warning("没有更多内容了");let e="";t.forEach(t=>{e+=`\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
${t.date}
\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t${t.list.map(t=>`
  1. ${t.title}
  2. `).join("")}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t`}),$("#filing").append(e),$(".joe_census__filing .button").html("加载更多")}})}e(),$(".joe_census__filing .content").on("click",".panel",function(){const t=$(this).parents(".content");t.find(".panel").not($(this)).removeClass("in"),t.find(".panel-body").not($(this).siblings(".panel-body")).stop().hide("fast"),$(this).toggleClass("in").siblings(".panel-body").stop().toggle("fast")}),$(".joe_census__filing .button").on("click",function(){e(),$(this).html("loading...")})}}); -------------------------------------------------------------------------------- /assets/js/joe.leaving.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', () => { 2 | const encryption = str => window.btoa(unescape(encodeURIComponent(str))); 3 | const decrypt = str => decodeURIComponent(escape(window.atob(str))); 4 | 5 | /* 当前页的CID */ 6 | const cid = $('.joe_detail').attr('data-cid'); 7 | 8 | /* 获取本篇文章百度收录情况 */ 9 | { 10 | $.ajax({ 11 | url: Joe.BASE_API, 12 | type: 'POST', 13 | dataType: 'json', 14 | data: { routeType: 'baidu_record', site: window.location.href }, 15 | success(res) { 16 | if (res.data && res.data === '已收录') { 17 | $('#Joe_Baidu_Record').css('color', '#67C23A'); 18 | $('#Joe_Baidu_Record').html('已收录'); 19 | } else { 20 | /* 如果填写了Token,则自动推送给百度 */ 21 | if (Joe.BAIDU_PUSH) { 22 | $('#Joe_Baidu_Record').html('未收录,推送中...'); 23 | const _timer = setTimeout(function () { 24 | $.ajax({ 25 | url: Joe.BASE_API, 26 | type: 'POST', 27 | dataType: 'json', 28 | data: { 29 | routeType: 'baidu_push', 30 | domain: window.location.protocol + '//' + window.location.hostname, 31 | url: encodeURI(window.location.href) 32 | }, 33 | success(res) { 34 | if (res.data.error) { 35 | $('#Joe_Baidu_Record').html('推送失败,请检查!'); 36 | } else { 37 | $('#Joe_Baidu_Record').html('推送成功!'); 38 | } 39 | } 40 | }); 41 | clearTimeout(_timer); 42 | }, 1000); 43 | } else { 44 | const url = `https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`; 45 | $('#Joe_Baidu_Record').html(`未收录,提交收录`); 46 | } 47 | } 48 | } 49 | }); 50 | } 51 | 52 | /* 激活浏览功能 */ 53 | { 54 | let viewsArr = localStorage.getItem(encryption('views')) ? JSON.parse(decrypt(localStorage.getItem(encryption('views')))) : []; 55 | const flag = viewsArr.includes(cid); 56 | if (!flag) { 57 | $.ajax({ 58 | url: Joe.BASE_API, 59 | type: 'POST', 60 | dataType: 'json', 61 | data: { routeType: 'handle_views', cid }, 62 | success(res) { 63 | if (res.code !== 1) return; 64 | $('#Joe_Article_Views').html(`${res.data.views} 阅读`); 65 | viewsArr.push(cid); 66 | const name = encryption('views'); 67 | const val = encryption(JSON.stringify(viewsArr)); 68 | localStorage.setItem(name, val); 69 | } 70 | }); 71 | } 72 | } 73 | 74 | /* 激活随机样式 */ 75 | { 76 | let _index = 100; 77 | const colors = ['#F8D800', '#0396FF', '#EA5455', '#7367F0', '#32CCBC', '#F6416C', '#28C76F', '#9F44D3', '#F55555', '#736EFE', '#E96D71', '#DE4313', '#D939CD', '#4C83FF', '#F072B6', '#C346C2', '#5961F9', '#FD6585', '#465EFB', '#FFC600', '#FA742B', '#5151E5', '#BB4E75', '#FF52E5', '#49C628', '#00EAFF', '#F067B4', '#F067B4', '#ff9a9e', '#00f2fe', '#4facfe', '#f093fb', '#6fa3ef', '#bc99c4', '#46c47c', '#f9bb3c', '#e8583d', '#f68e5f']; 78 | const random = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; 79 | const maxWidth = $('.joe_detail__leaving-list').width(); 80 | const maxHeight = $('.joe_detail__leaving-list').height(); 81 | const radius1 = ['20px 300px', '20px 400px', '20px 500px', '30px 300px', '30px 400px', '30px 500px', '40px 300px', '40px 400px', '40px 500px']; 82 | const radius2 = ['300px 20px', '400px 20px', '500px 20px', '300px 30px', '400px 30px', '500px 30px', '300px 40px', '400px 40px', '500px 40px']; 83 | $('.joe_detail__leaving-list .item').each((index, item) => { 84 | const zIndex = random(1, 99); 85 | const background = colors[random(0, colors.length - 1)]; 86 | const width = Math.ceil($(item).width()); 87 | const height = Math.ceil($(item).height()); 88 | const top = random(0, maxHeight - height); 89 | const left = random(0, maxWidth - width); 90 | $(item).css({ 91 | display: 'block', 92 | zIndex, 93 | background, 94 | top, 95 | left, 96 | borderTopLeftRadius: radius2[random(0, radius2.length - 1)], 97 | borderTopRightRadius: radius1[random(0, radius1.length - 1)], 98 | borderBottomLeftRadius: radius1[random(0, radius1.length - 1)], 99 | borderBottomRightRadius: radius1[random(0, radius1.length - 1)] 100 | }); 101 | $(item).draggabilly({ containment: true }); 102 | $(item).on('dragStart', e => { 103 | _index++; 104 | $(item).css({ zIndex: _index }); 105 | }); 106 | }); 107 | } 108 | }); 109 | 110 | /* 写在load事件里,为了解决图片未加载完成,滚动距离获取会不准确的问题 */ 111 | window.addEventListener('load', function () { 112 | /* 判断地址栏是否有锚点链接,有则跳转到对应位置 */ 113 | { 114 | const scroll = new URLSearchParams(location.search).get('scroll'); 115 | if (scroll) { 116 | const height = $('.joe_header').height(); 117 | let elementEL = null; 118 | if ($('#' + scroll).length > 0) { 119 | elementEL = $('#' + scroll); 120 | } else { 121 | elementEL = $('.' + scroll); 122 | } 123 | if (elementEL && elementEL.length > 0) { 124 | const top = elementEL.offset().top - height - 15; 125 | window.scrollTo({ top, behavior: 'smooth' }); 126 | } 127 | } 128 | } 129 | }); 130 | -------------------------------------------------------------------------------- /assets/js/joe.leaving.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",()=>{const e=e=>window.btoa(unescape(encodeURIComponent(e))),o=e=>decodeURIComponent(escape(window.atob(e))),t=$(".joe_detail").attr("data-cid");$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"baidu_record",site:window.location.href},success(e){if(e.data&&"已收录"===e.data)$("#Joe_Baidu_Record").css("color","#67C23A"),$("#Joe_Baidu_Record").html("已收录");else if(Joe.BAIDU_PUSH){$("#Joe_Baidu_Record").html('未收录,推送中...');const e=setTimeout(function(){$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"baidu_push",domain:window.location.protocol+"//"+window.location.hostname,url:encodeURI(window.location.href)},success(e){e.data.error?$("#Joe_Baidu_Record").html('推送失败,请检查!'):$("#Joe_Baidu_Record").html('推送成功!')}}),clearTimeout(e)},1e3)}else{const e=`https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`;$("#Joe_Baidu_Record").html(`未收录,提交收录`)}}});{let a=localStorage.getItem(e("views"))?JSON.parse(o(localStorage.getItem(e("views")))):[];const n=a.includes(t);n||$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"handle_views",cid:t},success(o){if(1!==o.code)return;$("#Joe_Article_Views").html(`${o.data.views} 阅读`),a.push(t);const n=e("views"),i=e(JSON.stringify(a));localStorage.setItem(n,i)}})}{let e=100;const o=["#F8D800","#0396FF","#EA5455","#7367F0","#32CCBC","#F6416C","#28C76F","#9F44D3","#F55555","#736EFE","#E96D71","#DE4313","#D939CD","#4C83FF","#F072B6","#C346C2","#5961F9","#FD6585","#465EFB","#FFC600","#FA742B","#5151E5","#BB4E75","#FF52E5","#49C628","#00EAFF","#F067B4","#F067B4","#ff9a9e","#00f2fe","#4facfe","#f093fb","#6fa3ef","#bc99c4","#46c47c","#f9bb3c","#e8583d","#f68e5f"],t=(e,o)=>Math.floor(Math.random()*(o-e+1))+e,a=$(".joe_detail__leaving-list").width(),n=$(".joe_detail__leaving-list").height(),i=["20px 300px","20px 400px","20px 500px","30px 300px","30px 400px","30px 500px","40px 300px","40px 400px","40px 500px"],l=["300px 20px","400px 20px","500px 20px","300px 30px","400px 30px","500px 30px","300px 40px","400px 40px","500px 40px"];$(".joe_detail__leaving-list .item").each((d,s)=>{const c=t(1,99),r=o[t(0,o.length-1)],p=Math.ceil($(s).width()),h=Math.ceil($(s).height()),x=t(0,n-h),u=t(0,a-p);$(s).css({display:"block",zIndex:c,background:r,top:x,left:u,borderTopLeftRadius:l[t(0,l.length-1)],borderTopRightRadius:i[t(0,i.length-1)],borderBottomLeftRadius:i[t(0,i.length-1)],borderBottomRightRadius:i[t(0,i.length-1)]}),$(s).draggabilly({containment:!0}),$(s).on("dragStart",o=>{e++,$(s).css({zIndex:e})})})}}),window.addEventListener("load",function(){{const e=new URLSearchParams(location.search).get("scroll");if(e){const o=$(".joe_header").height();let t=null;if(t=$("#"+e).length>0?$("#"+e):$("."+e),t&&t.length>0){const e=t.offset().top-o-15;window.scrollTo({top:e,behavior:"smooth"})}}}}); -------------------------------------------------------------------------------- /assets/js/joe.post_page.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",()=>{const e=e=>window.btoa(unescape(encodeURIComponent(e))),t=e=>decodeURIComponent(escape(window.atob(e))),a=$(".joe_detail").attr("data-cid");$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"baidu_record",site:window.location.href},success(e){if(e.data&&"已收录"===e.data)$("#Joe_Baidu_Record").css("color","#67C23A"),$("#Joe_Baidu_Record").html("已收录");else if(Joe.BAIDU_PUSH){$("#Joe_Baidu_Record").html('未收录,推送中...');const e=setTimeout(function(){$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"baidu_push",domain:window.location.protocol+"//"+window.location.hostname,url:encodeURI(window.location.href)},success(e){e.data.error?$("#Joe_Baidu_Record").html('推送失败,请检查!'):$("#Joe_Baidu_Record").html('推送成功!')}}),clearTimeout(e)},1e3)}else{const e=`https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`;$("#Joe_Baidu_Record").html(`未收录,提交收录`)}}}),Prism.highlightAll(),$("pre[class*='language-']").each(function(e,t){let a=$(t).find("code[class*='language-']").text(),o=$('');new ClipboardJS(o[0],{text:()=>a}).on("success",()=>Qmsg.success("复制成功!")),$(t).append(o)}),$(".joe_detail__article img:not(img.owo_image)").each(function(){$(this).wrap($(``))}),$(".joe_detail__article a:not(.joe_detail__article-anote)").each(function(){$(this).attr({target:"_blank",rel:"noopener noreferrer nofollow"})});{let o=localStorage.getItem(e("views"))?JSON.parse(t(localStorage.getItem(e("views")))):[];const i=o.includes(a);i||$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"handle_views",cid:a},success(t){if(1!==t.code)return;$("#Joe_Article_Views").html(`${t.data.views} 阅读`),o.push(a);const i=e("views"),s=e(JSON.stringify(o));localStorage.setItem(i,s)}})}{let o=localStorage.getItem(e("agree"))?JSON.parse(t(localStorage.getItem(e("agree")))):[];o.includes(a)?$(".joe_detail__agree .icon-1").addClass("active"):$(".joe_detail__agree .icon-2").addClass("active");let i=!1;$(".joe_detail__agree .icon").on("click",function(){if(i)return;i=!0,o=localStorage.getItem(e("agree"))?JSON.parse(t(localStorage.getItem(e("agree")))):[];let s=o.includes(a);$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"handle_agree",cid:a,type:s?"disagree":"agree"},success(t){if(1!==t.code)return;if($(".joe_detail__agree .text").html(t.data.agree),s){const e=o.findIndex(e=>e===a);o.splice(e,1),$(".joe_detail__agree .icon-1").removeClass("active"),$(".joe_detail__agree .icon-2").addClass("active"),$(".joe_detail__agree .icon").removeClass("active")}else o.push(a),$(".joe_detail__agree .icon-2").removeClass("active"),$(".joe_detail__agree .icon-1").addClass("active"),$(".joe_detail__agree .icon").addClass("active");const i=e("agree"),l=e(JSON.stringify(o));localStorage.setItem(i,l)},complete(){i=!1}})})}{let e=!1;$(".joe_detail__article-protected").on("submit",function(t){t.preventDefault();const o=$(this).attr("action")+"&time="+ +new Date,i=$(this).find('input[type="password"]').val();if(""===i.trim())return Qmsg.info("请输入访问密码!");e||(e=!0,$.ajax({url:o,type:"POST",data:{cid:a,protectCID:a,protectPassword:i},dataType:"text",success(t){let a=[],o="";a=$(t).contents(),Array.from(a).forEach(e=>{"container"===e.parentNode.className&&(o=e)}),/Joe/.test(t)?location.reload():(Qmsg.warning(o.textContent.trim()||""),e=!1,$(".joe_comment__respond-form .foot .submit button").html("发表评论"))}}))})}if($(".joe_detail__article-video").length>0){const e=$(".joe_detail__article-video .play iframe").attr("data-player");$(".joe_detail__article-video .episodes .item").on("click",function(){$(this).addClass("active").siblings().removeClass("active");const t=$(this).attr("data-src");$(".joe_detail__article-video .play iframe").attr({src:e+t})}),$(".joe_detail__article-video .episodes .item").first().click()}$(".joe_detail__operate-share").length&&($(".joe_detail__operate-share > svg").on("click",e=>{e.stopPropagation(),$(".joe_detail__operate-share").toggleClass("active")}),$(document).on("click",()=>$(".joe_detail__operate-share").removeClass("active")))}),window.addEventListener("load",function(){{const e=new URLSearchParams(location.search).get("scroll");if(e){const t=$(".joe_header").height();let a=null;if(a=$("#"+e).length>0?$("#"+e):$("."+e),a&&a.length>0){const e=a.offset().top-t-15;window.scrollTo({top:e,behavior:"smooth"})}}}}); -------------------------------------------------------------------------------- /assets/js/joe.wallpaper.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', () => { 2 | let isLoading = false; 3 | let queryData = { cid: -999, start: -999, count: 48 }; 4 | let total = -999; 5 | $.ajax({ 6 | url: Joe.BASE_API, 7 | type: 'POST', 8 | dataType: 'json', 9 | data: { routeType: 'wallpaper_type' }, 10 | success(res) { 11 | if (res.code !== 1) return $('.joe_wallpaper__type-list').html('
  • 壁纸抓取失败!请联系作者!
  • '); 12 | if (!res.data.length) return $('.joe_wallpaper__type-list').html(`
  • 暂无数据!
  • `); 13 | let htmlStr = ''; 14 | res.data.forEach(_ => (htmlStr += `
  • ${_.name}
  • `)); 15 | $('.joe_wallpaper__type-list').html(htmlStr); 16 | $('.joe_wallpaper__type-list .item').first().click(); 17 | } 18 | }); 19 | $('.joe_wallpaper__type-list').on('click', '.item', function () { 20 | const cid = $(this).attr('data-cid'); 21 | if (isLoading) return; 22 | $(this).addClass('active').siblings().removeClass('active'); 23 | queryData.cid = cid; 24 | queryData.start = 0; 25 | renderDom(); 26 | }); 27 | function renderDom() { 28 | window.scrollTo({ top: 0, behavior: 'smooth' }); 29 | $('.joe_wallpaper__list').html(''); 30 | isLoading = true; 31 | $.ajax({ 32 | url: Joe.BASE_API, 33 | type: 'POST', 34 | dataType: 'json', 35 | data: { 36 | routeType: 'wallpaper_list', 37 | cid: queryData.cid, 38 | start: queryData.start, 39 | count: queryData.count 40 | }, 41 | success(res) { 42 | if (res.code !== 1) return (isLoading = false); 43 | isLoading = false; 44 | let htmlStr = ''; 45 | res.data.forEach(_ => { 46 | htmlStr += ` 47 | 48 | 壁纸 49 | `; 50 | }); 51 | $('.joe_wallpaper__list').html(htmlStr); 52 | total = res.total; 53 | initPagination(); 54 | } 55 | }); 56 | } 57 | function initPagination() { 58 | let htmlStr = ''; 59 | if (queryData.start / queryData.count !== 0) { 60 | htmlStr += ` 61 |
  • 首页
  • 62 |
  • 63 | 64 |
  • 65 |
  • ${Math.ceil(queryData.start / queryData.count)}
  • 66 | `; 67 | } 68 | htmlStr += `
  • ${Math.ceil(queryData.start / queryData.count) + 1}
  • `; 69 | if (queryData.start != total - queryData.count) { 70 | htmlStr += ` 71 |
  • ${Math.ceil(queryData.start / queryData.count) + 2}
  • 72 |
  • 73 | 74 |
  • 75 | `; 76 | } 77 | if (queryData.start < total - queryData.count) htmlStr += `
  • 末页
  • `; 78 | $('.joe_wallpaper__pagination').html(htmlStr); 79 | } 80 | $('.joe_wallpaper__pagination').on('click', '.joe_wallpaper__pagination-item', function () { 81 | const start = $(this).attr('data-start'); 82 | if (!start || isLoading) return; 83 | queryData.start = Number(start); 84 | renderDom(); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /assets/js/joe.wallpaper.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",()=>{function t(){window.scrollTo({top:0,behavior:"smooth"}),$(".joe_wallpaper__list").html(""),l=!0,$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"wallpaper_list",cid:e.cid,start:e.start,count:e.count},success(t){if(1!==t.code)return l=!1;l=!1;let e="";t.data.forEach(t=>{e+=`\n \n 壁纸\n `}),$(".joe_wallpaper__list").html(e),i=t.total,a()}})}function a(){let t="";e.start/e.count!=0&&(t+=`\n
  • 首页
  • \n
  • \n \n
  • \n
  • ${Math.ceil(e.start/e.count)}
  • \n `),t+=`
  • ${Math.ceil(e.start/e.count)+1}
  • `,e.start!=i-e.count&&(t+=`\n
  • ${Math.ceil(e.start/e.count)+2}
  • \n
  • \n \n
  • \n `),e.start末页`),$(".joe_wallpaper__pagination").html(t)}let l=!1,e={cid:-999,start:-999,count:48},i=-999;$.ajax({url:Joe.BASE_API,type:"POST",dataType:"json",data:{routeType:"wallpaper_type"},success(t){if(1!==t.code)return $(".joe_wallpaper__type-list").html('
  • 壁纸抓取失败!请联系作者!
  • ');if(!t.data.length)return $(".joe_wallpaper__type-list").html('
  • 暂无数据!
  • ');let a="";t.data.forEach(t=>a+=`
  • ${t.name}
  • `),$(".joe_wallpaper__type-list").html(a),$(".joe_wallpaper__type-list .item").first().click()}}),$(".joe_wallpaper__type-list").on("click",".item",function(){const a=$(this).attr("data-cid");l||($(this).addClass("active").siblings().removeClass("active"),e.cid=a,e.start=0,t())}),$(".joe_wallpaper__pagination").on("click",".joe_wallpaper__pagination-item",function(){const a=$(this).attr("data-start");a&&!l&&(e.start=Number(a),t())})}); -------------------------------------------------------------------------------- /assets/json/joe.live.json: -------------------------------------------------------------------------------- 1 | [{"name":"娱乐天地","list":[{"name":"星秀","gameId":1663},{"name":"户外","gameId":2165},{"name":"二次元","gameId":2633},{"name":"一起看","gameId":2135},{"name":"美食","gameId":2752},{"name":"颜值","gameId":2168},{"name":"交友","gameId":4079},{"name":"音乐","gameId":3793},{"name":"体育","gameId":2356}]},{"name":"网游竞技","list":[{"name":"英雄联盟","gameId":1},{"name":"LOL云顶之弈","gameId":5485},{"name":"穿越火线","gameId":4},{"name":"DNF","gameId":2},{"name":"魔兽世界","gameId":8},{"name":"炉石传说","gameId":393},{"name":"DOTA2","gameId":7},{"name":"坦克世界","gameId":802},{"name":"CS:GO","gameId":862},{"name":"魔兽争霸3","gameId":4615},{"name":"问道","gameId":107},{"name":"使命召唤","gameId":100137}]},{"name":"单机热游","list":[{"name":"绝地求生","gameId":2793},{"name":"主机游戏","gameId":100032},{"name":"我的世界","gameId":1732},{"name":"方舟","gameId":1997},{"name":"怪物猎人","gameId":3519},{"name":"逃离塔科夫","gameId":3493},{"name":"怀旧游戏","gameId":100125},{"name":"骑马与砍杀","gameId":4783},{"name":"拾遗记","gameId":4913}]},{"name":"手游休闲","list":[{"name":"王者荣耀","gameId":2336},{"name":"和平精英","gameId":3203},{"name":"综合手游","gameId":100029},{"name":"狼人杀","gameId":100049},{"name":"QQ飞车","gameId":2928},{"name":"CF手游","gameId":2413},{"name":"跑跑手游","gameId":2620},{"name":"皇室战争","gameId":2439},{"name":"火影手游","gameId":2429}]}] -------------------------------------------------------------------------------- /assets/lib/extend/extend.min.js: -------------------------------------------------------------------------------- 1 | (function(e){e.fn.extend({insertContent:function(t,n){var a=e(this)[0];if(document.selection){this.focus();var s=document.selection.createRange();s.text=t,this.focus(),s.moveStart("character",-i);var c=s.text.length;if(2==arguments.length){var i=a.value.length;s.moveEnd("character",c+n),n<=0?s.moveStart("character",c-2*n-t.length):s.moveStart("character",c-n-t.length),s.select()}}else if(a.selectionStart||"0"==a.selectionStart){var o=a.selectionStart,r=a.selectionEnd,l=a.scrollTop;a.value=a.value.substring(0,o)+t+a.value.substring(r,a.value.length),this.focus(),a.selectionStart=o+t.length,a.selectionEnd=o+t.length,a.scrollTop=l,2==arguments.length&&(a.setSelectionRange(o-n,a.selectionEnd+n),this.focus())}else this.value+=t,this.focus()},selectionRange:function(e,t){var n="",a=this[0];if(void 0===e)n=/input|textarea/i.test(a.tagName)&&/firefox/i.test(navigator.userAgent)?a.value.substring(a.selectionStart,a.selectionEnd):document.selection?document.selection.createRange().text:document.getSelection().toString();else{if(!/input|textarea/.test(a.tagName.toLowerCase()))return!1;if(void 0===t&&(t=e),a.setSelectionRange)a.setSelectionRange(e,t),this.focus();else{var s=a.createTextRange();s.move("character",e),s.moveEnd("character",t-e),s.select()}}return void 0===e?n:this}})})(jQuery); -------------------------------------------------------------------------------- /assets/lib/font-awesome@4.7.0/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/lib/font-awesome@4.7.0/FontAwesome.otf -------------------------------------------------------------------------------- /assets/lib/font-awesome@4.7.0/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/lib/font-awesome@4.7.0/fontawesome-webfont.eot -------------------------------------------------------------------------------- /assets/lib/font-awesome@4.7.0/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/lib/font-awesome@4.7.0/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /assets/lib/font-awesome@4.7.0/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/lib/font-awesome@4.7.0/fontawesome-webfont.woff -------------------------------------------------------------------------------- /assets/lib/font-awesome@4.7.0/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/assets/lib/font-awesome@4.7.0/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /assets/lib/prism/prism.min.css: -------------------------------------------------------------------------------- 1 | code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} -------------------------------------------------------------------------------- /assets/lib/qmsg/qmsg.min.css: -------------------------------------------------------------------------------- 1 | .qmsg.qmsg-wrapper{color:#909399;position:fixed;top:16px;left:0;z-index:9999;width:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:20px}.qmsg .qmsg-item{padding:8px;text-align:center;-webkit-animation-duration:0.3s;animation-duration:0.3s;position:relative}.qmsg .qmsg-item .qmsg-count{position:absolute;left:-4px;top:-4px;background-color:red;color:#fff;font-size:12px;text-align:center;border-radius:2px;min-width:16px;height:16px;line-height:16px;-webkit-animation-duration:0.3s;animation-duration:0.3s}.qmsg .qmsg-item:first-child{margin-top:-8px}.qmsg .qmsg-content{text-align:left;position:relative;display:inline-block;padding:10px 16px;background:#fff;border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,0.15);pointer-events:all;max-width:80%;min-width:80px}.qmsg .qmsg-content [class^='qmsg-content-']{display:flex;align-items:center}.qmsg .qmsg-content .qmsg-content-with-close{padding-right:20px}.qmsg .qmsg-icon{display:flex;align-items:center;margin-right:8px}.qmsg .qmsg-icon svg{vertical-align:unset;width:20px;height:20px}.qmsg .qmsg-content-info .qmsg-icon{color:#1890ff}.qmsg .qmsg-icon-close{position:absolute;top:11px;right:5px;padding:0;overflow:hidden;font-size:12px;line-height:22px;background-color:transparent;border:none;outline:none;cursor:pointer;color:rgba(0,0,0,0.45);transition:color 0.3s}.qmsg .qmsg-icon-close:hover>svg path{stroke:#555}.qmsg .animate-turn{-webkit-animation:MessageTurn 1s linear infinite;animation:MessageTurn 1s linear infinite}@-webkit-keyframes MessageTurn{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes MessageTurn{0%{-webkit-transform:rotate(0deg)}25%{-webkit-transform:rotate(90deg)}50%{-webkit-transform:rotate(180deg)}75%{-webkit-transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg)}}@-webkit-keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@-webkit-keyframes MessageMoveIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes MessageMoveIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes MessageShake{0%,100%{-webkit-transform:translateX(0px);transform:translateX(0px);opacity:1}25%,75%{-webkit-transform:translateX(-4px);transform:translateX(-4px);opacity:0.75}50%{-webkit-transform:translateX(4px);transform:translateX(4px);opacity:0.25}}@keyframes MessageShake{0%,100%{-webkit-transform:translateX(0px);transform:translateX(0px);opacity:1}25%,75%{-webkit-transform:translateX(-4px);transform:translateX(-4px);opacity:0.75}50%{-webkit-transform:translateX(4px);transform:translateX(4px);opacity:0.25}} 2 | -------------------------------------------------------------------------------- /assets/lib/scroll/scroll.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function polyfill(){function o(o){var t=["MSIE ","Trident/","Edge/"];return new RegExp(t.join("|")).test(o)}function t(o,t){this.scrollLeft=o,this.scrollTop=t}function e(o){return.5*(1-Math.cos(Math.PI*o))}function l(o){if(null===o||"object"!=typeof o||void 0===o.behavior||"auto"===o.behavior||"instant"===o.behavior)return!0;if("object"==typeof o&&"smooth"===o.behavior)return!1;throw new TypeError("behavior member of ScrollOptions "+o.behavior+" is not a valid value for enumeration ScrollBehavior.")}function r(o,t){return"Y"===t?o.clientHeight+b1?1:n,t=e(n),l=o.startX+(o.x-o.startX)*t,r=o.startY+(o.y-o.startY)*t,o.method.call(o.scrollable,l,r),l===o.x&&r===o.y||u.requestAnimationFrame(s.bind(u,o))}function a(o,e,l){var r,i,n,c,a=y();o===m.body?(r=u,i=u.scrollX||u.pageXOffset,n=u.scrollY||u.pageYOffset,c=w.scroll):(r=o,i=o.scrollLeft,n=o.scrollTop,c=t),s({scrollable:r,method:c,startTime:a,startX:i,startY:n,x:e,y:l})}for(var f=0,p=["ms","moz","webkit","o"],d=0;dform{position:relative;display:none;background:#fff;min-width:0;flex:1;margin-left:15px;box-shadow:0px 0px 20px -5px rgba(158,158,158,0.22);border-radius:8px}.joe_config>form .typecho-option{position:-webkit-sticky;position:sticky;bottom:0;display:flex;align-items:center;justify-content:center;margin:0;padding:15px;background:#fff;border-top:1px solid #ebebeb;border-radius:0 0 8px 8px}.joe_config>form .typecho-option button{width:170px;height:40px;background-color:#409eff;border-radius:20px}.joe_config>form .typecho-option button:hover{-webkit-animation:pulse 1s;animation:pulse 1s;box-shadow:0 0 0 20px rgba(255,255,255,0)}.joe_config>form .joe_content{display:none;padding:15px}.joe_config>form .joe_content li{border:1px solid #e9e9eb;padding:15px}.joe_config>form .joe_content li .typecho-label{display:block;border-left:4px solid #409eff;background:#ecf5ff;line-height:26px;margin-bottom:15px;padding:5px 15px;color:#409eff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-radius:0 4px 4px 0}.joe_config>form .joe_content li select{min-width:200px;height:34px;line-height:34px;border:1px solid #e9e9eb;color:#666;border-radius:4px;padding-left:5px}.joe_config>form .joe_content li .multiline{display:flex;align-items:center;color:#666}.joe_config>form .joe_content li .multiline input[type='checkbox']{margin-right:5px}.joe_config>form .joe_content li textarea,.joe_config>form .joe_content li input[type='text']{width:100%;padding:10px;color:#666;border:1px solid #e9e9eb;-webkit-appearance:none}.joe_config>form .joe_content li textarea{height:125px}.joe_config>form .joe_content li .description{background:#f8f8f8;color:#999;padding:10px 15px;margin-top:15px;line-height:26px;border-radius:4px;word-break:break-all}.joe_config__notice{display:none;margin-left:15px;background:#fff;padding:15px;flex:1;box-shadow:0px 0px 20px -5px rgba(158,158,158,0.22);border-radius:8px;line-height:28px;color:#606266}.joe_config__notice .title{text-align:center;padding-bottom:15px;border-bottom:1px solid #e4e7ed;font-weight:500;font-size:22px;margin-bottom:15px;color:#67C23A}.joe_config__notice ol{padding:0 40px;margin-bottom:15px}.joe_config__notice ol li{list-style:decimal}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 #409eff}}@keyframes pulse{0%{box-shadow:0 0 0 0 #409eff}}@media (max-width: 768px){.joe_config{display:block}.joe_config__aside{width:100%;margin-bottom:15px}.joe_config__aside .tabs{display:flex;flex-wrap:wrap;border-bottom:1px solid #ebeef5;padding-bottom:10px}.joe_config__aside .tabs .item{width:33.33333333%;height:36px;line-height:36px;border-radius:18px}.joe_config__aside .backup{display:flex;align-items:center;justify-content:space-between}.joe_config__aside .backup input{width:auto;flex:1;margin-bottom:0;height:36px;line-height:36px;border-radius:18px}.joe_config__aside .backup input:nth-child(2){margin:0 10px}.joe_config>form{margin-left:0}.joe_config>form .typecho-option{padding:10px 0}.joe_config>form .typecho-option button{width:150px;height:38px;border-radius:19px}.joe_config__notice{margin-left:0}} 2 | -------------------------------------------------------------------------------- /assets/typecho/config/js/joe.config.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",function(){var e=document.querySelectorAll(".joe_config__aside .item"),t=document.querySelector(".joe_config__notice"),s=document.querySelector(".joe_config > form"),n=document.querySelectorAll(".joe_content");if(e.forEach(function(o){o.addEventListener("click",function(){e.forEach(function(e){e.classList.remove("active")}),o.classList.add("active");var c=o.getAttribute("data-current");sessionStorage.setItem("joe_config_current",c),"joe_notice"===c?(t.style.display="block",s.style.display="none"):(t.style.display="none",s.style.display="block"),n.forEach(function(e){e.style.display="none";var t=e.classList.contains(c);t&&(e.style.display="block")})})}),sessionStorage.getItem("joe_config_current")){var o=sessionStorage.getItem("joe_config_current");"joe_notice"===o?(t.style.display="block",s.style.display="none"):(s.style.display="block",t.style.display="none"),e.forEach(function(e){var t=e.getAttribute("data-current");t===o&&e.classList.add("active")}),n.forEach(function(e){e.classList.contains(o)&&(e.style.display="block")})}else e[0].classList.add("active"),t.style.display="block",s.style.display="none";var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===c.readyState)if(200<=c.status&&300>c.status||304===c.status){var e=JSON.parse(c.responseText);t.innerHTML=e.success?'

    最新版本:'+e.title+"

    "+e.content:"请求失败!"}else t.innerHTML="请求失败!"},c.open("get","https://78.al/api.php?type=collect&key=18e958d8c7fa5d435844f95c9f254fca",!0),c.send(null)}); -------------------------------------------------------------------------------- /assets/typecho/write/json/character.json: -------------------------------------------------------------------------------- 1 | { 2 | "星星符号": "★ ✰ ☆ ✩ ✫ ✬ ✭ ✮ ✡", 3 | "绘表符号": "─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┍ ┎ ┐ ┑ ┒ └ ┕ ┖ ┘ ┙ ┚ ├ ┝ ┞ ┟ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┩ ┪ ┫ ┬ ┭ ┮ ┰ ┱ ┲ ┴ ┵ ┶ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ║ ╒ ╕ ╖ ╘ ╙ ╛ ╜ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╪ ╫ ╳ ╔ ╗ ╝ ╚ ╬ ═ ╓ ╩ ┠ ┨ ┯ ┷ ┏ ┓ ┗ ┛ ┳ ⊥ ﹃ ﹄ ┌ ╭ ╮ ╯ ╰", 4 | "编号&序号": "№ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ", 5 | "希腊字母": "Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ ν ξ ο π ρ σ η θ ι κ λ μ τ υ φ χ ψ ω", 6 | "俄语字符": "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я", 7 | "日语字符": "ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん", 8 | "注音码": "ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ", 9 | "中文字符": "夬 丅 乛 丄 丩 乚 夊 亅 亇 厃 丂 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万 亿 吉 太 拍 艾 分 厘 毫 微 卍 卐 卄 巜 弍 弎 弐 朤 氺 曱 甴 囍 兀 々 〆 の ぁ 〡 〢 〣 〤 〥 〦 〧 〨 〩 ㊊ ㊋ ㊌ ㊍ ㊎ ㊏ ㊛ ㊚ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊜ ㊝ ㊞ ㊟ ㊠ ㊡ ㊢ ㊣ ㊤ ㊥ ㊦ ㊧ ㊨ ㊩ ㊪ ㊫ ㊬ ㊭ ㊮ ㊯ ㊰", 10 | "汉语拼音": "ā á ǎ à ō ó ǒ ò ē é ě è ī í ǐ ì ū ú ǔ ù ǖ ǘ ǚ ǜ ü ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ", 11 | "单位符号": "㎎ ㎏ ㎜ ㎝ ㎞ ㎡ ㏄ ㏎ ㏑ ㏒ ㏕ ℡ % ‰ ℃ ℉ ° ′ ″ $ £ ¥ ¢ ♂ ♀ ℅", 12 | "标点符号": ". 。 , 、 ; : ? ! ˉ ˇ ¨ ~ 々 ‖ ∶ \" ' ` | · … — ~ - 〃 ‘ ’ “ ” 〝 〞 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】 ( ) [ ] { } ︻ ︼ ﹄ ﹃", 13 | "数学符号": "+ - × ÷ ± / ≌ ∽ ≦ ≧ ≒ ﹤ ﹥ ≈ ≡ ≠ = ≤ ≥ < > ≮ ≯ ∷ ∶ ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ∥ ∠ ⌒ ⊙ √ ∟ ⊿ ㏒ ㏑ % ‰", 14 | "箭头符号": "↑ ↓ ← → ↖ ↗ ↙ ↘ ↔ ↕ ➼ ➽ ➸ ➳ ➺ ➻ ➴ ➵ ➶ ➷ ➹ ▶ ➩ ➪ ➫ ➬ ➭ ➮ ➯ ➱ ➲ ➾ ➔ ➘ ➙ ➚ ➛ ➜ ➝ ➞ ➟ ➠ ➡ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇖ ⇗ ⇘ ⇙ ⇜ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪" 15 | } 16 | -------------------------------------------------------------------------------- /assets/typecho/write/json/emoji.json: -------------------------------------------------------------------------------- 1 | { 2 | "表情": "😀 😁 😂 😃 😄 😅 😆 😉 😊 😋 😎 😍 😘 😗 😙 😚 ☺ 😇 😐 😑 😶 😏 😣 😥 😮 😯 😪 😫 😴 😌 😛 😜 😝 😒 😓 😔 😕 😲 😷 😖 😞 😟 😤 😢 😭 😦 😧 😨 😬 😰 😱 😳 😵 😡 😠", 3 | "人物": "👦 👧 👨 👩 👴 👵 👶 👱 👮 👲 👳 👷 👸 💂 🎅 👰 👼 💆 💇 🙍 🙎 🙅 🙆 💁 🙋 🙇 🙌 🙏 👤 👥 🚶 🏃 👯 💃 👫 👬 👭 💏 💑 👪", 4 | "箭头": "🔃 🔄 🔙 🔚 🔛 🔜 🔝", 5 | "办公": "📱 📲 ☎ 📞 📟 📠 🔋 🔌 💻 💽 💾 💿 📀 🎥 📺 📷 📹 📼 🔍 🔎 🔬 🔭 📡 📔 📕 📖 📗 📘 📙 📚 📓 📃 📜 📄 📰 📑 🔖 💳 ✉ 📧 📨 📩 📤 📥 📦 📫 📪 📬 📭 📮 ✏ ✒ 📝 📁 📂 📅 📆 📇 📈 📉 📊 📋 📌 📍 📎 📏 📐 ✂ 🔒 🔓 🔏 🔐 🔑", 6 | "建筑": "🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏨 🏩 🏪 🏫 🏬 🏭 🏯 🏰 💒 🗼 🗽 ⛪ 🌆 🌇 🌉", 7 | "交通": "🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚝 🚞 🚋 🚌 🚍 🚎 🚏 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚚 🚛 🚜 🚲 ⛽ 🚨 🚥 🚦 🚧 ⚓ ⛵ 🚣 🚤 🚢 ✈ 💺 🚁 🚟 🚠 🚡 🚀", 8 | "钱币": "💴 💵 💶 💷 💰 💸 💳", 9 | "水果": "🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓", 10 | "月亮": "🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌝", 11 | "树叶": "🌿 🍀 🍁 🍂 🍃", 12 | "花草": "💐 🌸 💮 🌹 🌺 🌻 🌼 🌷 🌱 🌿 🍀", 13 | "心形": "💘 ❤ 💓 💔 💕 💖 💗 💙 💚 💛 💜 💝 💞 💟 ❣", 14 | "钟表": "🕛 🕧 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 ⌛ ⏳ ⌚ ⏰ ⏱ ⏲ 🕰", 15 | "星座": "♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ⛎", 16 | "生肖": "🐁 🐂 🐅 🐇 🐉 🐍 🐎 🐐 🐒 🐓 🐕 🐖", 17 | "标志": "♠ ♥ ♦ ♣ 🀄 🎴 🔇 🔈 🔉 🔊 📢 📣 💤 💢 💬 💭 ♨ 🌀 🔔 🔕 ✡ ✝ 🔯 📛 🔰 🔱 ⭕ ✅ ☑ ✔ ✖ ❌ ❎ ➕ ➖ ➗ ➰ ➿ 〽 ✳ ✴ ❇ ‼ ⁉ ❓ ❔ ❕ ❗ © ® ™ 🎦 🔅 🔆 💯 🔠 🔡 🔢 🔣 🔤 🅰 🆎 🅱 🆑 🆒 🆓 ℹ 🆔 Ⓜ 🆕 🆖 🅾 🆗 🅿 🆘 🆙 🆚 🈁 🈂 🈷 🈶 🈯 🉐 🈹 🈚 🈲 🉑 🈸 🈴 🈳 ㊗ ㊙ 🈺 🈵 ▪ ▫ ◻ ◼ ◽ ◾ ⬛ ⬜ 🔶 🔷 🔸 🔹 🔺 🔻 💠 🔲 🔳 ⚪ ⚫ 🔴 🔵", 18 | "物品": "💌 💎 🔪 💈 🚪 🚽 🚿 🛁 ⌛ ⏳ ⌚ ⏰ 🎈 🎉 🎊 🎎 🎏 🎐 🎀 🎁 📯 📻 📱 📲 ☎ 📞 📟 📠 🔋 🔌 💻 💽 💾 💿 📀 🎥 📺 📷 📹 📼 🔍 🔎 🔬 🔭 📡 💡 🔦 🏮 📔 📕 📖 📗 📘 📙 📚 📓 📃 📜 📄 📰 📑 🔖 💰 💴 💵 💶 💷 💸 💳 ✉ 📧 📨 📩 📤 📥 📦 📫 📪 📬 📭 📮 ✏ ✒ 📝 📁 📂 📅 📆 📇 📈 📉 📊 📋 📌 📍 📎 📏 📐 ✂ 🔒 🔓 🔏 🔐 🔑 🔨 🔫 🔧 🔩 🔗 💉 💊 🚬 🔮 🚩 🎌 💦 💨", 19 | "旅游": "🌋 🗻 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏨 🏩 🏪 🏫 🏬 🏭 🏯 🏰 💒 🗼 🗽 ⛪ ⛲ 🌁 🌃 🌆 🌇 🌉 🌌 🎠 🎡 🎢 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚝 🚞 🚋 🚌 🚍 🚎 🚏 🚐 🚑 🚒 🚓 🚔 🚕 🚖 🚗 🚘 🚚 🚛 🚜 🚲 ⛽ 🚨 🚥 🚦 🚧 ⚓ ⛵ 🚤 🚢 ✈ 💺 🚁 🚟 🚠 🚡 🚀 🎑 🗿 🛂 🛃 🛄 🛅", 20 | "恐怖": "😈 👿 👹 👺 💀 ☠ 👻 👽 👾 💣", 21 | "文体": "🎪 🎭 🎨 🎰 🚣 🛀 🎫 🏆 ⚽ ⚾ 🏀 🏈 🏉 🎾 🎱 🎳 ⛳ 🎣 🎽 🎿 🏂 🏄 🏇 🏊 🚴 🚵 🎯 🎮 🎲 🎷 🎸 🎺 🎻 🎬", 22 | "饮食": "🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓 🍅 🍆 🌽 🍄 🌰 🍞 🍖 🍗 🍔 🍟 🍕 🍳 🍲 🍱 🍘 🍙 🍚 🍛 🍜 🍝 🍠 🍢 🍣 🍤 🍥 🍡 🍦 🍧 🍨 🍩 🍪 🎂 🍰 🍫 🍬 🍭 🍮 🍯 🍼 ☕ 🍵 🍶 🍷 🍸 🍹 🍺 🍻 🍴", 23 | "自然": "🌍 🌎 🌏 🌐 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 ☀ 🌝 🌞 ⭐ 🌟 🌠 ☁ ⛅ ☔ ⚡ ❄ 🔥 💧 🌊", 24 | "植物": "💐 🌸 💮 🌹 🌺 🌻 🌼 🌷 🌱 🌲 🌳 🌴 🌵 🌾 🌿 🍀 🍁 🍂 🍃", 25 | "动物": "🙈 🙉 🙊 🐵 🐒 🐶 🐕 🐩 🐺 🐱 😺 😸 😹 😻 😼 😽 🙀 😿 😾 🐈 🐯 🐅 🐆 🐴 🐎 🐮 🐂 🐃 🐄 🐷 🐖 🐗 🐽 🐏 🐑 🐐 🐪 🐫 🐘 🐭 🐁 🐀 🐹 🐰 🐇 🐻 🐨 🐼 🐾 🐔 🐓 🦆 🦢 🕊 🦜 🦉 🐣 🐤 🐥 🐦 🐧 🐸 🐊 🐢 🐍 🐲 🐉 🐳 🐋 🐬 🐟 🐠 🐡 🐙 🐚 🐌 🐛 🐜 🐝 🐞 🦋", 26 | "公共": "♻ 🏧 🚮 🚰 ♿ 🚹 🚺 🚻 🚼 🚾 ⚠ 🚸 ⛔ 🚫 🚳 🚭 🚯 🚱 🚷 🔞 💈", 27 | "手机": "📱 📲 📶 📳 📴 ☎ 📞 📟 📠", 28 | "日常": "👣 👀 👂 👃 👅 👄 💋 👓 👔 👕 👖 👗 👘 👙 👚 👛 👜 👝 🎒 💼 👞 👟 👠 👡 👢 👑 👒 🎩 🎓 💄 💅 💍 🌂", 29 | "手势": "💪 👈 👉 ☝ 👆 👇 ✌ ✋ 👌 👍 👎 ✊ 👊 👋 👏 👐 ✍" 30 | } 31 | -------------------------------------------------------------------------------- /assets/typecho/write/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "serve": "rollup -c -w" 4 | }, 5 | "dependencies": { 6 | "@codemirror/closebrackets": "^0.19.0", 7 | "@codemirror/commands": "^0.19.5", 8 | "@codemirror/comment": "^0.19.0", 9 | "@codemirror/gutter": "^0.19.2", 10 | "@codemirror/highlight": "^0.19.6", 11 | "@codemirror/history": "^0.19.0", 12 | "@codemirror/lang-markdown": "^0.19.1", 13 | "@codemirror/language-data": "^0.19.0", 14 | "@codemirror/matchbrackets": "^0.19.3", 15 | "@codemirror/search": "^0.19.2", 16 | "@codemirror/state": "^0.19.2", 17 | "@codemirror/view": "^0.19.9" 18 | }, 19 | "devDependencies": { 20 | "@rollup/plugin-node-resolve": "^13.0.5", 21 | "rollup": "^2.58.0", 22 | "rollup-plugin-terser": "^7.0.2" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /assets/typecho/write/rollup.config.js: -------------------------------------------------------------------------------- 1 | import { nodeResolve } from '@rollup/plugin-node-resolve'; 2 | import { terser } from 'rollup-plugin-terser'; 3 | export default { 4 | input: './js/index.js', 5 | output: { 6 | file: './dist/index.bundle.js', 7 | format: 'iife', 8 | inlineDynamicImports: true, 9 | minify: true 10 | }, 11 | plugins: [nodeResolve(), terser({ compress: { drop_console: true } })] 12 | }; 13 | -------------------------------------------------------------------------------- /core/backup.php: -------------------------------------------------------------------------------- 1 | fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $name))['value']; 6 | if ($db->fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $name . '_backup'))) { 7 | $db->query($db->update('table.options')->rows(array('value' => $value))->where('name = ?', 'theme:' . $name . '_backup')); ?> 8 | 12 | 13 | query($db->insert('table.options')->rows(array('name' => 'theme:' . $name . '_backup', 'user' => '0', 'value' => $value))); 16 | ?> 17 | 21 | fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $name . '_backup'))) { 26 | $_value = $db->fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $name . '_backup'))['value']; 27 | $db->query($db->update('table.options')->rows(array('value' => $_value))->where('name = ?', 'theme:' . $name)); ?> 28 | 32 | 33 | 37 | 38 | 39 | fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $name . '_backup'))) { 41 | $db->query($db->delete('table.options')->where('name = ?', 'theme:' . $name . '_backup')); ?> 42 | 46 | 47 | 51 | 52 | 53 | 54 | 57 | 58 | 59 | 60 | '; 61 | -------------------------------------------------------------------------------- /core/core.php: -------------------------------------------------------------------------------- 1 | commentsRequireMail = true; 26 | /* 强制用户要求无需填写url */ 27 | Helper::options()->commentsRequireURL = false; 28 | /* 强制用户开启评论回复 */ 29 | Helper::options()->commentsThreaded = true; 30 | /* 强制回复楼层最高999层 */ 31 | Helper::options()->commentsMaxNestingLevels = 999; 32 | 33 | /* 主题开放API 路由规则 */ 34 | if ($self->request->getPathInfo() == "/joe/api") { 35 | switch ($self->request->routeType) { 36 | case 'publish_list': 37 | _getPost($self); 38 | break; 39 | case 'baidu_record': 40 | _getRecord($self); 41 | break; 42 | case 'baidu_push': 43 | _pushRecord($self); 44 | break; 45 | case 'handle_views': 46 | _handleViews($self); 47 | break; 48 | case 'handle_agree': 49 | _handleAgree($self); 50 | break; 51 | case 'wallpaper_type': 52 | _getWallpaperType($self); 53 | break; 54 | case 'wallpaper_list': 55 | _getWallpaperList($self); 56 | break; 57 | case 'maccms_list': 58 | _getMaccmsList($self); 59 | break; 60 | case 'huya_list': 61 | _getHuyaList($self); 62 | break; 63 | case 'server_status': 64 | _getServerStatus($self); 65 | break; 66 | case 'comment_lately': 67 | _getCommentLately($self); 68 | break; 69 | case 'article_filing': 70 | _getArticleFiling($self); 71 | break; 72 | }; 73 | } 74 | 75 | 76 | /* 增加自定义SiteMap功能 */ 77 | if (Helper::options()->JSiteMap && Helper::options()->JSiteMap !== 'off') { 78 | if (strpos($self->request->getRequestUri(), 'sitemap.xml') !== false) { 79 | $self->response->setStatus(200); 80 | $self->setThemeFile("library/sitemap.php"); 81 | } 82 | } 83 | } 84 | 85 | /* 增加自定义字段 */ 86 | function themeFields($layout) 87 | { 88 | $mode = new Typecho_Widget_Helper_Form_Element_Select( 89 | 'mode', 90 | array( 91 | 'default' => '默认模式', 92 | 'single' => '大图模式', 93 | 'multiple' => '三图模式', 94 | 'none' => '无图模式' 95 | ), 96 | 'default', 97 | '文章显示方式', 98 | '介绍:用于设置当前文章在首页和搜索页的显示方式
    99 | 注意:独立页面该功能不会生效' 100 | ); 101 | $layout->addItem($mode); 102 | 103 | $keywords = new Typecho_Widget_Helper_Form_Element_Text( 104 | 'keywords', 105 | NULL, 106 | NULL, 107 | 'SEO关键词(非常重要!)', 108 | '介绍:用于设置当前页SEO关键词
    109 | 注意:多个关键词使用英文逗号进行隔开
    110 | 例如:Typecho,Typecho主题,Typecho模板
    111 | 其他:如果不填写此项,则默认取文章标签' 112 | ); 113 | $layout->addItem($keywords); 114 | 115 | $description = new Typecho_Widget_Helper_Form_Element_Textarea( 116 | 'description', 117 | NULL, 118 | NULL, 119 | 'SEO描述语(非常重要!)', 120 | '介绍:用于设置当前页SEO描述语
    121 | 注意:SEO描述语不应当过长也不应当过少
    122 | 其他:如果不填写此项,则默认截取文章片段' 123 | ); 124 | $layout->addItem($description); 125 | 126 | $abstract = new Typecho_Widget_Helper_Form_Element_Textarea( 127 | 'abstract', 128 | NULL, 129 | NULL, 130 | '自定义摘要(非必填)', 131 | '填写时:将会显示填写的摘要
    132 | 不填写时:默认取文章里的内容' 133 | ); 134 | $layout->addItem($abstract); 135 | 136 | $thumb = new Typecho_Widget_Helper_Form_Element_Textarea( 137 | 'thumb', 138 | NULL, 139 | NULL, 140 | '自定义缩略图(非必填)', 141 | '填写时:将会显示填写的文章缩略图
    142 | 不填写时:
    143 | 1、若文章有图片则取文章内图片
    144 | 2、若文章无图片,并且外观设置里未填写·自定义缩略图·选项,则取模板自带图片
    145 | 3、若文章无图片,并且外观设置里填写了·自定义缩略图·选项,则取自定义缩略图图片
    146 | 注意:多个缩略图时换行填写,一行一个(仅在三图模式下生效)' 147 | ); 148 | $layout->addItem($thumb); 149 | 150 | $video = new Typecho_Widget_Helper_Form_Element_Textarea( 151 | 'video', 152 | NULL, 153 | NULL, 154 | 'M3U8或MP4地址(非必填)', 155 | '填写后,文章会插入一个视频模板
    156 | 格式:视频名称$视频地址。如果有多个,换行写即可
    157 | 例如:
    158 | 第01集$https://iqiyi.cdn9-okzy.com/20201104/17638_8f3022ce/index.m3u8
    159 | 第02集$https://iqiyi.cdn9-okzy.com/20201104/17639_5dcb8a3b/index.m3u8 160 | ' 161 | ); 162 | $layout->addItem($video); 163 | } 164 | -------------------------------------------------------------------------------- /core/parse.php: -------------------------------------------------------------------------------- 1 | 0) { 43 | $isXss = true; 44 | break; 45 | } 46 | } 47 | } else { 48 | $isXss = true; 49 | }; 50 | return $isXss; 51 | } 52 | 53 | /* 过滤评论回复 */ 54 | function _parseCommentReply($text) 55 | { 56 | if (_checkXSS($text)) { 57 | echo "该回复疑似异常,已被系统拦截!"; 58 | } else { 59 | $text = _parseReply($text); 60 | echo preg_replace('/\{!\{([^\"]*)\}!\}/', '画图', $text); 61 | } 62 | } 63 | 64 | /* 过滤表情 */ 65 | function _parseReply($text) 66 | { 67 | $text = preg_replace_callback( 68 | '/\:\:\(\s*(呵呵|哈哈|吐舌|太开心|笑眼|花心|小乖|乖|捂嘴笑|滑稽|你懂的|不高兴|怒|汗|黑线|泪|真棒|喷|惊哭|阴险|鄙视|酷|啊|狂汗|what|疑问|酸爽|呀咩爹|委屈|惊讶|睡觉|笑尿|挖鼻|吐|犀利|小红脸|懒得理|勉强|爱心|心碎|玫瑰|礼物|彩虹|太阳|星星月亮|钱币|茶杯|蛋糕|大拇指|胜利|haha|OK|沙发|手纸|香蕉|便便|药丸|红领巾|蜡烛|音乐|灯泡|开心|钱|咦|呼|冷|生气|弱|吐血|狗头)\s*\)/is', 69 | function ($match) { 70 | return '表情'; 71 | }, 72 | $text 73 | ); 74 | $text = preg_replace_callback( 75 | '/\:\@\(\s*(高兴|小怒|脸红|内伤|装大款|赞一个|害羞|汗|吐血倒地|深思|不高兴|无语|亲亲|口水|尴尬|中指|想一想|哭泣|便便|献花|皱眉|傻笑|狂汗|吐|喷水|看不见|鼓掌|阴暗|长草|献黄瓜|邪恶|期待|得意|吐舌|喷血|无所谓|观察|暗地观察|肿包|中枪|大囧|呲牙|抠鼻|不说话|咽气|欢呼|锁眉|蜡烛|坐等|击掌|惊喜|喜极而泣|抽烟|不出所料|愤怒|无奈|黑线|投降|看热闹|扇耳光|小眼睛|中刀)\s*\)/is', 76 | function ($match) { 77 | return '表情'; 78 | }, 79 | $text 80 | ); 81 | return $text; 82 | } 83 | 84 | /* 格式化留言回复 */ 85 | function _parseLeavingReply($text) 86 | { 87 | if (_checkXSS($text)) { 88 | echo "该回复疑似异常,已被系统拦截!"; 89 | } else { 90 | $text = strip_tags($text); 91 | $text = _parseReply($text); 92 | echo preg_replace('/\{!\{([^\"]*)\}!\}/', '画图', $text); 93 | } 94 | } 95 | 96 | /* 格式化侧边栏回复 */ 97 | function _parseAsideReply($text, $type = true) 98 | { 99 | if (_checkXSS($text)) { 100 | echo "该回复疑似异常,已被系统拦截!"; 101 | } else { 102 | $text = strip_tags($text); 103 | $text = preg_replace('/\{!\{([^\"]*)\}!\}/', '# 图片回复', $text); 104 | if ($type) echo _parseReply($text); 105 | else echo $text; 106 | } 107 | } 108 | 109 | /* 过滤侧边栏最新回复的跳转链接 */ 110 | function _parseAsideLink($link) 111 | { 112 | echo str_replace("#", "?scroll=", $link); 113 | } 114 | -------------------------------------------------------------------------------- /core/widget.php: -------------------------------------------------------------------------------- 1 | parameter->setDefault(array('pageSize' => 10)); 7 | $select = $this->select(); 8 | $select->cleanAttribute('fields'); 9 | $this->db->fetchAll( 10 | $select->from('table.contents') 11 | ->where("table.contents.password IS NULL OR table.contents.password = ''") 12 | ->where('table.contents.status = ?', 'publish') 13 | ->where('table.contents.created <= ?', time()) 14 | ->where('table.contents.type = ?', 'post') 15 | ->limit($this->parameter->pageSize) 16 | ->order('table.contents.views', Typecho_Db::SORT_DESC), 17 | array($this, 'push') 18 | ); 19 | } 20 | } 21 | 22 | class Widget_Contents_Sort extends Widget_Abstract_Contents 23 | { 24 | public function execute() 25 | { 26 | $this->parameter->setDefault(array('page' => 1, 'pageSize' => 10, 'type' => 'created')); 27 | $offset = $this->parameter->pageSize * ($this->parameter->page - 1); 28 | $select = $this->select(); 29 | $select->cleanAttribute('fields'); 30 | $this->db->fetchAll( 31 | $select 32 | ->from('table.contents') 33 | ->where('table.contents.type = ?', 'post') 34 | ->where('table.contents.status = ?', 'publish') 35 | ->where('table.contents.created < ?', time()) 36 | ->limit($this->parameter->pageSize) 37 | ->offset($offset) 38 | ->order($this->parameter->type, Typecho_Db::SORT_DESC), 39 | array($this, 'push') 40 | ); 41 | } 42 | } 43 | 44 | class Widget_Contents_Post extends Widget_Abstract_Contents 45 | { 46 | public function execute() 47 | { 48 | $select = $this->select(); 49 | $select->cleanAttribute('fields'); 50 | $this->db->fetchAll( 51 | $select 52 | ->from('table.contents') 53 | ->where('table.contents.type = ?', 'post') 54 | ->where('table.contents.cid = ?', $this->parameter->cid) 55 | ->limit(1), 56 | array($this, 'push') 57 | ); 58 | } 59 | } -------------------------------------------------------------------------------- /friends.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | need('public/include.php'); ?> 17 | options->JPrismTheme) : ?> 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
    29 | need('public/header.php'); ?> 30 |
    31 |
    32 |
    33 | need('public/batten.php'); ?> 34 | need('public/article.php'); ?> 35 | options->JFriends; 78 | if ($friends_text) { 79 | $friends_arr = explode("\r\n", $friends_text); 80 | if (count($friends_arr) > 0) { 81 | for ($i = 0; $i < count($friends_arr); $i++) { 82 | $name = explode("||", $friends_arr[$i])[0]; 83 | $url = explode("||", $friends_arr[$i])[1]; 84 | $avatar = explode("||", $friends_arr[$i])[2]; 85 | $desc = explode("||", $friends_arr[$i])[3]; 86 | $friends[] = array("name" => trim($name), "url" => trim($url), "avatar" => trim($avatar), "desc" => trim($desc)); 87 | }; 88 | } 89 | } 90 | ?> 91 | 0) : ?> 92 | 105 | 106 | need('public/handle.php'); ?> 107 | need('public/copyright.php'); ?> 108 |
    109 | need('public/comment.php'); ?> 110 |
    111 | need('public/aside.php'); ?> 112 |
    113 | need('public/footer.php'); ?> 114 |
    115 | 116 | 117 | -------------------------------------------------------------------------------- /leaving.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | need('public/include.php'); ?> 17 | 18 | 19 | 20 | 21 | 22 |
    23 | need('public/header.php'); ?> 24 |
    25 |
    26 |
    27 | need('public/batten.php'); ?> 28 |
    29 | comments()->to($comments); ?> 30 | have()) : ?> 31 |
      32 | next()) : ?> 33 |
    • 34 |
      35 | 用户头像 36 |
      author(); ?>
      37 |
      date('Y/m/d'); ?>
      38 |
      39 |
      40 |
      content); ?>
      41 |
      42 |
    • 43 | 44 |
    45 | 46 |
    暂无留言,期待第一个脚印。
    47 | 48 |
    49 |
    50 | need('public/comment.php'); ?> 51 |
    52 |
    53 | need('public/footer.php'); ?> 54 |
    55 | 56 | 57 | -------------------------------------------------------------------------------- /library/player.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | M3U8 - Player 9 | 25 | 26 | 27 | 28 |
    29 | 30 | 31 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /library/sitemap.php: -------------------------------------------------------------------------------- 1 | JSiteMap; 6 | $pages = $db->fetchAll( 7 | $db->select()->from('table.contents') 8 | ->where('table.contents.status = ?', 'publish') 9 | ->where('table.contents.created < ?', $options->gmtTime) 10 | ->where('table.contents.type = ?', 'page') 11 | ->limit($limit) 12 | ->order('table.contents.created', Typecho_Db::SORT_DESC) 13 | ); 14 | $articles = $db->fetchAll( 15 | $db->select()->from('table.contents') 16 | ->where('table.contents.status = ?', 'publish') 17 | ->where('table.contents.created < ?', $options->gmtTime) 18 | ->where('table.contents.type = ?', 'post') 19 | ->limit($limit) 20 | ->order('table.contents.created', Typecho_Db::SORT_DESC) 21 | ); 22 | header("Content-Type: application/xml"); 23 | echo "\n"; 24 | echo "\n"; 25 | foreach ($pages as $page) { 26 | $type = $page['type']; 27 | $routeExists = (NULL != Typecho_Router::get($type)); 28 | $page['pathinfo'] = $routeExists ? Typecho_Router::url($type, $page) : '#'; 29 | $page['permalink'] = Typecho_Common::url($page['pathinfo'], $options->index); 30 | echo "\t\n"; 31 | echo "\t\t" . $page['permalink'] . "\n"; 32 | echo "\t\t" . date('Y-m-d\TH:i:s\Z', $page['modified']) . "\n"; 33 | echo "\t\tmonthly\n"; 34 | echo "\t\t0.8\n"; 35 | echo "\t\n"; 36 | } 37 | foreach ($articles as $article) { 38 | $type = $article['type']; 39 | $article['categories'] = $db->fetchAll($db->select()->from('table.metas') 40 | ->join('table.relationships', 'table.relationships.mid = table.metas.mid') 41 | ->where('table.relationships.cid = ?', $article['cid']) 42 | ->where('table.metas.type = ?', 'category') 43 | ->order('table.metas.order', Typecho_Db::SORT_ASC)); 44 | $article['category'] = urlencode(current(Typecho_Common::arrayFlatten($article['categories'], 'slug'))); 45 | $article['slug'] = urlencode($article['slug']); 46 | $article['date'] = new Typecho_Date($article['created']); 47 | $article['year'] = $article['date']->year; 48 | $article['month'] = $article['date']->month; 49 | $article['day'] = $article['date']->day; 50 | $routeExists = (NULL != Typecho_Router::get($type)); 51 | $article['pathinfo'] = $routeExists ? Typecho_Router::url($type, $article) : '#'; 52 | $article['permalink'] = Typecho_Common::url($article['pathinfo'], $options->index); 53 | echo "\t\n"; 54 | echo "\t\t" . $article['permalink'] . "\n"; 55 | echo "\t\t" . date('Y-m-d\TH:i:s\Z', $article['modified']) . "\n"; 56 | echo "\t\tmonthly\n"; 57 | echo "\t\t0.5\n"; 58 | echo "\t\n"; 59 | } 60 | echo ""; 61 | -------------------------------------------------------------------------------- /live.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | need('public/include.php'); ?> 17 | 18 | 19 | 20 | 21 | 22 |
    23 | need('public/header.php'); ?> 24 |
    25 |
    26 | 27 | 28 |
    29 |
    正在播放:
    30 | 31 | 32 |
    33 | 34 | 35 |
    36 |
    37 |
    直播分类
    38 | 39 | 40 | 41 |
    42 |
    43 |
  • 正在拼命加载中...
  • 44 |
    45 |
    46 |
    47 |
      48 | 49 |
      50 | need('public/aside.php'); ?> 51 |
      52 | need('public/footer.php'); ?> 53 |
      54 | 55 | 56 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typecho-joe-latest", 3 | "version": "7.7.1", 4 | "description": "A Theme Of Typecho", 5 | "main": "index.php", 6 | "keywords": [ 7 | "joe", 8 | "typecho", 9 | "joe theme", 10 | "typecho joe", 11 | "typecho joe theme" 12 | ], 13 | "author": "Joe", 14 | "license": "ISC" 15 | } 16 | -------------------------------------------------------------------------------- /page.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | need('public/include.php'); ?> 6 | options->JPrismTheme) : ?> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
      18 | need('public/header.php'); ?> 19 |
      20 |
      21 |
      22 | need('public/batten.php'); ?> 23 | need('public/article.php'); ?> 24 | need('public/handle.php'); ?> 25 | need('public/copyright.php'); ?> 26 |
      27 | need('public/comment.php'); ?> 28 |
      29 | need('public/aside.php'); ?> 30 |
      31 | need('public/footer.php'); ?> 32 |
      33 | 34 | 35 | -------------------------------------------------------------------------------- /post.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | need('public/include.php'); ?> 6 | options->JPrismTheme) : ?> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
      19 | need('public/header.php'); ?> 20 |
      21 | 37 |
      38 |
      39 |
      40 |
      41 | need('public/batten.php'); ?> 42 | options->JOverdue && $this->options->JOverdue !== 'off' && floor((time() - ($this->modified)) / 86400) > $this->options->JOverdue) : ?> 43 |
      44 |
      45 |
      46 | 47 | 48 | 49 | 50 | 51 | 温馨提示: 52 |
      53 |
      54 | 本文最后更新于modified); ?>,已超过modified)) / 86400); ?>天没有更新,若内容或图片失效,请留言反馈。 55 |
      56 |
      57 |
      58 | 59 | need('public/article.php'); ?> 60 | need('public/handle.php'); ?> 61 | need('public/operate.php'); ?> 62 | need('public/copyright.php'); ?> 63 | need('public/related.php'); ?> 64 |
      65 |
        66 | theNext('', '', ['title' => '上一篇']); ?> 67 | thePrev('', '', ['title' => '下一篇']); ?> 68 |
      69 | need('public/comment.php'); ?> 70 |
      71 | need('public/aside.php'); ?> 72 |
      73 | need('public/footer.php'); ?> 74 |
      75 | 76 | 77 | -------------------------------------------------------------------------------- /public/article.php: -------------------------------------------------------------------------------- 1 |
      2 | hidden && $this->fields->video) : ?> 3 |
      4 |
      5 |
      播放预览
      6 |
      7 | 8 |
      9 |
      10 |
      11 |
      剧集列表
      12 | fields->video); ?> 13 |
      14 | 15 |
      ">
      16 | 17 |
      18 |
      19 |
      20 | 21 | 22 | is('post')) : ?> 23 | hidden) : ?> 24 |
      25 |
      26 | 27 | 28 | 29 | 30 | 31 | 32 |
      33 |
      34 | 35 | user->hasLogin()) ?> 36 | 37 | 38 | user->hasLogin()) ?> 39 | 40 |
      -------------------------------------------------------------------------------- /public/batten.php: -------------------------------------------------------------------------------- 1 | categories) > 0 || $this->user->uid == $this->authorId) : ?> 2 |
      3 | categories) > 0) : ?> 4 | categories, 0, 5) as $key => $item) : ?> 5 | 6 | 7 | 8 | user->uid == $this->authorId) : ?> 9 | is('post')) : ?> 10 | 编辑文章 11 | 12 | 编辑页面 13 | 14 | 15 |
      16 | 17 | 18 |

      title() ?>

      19 |
      20 |
      21 | <?php $this->author(); ?> 22 |
      23 |
      24 | author(); ?> 25 |
      26 |
      27 | date('Y-m-d'); ?> 28 | / 29 | commentsNum('%d'); ?> 评论 30 | / 31 | 阅读 32 | / 33 | 正在检测是否收录... 34 |
      35 |
      36 |
      37 | 38 |
      -------------------------------------------------------------------------------- /public/config.php: -------------------------------------------------------------------------------- 1 | 17 | options->JCustomFont; 19 | if (strpos($fontUrl, 'woff2') !== false) $fontFormat = 'woff2'; 20 | elseif (strpos($fontUrl, 'woff') !== false) $fontFormat = 'woff'; 21 | elseif (strpos($fontUrl, 'ttf') !== false) $fontFormat = 'truetype'; 22 | elseif (strpos($fontUrl, 'eot') !== false) $fontFormat = 'embedded-opentype'; 23 | elseif (strpos($fontUrl, 'svg') !== false) $fontFormat = 'svg'; 24 | ?> 25 | -------------------------------------------------------------------------------- /public/copyright.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/footer.php: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 | options->JFooter_Left() ?> 5 |
      6 | options->JBirthDay) : ?> 7 |
      8 | 已运行 00000000 9 |
      10 | 11 |
      12 | options->JFooter_Right() ?> 13 |
      14 |
      15 |
      16 | 17 |
      18 |
      19 | 20 | 21 | 22 |
      23 |
      24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
      32 |
      33 | 34 | 50 | 51 | options->JCustomBodyEnd() ?> 52 | 53 | footer(); ?> -------------------------------------------------------------------------------- /public/handle.php: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 | 5 | 6 | 7 | 8 | 9 | 10 |
      11 | 12 |
      13 |
      -------------------------------------------------------------------------------- /public/include.php: -------------------------------------------------------------------------------- 1 | need('public/config.php'); ?> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <?php $this->archiveTitle(array('category' => '分类 %s 下的文章', 'search' => '包含关键字 %s 的文章', 'tag' => '标签 %s 下的文章', 'author' => '%s 发布的文章'), '', ' - '); ?><?php $this->options->title(); ?> 11 | is('single')) : ?> 12 | 13 | 14 | header('keywords=&description='); ?> 15 | 16 | header(); ?> 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | options->JAside_3DTag === 'on') : ?> 36 | 37 | 38 | 39 | options->JCursorEffects && $this->options->JCursorEffects !== 'off') : ?> 40 | 41 | 42 | 43 | 44 | options->JCustomHeadEnd() ?> -------------------------------------------------------------------------------- /public/related.php: -------------------------------------------------------------------------------- 1 | related(4)->to($relatedPosts); ?> 2 | have()) : ?> 3 | 14 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HaoOuBa/Joe/a00c73ff85a6b7eb957ba4b9977004b7e16a7480/screenshot.png -------------------------------------------------------------------------------- /video.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | need('public/include.php'); ?> 17 | 18 | 19 | 20 | 21 | 22 |
      23 | need('public/header.php'); ?> 24 |
      25 |
      26 | 27 |
      28 |
      影片简介
      29 |
      30 |

      正在拼命加载中...

      31 |
      32 |
      33 |
      34 |
      正在播放:
      35 | 36 |
      37 | 38 |
      39 |
      视频分类
      40 |
        41 |
      • 正在拼命加载中...
      • 42 |
      43 |
      44 |
      45 |
      视频列表
      46 | 50 |
      51 |
      52 |
        53 | 54 |
        55 | need('public/aside.php'); ?> 56 |
        57 | need('public/footer.php'); ?> 58 |
        59 | 60 | 61 | -------------------------------------------------------------------------------- /wallpaper.php: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | need('public/include.php'); ?> 17 | 18 | 19 | 20 | 21 | 22 |
        23 | need('public/header.php'); ?> 24 |
        25 |
        26 |
        27 |
        壁纸分类
        28 |
          29 |
        • 正在拼命加载中...
        • 30 |
        31 |
        32 |
        33 |
          34 |
          35 | need('public/aside.php'); ?> 36 |
          37 | need('public/footer.php'); ?> 38 |
          39 | 40 | 41 | --------------------------------------------------------------------------------