This commit is contained in:
杜恒 2021-01-26 21:41:01 +08:00
parent bf1450eb2e
commit f2ed0ae7e1
27 changed files with 1509 additions and 515 deletions

View File

@ -1 +1 @@
.joe_archive{border-radius:8px;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)}
.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)}

View File

@ -1,5 +1,6 @@
/* 搜索页的样式 */
.joe_archive {
border-radius: 8px;
border-radius: var(--radius-wrap);
padding: 0 15px;
background: var(--background);
box-shadow: var(--box-shadow);

View File

@ -1,3 +1,4 @@
/* 后台设置的样式 */
.col-mb-12.col-tb-8.col-tb-offset-2 {
margin-left: 0;
width: 100%;

File diff suppressed because one or more lines are too long

View File

@ -1108,6 +1108,13 @@ html[data-night='night'] {
background: #9f44d3;
}
}
.edit {
color: var(--minor);
margin-left: auto;
&:hover {
color: var(--theme);
}
}
}
&__title {
font-size: 24px;
@ -1123,7 +1130,7 @@ html[data-night='night'] {
align-items: center;
justify-content: space-between;
padding-bottom: 15px;
border-bottom: 1px solid var(--classB);
border-bottom: 1px solid var(--classC);
&::after {
content: '';
position: absolute;
@ -1472,6 +1479,45 @@ html[data-night='night'] {
}
}
}
&-protected {
display: flex;
justify-content: center;
background: repeating-linear-gradient(145deg, var(--classB), var(--classB) 15px, var(--background) 0, var(--background) 30px);
padding: 20px 0;
margin-bottom: 15px;
.contain {
position: relative;
box-shadow: var(--box-shadow);
.icon {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 15px;
}
.password {
width: 300px;
height: 44px;
border: none;
border-radius: var(--radius-inner);
color: var(--routine);
padding-left: 50px;
background: var(--background);
}
.submit {
position: absolute;
top: 0;
right: 0;
height: 44px;
line-height: 44px;
width: 44px;
transition: opacity 0.35s;
cursor: pointer;
text-align: center;
font-size: 13px;
color: var(--main);
}
}
}
}
&__agree {
display: flex;
@ -1515,7 +1561,7 @@ html[data-night='night'] {
}
&__copyright {
padding-top: 15px;
border-top: 1px solid var(--classB);
border-top: 1px solid var(--classC);
.content {
background: var(--classD);
padding: 15px;
@ -1721,20 +1767,10 @@ html[data-night='night'] {
font-size: 24px;
color: var(--main);
text-shadow: var(--text-shadow);
border-bottom: 1px solid var(--classB);
border-bottom: 1px solid var(--classC);
margin-bottom: 15px;
padding-bottom: 15px;
}
&__empty {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: var(--routine);
&-icon {
fill: var(--routine);
}
}
&__close {
display: flex;
align-items: center;
@ -1756,6 +1792,7 @@ html[data-night='night'] {
height: 32px;
color: var(--main);
border: none;
transition: color 0.35s, background 0.35s;
&:first-child {
border-top-left-radius: var(--radius-inner);
}
@ -1811,7 +1848,7 @@ html[data-night='night'] {
padding: 15px;
.text {
width: 100%;
height: 180px;
height: 200px;
border: none;
resize: none;
vertical-align: middle;
@ -1833,6 +1870,7 @@ html[data-night='night'] {
cursor: pointer;
margin-right: 10px;
color: var(--main);
transition: color 0.35s;
&.active {
color: var(--theme);
}
@ -1851,6 +1889,7 @@ html[data-night='night'] {
border-radius: 50%;
margin: 0 5px;
cursor: pointer;
transition: box-shadow 0.35s;
&.active {
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.35);
}
@ -1887,6 +1926,23 @@ html[data-night='night'] {
}
}
}
.foot {
position: relative;
display: flex;
justify-content: flex-end;
padding: 0 15px 15px;
.submit {
button {
border-radius: 3px;
height: 32px;
padding: 0 15px;
border: none;
background: var(--theme);
color: #fff;
font-size: 14px;
}
}
}
}
}
&__list {

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,6 @@
/* 首页样式 */
.joe_index {
border-radius: 8px;
border-radius: var(--radius-wrap);
padding: 0 15px;
background: var(--background);
box-shadow: var(--box-shadow);
@ -28,7 +29,7 @@
width: 100%;
height: 160px;
margin-bottom: 15px;
border-radius: 4px;
border-radius: var(--radius-inner);
overflow: hidden;
&:last-child {
margin-bottom: 0;
@ -103,7 +104,7 @@
width: 100%;
height: 125px;
object-fit: cover;
border-radius: 4px 4px 0 0;
border-radius: var(--radius-inner) var(--radius-inner) 0 0;
transition: opacity 0.35s;
}
.title {
@ -148,7 +149,7 @@
width: 100%;
height: 200px;
object-fit: cover;
border-radius: 4px;
border-radius: var(--radius-inner);
transition: opacity 0.35s;
&:hover {
opacity: 0.85;
@ -232,11 +233,11 @@
flex: 1;
height: 335px;
--swiper-theme-color: #fff;
border-radius: 4px;
border-radius: var(--radius-inner);
.item {
display: block;
height: 335px;
border-radius: 4px;
border-radius: var(--radius-inner);
.thumbnail {
width: 100%;
height: 100%;

1
assets/css/joe.owo.css Normal file

File diff suppressed because one or more lines are too long

430
assets/css/joe.owo.scss Normal file
View File

@ -0,0 +1,430 @@
.OwO {
position: relative;
user-select: none;
}
.OwO:hover .OwO-logo {
color: rgb(68, 68, 68);
}
.OwO.OwO-open .OwO-logo {
border-bottom: none;
color: rgb(68, 68, 68);
margin-bottom: 10px;
span {
animation: 5s ease-in-out 0s infinite normal none running a;
}
}
.OwO.OwO-open .OwO-body {
display: block;
}
.OwO.OwO-up .OwO-body {
top: inherit;
bottom: 21px;
border-radius: 4px 4px 4px 0px;
}
.OwO.OwO-up .OwO-body .OwO-bar .OwO-packages li:nth-child(1) {
border-radius: 0px;
}
.OwO.OwO-up.OwO-open .OwO-logo {
border-right: 1px solid rgb(221, 221, 221);
border-bottom: 1px solid rgb(221, 221, 221);
border-left: 1px solid rgb(221, 221, 221);
border-image: initial;
border-top: none;
}
.OwO .OwO-logo {
position: relative;
display: inline-block;
color: rgb(136, 136, 136);
cursor: pointer;
z-index: 2;
span {
display: flex;
align-items: center;
height: 32px;
line-height: 32px;
svg {
width: 20px;
height: 20px;
margin-right: 5px;
}
}
}
.OwO .OwO-body {
display: none;
background: #fff;
z-index: 1;
border-radius: 4px;
}
.OwO .OwO-body .OwO-items {
user-select: none;
display: none;
padding: 10px;
margin: 0px;
overflow-y: auto;
font-size: 0px;
overscroll-behavior: none;
-webkit-overflow-scrolling: touch;
}
.OwO .OwO-body .OwO-items .OwO-item {
width: calc(100% / 12);
list-style-type: none;
padding: 5px 10px;
border-radius: 5px;
display: inline-block;
font-size: 12px;
line-height: 14px;
cursor: pointer;
transition: all 0.3s ease 0s;
}
.OwO .OwO-body .OwO-items .OwO-item:hover {
background: rgb(238, 238, 238);
box-shadow: rgba(0, 0, 0, 0.14) 0px 2px 2px 0px, rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, rgba(0, 0, 0, 0.12) 0px 1px 5px 0px;
animation: 5s ease-in-out 0s infinite normal none running a;
}
.OwO .OwO-body .OwO-items-emoji .OwO-item {
font-size: 20px;
line-height: 19px;
}
.OwO .OwO-body .OwO-items-image .OwO-item img {
max-width: 100%;
}
.OwO .OwO-body .OwO-items-emoticon .OwO-item {
width: 25%;
text-align: center;
}
.OwO .OwO-body .OwO-items-show {
display: block;
}
.OwO .OwO-body .OwO-bar {
width: 100%;
height: 30px;
border-top: 1px solid rgb(221, 221, 221);
background: rgb(255, 255, 255);
border-radius: 0px 0px 4px 4px;
color: rgb(68, 68, 68);
}
.OwO .OwO-body .OwO-bar .OwO-packages {
margin: 0px;
padding: 0px;
font-size: 0px;
}
.OwO .OwO-body .OwO-bar .OwO-packages li {
list-style-type: none;
display: inline-block;
line-height: 29px;
font-size: 14px;
padding: 0px 10px;
cursor: pointer;
}
.OwO .OwO-body .OwO-bar .OwO-packages li:nth-child(1) {
border-radius: 0px 0px 0px 3px;
}
.OwO .OwO-body .OwO-bar .OwO-packages li:hover {
background: rgb(238, 238, 238);
}
.OwO .OwO-body .OwO-bar .OwO-packages .OwO-package-active {
background: rgb(238, 238, 238);
transition: all 0.3s ease 0s;
}
@-webkit-keyframes a {
2% {
transform: translateY(1.5px) rotate(1.5deg);
}
4% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
6% {
transform: translateY(1.5px) rotate(-1.5deg);
}
8% {
transform: translateY(-1.5px) rotate(-1.5deg);
}
10% {
transform: translateY(2.5px) rotate(1.5deg);
}
12% {
transform: translateY(-0.5px) rotate(1.5deg);
}
14% {
transform: translateY(-1.5px) rotate(1.5deg);
}
16% {
transform: translateY(-0.5px) rotate(-1.5deg);
}
18% {
transform: translateY(0.5px) rotate(-1.5deg);
}
20% {
transform: translateY(-1.5px) rotate(2.5deg);
}
22% {
transform: translateY(0.5px) rotate(-1.5deg);
}
24% {
transform: translateY(1.5px) rotate(1.5deg);
}
26% {
transform: translateY(0.5px) rotate(0.5deg);
}
28% {
transform: translateY(0.5px) rotate(1.5deg);
}
30% {
transform: translateY(-0.5px) rotate(2.5deg);
}
32%,
34% {
transform: translateY(1.5px) rotate(-0.5deg);
}
36% {
transform: translateY(-1.5px) rotate(2.5deg);
}
38% {
transform: translateY(1.5px) rotate(-1.5deg);
}
40% {
transform: translateY(-0.5px) rotate(2.5deg);
}
42% {
transform: translateY(2.5px) rotate(-1.5deg);
}
44% {
transform: translateY(1.5px) rotate(0.5deg);
}
46% {
transform: translateY(-1.5px) rotate(2.5deg);
}
48% {
transform: translateY(-0.5px) rotate(0.5deg);
}
50% {
transform: translateY(0.5px) rotate(0.5deg);
}
52% {
transform: translateY(2.5px) rotate(2.5deg);
}
54% {
transform: translateY(-1.5px) rotate(1.5deg);
}
56% {
transform: translateY(2.5px) rotate(2.5deg);
}
58% {
transform: translateY(0.5px) rotate(2.5deg);
}
60% {
transform: translateY(2.5px) rotate(2.5deg);
}
62% {
transform: translateY(-0.5px) rotate(2.5deg);
}
64% {
transform: translateY(-0.5px) rotate(1.5deg);
}
66% {
transform: translateY(1.5px) rotate(-0.5deg);
}
68% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
70% {
transform: translateY(1.5px) rotate(0.5deg);
}
72% {
transform: translateY(2.5px) rotate(1.5deg);
}
74% {
transform: translateY(-0.5px) rotate(0.5deg);
}
76% {
transform: translateY(-0.5px) rotate(2.5deg);
}
78% {
transform: translateY(-0.5px) rotate(1.5deg);
}
80% {
transform: translateY(1.5px) rotate(1.5deg);
}
82% {
transform: translateY(-0.5px) rotate(0.5deg);
}
84% {
transform: translateY(1.5px) rotate(2.5deg);
}
86% {
transform: translateY(-1.5px) rotate(-1.5deg);
}
88% {
transform: translateY(-0.5px) rotate(2.5deg);
}
90% {
transform: translateY(2.5px) rotate(-0.5deg);
}
92% {
transform: translateY(0.5px) rotate(-0.5deg);
}
94% {
transform: translateY(2.5px) rotate(0.5deg);
}
96% {
transform: translateY(-0.5px) rotate(1.5deg);
}
98% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
0%,
100% {
transform: translate(0px) rotate(0deg);
}
}
@keyframes a {
2% {
transform: translateY(1.5px) rotate(1.5deg);
}
4% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
6% {
transform: translateY(1.5px) rotate(-1.5deg);
}
8% {
transform: translateY(-1.5px) rotate(-1.5deg);
}
10% {
transform: translateY(2.5px) rotate(1.5deg);
}
12% {
transform: translateY(-0.5px) rotate(1.5deg);
}
14% {
transform: translateY(-1.5px) rotate(1.5deg);
}
16% {
transform: translateY(-0.5px) rotate(-1.5deg);
}
18% {
transform: translateY(0.5px) rotate(-1.5deg);
}
20% {
transform: translateY(-1.5px) rotate(2.5deg);
}
22% {
transform: translateY(0.5px) rotate(-1.5deg);
}
24% {
transform: translateY(1.5px) rotate(1.5deg);
}
26% {
transform: translateY(0.5px) rotate(0.5deg);
}
28% {
transform: translateY(0.5px) rotate(1.5deg);
}
30% {
transform: translateY(-0.5px) rotate(2.5deg);
}
32%,
34% {
transform: translateY(1.5px) rotate(-0.5deg);
}
36% {
transform: translateY(-1.5px) rotate(2.5deg);
}
38% {
transform: translateY(1.5px) rotate(-1.5deg);
}
40% {
transform: translateY(-0.5px) rotate(2.5deg);
}
42% {
transform: translateY(2.5px) rotate(-1.5deg);
}
44% {
transform: translateY(1.5px) rotate(0.5deg);
}
46% {
transform: translateY(-1.5px) rotate(2.5deg);
}
48% {
transform: translateY(-0.5px) rotate(0.5deg);
}
50% {
transform: translateY(0.5px) rotate(0.5deg);
}
52% {
transform: translateY(2.5px) rotate(2.5deg);
}
54% {
transform: translateY(-1.5px) rotate(1.5deg);
}
56% {
transform: translateY(2.5px) rotate(2.5deg);
}
58% {
transform: translateY(0.5px) rotate(2.5deg);
}
60% {
transform: translateY(2.5px) rotate(2.5deg);
}
62% {
transform: translateY(-0.5px) rotate(2.5deg);
}
64% {
transform: translateY(-0.5px) rotate(1.5deg);
}
66% {
transform: translateY(1.5px) rotate(-0.5deg);
}
68% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
70% {
transform: translateY(1.5px) rotate(0.5deg);
}
72% {
transform: translateY(2.5px) rotate(1.5deg);
}
74% {
transform: translateY(-0.5px) rotate(0.5deg);
}
76% {
transform: translateY(-0.5px) rotate(2.5deg);
}
78% {
transform: translateY(-0.5px) rotate(1.5deg);
}
80% {
transform: translateY(1.5px) rotate(1.5deg);
}
82% {
transform: translateY(-0.5px) rotate(0.5deg);
}
84% {
transform: translateY(1.5px) rotate(2.5deg);
}
86% {
transform: translateY(-1.5px) rotate(-1.5deg);
}
88% {
transform: translateY(-0.5px) rotate(2.5deg);
}
90% {
transform: translateY(2.5px) rotate(-0.5deg);
}
92% {
transform: translateY(0.5px) rotate(-0.5deg);
}
94% {
transform: translateY(2.5px) rotate(0.5deg);
}
96% {
transform: translateY(-0.5px) rotate(1.5deg);
}
98% {
transform: translateY(-1.5px) rotate(-0.5deg);
}
0%,
100% {
transform: translate(0px) rotate(0deg);
}
}

View File

@ -1,34 +1,35 @@
/* 文章页面的样式 */
.joe_bread {
padding-top: 15px;
&__bread {
display: flex;
align-items: center;
.line {
color: var(--seat);
padding: 0 8px;
}
.item {
color: var(--minor);
white-space: nowrap;
.link {
color: var(--routine);
transition: color 0.35s;
&:hover {
color: var(--theme);
}
}
.icon {
width: 15px;
height: 15px;
min-width: 15px;
min-height: 15px;
fill: var(--routine);
margin-right: 2px;
}
&:first-child {
display: flex;
align-items: center;
}
}
}
padding-top: 15px;
&__bread {
display: flex;
align-items: center;
.line {
color: var(--seat);
padding: 0 8px;
}
.item {
color: var(--minor);
white-space: nowrap;
.link {
color: var(--routine);
transition: color 0.35s;
&:hover {
color: var(--theme);
}
}
.icon {
width: 15px;
height: 15px;
min-width: 15px;
min-height: 15px;
fill: var(--routine);
margin-right: 2px;
}
&:first-child {
display: flex;
align-items: center;
}
}
}
}

View File

@ -1,10 +1,9 @@
console.time('Global.js执行时长');
document.addEventListener('DOMContentLoaded', () => {
/* 昼夜模式 */
/* 初始化昼夜模式 */
{
if (localStorage.getItem('data-night')) {
$('html').attr('data-night', 'night');
$('.joe_action_item.mode .icon-1').addClass('active');
$('.joe_action_item.mode .icon-2').removeClass('active');
} else {
@ -226,15 +225,33 @@ document.addEventListener('DOMContentLoaded', () => {
/* 激活画图功能 */
{
if ($('#joe_comment_draw').length !== 0) {
window.sketchpad = new Sketchpad({
element: '#joe_comment_draw',
height: 300,
penSize: 5,
color: '303133'
/* 激活画板 */
window.sketchpad = new Sketchpad({ element: '#joe_comment_draw', height: 300, penSize: 5, color: '303133' });
/* 撤销上一步 */
$('.joe_comment__respond-form .body .draw .icon-undo').on('click', () => window.sketchpad.undo());
/* 动画预览 */
$('.joe_comment__respond-form .body .draw .icon-animate').on('click', () => window.sketchpad.animate(10));
/* 更改画板的线宽 */
$('.joe_comment__respond-form .body .draw .line li').on('click', function () {
window.sketchpad.penSize = $(this).attr('data-line');
$(this).addClass('active').siblings().removeClass('active');
});
/* 更改画板的颜色 */
$('.joe_comment__respond-form .body .draw .color li').on('click', function () {
window.sketchpad.color = $(this).attr('data-color');
$(this).addClass('active').siblings().removeClass('active');
});
}
}
/* 激活点击回复可见的回复按钮,页面滚动到评论区 */
{
$('.joe_detail__article-hide i').on('click', function () {
const top = $('.joe_comment').offset().top - $('.joe_header').height() - 15;
window.scrollTo({ top, behavior: 'smooth' });
});
}
/* 懒加载 */
new LazyLoad('.lazyload');

145
assets/js/joe.owo.js Normal file
View File

@ -0,0 +1,145 @@
(() => {
class OwO {
constructor(option) {
const defaultOption = {
container: document.getElementsByClassName('OwO')[0],
target: document.getElementsByTagName('textarea')[0],
position: 'down',
width: '100%',
maxHeight: '250px',
api: 'https://api.anotherhome.net/OwO/OwO.json'
};
for (let defaultKey in defaultOption) {
if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {
option[defaultKey] = defaultOption[defaultKey];
}
}
this.container = option.container;
this.target = option.target;
if (option.position === 'up') {
this.container.classList.add('OwO-up');
}
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
this.odata = JSON.parse(xhr.responseText);
this.init(option);
} else {
console.log('OwO data request was unsuccessful: ' + xhr.status);
}
}
};
xhr.open('get', option.api, true);
xhr.send(null);
}
init(option) {
this.area = option.target;
this.packages = Object.keys(this.odata);
// fill in HTML
let html = `
<div class="OwO-logo"><span><svg viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg></span></div>
<div class="OwO-body" style="width: ${option.width}"><div class="OwO-jio"></div>`;
for (let i = 0; i < this.packages.length; i++) {
html += `
<ul class="OwO-items OwO-items-${this.odata[this.packages[i]].type}" style="max-height: ${parseInt(option.maxHeight) - 53 + 'px'};">`;
var type = this.odata[this.packages[i]].type;
let opackage = this.odata[this.packages[i]].container;
for (let i = 0; i < opackage.length; i++) {
if (type == 'image') {
html += `
<li class="OwO-item" data-id="${opackage[i].data}" title="${opackage[i].text}">${opackage[i].icon}</li>`;
} else {
html += `
<li class="OwO-item" data-id="not-given" title="${opackage[i].text}">${opackage[i].icon}</li>`;
}
}
html += `
</ul>`;
}
html += `
<div class="OwO-bar">
<ul class="OwO-packages">`;
for (let i = 0; i < this.packages.length; i++) {
html += `
<li><span>${this.packages[i]}</span></li>`;
}
html += `
</ul>
</div>
</div>
`;
this.container.innerHTML = html;
// bind event
this.logo = document.getElementsByClassName('OwO-logo')[0];
this.logo.addEventListener('click', e => {
e.stopPropagation();
this.toggle();
});
this.container.getElementsByClassName('OwO-body')[0].addEventListener('click', e => {
let target = null;
if (e.target.classList.contains('OwO-item')) {
target = e.target;
} else if (e.target.parentNode.classList.contains('OwO-item')) {
target = e.target.parentNode;
}
if (target) {
const cursorPos = this.area.selectionEnd;
let areaValue = this.area.value;
//this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos);
if (target.dataset.id == 'not-given') {
this.area.value = areaValue.slice(0, cursorPos) + target.innerHTML + areaValue.slice(cursorPos);
} else {
this.area.value = areaValue.slice(0, cursorPos) + target.dataset.id + areaValue.slice(cursorPos);
}
this.area.focus();
this.toggle();
}
});
this.packagesEle = this.container.getElementsByClassName('OwO-packages')[0];
for (let i = 0; i < this.packagesEle.children.length; i++) {
(index => {
this.packagesEle.children[i].addEventListener('click', e => {
e.stopPropagation();
this.tab(index);
});
})(i);
}
this.tab(0);
}
toggle() {
if (this.container.classList.contains('OwO-open')) {
this.container.classList.remove('OwO-open');
} else {
this.container.classList.add('OwO-open');
}
}
tab(index) {
const itemsShow = this.container.getElementsByClassName('OwO-items-show')[0];
if (itemsShow) {
itemsShow.classList.remove('OwO-items-show');
}
this.container.getElementsByClassName('OwO-items')[index].classList.add('OwO-items-show');
const packageActive = this.container.getElementsByClassName('OwO-package-active')[0];
if (packageActive) {
packageActive.classList.remove('OwO-package-active');
}
this.packagesEle.getElementsByTagName('li')[index].classList.add('OwO-package-active');
}
}
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = OwO;
} else {
window.OwO = OwO;
}
})();

View File

@ -12,8 +12,32 @@ document.addEventListener('DOMContentLoaded', () => {
$('#Joe_Baidu_Record').css('color', '#67C23A');
$('#Joe_Baidu_Record').html('已收录');
} else {
const url = `https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`;
$('#Joe_Baidu_Record').html(`<a target="_blank" href="${url}" rel="noopener noreferrer nofollow" style="color: #F56C6C">未收录,提交收录</a>`);
/* 如果填写了Token则自动推送给百度 */
if (Joe.BAIDU_PUSH) {
$('#Joe_Baidu_Record').html('<span style="color: #E6A23C">未收录,推送中...</span>');
const _timer = setTimeout(function () {
$.ajax({
url: Joe.BASE_API,
type: 'POST',
data: {
routeType: 'baidu_push',
domain: encodeURI(window.location.hostname),
url: encodeURI(window.location.href)
},
success(res) {
if (res.error) {
$('#Joe_Baidu_Record').html('<span style="color: #F56C6C">推送失败,请检查!</span>');
} else {
$('#Joe_Baidu_Record').html('<span style="color: #67C23A">推送成功!</span>');
}
}
});
clearTimeout(_timer);
}, 1000);
} else {
const url = `https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`;
$('#Joe_Baidu_Record').html(`<a target="_blank" href="${url}" rel="noopener noreferrer nofollow" style="color: #F56C6C">未收录,提交收录</a>`);
}
}
}
});

259
assets/json/owo.json Normal file
View File

@ -0,0 +1,259 @@
{
"泡泡": {
"type": "image",
"container": [
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E591B5E591B5_2x.png\">", "data": "::(呵呵)", "text": "呵呵" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E59388E59388_2x.png\">", "data": "::(哈哈)", "text": "哈哈" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E59090E8888C_2x.png\">", "data": "::(吐舌)", "text": "吐舌" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5A4AAE5BC80E5BF83_2x.png\">", "data": "::(太开心)", "text": "太开心" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E7AC91E79CBC_2x.png\">", "data": "::(笑眼)", "text": "笑眼" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E88AB1E5BF83_2x.png\">", "data": "::(花心)", "text": "花心" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5B08FE4B996_2x.png\">", "data": "::(小乖)", "text": "小乖" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E4B996_2x.png\">", "data": "::(乖)", "text": "乖" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E68D82E598B4E7AC91_2x.png\">", "data": "::(捂嘴笑)", "text": "捂嘴笑" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6BB91E7A8BD_2x.png\">", "data": "::(滑稽)", "text": "滑稽" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E4BDA0E68782E79A84_2x.png\">", "data": "::(你懂的)", "text": "你懂的" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E4B88DE9AB98E585B4_2x.png\">", "data": "::(不高兴)", "text": "不高兴" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E68092_2x.png\">", "data": "::(怒)", "text": "怒" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6B197_2x.png\">", "data": "::(汗)", "text": "汗" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E9BB91E7BABF_2x.png\">", "data": "::(黑线)", "text": "黑线" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6B3AA_2x.png\">", "data": "::(泪)", "text": "泪" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E79C9FE6A392_2x.png\">", "data": "::(真棒)", "text": "真棒" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E596B7_2x.png\">", "data": "::(喷)", "text": "喷" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6838AE593AD_2x.png\">", "data": "::(惊哭)", "text": "惊哭" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E998B4E999A9_2x.png\">", "data": "::(阴险)", "text": "阴险" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E98499E8A786_2x.png\">", "data": "::(鄙视)", "text": "鄙视" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E985B7_2x.png\">", "data": "::(酷)", "text": "酷" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5958A_2x.png\">", "data": "::(啊)", "text": "啊" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E78B82E6B197_2x.png\">", "data": "::(狂汗)", "text": "狂汗" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/what_2x.png\">", "data": "::(what)", "text": "what" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E79691E997AE_2x.png\">", "data": "::(疑问)", "text": "疑问" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E985B8E788BD_2x.png\">", "data": "::(酸爽)", "text": "酸爽" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E59180E592A9E788B9_2x.png\">", "data": "::(呀咩爹)", "text": "呀咩爹" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5A794E5B188_2x.png\">", "data": "::(委屈)", "text": "委屈" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6838AE8AEB6_2x.png\">", "data": "::(惊讶)", "text": "惊讶" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E79DA1E8A789_2x.png\">", "data": "::(睡觉)", "text": "睡觉" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E7AC91E5B0BF_2x.png\">", "data": "::(笑尿)", "text": "笑尿" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E68C96E9BCBB_2x.png\">", "data": "::(挖鼻)", "text": "挖鼻" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E59090_2x.png\">", "data": "::(吐)", "text": "吐" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E78A80E588A9_2x.png\">", "data": "::(犀利)", "text": "犀利" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5B08FE7BAA2E884B8_2x.png\">", "data": "::(小红脸)", "text": "小红脸" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E68792E5BE97E79086_2x.png\">", "data": "::(懒得理)", "text": "懒得理" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E58B89E5BCBA_2x.png\">", "data": "::(勉强)", "text": "勉强" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E788B1E5BF83_2x.png\">", "data": "::(爱心)", "text": "爱心" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5BF83E7A28E_2x.png\">", "data": "::(心碎)", "text": "心碎" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E78EABE791B0_2x.png\">", "data": "::(玫瑰)", "text": "玫瑰" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E7A4BCE789A9_2x.png\">", "data": "::(礼物)", "text": "礼物" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5BDA9E899B9_2x.png\">", "data": "::(彩虹)", "text": "彩虹" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5A4AAE998B3_2x.png\">", "data": "::(太阳)", "text": "太阳" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6989FE6989FE69C88E4BAAE_2x.png\">", "data": "::(星星月亮)", "text": "星星月亮" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E992B1E5B881_2x.png\">", "data": "::(钱币)", "text": "钱币" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E88CB6E69DAF_2x.png\">", "data": "::(茶杯)", "text": "茶杯" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E89B8BE7B395_2x.png\">", "data": "::(蛋糕)", "text": "蛋糕" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5A4A7E68B87E68C87_2x.png\">", "data": "::(大拇指)", "text": "大拇指" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E8839CE588A9_2x.png\">", "data": "::(胜利)", "text": "胜利" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/haha_2x.png\">", "data": "::(haha)", "text": "haha" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/OK_2x.png\">", "data": "::(OK)", "text": "OK" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6B299E58F91_2x.png\">", "data": "::(沙发)", "text": "沙发" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E6898BE7BAB8_2x.png\">", "data": "::(手纸)", "text": "手纸" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E9A699E89589_2x.png\">", "data": "::(香蕉)", "text": "香蕉" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E4BEBFE4BEBF_2x.png\">", "data": "::(便便)", "text": "便便" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E88DAFE4B8B8_2x.png\">", "data": "::(药丸)", "text": "药丸" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E7BAA2E9A286E5B7BE_2x.png\">", "data": "::(红领巾)", "text": "红领巾" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E89CA1E7839B_2x.png\">", "data": "::(蜡烛)", "text": "蜡烛" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E99FB3E4B990_2x.png\">", "data": "::(音乐)", "text": "音乐" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E781AFE6B3A1_2x.png\">", "data": "::(灯泡)", "text": "灯泡" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5BC80E5BF83_2x.png\">", "data": "::(开心)", "text": "开心" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E992B1_2x.png\">", "data": "::(钱)", "text": "钱" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E592A6_2x.png\">", "data": "::(咦)", "text": "咦" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E591BC_2x.png\">", "data": "::(呼)", "text": "呼" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E586B7_2x.png\">", "data": "::(冷)", "text": "冷" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E7949FE6B094_2x.png\">", "data": "::(生气)", "text": "生气" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/paopao/E5BCB1_2x.png\">", "data": "::(弱)", "text": "弱" }
]
},
"阿鲁": {
"type": "image",
"container": [
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E9AB98E585B4_2x.png\">", "data": ":@(高兴)", "text": "高兴" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5B08FE68092_2x.png\">", "data": ":@(小怒)", "text": "小怒" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E884B8E7BAA2_2x.png\">", "data": ":@(脸红)", "text": "脸红" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E58685E4BCA4_2x.png\">", "data": ":@(内伤)", "text": "内伤" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E8A385E5A4A7E6ACBE_2x.png\">", "data": ":@(装大款)", "text": "装大款" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E8B59EE4B880E4B8AA_2x.png\">", "data": ":@(赞一个)", "text": "赞一个" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5AEB3E7BE9E_2x.png\">", "data": ":@(害羞)", "text": "害羞" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E6B197_2x.png\">", "data": ":@(汗)", "text": "汗" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E59090E8A180E58092E59CB0_2x.png\">", "data": ":@(吐血倒地)", "text": "吐血倒地" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E6B7B1E6809D_2x.png\">", "data": ":@(深思)", "text": "深思" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B88DE9AB98E585B4_2x.png\">", "data": ":@(不高兴)", "text": "不高兴" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E697A0E8AFAD_2x.png\">", "data": ":@(无语)", "text": "无语" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4BAB2E4BAB2_2x.png\">", "data": ":@(亲亲)", "text": "亲亲" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E58FA3E6B0B4_2x.png\">", "data": ":@(口水)", "text": "口水" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5B0B4E5B0AC_2x.png\">", "data": ":@(尴尬)", "text": "尴尬" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B8ADE68C87_2x.png\">", "data": ":@(中指)", "text": "中指" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E683B3E4B880E683B3_2x.png\">", "data": ":@(想一想)", "text": "想一想" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E593ADE6B3A3_2x.png\">", "data": ":@(哭泣)", "text": "哭泣" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4BEBFE4BEBF_2x.png\">", "data": ":@(便便)", "text": "便便" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E78CAEE88AB1_2x.png\">", "data": ":@(献花)", "text": "献花" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E79AB1E79C89_2x.png\">", "data": ":@(皱眉)", "text": "皱眉" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E582BBE7AC91_2x.png\">", "data": ":@(傻笑)", "text": "傻笑" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E78B82E6B197_2x.png\">", "data": ":@(狂汗)", "text": "狂汗" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E59090_2x.png\">", "data": ":@(吐)", "text": "吐" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E596B7E6B0B4_2x.png\">", "data": ":@(喷水)", "text": "喷水" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E79C8BE4B88DE8A781_2x.png\">", "data": ":@(看不见)", "text": "看不见" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E9BC93E68E8C_2x.png\">", "data": ":@(鼓掌)", "text": "鼓掌" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E998B4E69A97_2x.png\">", "data": ":@(阴暗)", "text": "阴暗" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E995BFE88D89_2x.png\">", "data": ":@(长草)", "text": "长草" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E78CAEE9BB84E7939C_2x.png\">", "data": ":@(献黄瓜)", "text": "献黄瓜" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E982AAE681B6_2x.png\">", "data": ":@(邪恶)", "text": "邪恶" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E69C9FE5BE85_2x.png\">", "data": ":@(期待)", "text": "期待" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5BE97E6848F_2x.png\">", "data": ":@(得意)", "text": "得意" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E59090E8888C_2x.png\">", "data": ":@(吐舌)", "text": "吐舌" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E596B7E8A180_2x.png\">", "data": ":@(喷血)", "text": "喷血" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E697A0E68980E8B093_2x.png\">", "data": ":@(无所谓)", "text": "无所谓" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E8A782E5AF9F_2x.png\">", "data": ":@(观察)", "text": "观察" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E69A97E59CB0E8A782E5AF9F_2x.png\">", "data": ":@(暗地观察)", "text": "暗地观察" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E882BFE58C85_2x.png\">", "data": ":@(肿包)", "text": "肿包" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B8ADE69EAA_2x.png\">", "data": ":@(中枪)", "text": "中枪" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5A4A7E59BA7_2x.png\">", "data": ":@(大囧)", "text": "大囧" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E591B2E78999_2x.png\">", "data": ":@(呲牙)", "text": "呲牙" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E68AA0E9BCBB_2x.png\">", "data": ":@(抠鼻)", "text": "抠鼻" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B88DE8AFB4E8AF9D_2x.png\">", "data": ":@(不说话)", "text": "不说话" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E592BDE6B094_2x.png\">", "data": ":@(咽气)", "text": "咽气" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E6ACA2E591BC_2x.png\">", "data": ":@(欢呼)", "text": "欢呼" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E99481E79C89_2x.png\">", "data": ":@(锁眉)", "text": "锁眉" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E89CA1E7839B_2x.png\">", "data": ":@(蜡烛)", "text": "蜡烛" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E59D90E7AD89_2x.png\">", "data": ":@(坐等)", "text": "坐等" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E587BBE68E8C_2x.png\">", "data": ":@(击掌)", "text": "击掌" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E6838AE5969C_2x.png\">", "data": ":@(惊喜)", "text": "惊喜" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5969CE69E81E8808CE6B3A3_2x.png\">", "data": ":@(喜极而泣)", "text": "喜极而泣" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E68ABDE7839F_2x.png\">", "data": ":@(抽烟)", "text": "抽烟" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B88DE587BAE68980E69699_2x.png\">", "data": ":@(不出所料)", "text": "不出所料" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E684A4E68092_2x.png\">", "data": ":@(愤怒)", "text": "愤怒" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E697A0E5A588_2x.png\">", "data": ":@(无奈)", "text": "无奈" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E9BB91E7BABF_2x.png\">", "data": ":@(黑线)", "text": "黑线" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E68A95E9998D_2x.png\">", "data": ":@(投降)", "text": "投降" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E79C8BE783ADE997B9_2x.png\">", "data": ":@(看热闹)", "text": "看热闹" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E68987E880B3E58589_2x.png\">", "data": ":@(扇耳光)", "text": "扇耳光" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E5B08FE79CBCE79D9B_2x.png\">", "data": ":@(小眼睛)", "text": "小眼睛" },
{ "icon": "<img class=\"biaoqing\" src=\"/usr/themes/Typecho-Joe-Theme/assets/owo/aru/E4B8ADE58880_2x.png\">", "data": ":@(中刀)", "text": "中刀" }
]
},
"颜文字": {
"type": "emoticon",
"container": [
{
"icon": "OωO",
"text": "Author: DIYgod"
},
{
"icon": "|´・ω・)",
"text": "Hi"
},
{
"icon": "ヾ(≧∇≦*)ゝ",
"text": "开心"
},
{
"icon": "(☆ω☆)",
"text": "星星眼"
},
{
"icon": "(╯‵□′)╯︵┴─┴",
"text": "掀桌"
},
{
"icon": " ̄﹃ ̄",
"text": "流口水"
},
{
"icon": "(/ω\)",
"text": "捂脸"
},
{
"icon": "∠( ᐛ 」∠)_",
"text": "给跪"
},
{
"icon": "(๑•̀ㅁ•́ฅ)",
"text": "Hi"
},
{
"icon": "→_→",
"text": "斜眼"
},
{
"icon": "୧(๑•̀⌄•́๑)૭",
"text": "加油"
},
{
"icon": "٩(ˊᗜˋ*)و",
"text": "有木有WiFi"
},
{
"icon": "(ノ°ο°)",
"text": "前方高能预警"
},
{
"icon": "(´இ皿இ`)",
"text": "我从未见过如此厚颜无耻之人"
},
{
"icon": "⌇●﹏●⌇",
"text": "吓死宝宝惹"
},
{
"icon": "(ฅ´ω`ฅ)",
"text": "已阅留爪"
},
{
"icon": "(╯°A°)╯︵○○○",
"text": "去吧大师球"
},
{
"icon": "φ( ̄∇ ̄o)",
"text": "太萌惹"
},
{
"icon": "ヾ(´・ ・`。)\"",
"text": "咦咦咦"
},
{
"icon": "( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃",
"text": "气呼呼"
},
{
"icon": "(ó﹏ò。)",
"text": "我受到了惊吓"
},
{
"icon": "Σ(っ °Д °;)っ",
"text": "什么鬼"
},
{
"icon": "( ,,´・ω・)ノ\"(´っω・`。)",
"text": "摸摸头"
},
{
"icon": "╮(╯▽╰)╭ ",
"text": "无奈"
},
{
"icon": "o(*////▽////*)q ",
"text": "脸红"
},
{
"icon": "",
"text": ""
},
{
"icon": "( ๑´•ω•) \"(ㆆᴗㆆ)",
"text": ""
},
{
"icon": "(。•ˇ‸ˇ•。)",
"text": ""
}
]
}
}

View File

@ -1,6 +1,6 @@
<?php
/* 排行榜 */
/* 侧边栏热门排行榜 */
function _getRanking($self)
{
header("HTTP/1.1 200 OK");
@ -24,7 +24,7 @@ function _getRanking($self)
}
}
/* 列表 */
/* 获取文章列表 */
function _getPost($self)
{
header("HTTP/1.1 200 OK");
@ -38,7 +38,7 @@ function _getPost($self)
"image" => _getThumbnail($item, false),
"time" => date('Y-m-d', $item->created),
"created" => date('Y年m月d日', $item->created),
"title" => _getEncryptionTitle($item, false),
"title" => $item->title,
"abstract" => _getAbstract($item, false),
"category" => $item->categories,
"views" => _getViews($item, false),
@ -51,7 +51,7 @@ function _getPost($self)
$self->response->throwJson(array("data" => $result));
}
/* 浏览量 */
/* 增加浏览量 */
function _handleViews($self)
{
header("HTTP/1.1 200 OK");
@ -69,7 +69,7 @@ function _handleViews($self)
}
}
/* 点赞 */
/* 点赞和取消点赞 */
function _handleAgree($self)
{
header("HTTP/1.1 200 OK");
@ -92,7 +92,7 @@ function _handleAgree($self)
}
}
/* 收录 */
/* 查询是否收录 */
function _getRecord($self)
{
header("HTTP/1.1 200 OK");
@ -123,3 +123,25 @@ function _getRecord($self)
$self->response->throwJson(array("data" => "已收录"));
}
}
/* 主动推送到百度收录 */
function _pushRecord($self)
{
header("HTTP/1.1 200 OK");
$domain = $self->request->domain;
$url = $self->request->url;
$token = Helper::options()->JBaiduToken;
$urls = explode(",", $url);
$api = 'http://data.zz.baidu.com/urls?site=' . $domain . '&token=' . $token;
$ch = curl_init();
$options = array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => implode("\n", $urls),
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
$self->response->throwJson(json_decode($result));
}

View File

@ -1,16 +1,35 @@
<?php
/* 继承方法函数 */
require_once('widget.php');
/* 公用函数 */
require_once('function.php');
/* 过滤内容函数 */
require_once('parse.php');
/* 主题内置开放API */
require_once('api.php');
/* 页面加载计时 */
_startCountTime();
/* 主题开发API */
require_once('route.php');
/* 主题初始化 */
function themeInit($self)
{
/* 强奸用户关闭反垃圾保护 */
Helper::options()->commentsAntiSpam = false;
/* 强奸用户关闭检查来源URL */
Helper::options()->commentsCheckReferer = false;
/* 强奸用户强制要求填写邮箱 */
Helper::options()->commentsRequireMail = true;
/* 强奸用户强制要求无需填写url */
Helper::options()->commentsRequireURL = false;
/* 强制用户开启评论回复 */
Helper::options()->commentsThreaded = true;
/* 强制显示一页15篇文章 */
/* 强制显示一页12篇文章 */
$self->parameter->pageSize = 12;
/* 主题开放API 路由规则 */
@ -26,6 +45,9 @@ function themeInit($self)
case 'baidu_record':
_getRecord($self);
break;
case 'baidu_push':
_pushRecord($self);
break;
case 'handle_views':
_handleViews($self);
break;
@ -36,326 +58,7 @@ function themeInit($self)
}
}
/* 主题版本号 */
function _getVersion()
{
return "1.0.0";
};
function _isMobile()
{
if (isset($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
if (isset($_SERVER['HTTP_VIA'])) {
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile');
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
return true;
}
if (isset($_SERVER['HTTP_ACCEPT'])) {
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/* 获取加密的文章标题 */
function _getEncryptionTitle($item, $type = true)
{
$title = "";
if ($item->hidden) {
$db = Typecho_Db::get();
$title = $db->fetchRow($db->select('title')->from('table.contents')->where('cid = ?', $item->cid))['title'];
} else {
$title = $item->title;
}
if ($type) echo $title;
else return $title;
}
/* 过滤文章内容 */
function _parseContent($post)
{
/* 优先判断文章内是否有回复可见的内容 */
$content = $post->content;
if (preg_match('/\[hide\].*\[\/hide\]/', $content)) {
$db = Typecho_Db::get();
$hasComment = $db->fetchAll($db->select()->from('table.comments')->where('cid = ?', $post->cid)->where('mail = ?', $post->remember('mail', true))->limit(1));
if ($hasComment) {
$content = preg_replace('/\[hide\](.*?)\[\/hide\]/sm', '$1', $content);
} else {
$content = preg_replace('/\[hide\](.*?)\[\/hide\]/sm', '<span class="joe_detail__article-hide block">此处内容作者设置了 <i data-scroll="comment">回复</i> 可见</span>', $content);
}
}
echo $content;
}
function _startCountTime()
{
global $timeStart;
$mTime = explode(' ', microtime());
$timeStart = $mTime[1] + $mTime[0];
return true;
}
function _endCountTime($precision = 3)
{
global $timeStart, $timeEnd;
$mTime = explode(' ', microtime());
$timeEnd = $mTime[1] + $mTime[0];
$timeTotal = number_format($timeEnd - $timeStart, $precision);
echo $timeTotal < 1 ? $timeTotal * 1000 . 'ms' : $timeTotal . 's';
}
function _getAvatarByMail($mail)
{
$gravatarsUrl = 'https://gravatar.helingqi.com/wavatar/';
$mailLower = strtolower($mail);
$md5MailLower = md5($mailLower);
$qqMail = str_replace('@qq.com', '', $mailLower);
if (strstr($mailLower, "qq.com") && is_numeric($qqMail) && strlen($qqMail) < 11 && strlen($qqMail) > 4) {
echo 'https://thirdqq.qlogo.cn/g?b=qq&nk=' . $qqMail . '&s=100';
} else {
echo $gravatarsUrl . $md5MailLower . '?d=mm';
}
};
function _getAsideAuthorMotto()
{
$JMottoRandom = explode("\r\n", Helper::options()->JAside_Author_Motto);
echo $JMottoRandom[array_rand($JMottoRandom, 1)];
}
function _getAbstract($item, $type = true)
{
$abstract = "";
if ($item->password) {
$abstract = "本篇文章为加密文章,请前往内页查看详情";
} else {
if ($item->fields->abstract) {
$abstract = $item->fields->abstract;
} else {
$abstract = strip_tags($item->excerpt);
}
}
if ($type) {
echo $abstract;
} else {
return $abstract;
}
}
function _getThumbnail($item, $type = true)
{
$randomThumb = 'https://cdn.jsdelivr.net/npm/typecho_joe_theme@4.3.5/assets/img/random/' . rand(1, 25) . '.webp';
$custom_thumbnail = Helper::options()->JThumbnail;
if ($custom_thumbnail) {
$custom_thumbnail_arr = explode("\r\n", $custom_thumbnail);
$randomThumb = $custom_thumbnail_arr[array_rand($custom_thumbnail_arr, 1)] . "?key=" . mt_rand(0, 1000000);
}
$pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';
$patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|jpeg|gif|png|webp))/i';
$patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|jpeg|gif|png|webp))/i';
if ($item->fields->thumb) {
$randomThumb = $item->fields->thumb;
} elseif (preg_match_all($pattern, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
} elseif (preg_match_all($patternMD, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
} elseif (preg_match_all($patternMDfoot, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
}
if ($type) echo $randomThumb;
else return $randomThumb;
}
function _getViews($item, $type = true)
{
$db = Typecho_Db::get();
$result = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $item->cid))['views'];
if ($type) echo number_format($result);
else return number_format($result);
}
function _getAgree($item, $type = true)
{
$db = Typecho_Db::get();
$result = $db->fetchRow($db->select('agree')->from('table.contents')->where('cid = ?', $item->cid))['agree'];
if ($type) echo number_format($result);
else return number_format($result);
}
function _parseAsideLink($link)
{
echo str_replace("#", "?scroll=", $link);
}
function _getAgentOS($agent)
{
$os = "Linux";
if (preg_match('/win/i', $agent)) {
if (preg_match('/nt 6.0/i', $agent)) {
$os = 'Windows Vista';
} else if (preg_match('/nt 6.1/i', $agent)) {
$os = 'Windows 7';
} else if (preg_match('/nt 6.2/i', $agent)) {
$os = 'Windows 8';
} else if (preg_match('/nt 6.3/i', $agent)) {
$os = 'Windows 8.1';
} else if (preg_match('/nt 5.1/i', $agent)) {
$os = 'Windows XP';
} else if (preg_match('/nt 10.0/i', $agent)) {
$os = 'Windows 10';
} else {
$os = 'Windows X64';
}
} else if (preg_match('/android/i', $agent)) {
if (preg_match('/android 9/i', $agent)) {
$os = 'Android Pie';
} else if (preg_match('/android 8/i', $agent)) {
$os = 'Android Oreo';
} else {
$os = 'Android';
}
} else if (preg_match('/ubuntu/i', $agent)) {
$os = 'Ubuntu';
} else if (preg_match('/linux/i', $agent)) {
$os = 'Linux';
} else if (preg_match('/iPhone/i', $agent)) {
$os = 'iPhone';
} else if (preg_match('/mac/i', $agent)) {
$os = 'MacOS';
} else if (preg_match('/fusion/i', $agent)) {
$os = 'Android';
} else {
$os = 'Linux';
}
echo $os;
}
function _getAgentBrowser($agent)
{
if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
$outputer = 'Internet Explore';
} else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'FireFox';
} else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'MicroSoft Edge';
} else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) {
$outputer = '360 Fast Browser';
} else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'MicroSoft Edge';
} else if (preg_match('/UC/i', $agent)) {
$outputer = 'UC Browser';
} else if (preg_match('/QQ/i', $agent, $regs) || preg_match('/QQ Browser\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'QQ Browser';
} else if (preg_match('/UBrowser/i', $agent, $regs)) {
$outputer = 'UC Browser';
} else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
$outputer = 'Opera';
} else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'Google Chrome';
} else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'Safari';
} else {
$outputer = 'Google Chrome';
}
echo $outputer;
}
function _parseAsideReply($text, $type = true)
{
if ($type) echo _parseReply(preg_replace('~{!{.*~', '# 图片回复', strip_tags($text)));
else echo preg_replace('~{!{.*~', '# 图片回复', strip_tags($text));
}
function _parseReply($text)
{
$text = preg_replace_callback(
'/\:\:\(\s*(呵呵|哈哈|吐舌|太开心|笑眼|花心|小乖|乖|捂嘴笑|滑稽|你懂的|不高兴|怒|汗|黑线|泪|真棒|喷|惊哭|阴险|鄙视|酷|啊|狂汗|what|疑问|酸爽|呀咩爹|委屈|惊讶|睡觉|笑尿|挖鼻|吐|犀利|小红脸|懒得理|勉强|爱心|心碎|玫瑰|礼物|彩虹|太阳|星星月亮|钱币|茶杯|蛋糕|大拇指|胜利|haha|OK|沙发|手纸|香蕉|便便|药丸|红领巾|蜡烛|音乐|灯泡|开心|钱|咦|呼|冷|生气|弱|吐血)\s*\)/is',
function ($match) {
return '<img class="owo_image" alt="表情" src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/owo/paopao/' . str_replace('%', '', urlencode($match[1])) . '_2x.png" />';
},
$text
);
$text = preg_replace_callback(
'/\:\@\(\s*(高兴|小怒|脸红|内伤|装大款|赞一个|害羞|汗|吐血倒地|深思|不高兴|无语|亲亲|口水|尴尬|中指|想一想|哭泣|便便|献花|皱眉|傻笑|狂汗|吐|喷水|看不见|鼓掌|阴暗|长草|献黄瓜|邪恶|期待|得意|吐舌|喷血|无所谓|观察|暗地观察|肿包|中枪|大囧|呲牙|抠鼻|不说话|咽气|欢呼|锁眉|蜡烛|坐等|击掌|惊喜|喜极而泣|抽烟|不出所料|愤怒|无奈|黑线|投降|看热闹|扇耳光|小眼睛|中刀)\s*\)/is',
function ($match) {
return '<img class="owo_image" alt="表情" src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/owo/paopao/' . str_replace('%', '', urlencode($match[1])) . '_2x.png">';
},
$text
);
return $text;
}
function _getParentReply($parent)
{
if ($parent !== "0") {
$db = Typecho_Db::get();
$commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent));
echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . $commentInfo['author'] . '</div>';
}
}
function _parseCommentReply($text)
{
$text = _parseReply($text);
$text = preg_replace('/\{!{(.*?)\}!}/', '<img src="$1" class="draw_image"/>', $text);
echo $text;
}
function _getLazyload($type = true)
{
if ($type) echo Helper::options()->JLazyload;
else return Helper::options()->JLazyload;
}
function _getAvatarLazyload($type = true)
{
if ($type) echo "https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/img/lazyload_avatar.png";
else return "https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/img/lazyload_avatar.png";
}
function _getAsideAuthorNav()
{
if (Helper::options()->JAside_Author_Nav !== "off") {
$db = Typecho_Db::get();
$adapterName = $db->getAdapterName();
if ($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite') {
$order_by = 'RANDOM()';
} else {
$order_by = 'RAND()';
}
$result = $db->fetchAll(
$db->select()
->from('table.contents')
->where('table.contents.status = ?', 'publish')
->where('table.contents.type = ?', 'post')
->where("table.contents.password IS NULL OR table.contents.password = ''")
->limit(Helper::options()->JAside_Author_Nav)
->order($order_by)
);
foreach ($result as $item) {
$obj = Typecho_Widget::widget('Widget_Abstract_Contents');
$item = $obj->push($item);
$title = htmlspecialchars($item['title']);
$permalink = $item['permalink'];
echo "
<li class='item'>
<a class='link' href='{$permalink}' title='{$title}'>{$title}</a>
<svg class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' width='16' height='16'>
<path d='M448.12 320.331a30.118 30.118 0 0 1-42.616-42.586L552.568 130.68a213.685 213.685 0 0 1 302.2 0l38.552 38.551a213.685 213.685 0 0 1 0 302.2L746.255 618.497a30.118 30.118 0 0 1-42.586-42.616l147.034-147.035a153.45 153.45 0 0 0 0-217.028l-38.55-38.55a153.45 153.45 0 0 0-216.998 0L448.12 320.33zM575.88 703.67a30.118 30.118 0 0 1 42.616 42.586L471.432 893.32a213.685 213.685 0 0 1-302.2 0l-38.552-38.551a213.685 213.685 0 0 1 0-302.2l147.065-147.065a30.118 30.118 0 0 1 42.586 42.616L173.297 595.125a153.45 153.45 0 0 0 0 217.027l38.55 38.551a153.45 153.45 0 0 0 216.998 0L575.88 703.64z m-234.256-63.88L639.79 341.624a30.118 30.118 0 0 1 42.587 42.587L384.21 682.376a30.118 30.118 0 0 1-42.587-42.587z' p-id='7351'></path>
</svg>
</li>
";
}
}
}
/* 增加自定义字段 */
function themeFields($layout)
{
$aside = new Typecho_Widget_Helper_Form_Element_Radio(
@ -394,40 +97,3 @@ function themeFields($layout)
);
$layout->addItem($abstract);
}
class Widget_Contents_Hot extends Widget_Abstract_Contents
{
public function execute()
{
$this->parameter->setDefault(array('pageSize' => 10));
$this->db->fetchAll(
$this->select()->from('table.contents')
->where("table.contents.password IS NULL OR table.contents.password = ''")
->where('table.contents.status = ?', 'publish')
->where('table.contents.created <= ?', time())
->where('table.contents.type = ?', 'post')
->limit($this->parameter->pageSize)
->order('table.contents.views', Typecho_Db::SORT_DESC),
array($this, 'push')
);
}
}
class Widget_Contents_Sort extends Widget_Abstract_Contents
{
public function execute()
{
$this->parameter->setDefault(array('page' => 1, 'pageSize' => 10, 'type' => 'created'));
$offset = $this->parameter->pageSize * ($this->parameter->page - 1);
$this->db->fetchAll(
$this->select()
->from('table.contents')
->where('table.contents.type = ?', 'post')
->where('table.contents.status = ?', 'publish')
->limit($this->parameter->pageSize)
->offset($offset)
->order($this->parameter->type, Typecho_Db::SORT_DESC),
array($this, 'push')
);
}
}

