更新
This commit is contained in:
parent
bf1450eb2e
commit
f2ed0ae7e1
@ -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)}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
/* 搜索页的样式 */
|
||||||
.joe_archive {
|
.joe_archive {
|
||||||
border-radius: 8px;
|
border-radius: var(--radius-wrap);
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
/* 后台设置的样式 */
|
||||||
.col-mb-12.col-tb-8.col-tb-offset-2 {
|
.col-mb-12.col-tb-8.col-tb-offset-2 {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1108,6 +1108,13 @@ html[data-night='night'] {
|
|||||||
background: #9f44d3;
|
background: #9f44d3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.edit {
|
||||||
|
color: var(--minor);
|
||||||
|
margin-left: auto;
|
||||||
|
&:hover {
|
||||||
|
color: var(--theme);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
&__title {
|
&__title {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
@ -1123,7 +1130,7 @@ html[data-night='night'] {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding-bottom: 15px;
|
padding-bottom: 15px;
|
||||||
border-bottom: 1px solid var(--classB);
|
border-bottom: 1px solid var(--classC);
|
||||||
&::after {
|
&::after {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
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 {
|
&__agree {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -1515,7 +1561,7 @@ html[data-night='night'] {
|
|||||||
}
|
}
|
||||||
&__copyright {
|
&__copyright {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
border-top: 1px solid var(--classB);
|
border-top: 1px solid var(--classC);
|
||||||
.content {
|
.content {
|
||||||
background: var(--classD);
|
background: var(--classD);
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
@ -1721,20 +1767,10 @@ html[data-night='night'] {
|
|||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: var(--main);
|
color: var(--main);
|
||||||
text-shadow: var(--text-shadow);
|
text-shadow: var(--text-shadow);
|
||||||
border-bottom: 1px solid var(--classB);
|
border-bottom: 1px solid var(--classC);
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
padding-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 {
|
&__close {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -1756,6 +1792,7 @@ html[data-night='night'] {
|
|||||||
height: 32px;
|
height: 32px;
|
||||||
color: var(--main);
|
color: var(--main);
|
||||||
border: none;
|
border: none;
|
||||||
|
transition: color 0.35s, background 0.35s;
|
||||||
&:first-child {
|
&:first-child {
|
||||||
border-top-left-radius: var(--radius-inner);
|
border-top-left-radius: var(--radius-inner);
|
||||||
}
|
}
|
||||||
@ -1811,7 +1848,7 @@ html[data-night='night'] {
|
|||||||
padding: 15px;
|
padding: 15px;
|
||||||
.text {
|
.text {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 180px;
|
height: 200px;
|
||||||
border: none;
|
border: none;
|
||||||
resize: none;
|
resize: none;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
@ -1833,6 +1870,7 @@ html[data-night='night'] {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
color: var(--main);
|
color: var(--main);
|
||||||
|
transition: color 0.35s;
|
||||||
&.active {
|
&.active {
|
||||||
color: var(--theme);
|
color: var(--theme);
|
||||||
}
|
}
|
||||||
@ -1851,6 +1889,7 @@ html[data-night='night'] {
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: box-shadow 0.35s;
|
||||||
&.active {
|
&.active {
|
||||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.35);
|
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 {
|
&__list {
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,5 +1,6 @@
|
|||||||
|
/* 首页样式 */
|
||||||
.joe_index {
|
.joe_index {
|
||||||
border-radius: 8px;
|
border-radius: var(--radius-wrap);
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
box-shadow: var(--box-shadow);
|
box-shadow: var(--box-shadow);
|
||||||
@ -28,7 +29,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 160px;
|
height: 160px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
border-radius: 4px;
|
border-radius: var(--radius-inner);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
@ -103,7 +104,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 125px;
|
height: 125px;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: var(--radius-inner) var(--radius-inner) 0 0;
|
||||||
transition: opacity 0.35s;
|
transition: opacity 0.35s;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
@ -148,7 +149,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
border-radius: 4px;
|
border-radius: var(--radius-inner);
|
||||||
transition: opacity 0.35s;
|
transition: opacity 0.35s;
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity: 0.85;
|
opacity: 0.85;
|
||||||
@ -232,11 +233,11 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
height: 335px;
|
height: 335px;
|
||||||
--swiper-theme-color: #fff;
|
--swiper-theme-color: #fff;
|
||||||
border-radius: 4px;
|
border-radius: var(--radius-inner);
|
||||||
.item {
|
.item {
|
||||||
display: block;
|
display: block;
|
||||||
height: 335px;
|
height: 335px;
|
||||||
border-radius: 4px;
|
border-radius: var(--radius-inner);
|
||||||
.thumbnail {
|
.thumbnail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
1
assets/css/joe.owo.css
Normal file
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
430
assets/css/joe.owo.scss
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
@ -1,34 +1,35 @@
|
|||||||
|
/* 文章页面的样式 */
|
||||||
.joe_bread {
|
.joe_bread {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
&__bread {
|
&__bread {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
.line {
|
.line {
|
||||||
color: var(--seat);
|
color: var(--seat);
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
}
|
}
|
||||||
.item {
|
.item {
|
||||||
color: var(--minor);
|
color: var(--minor);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
.link {
|
.link {
|
||||||
color: var(--routine);
|
color: var(--routine);
|
||||||
transition: color 0.35s;
|
transition: color 0.35s;
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--theme);
|
color: var(--theme);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.icon {
|
.icon {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
min-width: 15px;
|
min-width: 15px;
|
||||||
min-height: 15px;
|
min-height: 15px;
|
||||||
fill: var(--routine);
|
fill: var(--routine);
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
}
|
}
|
||||||
&:first-child {
|
&:first-child {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
console.time('Global.js执行时长');
|
console.time('Global.js执行时长');
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
/* 昼夜模式 */
|
/* 初始化昼夜模式 */
|
||||||
{
|
{
|
||||||
if (localStorage.getItem('data-night')) {
|
if (localStorage.getItem('data-night')) {
|
||||||
$('html').attr('data-night', 'night');
|
|
||||||
$('.joe_action_item.mode .icon-1').addClass('active');
|
$('.joe_action_item.mode .icon-1').addClass('active');
|
||||||
$('.joe_action_item.mode .icon-2').removeClass('active');
|
$('.joe_action_item.mode .icon-2').removeClass('active');
|
||||||
} else {
|
} else {
|
||||||
@ -226,15 +225,33 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
/* 激活画图功能 */
|
/* 激活画图功能 */
|
||||||
{
|
{
|
||||||
if ($('#joe_comment_draw').length !== 0) {
|
if ($('#joe_comment_draw').length !== 0) {
|
||||||
window.sketchpad = new Sketchpad({
|
/* 激活画板 */
|
||||||
element: '#joe_comment_draw',
|
window.sketchpad = new Sketchpad({ element: '#joe_comment_draw', height: 300, penSize: 5, color: '303133' });
|
||||||
height: 300,
|
/* 撤销上一步 */
|
||||||
penSize: 5,
|
$('.joe_comment__respond-form .body .draw .icon-undo').on('click', () => window.sketchpad.undo());
|
||||||
color: '303133'
|
/* 动画预览 */
|
||||||
|
$('.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');
|
new LazyLoad('.lazyload');
|
||||||
|
|
||||||
|
145
assets/js/joe.owo.js
Normal file
145
assets/js/joe.owo.js
Normal 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;
|
||||||
|
}
|
||||||
|
})();
|
@ -12,8 +12,32 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
$('#Joe_Baidu_Record').css('color', '#67C23A');
|
$('#Joe_Baidu_Record').css('color', '#67C23A');
|
||||||
$('#Joe_Baidu_Record').html('已收录');
|
$('#Joe_Baidu_Record').html('已收录');
|
||||||
} else {
|
} else {
|
||||||
const url = `https://ziyuan.baidu.com/linksubmit/url?sitename=${encodeURI(window.location.href)}`;
|
/* 如果填写了Token,则自动推送给百度 */
|
||||||
$('#Joe_Baidu_Record').html(`<a target="_blank" href="${url}" rel="noopener noreferrer nofollow" style="color: #F56C6C">未收录,提交收录</a>`);
|
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
259
assets/json/owo.json
Normal 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": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/* 排行榜 */
|
/* 侧边栏热门排行榜 */
|
||||||
function _getRanking($self)
|
function _getRanking($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -24,7 +24,7 @@ function _getRanking($self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 列表 */
|
/* 获取文章列表 */
|
||||||
function _getPost($self)
|
function _getPost($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -38,7 +38,7 @@ function _getPost($self)
|
|||||||
"image" => _getThumbnail($item, false),
|
"image" => _getThumbnail($item, false),
|
||||||
"time" => date('Y-m-d', $item->created),
|
"time" => date('Y-m-d', $item->created),
|
||||||
"created" => date('Y年m月d日', $item->created),
|
"created" => date('Y年m月d日', $item->created),
|
||||||
"title" => _getEncryptionTitle($item, false),
|
"title" => $item->title,
|
||||||
"abstract" => _getAbstract($item, false),
|
"abstract" => _getAbstract($item, false),
|
||||||
"category" => $item->categories,
|
"category" => $item->categories,
|
||||||
"views" => _getViews($item, false),
|
"views" => _getViews($item, false),
|
||||||
@ -51,7 +51,7 @@ function _getPost($self)
|
|||||||
$self->response->throwJson(array("data" => $result));
|
$self->response->throwJson(array("data" => $result));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 浏览量 */
|
/* 增加浏览量 */
|
||||||
function _handleViews($self)
|
function _handleViews($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -69,7 +69,7 @@ function _handleViews($self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 点赞 */
|
/* 点赞和取消点赞 */
|
||||||
function _handleAgree($self)
|
function _handleAgree($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -92,7 +92,7 @@ function _handleAgree($self)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 收录 */
|
/* 查询是否收录 */
|
||||||
function _getRecord($self)
|
function _getRecord($self)
|
||||||
{
|
{
|
||||||
header("HTTP/1.1 200 OK");
|
header("HTTP/1.1 200 OK");
|
||||||
@ -122,4 +122,26 @@ function _getRecord($self)
|
|||||||
} else {
|
} else {
|
||||||
$self->response->throwJson(array("data" => "已收录"));
|
$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));
|
||||||
|
}
|
386
core/core.php
386
core/core.php
@ -1,16 +1,35 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/* 继承方法函数 */
|
||||||
|
require_once('widget.php');
|
||||||
|
|
||||||
|
/* 公用函数 */
|
||||||
|
require_once('function.php');
|
||||||
|
|
||||||
|
/* 过滤内容函数 */
|
||||||
|
require_once('parse.php');
|
||||||
|
|
||||||
|
/* 主题内置开放API */
|
||||||
|
require_once('api.php');
|
||||||
|
|
||||||
/* 页面加载计时 */
|
/* 页面加载计时 */
|
||||||
_startCountTime();
|
_startCountTime();
|
||||||
|
|
||||||
/* 主题开发API */
|
|
||||||
require_once('route.php');
|
|
||||||
|
|
||||||
/* 主题初始化 */
|
/* 主题初始化 */
|
||||||
function themeInit($self)
|
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;
|
Helper::options()->commentsThreaded = true;
|
||||||
/* 强制显示一页15篇文章 */
|
/* 强制显示一页12篇文章 */
|
||||||
$self->parameter->pageSize = 12;
|
$self->parameter->pageSize = 12;
|
||||||
|
|
||||||
/* 主题开放API 路由规则 */
|
/* 主题开放API 路由规则 */
|
||||||
@ -26,6 +45,9 @@ function themeInit($self)
|
|||||||
case 'baidu_record':
|
case 'baidu_record':
|
||||||
_getRecord($self);
|
_getRecord($self);
|
||||||
break;
|
break;
|
||||||
|
case 'baidu_push':
|
||||||
|
_pushRecord($self);
|
||||||
|
break;
|
||||||
case 'handle_views':
|
case 'handle_views':
|
||||||
_handleViews($self);
|
_handleViews($self);
|
||||||
break;
|
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)
|
function themeFields($layout)
|
||||||
{
|
{
|
||||||
$aside = new Typecho_Widget_Helper_Form_Element_Radio(
|
$aside = new Typecho_Widget_Helper_Form_Element_Radio(
|
||||||
@ -394,40 +97,3 @@ function themeFields($layout)
|
|||||||
);
|
);
|
||||||
$layout->addItem($abstract);
|
$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
265
core/function.php
Normal 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
59
core/parse.php
Normal 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
37
core/widget.php
Normal 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')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
|
||||||
|
|
||||||
|
/* Joe核心文件 */
|
||||||
require_once("core/core.php");
|
require_once("core/core.php");
|
||||||
|
|
||||||
function themeConfig($form)
|
function themeConfig($form)
|
||||||
{
|
{
|
||||||
$_db = Typecho_Db::get();
|
$_db = Typecho_Db::get();
|
||||||
@ -181,9 +184,7 @@ function themeConfig($form)
|
|||||||
$JFooter_Left = new Typecho_Widget_Helper_Form_Element_Textarea(
|
$JFooter_Left = new Typecho_Widget_Helper_Form_Element_Textarea(
|
||||||
'JFooter_Left',
|
'JFooter_Left',
|
||||||
NULL,
|
NULL,
|
||||||
'<span class="info">
|
'2019 - 2020 © Reach - <a href="http://ae.js.cn" target="_blank" rel="noopener noreferrer">Joe</a>',
|
||||||
2019 - 2020 © Reach - <a href="http://ae.js.cn" target="_blank" rel="noopener noreferrer">Joe</a>
|
|
||||||
</span>',
|
|
||||||
'自定义底部栏左侧内容(非必填)',
|
'自定义底部栏左侧内容(非必填)',
|
||||||
'介绍:用于修改全站底部左侧内容 <br>
|
'介绍:用于修改全站底部左侧内容 <br>
|
||||||
例如:2019 - 2020 © Reach - Joe '
|
例如:2019 - 2020 © Reach - Joe '
|
||||||
@ -594,4 +595,15 @@ function themeConfig($form)
|
|||||||
);
|
);
|
||||||
$JFriends->setAttribute('class', 'joe_content joe_other');
|
$JFriends->setAttribute('class', 'joe_content joe_other');
|
||||||
$form->addInput($JFriends);
|
$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);
|
||||||
} ?>
|
} ?>
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<?php $this->need('public/include.php'); ?>
|
<?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/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="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'); ?>">
|
<link rel="stylesheet" href="<?php $this->options->themeUrl('assets/css/joe.index.css'); ?>">
|
||||||
@ -74,12 +75,12 @@
|
|||||||
<?php foreach ($recommend as $cid) : ?>
|
<?php foreach ($recommend as $cid) : ?>
|
||||||
<?php $this->widget('Widget_Archive@' . $cid, 'pageSize=1&type=post', 'cid=' . $cid)->to($item); ?>
|
<?php $this->widget('Widget_Archive@' . $cid, 'pageSize=1&type=post', 'cid=' . $cid)->to($item); ?>
|
||||||
<figure class="item">
|
<figure class="item">
|
||||||
<a class="thumbnail" href="<?php $item->permalink() ?>" title="<?php _getEncryptionTitle($item) ?>">
|
<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 _getEncryptionTitle($item) ?>" width="100%" />
|
<img class="lazyload" onerror="<?php _getLazyload() ?>" src="<?php _getLazyload(); ?>" data-original="<?php _getThumbnail($item); ?>" alt="<?php $item->title() ?>" width="100%" />
|
||||||
</a>
|
</a>
|
||||||
<figcaption class="information">
|
<figcaption class="information">
|
||||||
<span class="information_type">推荐</span>
|
<span class="information_type">推荐</span>
|
||||||
<span class="information_title"><?php _getEncryptionTitle($item) ?></span>
|
<span class="information_title"><?php $item->title() ?></span>
|
||||||
</figcaption>
|
</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
37
live.php
37
live.php
@ -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>
|
|
7
post.php
7
post.php
@ -36,13 +36,6 @@
|
|||||||
<div class="joe_container">
|
<div class="joe_container">
|
||||||
<div class="joe_main joe_post">
|
<div class="joe_main joe_post">
|
||||||
<div class="joe_detail" data-cid="<?php echo $this->cid ?>">
|
<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/article.php'); ?>
|
||||||
<?php $this->need('public/handle.php'); ?>
|
<?php $this->need('public/handle.php'); ?>
|
||||||
<?php $this->need('public/copyright.php'); ?>
|
<?php $this->need('public/copyright.php'); ?>
|
||||||
|
@ -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">
|
||||||
<div class="joe_detail__count-information">
|
<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(); ?>" />
|
<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>
|
</div>
|
||||||
<time class="joe_detail__count-created" datetime="<?php $this->date('m/d'); ?>"><?php $this->date('m/d'); ?></time>
|
<time class="joe_detail__count-created" datetime="<?php $this->date('m/d'); ?>"><?php $this->date('m/d'); ?></time>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="joe_detail__article">
|
<div class="joe_detail__article">
|
||||||
<?php if ($this->is('post')) : ?>
|
<?php if ($this->is('post')) : ?>
|
||||||
<?php if ($this->hidden) : ?>
|
<?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>
|
</div>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<?php _parseContent($this) ?>
|
<?php _parseContent($this, $this->user->hasLogin()) ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<?php _parseContent($this) ?>
|
<?php _parseContent($this, $this->user->hasLogin()) ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
@ -21,7 +21,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<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;">
|
<div class="draw" style="display: none;">
|
||||||
<ul class="line">
|
<ul class="line">
|
||||||
<li data-line="3">细</li>
|
<li data-line="3">细</li>
|
||||||
@ -44,6 +44,12 @@
|
|||||||
<canvas id="joe_comment_draw" height="300"></canvas>
|
<canvas id="joe_comment_draw" height="300"></canvas>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="foot">
|
||||||
|
<div class="owo" id="OwO_Container"></div>
|
||||||
|
<div class="submit">
|
||||||
|
<button>发表评论</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php if ($comments->have()) : ?>
|
<?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 endif; ?>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<div class="joe_comment__close">
|
<div class="joe_comment__close">
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<footer class="joe_footer">
|
<footer class="joe_footer">
|
||||||
<div class="joe_container">
|
<div class="joe_container">
|
||||||
<div class="left">
|
<div>
|
||||||
<?php $this->options->JFooter_Left() ?>
|
<?php $this->options->JFooter_Left() ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div>
|
||||||
<?php $this->options->JFooter_Right() ?>
|
<?php $this->options->JFooter_Right() ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -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>
|
<script>
|
||||||
window.Joe = {
|
window.Joe = {
|
||||||
LIVE2D: '<?php $this->options->JLive2d() ?>', // Live2d
|
LIVE2D: '<?php $this->options->JLive2d() ?>',
|
||||||
BASE_API: '/index.php/joe/api', // 请求基准URL
|
BASE_API: '/index.php/joe/api',
|
||||||
DYNAMIC_BACKGROUND: '<?php $this->options->JDynamic_Background() ?>', // 动态背景
|
DYNAMIC_BACKGROUND: '<?php $this->options->JDynamic_Background() ?>',
|
||||||
WALLPAPER_BACKGROUND_PC: '<?php $this->options->JWallpaper_Background_PC() ?>', // 是否填写了PC端静态壁纸
|
WALLPAPER_BACKGROUND_PC: '<?php $this->options->JWallpaper_Background_PC() ?>',
|
||||||
IS_MOBILE: /windows phone|iphone|android/gi.test(window.navigator.userAgent), // 是否是手机端
|
IS_MOBILE: /windows phone|iphone|android/gi.test(window.navigator.userAgent),
|
||||||
encryption: str => window.btoa(unescape(encodeURIComponent(str))), // 加密字符串
|
BAIDU_PUSH: <?php echo $this->options->JBaiduToken ? 'true' : 'false' ?>,
|
||||||
decrypt: str => decodeURIComponent(escape(window.atob(str))), // 解密字符串
|
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>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
body::before {
|
body::before {
|
||||||
@ -34,9 +26,33 @@
|
|||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
</style>
|
</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/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.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.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>
|
<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://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>
|
<script async src="https://cdn.jsdelivr.net/gh/HaoOuBa/Joe@master/assets/js/joe.smooth.js"></script>
|
Loading…
Reference in New Issue
Block a user