-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathfunctions.php
363 lines (330 loc) · 15 KB
/
functions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
<?php
timer_start(); //记录开始时间
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
require_once 'assets/php/Plugin.php';
theme_plugin::init();
const __THEME_CDN_JS__ = '//cdn.staticfile.org/';
const __THEME_CDN_GRAVATAR__ = '//sdn.geekzu.org/avatar/';
function themeConfig($form) {
$themeUrl = Helper::options()->themeUrl;
$siteUrl = Helper::options()->siteUrl;
Typecho_Widget::widget('Widget_User')->to($user);
$logoUrl = new Typecho_Widget_Helper_Form_Element_Text(
'logoUrl',
NULL,
__THEME_CDN_GRAVATAR__ . md5(strtolower($user->mail)) . '?s=100',
_t('站点 LOGO 地址'),
_t('在这里填入一个图片 URL 地址, 以在网站标题前加上一个64*64的LOGO')
);
$form->addInput($logoUrl);
$backgroundUrl = new Typecho_Widget_Helper_Form_Element_Text('backgroundUrl',NULL,
$siteUrl.str_replace('\\','/',preg_replace('#'.preg_quote(__TYPECHO_ROOT_DIR__).'[\\\|/]#','',__DIR__,1)).'/background.jpg',
_t('背景图片'),_t('在这里填入一个图片 URL 地址, 应到网站背景<br>背景图片默认显示为:居中上顶 不重复 固定')
);
$form->addInput($backgroundUrl);
$faviconUrl = new Typecho_Widget_Helper_Form_Element_Text('faviconUrl',NULL,'/favicon.ico',
_t('站点ICO图标地址'),_t('在这里填入一个ICO图标URL地址, 以在网站标题上显示一个ICO图标'));
$form->addInput($faviconUrl);
$cdn = new Typecho_Widget_Helper_Form_Element_Text(
'cdn',
NULL,
__THEME_CDN_JS__,
_t('CDN 源'),
_t('默认:') . __THEME_CDN_JS__
);
$form->addInput($cdn);
$gravatar = new Typecho_Widget_Helper_Form_Element_Text(
'gravatar',
NULL,
'https://gravatar.loli.net/avatar/',
_t('Gravatar 头像源'),
_t('默认:') . __THEME_CDN_GRAVATAR__
);
$form->addInput($gravatar);
$lazyload_img = new Typecho_Widget_Helper_Form_Element_Text('lazyload_img',NULL,'{themeUrl}/loading.gif',_t('懒加载占位图片'),'内容替换:<br>{siteUrl}:网站地址<br>{themeUrl}:主题地址');
$form->addInput($lazyload_img);
$baidu = new Typecho_Widget_Helper_Form_Element_Text('baidu',NULL,NULL,_t('百度统计ID'));
$form->addInput($baidu);
$sticky = new Typecho_Widget_Helper_Form_Element_Text('sticky',NULL,NULL,_t('文章置顶'),_t('填写文章id,多个则使用|分开,置顶顺序按从左到右'));
$form->addInput($sticky);
$reward = new Typecho_Widget_Helper_Form_Element_Text('reward',NULL,NULL,_t('打赏'),_t('格式:[支付方式](二维码链接)<br>例如:[支付宝](http://example.com/alipay.png)'));
$form->addInput($reward);
$advanced = new Typecho_Widget_Helper_Form_Element_Checkbox(
'advanced',
array(
'Console' => _t('显示控制台'),
'ShowTitleWithPassword' => _t('密码保护时显示标题'),
'pjax' => _t('使用PJAX加载网页'),
'hitokoto' => _t('在页脚引用 <a href="http://hitokoto.cn/">一言(hitokoto)</a>'),
'lazyload' => _t('懒加载'),
'emoji' => _t('评论表情'),
'ShortCode' => _t('使用短代码'),
'Parsedown' => _t('使用 Parsedown 解析代替原解析'),
'prism' => _t('代码框拓展<p class="description">如果当你使用其他的 MarkDown 解析后最好不要启用 <red>代码框拓展</red><br>在注明代码语言后用:号隔开,然后使用以下参数:l表示高亮行,多个用+号分开,连续使用-号;n表示开始行号<br>参数名与参数值之间用.号隔开,参数与参数间用#隔开<br>具体格式:```或~~~语言:参数名.参数值#参数名.参数值<br>例如:```php:l.8+10-15#s.6 则高亮第8、10到15行,从第6行开始<br><strong>注意:</strong>使用的符号都是<red>英文</red>符号</p>')
),
array(
'pjax',
'hitokoto',
'lazyload',
'emoji',
'ShortCode',
'Parsedown',
'prism'
),
_t('高级')
);
$form->addInput($advanced->multiMode());
$form->addInput(new Typecho_Widget_Helper_Form_Element_Hidden('emoji',NULL,'<div class="emoji-package"><div class="emoji-btn"><span data-url="{themeUrl}/emoji/paopao/">泡泡表情</span></div><div class="emoji-body"><ul><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/1.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/2.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/3.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/4.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/5.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/6.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/7.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/8.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/9.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/10.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/11.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/12.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/13.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/14.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/15.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/16.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/17.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/18.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/19.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/20.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/21.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/22.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/23.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/24.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/25.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/26.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/27.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/28.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/29.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/30.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/31.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/32.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/33.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/34.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/35.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/36.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/37.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/38.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/39.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/40.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/41.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/42.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/43.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/44.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/45.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/46.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/47.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/48.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/49.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/50.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/51.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/52.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/53.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/54.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/55.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/56.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/57.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/58.png"></li><li><img class="emoji" data-src="{themeUrl}/emoji/paopao/59.png"></li></ul></div></div>'));
$header = new Typecho_Widget_Helper_Form_Element_Textarea('header',NULL,NULL,_t('自定义页眉'),_t('填写需要的代码,比如css样式、js等'));
$form->addInput($header);
/** @noinspection HtmlUnknownTarget */
$footer = new Typecho_Widget_Helper_Form_Element_Textarea(
'footer',
NULL,
'Powered by <a href="http://www.typecho.org/" target="_blank">Typecho</a>,
Theme by<a href="https://github.com/moeshin/Typecho-Theme-Littlehands" target="_blank">Littlehands</a>,
{inf}<br/>
© {Y} <a href="{siteUrl}">{title}</a>. All right reserved.
<a href="https://beian.miit.gov.cn/" target="_blank">京ICP备00000000号</a>',
_t('自定义页脚'),
_t('填写需要的代码,比如版权、备案号、统计代码等<br/>内容替换:<br/>{Y}:当前年份<br/>{title}:网站名称<br/>{siteUrl}:网站地址<br/>{inf}:页面信息')
);
$form->addInput($footer);
$sidebarBlock = new Typecho_Widget_Helper_Form_Element_Checkbox(
'sidebarBlock',
array(
'ShowRecentPosts' => _t('显示最新文章'),
'ShowRecentComments' => _t('显示最近回复'),
'ShowCategory' => _t('显示分类'),
'ShowArchive' => _t('显示归档'),
'ShowOther' => _t('显示其它杂项'),
'Console' => _t('控制台')
),
array(
'ShowRecentPosts',
'ShowRecentComments',
'ShowCategory',
'ShowArchive',
'ShowOther',
'Console'
),
_t('侧边栏显示')
);
$form->addInput($sidebarBlock->multiMode());
}
function themeInit($archive){
$options = Helper::options();
$options->commentsAntiSpam = false;//强制关闭反垃圾评论
$options->commentsHTMLTagAllowed .= '<img src="" class="">';//追加允许使用的HTML标签和属性
$options->commentsMaxNestingLevels = 999;//拓展可回复数
if(class_exists('ShortCode'))
ShortCode::set(array('video','audio'),'ShortCode');
}
function themeFields($layout){
/*$logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL, _t('站点LOGO地址'), _t('在这里填入一个图片URL地址, 以在网站标题前加上一个LOGO'));
$layout->addItem($logoUrl);*/
}
/**
* 短代码处理
*
* @param string
* @param string
* @param string
* @param string
* @return string
*/
function ShortCode($name,$attr,$text,$code){
switch($name){
case 'video':
if (preg_match('#^https?://(?:www|m).bilibili.com/video/av(\d+)(.*)#i', $text, $matches)) {
$av = $matches[1];
$p = 1;
if ($matches[2] && preg_match('/(?:\?|&)p=(\d+)(?:&|$)/i', $matches[2], $matches)) {
$p = $matches[1];
}
return "<div class=\"bilibili\"><iframe$attr src=\"https://player.bilibili.com/player.html?aid=$av&page=$p\" allowfullscreen></iframe></div>";
}
return '<video controls="controls"'.$attr.'><source src="'.$text.'"></video>';
case 'audio':
return '<audio controls="controls"'.$attr.'><source src="'.$text.'"></audio>';
}
return $code;
}
/**
* 获取现行时间
*
* @global float $timestart
* @return float
*/
function timer_get(){
$mtime = explode(' ',microtime());
return $mtime[1] + $mtime[0];
}
/**
* 记录开始时间
*
* @global float $timestart
* @return void
*/
function timer_start(){
global $timestart;
$timestart = timer_get();
}
/**
* 计算运行时间
*
* @global float $timestart
* @param bool $display 是否输出
* @param int $precision 保留小数位数
* @return float
*/
function timer_stop($display = false,$precision = 3){
global $timestart;
$timetotal = timer_get()-$timestart;
$r = number_format( $timetotal, $precision );
if($display) echo $r;
return $r;
}
/**
* 获取搜索关键词
*
* @return string
*/
function getSearchText(){
$text = str_replace('search/','',str_replace(preg_replace('/(http|https):\/\//','',Helper::options()->index.'/'),'',preg_replace('/\/$/','',$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])),$count);
if($count == 1){
return urldecode($text);
}else{
return '';
}
}
/**
* 检测服务器是否SSL连接(Https连接)
*
* @return bool
*/
function is_SSL(){
if(!isset($_SERVER['HTTPS'])) return FALSE;
if($_SERVER['HTTPS']===1) return TRUE; //Apache
elseif($_SERVER['HTTPS']==='on') return TRUE; //IIS
elseif($_SERVER['SERVER_PORT']==443) return TRUE; //其他
return FALSE;
}
/**
* 检测服务器是否Gzip压缩
*
* @return bool
*/
function is_Gzip(){
return isset($_SERVER['HTTP_ACCEPT_ENCODING'])
&& strpos(strtolower($_SERVER['HTTP_ACCEPT_ENCODING']),'gzip') !== false;
}
/**
* 输出摘要
*
* @param Widget_Abstract_Contents $archive
* @return void
*/
function excerpt($archive){
echo preg_replace('#<!--more-->[\s\S]*#','......',$archive->content);
}
/**
* 调试输出
*
* @param mixed
* @return void
*/
function write() {
$code = '';
foreach(func_get_args() as $val)
$code .= print_r($val,true)."\n";
$code = htmlspecialchars($code);
echo "<pre>$code</pre>";
}
/**
* 判断是否为MD5
*
* @param string
* @return function
*/
function is_md5($md5) {
return $md5 && preg_match("/^[a-z0-9]{32}$/", $md5);
}
/**
* 是否存在于数组
*
* @param mixed
* @param array
* @return bool
*/
function inArray($a, $arr) {
if (empty($arr))
return false;
return in_array($a, $arr);
}
/**
* 获取头像
*
* @param string $email
* @return string
*/
function get_avatar($email) {
if (preg_match('/^(\d+)@qq\.com$/i', $email, $matches)) {
return "https://q1.qlogo.cn/g?b=qq&s=100&nk=$matches[1]";
}
$r = Helper::options()->commentsAvatarRating;
$d = Typecho_Widget::widget('Widget_Options')->motx; // 默认头像
return preg_replace('/\/$/', '', Helper::options()->gravatar) . '/' . md5(strtolower($email)) . "?s=100&r=$r&d=$d";
}
//$cdnList = [];
/**
* 获取 CDN
*
*
*/
function cdn($path) {
$cdn = Helper::options()->cdn;
if (!$cdn) {
$cdn = __THEME_CDN_JS__;
}
return rtrim($cdn, '/') . "/$path";
}
//global $cdnList;
//$cdnList = [];
//function cdn($path)
//{
// global $cdnList;
// $cdn = __THEME_CDN_JS__;
// $cdn = rtrim($cdn, '/') . "/$path";
// array_push($cdnList, $path);
// return $cdn;
//}
//function dump_cdn()
//{
// global $cdnList;
// echo '<textarea style="width: 100%; height: 300px;">';
// foreach ($cdnList as $cdn)
// {
// echo $cdn;
// echo "\n";
// }
// echo '</textarea>';
//}
function getLazyLoadImg() {
/** @noinspection PhpUndefinedClassInspection */
$options = Helper::options();
$img = $options->lazyload_img;
return $img
? str_replace(
[
'{themeUrl}',
'{siteUrl}'
],
[
$options->themeUrl,
$options->siteUrl
],
$img
)
: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYz';
}