265
core/function.php Normal file
View File

@ -0,0 +1,265 @@
<?php
/* 获取主题当前版本号 */
function _getVersion()
{
return "1.0.0";
};
/* 判断是否是手机 */
function _isMobile()
{
if (isset($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
if (isset($_SERVER['HTTP_VIA'])) {
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile');
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))
return true;
}
if (isset($_SERVER['HTTP_ACCEPT'])) {
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/* 根据评论agent获取浏览器类型 */
function _getAgentBrowser($agent)
{
if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
$outputer = 'Internet Explore';
} else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'FireFox';
} else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'MicroSoft Edge';
} else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) {
$outputer = '360 Fast Browser';
} else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'MicroSoft Edge';
} else if (preg_match('/UC/i', $agent)) {
$outputer = 'UC Browser';
} else if (preg_match('/QQ/i', $agent, $regs) || preg_match('/QQ Browser\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'QQ Browser';
} else if (preg_match('/UBrowser/i', $agent, $regs)) {
$outputer = 'UC Browser';
} else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
$outputer = 'Opera';
} else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'Google Chrome';
} else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
$outputer = 'Safari';
} else {
$outputer = 'Google Chrome';
}
echo $outputer;
}
/* 根据评论agent获取设备类型 */
function _getAgentOS($agent)
{
$os = "Linux";
if (preg_match('/win/i', $agent)) {
if (preg_match('/nt 6.0/i', $agent)) {
$os = 'Windows Vista';
} else if (preg_match('/nt 6.1/i', $agent)) {
$os = 'Windows 7';
} else if (preg_match('/nt 6.2/i', $agent)) {
$os = 'Windows 8';
} else if (preg_match('/nt 6.3/i', $agent)) {
$os = 'Windows 8.1';
} else if (preg_match('/nt 5.1/i', $agent)) {
$os = 'Windows XP';
} else if (preg_match('/nt 10.0/i', $agent)) {
$os = 'Windows 10';
} else {
$os = 'Windows X64';
}
} else if (preg_match('/android/i', $agent)) {
if (preg_match('/android 9/i', $agent)) {
$os = 'Android Pie';
} else if (preg_match('/android 8/i', $agent)) {
$os = 'Android Oreo';
} else {
$os = 'Android';
}
} else if (preg_match('/ubuntu/i', $agent)) {
$os = 'Ubuntu';
} else if (preg_match('/linux/i', $agent)) {
$os = 'Linux';
} else if (preg_match('/iPhone/i', $agent)) {
$os = 'iPhone';
} else if (preg_match('/mac/i', $agent)) {
$os = 'MacOS';
} else if (preg_match('/fusion/i', $agent)) {
$os = 'Android';
} else {
$os = 'Linux';
}
echo $os;
}
/* 获取全局懒加载图 */
function _getLazyload($type = true)
{
if ($type) echo Helper::options()->JLazyload;
else return Helper::options()->JLazyload;
}
/* 获取头像懒加载图 */
function _getAvatarLazyload($type = true)
{
if ($type) echo "https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/img/lazyload_avatar.png";
else return "https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/img/lazyload_avatar.png";
}
/* 查询文章浏览量 */
function _getViews($item, $type = true)
{
$db = Typecho_Db::get();
$result = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $item->cid))['views'];
if ($type) echo number_format($result);
else return number_format($result);
}
/* 查询文章点赞量 */
function _getAgree($item, $type = true)
{
$db = Typecho_Db::get();
$result = $db->fetchRow($db->select('agree')->from('table.contents')->where('cid = ?', $item->cid))['agree'];
if ($type) echo number_format($result);
else return number_format($result);
}
/* 页面开始计时 */
function _startCountTime()
{
global $timeStart;
$mTime = explode(' ', microtime());
$timeStart = $mTime[1] + $mTime[0];
return true;
}
/* 页面结束计时 */
function _endCountTime($precision = 3)
{
global $timeStart, $timeEnd;
$mTime = explode(' ', microtime());
$timeEnd = $mTime[1] + $mTime[0];
$timeTotal = number_format($timeEnd - $timeStart, $precision);
echo $timeTotal < 1 ? $timeTotal * 1000 . 'ms' : $timeTotal . 's';
}
/* 通过邮箱生成头像地址 */
function _getAvatarByMail($mail)
{
$gravatarsUrl = 'https://gravatar.helingqi.com/wavatar/';
$mailLower = strtolower($mail);
$md5MailLower = md5($mailLower);
$qqMail = str_replace('@qq.com', '', $mailLower);
if (strstr($mailLower, "qq.com") && is_numeric($qqMail) && strlen($qqMail) < 11 && strlen($qqMail) > 4) {
echo 'https://thirdqq.qlogo.cn/g?b=qq&nk=' . $qqMail . '&s=100';
} else {
echo $gravatarsUrl . $md5MailLower . '?d=mm';
}
};
/* 获取侧边栏随机一言 */
function _getAsideAuthorMotto()
{
$JMottoRandom = explode("\r\n", Helper::options()->JAside_Author_Motto);
echo $JMottoRandom[array_rand($JMottoRandom, 1)];
}
/* 获取文章摘要 */
function _getAbstract($item, $type = true)
{
$abstract = "";
if ($item->password) {
$abstract = "加密文章,请前往内页查看详情";
} else {
if ($item->fields->abstract) {
$abstract = $item->fields->abstract;
} else {
$abstract = strip_tags($item->excerpt);
}
}
if ($type) echo $abstract;
else return $abstract;
}
/* 获取文章缩略图 */
function _getThumbnail($item, $type = true)
{
$randomThumb = 'https://cdn.jsdelivr.net/npm/typecho_joe_theme@4.3.5/assets/img/random/' . rand(1, 25) . '.webp';
$custom_thumbnail = Helper::options()->JThumbnail;
if ($custom_thumbnail) {
$custom_thumbnail_arr = explode("\r\n", $custom_thumbnail);
$randomThumb = $custom_thumbnail_arr[array_rand($custom_thumbnail_arr, 1)] . "?key=" . mt_rand(0, 1000000);
}
$pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';
$patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|jpeg|gif|png|webp))/i';
$patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|jpeg|gif|png|webp))/i';
if ($item->fields->thumb) {
$randomThumb = $item->fields->thumb;
} elseif (preg_match_all($pattern, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
} elseif (preg_match_all($patternMD, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
} elseif (preg_match_all($patternMDfoot, $item->content, $thumbUrl)) {
$randomThumb = $thumbUrl[1][0];
}
if ($type) echo $randomThumb;
else return $randomThumb;
}
/* 获取父级评论 */
function _getParentReply($parent)
{
if ($parent !== "0") {
$db = Typecho_Db::get();
$commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent));
echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . $commentInfo['author'] . '</div>';
}
}
/* 获取侧边栏作者随机文章 */
function _getAsideAuthorNav()
{
if (Helper::options()->JAside_Author_Nav !== "off") {
$db = Typecho_Db::get();
$adapterName = $db->getAdapterName();
if ($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite') {
$order_by = 'RANDOM()';
} else {
$order_by = 'RAND()';
}
$result = $db->fetchAll(
$db->select()
->from('table.contents')
->where('table.contents.status = ?', 'publish')
->where('table.contents.type = ?', 'post')
->where("table.contents.password IS NULL OR table.contents.password = ''")
->limit(Helper::options()->JAside_Author_Nav)
->order($order_by)
);
foreach ($result as $item) {
$obj = Typecho_Widget::widget('Widget_Abstract_Contents');
$item = $obj->push($item);
$title = htmlspecialchars($item['title']);
$permalink = $item['permalink'];
echo "
<li class='item'>
<a class='link' href='{$permalink}' title='{$title}'>{$title}</a>
<svg class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' width='16' height='16'>
<path d='M448.12 320.331a30.118 30.118 0 0 1-42.616-42.586L552.568 130.68a213.685 213.685 0 0 1 302.2 0l38.552 38.551a213.685 213.685 0 0 1 0 302.2L746.255 618.497a30.118 30.118 0 0 1-42.586-42.616l147.034-147.035a153.45 153.45 0 0 0 0-217.028l-38.55-38.55a153.45 153.45 0 0 0-216.998 0L448.12 320.33zM575.88 703.67a30.118 30.118 0 0 1 42.616 42.586L471.432 893.32a213.685 213.685 0 0 1-302.2 0l-38.552-38.551a213.685 213.685 0 0 1 0-302.2l147.065-147.065a30.118 30.118 0 0 1 42.586 42.616L173.297 595.125a153.45 153.45 0 0 0 0 217.027l38.55 38.551a153.45 153.45 0 0 0 216.998 0L575.88 703.64z m-234.256-63.88L639.79 341.624a30.118 30.118 0 0 1 42.587 42.587L384.21 682.376a30.118 30.118 0 0 1-42.587-42.587z' p-id='7351'></path>
</svg>
</li>
";
}
}
}

59
core/parse.php Normal file
View File

@ -0,0 +1,59 @@
<?php
/* 过滤文章内容 */
function _parseContent($post, $login)
{
/* 优先判断文章内是否有回复可见的内容 */
$content = $post->content;
if (preg_match('/\[hide\].*\[\/hide\]/', $content)) {
$db = Typecho_Db::get();
$hasComment = $db->fetchAll($db->select()->from('table.comments')->where('cid = ?', $post->cid)->where('mail = ?', $post->remember('mail', true))->limit(1));
if ($hasComment || $login) {
$content = preg_replace('/\[hide\](.*?)\[\/hide\]/sm', '$1', $content);
} else {
$content = preg_replace('/\[hide\](.*?)\[\/hide\]/sm', '<span class="joe_detail__article-hide block">此处内容作者设置了 <i>回复</i> 可见</span>', $content);
}
}
echo $content;
}
/* 过滤评论回复 */
function _parseCommentReply($text)
{
$text = _parseReply($text);
$text = preg_replace('/\{!{(.*?)\}!}/', '<img src="$1" class="draw_image"/>', $text);
echo $text;
}
/* 过滤表情 */
function _parseReply($text)
{
$text = preg_replace_callback(
'/\:\:\(\s*(呵呵|哈哈|吐舌|太开心|笑眼|花心|小乖|乖|捂嘴笑|滑稽|你懂的|不高兴|怒|汗|黑线|泪|真棒|喷|惊哭|阴险|鄙视|酷|啊|狂汗|what|疑问|酸爽|呀咩爹|委屈|惊讶|睡觉|笑尿|挖鼻|吐|犀利|小红脸|懒得理|勉强|爱心|心碎|玫瑰|礼物|彩虹|太阳|星星月亮|钱币|茶杯|蛋糕|大拇指|胜利|haha|OK|沙发|手纸|香蕉|便便|药丸|红领巾|蜡烛|音乐|灯泡|开心|钱|咦|呼|冷|生气|弱|吐血)\s*\)/is',
function ($match) {
return '<img class="owo_image" alt="表情" src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/owo/paopao/' . str_replace('%', '', urlencode($match[1])) . '_2x.png" />';
},
$text
);
$text = preg_replace_callback(
'/\:\@\(\s*(高兴|小怒|脸红|内伤|装大款|赞一个|害羞|汗|吐血倒地|深思|不高兴|无语|亲亲|口水|尴尬|中指|想一想|哭泣|便便|献花|皱眉|傻笑|狂汗|吐|喷水|看不见|鼓掌|阴暗|长草|献黄瓜|邪恶|期待|得意|吐舌|喷血|无所谓|观察|暗地观察|肿包|中枪|大囧|呲牙|抠鼻|不说话|咽气|欢呼|锁眉|蜡烛|坐等|击掌|惊喜|喜极而泣|抽烟|不出所料|愤怒|无奈|黑线|投降|看热闹|扇耳光|小眼睛|中刀)\s*\)/is',
function ($match) {
return '<img class="owo_image" alt="表情" src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/owo/aru/' . str_replace('%', '', urlencode($match[1])) . '_2x.png">';
},
$text
);
return $text;
}
/* 格式化侧边栏回复 */
function _parseAsideReply($text, $type = true)
{
if ($type) echo _parseReply(preg_replace('~{!{.*~', '# 图片回复', strip_tags($text)));
else echo preg_replace('~{!{.*~', '# 图片回复', strip_tags($text));
}
/* 过滤侧边栏最新回复的跳转链接 */
function _parseAsideLink($link)
{
echo str_replace("#", "?scroll=", $link);
}

37
core/widget.php Normal file
View File

@ -0,0 +1,37 @@
<?php
class Widget_Contents_Hot extends Widget_Abstract_Contents
{
public function execute()
{
$this->parameter->setDefault(array('pageSize' => 10));
$this->db->fetchAll(
$this->select()->from('table.contents')
->where("table.contents.password IS NULL OR table.contents.password = ''")
->where('table.contents.status = ?', 'publish')
->where('table.contents.created <= ?', time())
->where('table.contents.type = ?', 'post')
->limit($this->parameter->pageSize)
->order('table.contents.views', Typecho_Db::SORT_DESC),
array($this, 'push')
);
}
}
class Widget_Contents_Sort extends Widget_Abstract_Contents
{
public function execute()
{
$this->parameter->setDefault(array('page' => 1, 'pageSize' => 10, 'type' => 'created'));
$offset = $this->parameter->pageSize * ($this->parameter->page - 1);
$this->db->fetchAll(
$this->select()
->from('table.contents')
->where('table.contents.type = ?', 'post')
->where('table.contents.status = ?', 'publish')
->limit($this->parameter->pageSize)
->offset($offset)
->order($this->parameter->type, Typecho_Db::SORT_DESC),
array($this, 'push')
);
}
}

View File

@ -1,6 +1,9 @@
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/* Joe核心文件 */
require_once("core/core.php");
function themeConfig($form)
{
$_db = Typecho_Db::get();
@ -181,9 +184,7 @@ function themeConfig($form)
$JFooter_Left = new Typecho_Widget_Helper_Form_Element_Textarea(
'JFooter_Left',
NULL,
'<span class="info">
2019 - 2020 © Reach - <a href="http://ae.js.cn" target="_blank" rel="noopener noreferrer">Joe</a>
</span>',
'2019 - 2020 © Reach - <a href="http://ae.js.cn" target="_blank" rel="noopener noreferrer">Joe</a>',
'自定义底部栏左侧内容(非必填)',
'介绍:用于修改全站底部左侧内容 <br>
例如2019 - 2020 © Reach - Joe '
@ -594,4 +595,15 @@ function themeConfig($form)
);
$JFriends->setAttribute('class', 'joe_content joe_other');
$form->addInput($JFriends);
$JBaiduToken = new Typecho_Widget_Helper_Form_Element_Text(
'JBaiduToken',
NULL,
NULL,
'百度推送Token',
'介绍:填写此处,前台文章页如果未收录,则会自动将当前链接推送给百度加快收录
其他Token在百度收录平台注册账号获取'
);
$JBaiduToken->setAttribute('class', 'joe_content joe_other');
$form->addInput($JBaiduToken);
} ?>

View File

@ -14,6 +14,7 @@
<head>
<?php $this->need('public/include.php'); ?>
<!-- 首页所使用到的CSS以及JS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@5.4.5/css/swiper.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css" />
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.index.css'); ?>">
@ -74,12 +75,12 @@
<?php foreach ($recommend as $cid) : ?>
<?php $this->widget('Widget_Archive@' . $cid, 'pageSize=1&type=post', 'cid=' . $cid)->to($item); ?>
<figure class="item">
<a class="thumbnail" href="<?php $item->permalink() ?>" title="<?php _getEncryptionTitle($item) ?>">
<img class="lazyload" onerror="<?php _getLazyload() ?>" src="<?php _getLazyload(); ?>" data-original="<?php _getThumbnail($item); ?>" alt="<?php _getEncryptionTitle($item) ?>" width="100%" />
<a class="thumbnail" href="<?php $item->permalink() ?>" title="<?php $item->title() ?>">
<img class="lazyload" onerror="<?php _getLazyload() ?>" src="<?php _getLazyload(); ?>" data-original="<?php _getThumbnail($item); ?>" alt="<?php $item->title() ?>" width="100%" />
</a>
<figcaption class="information">
<span class="information_type">推荐</span>
<span class="information_title"><?php _getEncryptionTitle($item) ?></span>
<span class="information_title"><?php $item->title() ?></span>
</figcaption>
</figure>
<?php endforeach; ?>

View File

@ -1,37 +0,0 @@
<?php
/**
* 直播
*
* @package custom
*
**/
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<?php $this->need('public/include.php'); ?>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/themes/prism-tomorrow.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.23.0/prism.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script src="<?php $this->options->themeUrl('assets/js/joe.post&page.js'); ?>"></script>
</head>
<body>
<div id="Joe">
<?php $this->need('public/header.php'); ?>
<div class="joe_container">
<div class="joe_main">
</div>
<?php $this->need('public/aside.php'); ?>
</div>
<?php $this->need('public/footer.php'); ?>
</div>
</body>
</html>

View File

@ -36,13 +36,6 @@
<div class="joe_container">
<div class="joe_main joe_post">
<div class="joe_detail" data-cid="<?php echo $this->cid ?>">
<?php if (sizeof($this->categories) > 0) : ?>
<div class="joe_detail__category">
<?php foreach (array_slice($this->categories, 0, 5) as $key => $item) : ?>
<a href="<?php echo $item['permalink']; ?>" class="item item-<?php echo $key ?>" title="<?php echo $item['name']; ?>"><?php echo $item['name']; ?></a>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php $this->need('public/article.php'); ?>
<?php $this->need('public/handle.php'); ?>
<?php $this->need('public/copyright.php'); ?>

View File

@ -1,4 +1,21 @@
<h1 class="joe_detail__title"><?php _getEncryptionTitle($this) ?></h1>
<?php if (sizeof($this->categories) > 0 || $this->user->uid == $this->authorId) : ?>
<div class="joe_detail__category">
<?php if (sizeof($this->categories) > 0) : ?>
<?php foreach (array_slice($this->categories, 0, 5) as $key => $item) : ?>
<a href="<?php echo $item['permalink']; ?>" class="item item-<?php echo $key ?>" title="<?php echo $item['name']; ?>"><?php echo $item['name']; ?></a>
<?php endforeach; ?>
<?php endif; ?>
<?php if ($this->user->uid == $this->authorId) : ?>
<?php if ($this->is('post')) : ?>
<a class="edit" target="_blank" rel="noopener noreferrer" href="<?php $this->options->adminUrl(); ?>write-post.php?cid=<?php echo $this->cid; ?>">编辑文章</a>
<?php else : ?>
<a class="edit" target="_blank" rel="noopener noreferrer" href="<?php $this->options->adminUrl(); ?>write-page.php?cid=<?php echo $this->cid; ?>">编辑页面</a>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endif; ?>
<h1 class="joe_detail__title"><?php $this->title() ?></h1>
<div class="joe_detail__count">
<div class="joe_detail__count-information">
<img class="avatar lazyload" src="<?php _getAvatarLazyload(); ?>" onerror="javascript: this.src = '<?php _getAvatarLazyload(); ?>'" data-original="<?php _getAvatarByMail($this->author->mail) ?>" alt="<?php $this->author(); ?>" />
@ -19,16 +36,24 @@
</div>
<time class="joe_detail__count-created" datetime="<?php $this->date('m/d'); ?>"><?php $this->date('m/d'); ?></time>
</div>
<div class="joe_detail__article">
<?php if ($this->is('post')) : ?>
<?php if ($this->hidden) : ?>
<div class="joe_detail__article-protected" data-action="<?php echo Typecho_Widget::widget('Widget_Security')->getTokenUrl($this->permalink); ?>">
需要密码访问的文章 待完成
<div data-cid="<?php $this->cid(); ?>" class="joe_detail__article-protected" data-action="<?php echo Typecho_Widget::widget('Widget_Security')->getTokenUrl($this->permalink); ?>">
<div class="contain">
<svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20">
<path d="M812.63104 664.064h-439.0912a79.0272 79.0272 0 0 0-78.95552 79.09888v196.9664h518.04672a79.0272 79.0272 0 0 0 78.9504-79.09888v-117.84704a79.0272 79.0272 0 0 0-78.9504-79.11936z" fill="#F4CA1C" p-id="7008"></path>
<path d="M812.97408 382.976h-32.36864V313.3696a272.256 272.256 0 1 0-544.512 0V382.976h-25.0624A113.91488 113.91488 0 0 0 97.28 496.77312v367.32928A113.91488 113.91488 0 0 0 211.03104 977.92h601.94304A113.90976 113.90976 0 0 0 926.72 864.1024V496.77312A113.90976 113.90976 0 0 0 812.97408 382.976zM305.7152 313.3696a202.63424 202.63424 0 1 1 405.26848 0V382.976H305.7152V313.3696zM857.088 864.1024a44.1856 44.1856 0 0 1-44.12416 44.15488H211.03104a44.19584 44.19584 0 0 1-44.11904-44.15488V496.77312a44.19584 44.19584 0 0 1 44.11904-44.16512h601.94304a44.1856 44.1856 0 0 1 44.12416 44.16v367.3344z m-331.71456-309.9648a62.69952 62.69952 0 0 0-34.816 114.82112v103.45984a34.816 34.816 0 1 0 69.632 0v-103.45984a62.69952 62.69952 0 0 0-34.80576-114.82112z" fill="#595BB3" p-id="7009"></path>
</svg>
<input class="password" type="password" placeholder="请输入访问密码...">
<span class="submit">确定</span>
</div>
</div>
<?php else : ?>
<?php _parseContent($this) ?>
<?php _parseContent($this, $this->user->hasLogin()) ?>
<?php endif; ?>
<?php else : ?>
<?php _parseContent($this) ?>
<?php _parseContent($this, $this->user->hasLogin()) ?>
<?php endif; ?>
</div>

View File

@ -21,7 +21,7 @@
</div>
</div>
<div class="body">
<textarea class="text" name="text" autocomplete="off" rows="5" placeholder="说点什么吧,点击右上角可切换成画图模式哦~"></textarea>
<textarea class="text" name="text" autocomplete="off" rows="5" placeholder="说点什么吧,点击右上方切换成画图试试?"></textarea>
<div class="draw" style="display: none;">
<ul class="line">
<li data-line="3"></li>
@ -44,6 +44,12 @@
<canvas id="joe_comment_draw" height="300"></canvas>
</div>
</div>
<div class="foot">
<div class="owo" id="OwO_Container"></div>
<div class="submit">
<button>发表评论</button>
</div>
</div>
</div>
</div>
<?php if ($comments->have()) : ?>
@ -66,13 +72,6 @@
)
);
?>
<?php else : ?>
<div class="joe_comment__empty">
<svg class="joe_comment__empty-icon" viewBox="0 0 2148 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="120" height="120">
<path d="M1635.928611 983.061118H449.948176a20.469441 20.469441 0 0 0 0 40.938882h1185.980435a20.469441 20.469441 0 1 0 0-40.938882z m327.212826-634.417113h-40.803323v-40.91177a20.442329 20.442329 0 1 0-40.884658 0v40.91177h-40.911771a20.469441 20.469441 0 0 0 0 40.938883h40.911771v40.938882a20.442329 20.442329 0 1 0 40.884658 0v-40.938882h40.91177a20.469441 20.469441 0 0 0 0-40.938883z m-1431.50528-266.021397h20.44233v20.442329a20.469441 20.469441 0 1 0 40.91177 0V82.622608h20.442329a20.469441 20.469441 0 0 0 0-40.938882h-20.442329V21.214285a20.469441 20.469441 0 1 0-40.91177 0v20.469441h-20.44233a20.469441 20.469441 0 0 0 0 40.938882zM81.850692 635.161956a81.877764 81.877764 0 1 0 81.904876 81.850652A81.82354 81.82354 0 0 0 81.850692 635.161956z m0 122.789534a40.938882 40.938882 0 1 1 40.884658-40.938882 40.938882 40.938882 0 0 1-40.884658 40.938882z m2024.54972-61.381211A40.938882 40.938882 0 1 0 2147.312182 737.482049a40.91177 40.91177 0 0 0-40.91177-40.91177z m-1307.577048 62.004784h47.174606v37.631237a13.908375 13.908375 0 0 0 27.81675 0v-37.631237h335.671721v37.631237a13.908375 13.908375 0 1 0 27.816751 0v-37.631237h47.174605a69.352093 69.352093 0 0 0 69.243646-69.243646v-217.05741a69.270757 69.270757 0 0 0-52.190297-67.10181v-77.377198c0-24.210875-12.932349-46.767928-36.519651-63.387488-22.123263-15.670645-51.160047-24.210875-81.769317-24.210875H900.058984c-30.60927 0-59.646053 8.621566-81.769317 24.210875-23.505967 16.619559-36.519652 39.095277-36.519652 63.387488v77.350086a69.270757 69.270757 0 0 0-52.190296 67.128922v217.084522a69.297869 69.297869 0 0 0 69.243645 69.216534z m10.844737-430.780064c0-32.534211 41.399783-59.646053 90.445107-59.646054h283.047634c49.072435 0 90.472218 27.355849 90.472219 59.646054v76.048718a69.297869 69.297869 0 0 0-58.371797 68.43029v65.77333a94.62033 94.62033 0 0 0-67.156034-27.816751h-212.909298a94.674554 94.674554 0 0 0-67.156034 27.870974v-65.827553a69.324981 69.324981 0 0 0-58.42602-68.403179z m405.593163 277.327036v6.588177a6.994855 6.994855 0 0 1-6.967744 6.967744H875.007642a6.994855 6.994855 0 0 1-6.967744-6.967744v-6.588177a67.237369 67.237369 0 0 1 67.156034-67.156034h212.909298a67.237369 67.237369 0 0 1 67.156034 67.156034z m-457.756348-132.848028a41.399783 41.399783 0 0 1 82.799567 0v161.776364a13.962599 13.962599 0 0 0 13.908375 13.908375h375.038116a13.962599 13.962599 0 0 0 13.908376-13.908375v-161.776364a41.399783 41.399783 0 0 1 82.799566 0v217.084522a41.454007 41.454007 0 0 1-41.399783 41.399783H798.823364a41.454007 41.454007 0 0 1-41.318448-41.426895z" p-id="21273"></path>
</svg>
<span>暂无评论,期待你来坐沙发</span>
</div>
<?php endif; ?>
<?php else : ?>
<div class="joe_comment__close">

View File

@ -1,9 +1,9 @@
<footer class="joe_footer">
<div class="joe_container">
<div class="left">
<div>
<?php $this->options->JFooter_Left() ?>
</div>
<div class="right">
<div>
<?php $this->options->JFooter_Right() ?>
</div>
</div>

View File

@ -1,24 +1,16 @@
<meta charset="utf-8" />
<meta name="renderer" content="webkit" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, shrink-to-fit=no, viewport-fit=cover">
<link rel="shortcut icon" href="<?php $this->options->JFavicon() ?>" />
<?php $this->header(); ?>
<title><?php $this->archiveTitle(array('category' => '分类 %s 下的文章', 'search' => '包含关键字 %s 的文章', 'tag' => '标签 %s 下的文章', 'author' => '%s 发布的文章'), '', ' - '); ?><?php $this->options->title(); ?></title>
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.normalize.css'); ?>">
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.global.css'); ?>">
<link rel="stylesheet" href="https://apip.weatherdt.com/standard/static/css/weather-standard.css">
<script>
window.Joe = {
LIVE2D: '<?php $this->options->JLive2d() ?>', // Live2d
BASE_API: '/index.php/joe/api', // 请求基准URL
DYNAMIC_BACKGROUND: '<?php $this->options->JDynamic_Background() ?>', // 动态背景
WALLPAPER_BACKGROUND_PC: '<?php $this->options->JWallpaper_Background_PC() ?>', // 是否填写了PC端静态壁纸
IS_MOBILE: /windows phone|iphone|android/gi.test(window.navigator.userAgent), // 是否是手机端
encryption: str => window.btoa(unescape(encodeURIComponent(str))), // 加密字符串
decrypt: str => decodeURIComponent(escape(window.atob(str))), // 解密字符串
LIVE2D: '<?php $this->options->JLive2d() ?>',
BASE_API: '/index.php/joe/api',
DYNAMIC_BACKGROUND: '<?php $this->options->JDynamic_Background() ?>',
WALLPAPER_BACKGROUND_PC: '<?php $this->options->JWallpaper_Background_PC() ?>',
IS_MOBILE: /windows phone|iphone|android/gi.test(window.navigator.userAgent),
BAIDU_PUSH: <?php echo $this->options->JBaiduToken ? 'true' : 'false' ?>,
encryption: str => window.btoa(unescape(encodeURIComponent(str))),
decrypt: str => decodeURIComponent(escape(window.atob(str))),
}
/* 用于页面一进入直接判断是否是黑夜模式请勿将它移走或删除必须放这里解决闪烁问题下面的style也是请勿修改 */
if (localStorage.getItem('data-night')) document.querySelector("html").setAttribute("data-night", "night")
</script>
<style>
body::before {
@ -34,9 +26,33 @@
background-size: cover;
}
</style>
<!-- <<<<<<<<<<<<<<<<<<<< 主题开始 >>>>>>>>>>>>>>>>>>>> -->
<meta charset="utf-8" />
<meta name="renderer" content="webkit" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover">
<link rel="shortcut icon" href="<?php $this->options->JFavicon() ?>" />
<title><?php $this->archiveTitle(array('category' => '分类 %s 下的文章', 'search' => '包含关键字 %s 的文章', 'tag' => '标签 %s 下的文章', 'author' => '%s 发布的文章'), '', ' - '); ?><?php $this->options->title(); ?></title>
<?php $this->header(); ?>
<!-- 全局公用CSS -->
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.normalize.css'); ?>">
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.global.css'); ?>">
<link rel="stylesheet" href="https://apip.weatherdt.com/standard/static/css/weather-standard.css">
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.owo.css'); ?>">
<!-- 全局公用JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/js/joe.scroll.js"></script>
<script src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/js/joe.lazyload.js"></script>
<script src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/js/joe.sketchpad.js"></script>
<script src="<?php $this->options->themeUrl('assets/js/joe.owo.js'); ?>"></script>
<script src="<?php $this->options->themeUrl('assets/js/joe.global.js'); ?>"></script>
<!-- 下面是异步加载的JS -->
<script async src="https://apip.weatherdt.com/standard/static/js/weather-standard.js?v=2.0"></script>
<script async src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/js/joe.smooth.js"></script>