├── screenshot.png ├── 404.php ├── page.php ├── page-sitemap.php ├── page-links.php ├── README.md ├── page-archives.php ├── normalize.min.css ├── archive.php ├── index.php ├── post.php ├── footer.php ├── sidebar.php ├── header.php ├── comments.php ├── main.min.js ├── page-whisper.php ├── style.min.css └── functions.php /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChrisKimZHT/initial/master/screenshot.png -------------------------------------------------------------------------------- /404.php: -------------------------------------------------------------------------------- 1 | need('header.php'); ?> 3 |
4 |

404 - 页面没找到

5 |

你要查看的页面已被转移或删除了

6 |
7 | 8 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 9 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 3 | Breadcrumbs($this); ?> 4 |
5 |

title() ?>

6 |
7 | content(); ?> 8 |
9 |
10 | need('comments.php'); ?> 11 | 12 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 13 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page-sitemap.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | Breadcrumbs($this); ?> 10 |
11 |

12 |
13 | widget('Widget_Contents_Post_Recent', 'pageSize=10000')->parse('
  • {year}-{month}-{day} : {title}
  • '); ?> 14 |
    15 |
    16 | 17 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 18 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page-links.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | Breadcrumbs($this); ?> 10 |
    11 |

    title() ?>

    12 |
    13 | content(); ?> 14 | 20 |
    21 |
    22 | need('comments.php'); ?> 23 | 24 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 25 | need('footer.php'); ?> -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Typecho 主题 - Initial 简约而不简单(v2.5.5-0) 2 | 3 | 我的笔记站点自用 fork 版,修改了许多主题细节使其更符合我的审美。 4 | 5 | 本仓库仅分享自己的修改版,**不处理**任何 issue, pull request,**不提供**任何技术支持,**不保证**持续更新与维护。 6 | 7 | 主题预览:https://io.zouht.com/ 8 | 9 | ### 修改内容 10 | 11 | 1. (archive.php) 面包屑导航格式改成:首页 > (分类方式) > (分类条目) 12 | 2. (archive.php) 文章标题改为 h1 13 | 3. (archive.php) 文章元数据格式修改,删去阅读数量显示 14 | 4. (archive.php) 文章摘要使用 `$this->content()` 显示,支持格式渲染(需要手动插入``) 15 | 5. (footer.php) 修改底部主题信息 16 | 6. (function.php) 修改版本号的格式 17 | 7. (header.php) 引入 `normalize.min.css` 标准化样式 18 | 8. (index.php) 修改主题信息 19 | 9. (index.php) 首页也显示面包屑导航 20 | 10. (index.php) 文章标题修改(同 2) 21 | 11. (index.php) 文章元数据修改(同 3) 22 | 12. (index.php) 文章摘要修改(同 4) 23 | 13. (+normalize.min.css) 新增标准化样式 24 | 14. (+page-sitemap.php) 新增文章列表模板(在页面自定义模板里选择) 25 | 15. (post.php) 文章元数据修改(同 3) 26 | 16. (style.min.css) body 字体大小增大到 17px 27 | 17. (style.min.css) 字体集修改,主要区别是西文字体,换成了有衬线的 28 | 18. (style.min.css) 代码块取消滚动条,一律全部展开 29 | 19. (style.min.css) 文章元数据字体大小增大到 1em 30 | 20. (style.min.css) 一律打开 border-bottom 文章列表分割线 31 | 21. (style.min.css) 文章内 h1 标题底部横线 32 | 22. (style.min.css) 文章内 h2 标题底部灰色阴影 33 | -------------------------------------------------------------------------------- /page-archives.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | Breadcrumbs($this); ?> 10 |
    11 |

    title() ?>

    12 | widget('Widget_Contents_Post_Recent', 'pageSize='.Typecho_Widget::widget('Widget_Stat')->publishedPostsNum)->to($archives); 14 | $year=0; 15 | $output = '
    '; 16 | while($archives->next()){ 17 | $year_tmp = date('Y',$archives->created); 18 | if ($year > $year_tmp) { 19 | $output .= ''; 20 | } 21 | if ($year != $year_tmp) { 22 | $year = $year_tmp; 23 | $output .= '

    '.date('Y 年',$archives->created).'

    '; 32 | echo $output; 33 | ?> 34 |
    35 | 36 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 37 | need('footer.php'); ?> -------------------------------------------------------------------------------- /normalize.min.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v2.1.3 | MIT License | git.io/normalize */ 2 | article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0} -------------------------------------------------------------------------------- /archive.php: -------------------------------------------------------------------------------- 1 | need('header.php'); ?> 3 | 10 | have()): ?> 11 | next()): ?> 12 |
    13 |

    title() ?>

    14 | 19 |
    20 | options->PjaxOption && $this->hidden): ?> 21 |
    options->AjaxLoad): ?>action="getTokenUrl($this->permalink); ?>" method="post"> 22 |

    请输入密码访问

    23 |

    24 | 25 | 26 |

    27 |
    28 | 29 | 30 |

    31 | 32 |

    content('- 阅读剩余部分 -'); ?>

    33 | 34 |
    35 |
    36 | 37 | 38 |
    39 |

    没有找到内容

    40 |
    41 | 42 | pageNav('上一页', $this->options->AjaxLoad ? '查看更多' : '下一页', 0, '..', $this->options->AjaxLoad ? array('wrapClass' => 'page-navigator ajaxload') : ''); ?> 43 | 44 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 45 | need('footer.php'); ?> -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | need('header.php'); ?> 13 | 14 | _currentPage == 1 && !empty($this->options->ShowWhisper) && in_array('index', $this->options->ShowWhisper)): ?> 15 |
    16 | 17 |
    18 | 19 | next()): ?> 20 |
    21 |

    title() ?>

    22 | 27 |
    28 | options->PjaxOption && $this->hidden): ?> 29 |
    options->AjaxLoad): ?>action="getTokenUrl($this->permalink); ?>" method="post"> 30 |

    请输入密码访问

    31 |

    32 | 33 | 34 |

    35 |
    36 | 37 | 38 |

    39 | 40 |

    content('- 阅读剩余部分 -'); ?>

    41 | 42 |
    43 |
    44 | 45 | pageNav('上一页', $this->options->AjaxLoad ? '查看更多' : '下一页', 0, '..', $this->options->AjaxLoad ? array('wrapClass' => $this->options->AjaxLoad == 'auto' ? 'page-navigator ajaxload auto' : 'page-navigator ajaxload') : ''); ?> 46 | 47 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 48 | need('footer.php'); ?> -------------------------------------------------------------------------------- /post.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 3 | if (!empty($this->options->Breadcrumbs) && in_array('Postshow', $this->options->Breadcrumbs)): ?> 4 | 7 | 8 |
    9 |

    title() ?>

    10 | 15 |
    16 | content(); ?> 17 |
    18 | options->WeChat || $this->options->Alipay): ?> 19 |

    打赏: options->WeChat): ?> 20 | 微信收款二维码微信options->WeChat && $this->options->Alipay): ?>, options->Alipay): ?> 21 | 支付宝收款二维码支付宝 22 |

    23 | 24 |

    标签: tags(', ', true, 'none'); ?>

    25 | options->LicenseInfo !== '0'): ?> 26 |

    options->LicenseInfo ? $this->options->LicenseInfo : '本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。' ?>

    27 | 28 |
    29 | need('comments.php'); ?> 30 | 34 | 35 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 36 | need('footer.php'); ?> -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | options->scrollTop || ($this->options->MusicSet && $this->options->MusicUrl)): ?> 23 |
    24 | 35 |
    36 | options->PjaxOption || $this->options->AjaxLoad): ?> 37 | 38 | options->PjaxOption): ?> 39 | 40 | options->Highlight):?> 41 | 42 | 43 | 44 | footer(); ?> 45 | options->CustomContent): $this->options->CustomContent(); ?> 46 | 47 | 48 | 49 | options->compressHtml): $html_source = ob_get_contents(); ob_clean(); print compressHtml($html_source); ob_end_flush(); endif; ?> -------------------------------------------------------------------------------- /sidebar.php: -------------------------------------------------------------------------------- 1 | 2 |
    options->SidebarFixed): ?> sidebar-fixed> 3 | options->ShowWhisper) && in_array('sidebar', $this->options->ShowWhisper)): ?> 4 |
    5 | 6 |
    7 | 8 | options->sidebarBlock) && in_array('ShowHotPosts', $this->options->sidebarBlock)): ?> 9 |
    10 |

    热门文章

    11 | 14 |
    15 | 16 | options->sidebarBlock) && in_array('ShowRecentPosts', $this->options->sidebarBlock)): ?> 17 |
    18 |

    最新文章

    19 | 22 |
    23 | 24 | options->sidebarBlock) && in_array('ShowRecentComments', $this->options->sidebarBlock)): ?> 25 |
    26 |

    最近回复

    27 | 37 |
    38 | 39 | options->sidebarBlock) && in_array('ShowCategory', $this->options->sidebarBlock)): ?> 40 |
    41 |

    分类

    42 | 46 |
    47 | 48 | options->sidebarBlock) && in_array('ShowTag', $this->options->sidebarBlock)): ?> 49 |
    50 |

    标签

    51 | 61 |
    62 | 63 | options->sidebarBlock) && in_array('ShowArchive', $this->options->sidebarBlock)): ?> 64 |
    65 |

    归档

    66 | 70 |
    71 | 72 | options->ShowLinks) && in_array('sidebar', $this->options->ShowLinks)): ?> 73 |
    74 |

    链接

    75 | 81 |
    82 | 83 | options->sidebarBlock) && in_array('ShowOther', $this->options->sidebarBlock)): ?> 84 |
    85 |

    其它

    86 | 94 |
    95 | 96 |
    97 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | options->favicon): ?> 9 | 10 | 11 | <?php $this->archiveTitle(array( 12 | 'category' => _t('分类 %s 下的文章'), 13 | 'search' => _t('包含关键字 %s 的文章'), 14 | 'tag' => _t('标签 %s 下的文章'), 15 | 'date' => _t('在 %s 发布的文章'), 16 | 'author' => _t('作者 %s 发布的文章') 17 | ), '', ' - '); ?><?php $this->options->title(); if ($this->is('index') && $this->options->subTitle): ?> - <?php $this->options->subTitle(); endif; ?> 18 | header('generator=&template=&pingback=&xmlrpc=&wlw=&commentReply=&rss1=&rss2=&antiSpam=&atom='); ?> 19 | 20 | 21 | options->CustomCSS): ?> 22 | 23 | 24 | 25 | 26 | 29 | 102 |
    options->PjaxOption): ?> in-pjax> 103 |
    104 |
    105 | -------------------------------------------------------------------------------- /comments.php: -------------------------------------------------------------------------------- 1 | authorId) { 5 | if ($comments->authorId == $comments->ownerId) { 6 | $commentClass .= ' comment-by-author'; 7 | } else { 8 | $commentClass .= ' comment-by-user'; 9 | } 10 | } 11 | ?> 12 |
  • 22 |
    23 |
    24 | gravatar('32'); ?> 25 | 26 | authorId == $comments->ownerId) { ?> 27 | Author 28 | 29 | status == 'waiting') { ?> 30 | 您的评论正等待审核! 31 | 32 |
    33 |
    34 | 35 |
    36 |
    37 | content(); ?> 38 |
    39 |
    40 | reply(); ?> 41 |
    42 |
    43 | children) { ?> 44 |
    45 | threadedComments($options); ?> 46 |
    47 | 48 |
  • 49 | 50 |
    51 | comments()->to($comments); ?> 52 | have()): ?> 53 |

    commentsNum(_t('暂无评论'), _t('已有 %d 条评论')); ?>

    54 | listComments(); ?> 55 | pageNav('上一页', '下一页', 0, '..'); ?> 56 | 57 | allow('comment')): ?> 58 |
    59 |
    60 | cancelReply(); ?> 61 |
    62 |

    添加新评论

    63 |
    user->hasLogin()): ?> class="comment-form clearfix"> 64 | user->hasLogin()): ?> 65 |

    登录身份: user->screenName(); ?>. options->PjaxOption): ?> no-pjax>退出 »

    66 | 67 |

    user->hasLogin()): ?>class="textarea"> 68 | 69 |

    70 |

    user->hasLogin()): ?>class="textbutton"> 71 | user->hasLogin()): ?> 72 | 73 | options->commentsRequireMail): ?> required /> 74 | options->commentsRequireURL): ?> required /> 75 | 76 | 77 |

    78 |
    79 |
    80 | options->commentsThreaded): ?> 81 | 82 | 83 | 84 |

    评论已关闭

    85 | 86 |
    87 | -------------------------------------------------------------------------------- /main.min.js: -------------------------------------------------------------------------------- 1 | eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3(6.m("v").2b("2Q-D")){2R.2S.1e=4(n,d){E.2T(4(){7 a=$(E);a.V({2U:\'2V\'});2W(7 x=1;x<=n;x++){a.W({1O:(-d)},X).W({1O:d},X).W({1O:0},X)}});r E};$(6).D(\'a:2X(a[2Y="2Z"], a[31-D])\',{1f:\'#w\',1g:\'#w\',1h:1i}).Y(\'1j\',\'J[G=1P], J[G=8-J]\',4(a){$.D.1j(a,{1f:\'#w\',1g:\'#w\',1h:1i})}).Y(\'D:2c\',4(){$("#1Q").1k("")}).Y(\'D:32\',4(){33(4(){$("#2d").1R()},1S);$(\'#1Q\').2e("Y");$(\'#s\').1T("");$("#2f").1l("t");3(1m 1n!==\'1o\'){6.34(\'35 36\').37((2g)=>{1n.38(2g)})}}).Y(\'D:39\',4(){3($(\'.A\').o){1U()}1V();1W();1p();3(1m 2h!==\'1o\'){2h.2i([\'3a\',11.2j+11.1P])}3(1m 2k!==\'1o\'){2k(\'2c\',\'3b\',11.2j+11.1P)}});4 1W(){$v=$(\'1q,v\');7 g=\'.8-1r\',h=\'.8-2l\',i=\'.8-1s a\',1X=\'.3c-1s\',j=\'#3d\',k=\'\',l=\'\';c();$(\'#8-J\').1j(4(){$.1t({12:$(E).B(\'1u\'),2m:\'F\',1v:$(E).2n(),P:4(){13("提交失败,请检查网络并重试或者联系管理员。");r p},1w:4(d){3(!$(g,d).o){13("您输入的内容不符合规则或者回复太频繁,请修改内容或者稍等片刻。");r p}9{k=$(g,d).1q().1Y(/G=\\"?8-\\d+/g).3e().1Y(/\\d+/g).3f(4(a,b){r a-b}).3g();3($(\'.3h-3i .3j\').o&&l==""){k=\'\'}3(l){d=$(\'#H-8-\'+k,d).2o();3($(\'#\'+l).K(".8-1Z").o<=0){$(\'#\'+l).3k("<1x u=\'8-1r\'><\\/1x><\\/Z>")}3(k)$(\'#\'+l+" .8-1Z .8-1r").1k(d);l=\'\'}9{d=$(\'#H-8-\'+k,d).2o();3(!$(g).o)$(\'#2p\').1k("<2q>已有 <14 u=\'8-2l\'>0<\\/14> 条评论<\\/2q><1x u=\'8-1r\'><\\/1x>");$(g).1k(d)}$(\'#H-8-\'+k).3l();7 f;$(h).o?(f=3m($(h).C().1Y(/\\d+/)),$(h).1q($(h).1q().1y(f,f+1))):0;3n.3o();$(j).1T(\'\');$(i+\',\'+1X+\', #2r-8-1s-2s\').2t(\'16\');c();3(k){$v.W({L:$(\'#H-8-\'+k).2u().1z-X},1S)}9{$v.W({L:$(\'#2p\').2u().1z-X},1S)}}}});r p});4 c(){$(i+\',\'+1X).16(4(){l=$(E).M().M().M().B("G")});$(\'#2r-8-1s-2s\').16(4(){l=\'\'})}}1W();3(6.m("2v")){7 1A=6.m("2v").3p.1y(\'3q\',"")}4 1p(){$(\'.I .F-Q a, .I .3r a\').16(4(){7 a=$(E).M().M();a.K(\'.2w\').C("请输入密码访问").V(\'R\',\'20\').1e(2,10);a.K(\':2x\').3s();r p});$(\'.I J\').1j(4(){1B=$(E);S=1B.K(\'.2w\');$(S).1l("t").2y(\'21\').C("请稍等");$(\'.A\').o?1C():2z();r p})}1p();4 2z(){7 b=$(\'.I .F-Q a\').B("N");3($(\'22.F-Q\').o){1A=$(\'.I J\').B("1u").1y(b,"");1C()}9{$.1t({12:1D.11.N,1w:4(d){1A=$(\'.I J[1u^="\'+b+\'"]\',d).B("1u").1y(b,"");1C()}})}}4 1C(){7 c=1B.M().M().K(\'.F-Q a\').B("N");$.1t({12:c+1A,2m:\'F\',1v:1B.2n(),P:4(){1E();S.C("提交失败,请检查网络并重试或者联系管理员。").V(\'R\',\'20\').1e(2,10);r p},1w:4(d){3(!$(\'22.F-Q\',d).o){1E();S.C("对不起,您输入的密码错误。").V(\'R\',\'20\').1e(2,10);$(":2x").1T("");r p}9{1E();S.C("密码正确,如果没有跳转新页面,请手动刷新本页。").V(\'R\',\'3t\');$(\'22.F-Q\').o?$.D.3u({1f:\'#w\',1g:\'#w\',1h:1i}):$.D({12:c,1f:\'#w\',1g:\'#w\',1h:1i})}}});4 1E(){$(S).2e("21")}}}7 O=1F;4 1U(){$(\'.A H[u!="17"]\').1R();$(\'.A .17 a\').16(4(){3(O){O=p;23()}r p})}4 23(){7 a=\'.A .17 a\',b=$(a).B("N");$(a).2y(\'21\').C("正在加载");3(b){$.1t({12:b,P:4(){13(\'请求失败,请检查网络并重试或者联系管理员\');$(a).1l("u").C("查看更多");O=1F;r p},1w:4(d){7 c=$(d).K("#w .F"),e=$(d).K(a).B("N");3(c){$(\'.A\').3v(c)}$(a).1l("u");3(e){$(a).C("查看更多").B("N",e)}9{$(a).1R();$(\'.A .17\').C(\'没有更多文章了\')}3($(\'.I\',d).o){$(\'.I *\').2t();1p()}O=1F;r p}})}}3(6.3w("A").o){1U();3($(\'.A.3x\').o){$(1D).3y(4(){3(O&&$(\'.A .17 a\').B("N")&&($(E).L()+$(1D).2A()+5)>=$(6).2A()){O=p;23()}})}}1D.3z=4(){7 a=6.v.L||6.24.L;7 x=6.m("1z");7 y=6.m("2f");7 z=6.1G(\'v\')[0].3A.3B(\'3C-2B\');3(x){7 b=6.m("1z");3(a>=3D){b.18("u")}9{b.19("u","3E")}b.1H=4 25(){7 a=6.v.L||6.24.L;3(a>1){3F(25);2C(0,a-(a/5))}9{3G(25);2C(0,0)}}}3(z){7 c=6.m("1Q");3(a>0&&a<30){c.t.1I=(15-a/2)+"1a 0"}9 3(a>=30){c.t.1I=0}9{c.18("t")}}3(y&&y.2b("3H-2B")){7 d=6.m("w");7 e=6.24.3I;7 f=z?0:41;3(d.q>y.q){3(y.q>e-2D&&a>y.q+26-e){3(a30+f){3(a=0&&d<=1){a.3L=d}a.1L=c.2G();a.T(\'1b\',g);a.T(\'27\',h);a.T(\'2H\',f);a.T(\'P\',f);a.T(\'2I\',j);4 f(){3(!c.o){a.U(\'1b\',g);a.U(\'27\',h);a.U(\'2H\',f);a.U(\'P\',f);a.U(\'2I\',j);b.t.3M="3N";13("本站的背景音乐好像有问题了,希望您可以通过留言等方式通知管理员,谢谢您的帮助。")}9{a.1L=c.2G();a.1b()}}4 g(){b.19("u","1b");a.T(\'2J\',k)}4 h(){b.18("u");a.U(\'2J\',k)}4 j(){c.2i(a.1L)}4 k(){b.1G("i")[0].t.3O=(a.3P/a.3Q*3R).3S(1)+"%"}b.1H=4(){3(a.28(\'1K/3T\')!=""||a.28(\'1K/3U;2K="3V"\')!=""||a.28(\'1K/3W;2K="3X.40.5"\')!=""){3(a.3Y){3(a.P){f()}9{a.1b()}}9{a.27()}}9{13("对不起,您的浏览器不支持3Z音频播放,请升级您的浏览器。")}};b.18("u")})()}7 1c=1F;4 1V(){7 a=6.m("1d-42"),b=6.m("1d"),c=6.m("1c"),d;3(a&&!b){3(c){c=c.1G("1M")[0];d=6.29("H");d.19("G","1d");d.19("1H","2L()");d.2a(6.29("14"));c.2a(d)}9{1c=p;c=6.29("Z");c.19("G","1c");c.43=\'<1M><14>\';6.v.2a(c)}6.m("1d").1N=a.1N}3(!a&&b){1c?c.1G("1M")[0].2M(b):6.v.2M(c)}3(a&&b){b.1N=a.1N}}1V();3(1m 1n!==\'1o\'){1n.44()}45.46("\\n%c 47 48 49 %c 4a://4b.4c.4d ","R:#2N;2O:#4e;1I:2P 0","R:#2N;2O:#4f;1I:2P 0")',62,264,'|||if|function||document|var|comment|else|||||||||||||getElementById||length|false|offsetHeight|return||style|class|body|main||||ajaxload|attr|text|pjax|this|post|id|li|protected|form|find|scrollTop|parent|href|isbool|error|title|color|ap_n|addEventListener|removeEventListener|css|animate|50|on|div||location|url|alert|span||click|next|removeAttribute|setAttribute|px|play|cornertool|catalog|Shake|container|fragment|timeout|10000|submit|prepend|removeAttr|typeof|hljs|undefined|ap|html|list|reply|ajax|action|data|success|ol|replace|top|protoken|ap_btn|aps|window|rt|true|getElementsByTagName|onclick|padding|marginTop|audio|src|ul|className|left|search|header|remove|300|val|al|cl|ac|wi|match|children|red|loading|h1|aln|documentElement|totop|101|pause|canPlayType|createElement|appendChild|hasAttribute|send|bar|removeClass|secondary|block|_hmt|push|pathname|ga|num|type|serializeArray|hide|comments|h3|cancel|link|off|offset|token|word|password|addClass|apt|height|fixed|scrollTo|71|music|getAttribute|shift|ended|canplay|timeupdate|codes|Catalogswith|removeChild|fff|background|5px|in|jQuery|fn|each|position|relative|for|not|target|_blank||no|complete|setTimeout|querySelectorAll|pre|code|forEach|highlightBlock|end|_trackPageview|pageview|whisper|textarea|join|sort|pop|page|navigator|prev|append|fadeIn|parseInt|TypechoComment|cancelReply|value|Token|more|focus|blue|reload|before|getElementsByClassName|auto|scroll|onscroll|classList|contains|head|200|hidden|requestAnimationFrame|cancelAnimationFrame|sidebar|clientHeight|split|vol|volume|display|none|width|currentTime|duration|100|toFixed|mpeg|ogg|vorbis|mp4|mp4a|paused|HTML5|||col|innerHTML|initHighlightingOnLoad|console|log|Initial|By|JIElive|http|www|offodd|com|000|666'.split('|'),0,{})) -------------------------------------------------------------------------------- /page-whisper.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | $this->options->commentsThreaded = true; 10 | $this->options->commentsMaxNestingLevels = '3'; 11 | Breadcrumbs($this); ?> 12 |
    13 |

    title() ?>

    14 |
    15 | content(); ?> 16 |
    17 |
    18 | authorId) { 21 | if ($comments->authorId == $comments->ownerId) { 22 | $commentClass .= ' comment-by-author'; 23 | } else { 24 | $commentClass .= ' comment-by-user'; 25 | } 26 | } 27 | ?> 28 |
  • 38 |
    levels > 0) { 40 | echo ' class="comment-whisper"'; 41 | } 42 | ?>> 43 | levels == 0) { ?> 44 |
    45 | gravatar('32'); ?> 46 | 47 | status == 'waiting') { ?> 48 | 内容被拦截,请前往后台-管理评论-通过审核。 49 | 50 |
    51 | 54 | 60 | 61 |
    62 | parameter->allowComment || Typecho_Widget::widget('Widget_User')->pass('editor', true)) { 64 | echo ' class="whisper-reply" title="@' . $comments->author . '" onclick="return TypechoComment.reply(\'' . $comments->theId . '\', ' . $comments->coid . ');"'; 65 | } 66 | ?>>gravatar('16'); ?> 67 | : 68 | parameter->allowComment || Typecho_Widget::widget('Widget_User')->pass('editor', true)) { 70 | echo ' class="whisper-reply" onclick="return TypechoComment.reply(\'' . $comments->theId . '\', ' . $comments->coid . ');"'; 71 | } 72 | ?>>levels > 1) {CommentAt($comments->coid);}echo strip_tags(str_replace(PHP_EOL, "
    ", $comments->text), "
    "); ?>
    73 | status == 'waiting') { ?> 74 | 您的评论正等待审核! 75 | 76 |
    77 | 78 |
    79 | children) { ?> 80 |
    81 | threadedComments($options); ?> 82 |
    83 | 84 |
  • 85 | 86 |
    87 | comments()->to($comments); ?> 88 | have()): ?> 89 | listComments(); ?> 90 | pageNav('上一页', '下一页', 0, '..'); ?> 91 | 92 | allow('comment') || $this->user->pass('editor', true)): ?> 93 |
    94 |
    95 | cancelReply('取消评论'); ?> 96 |
    97 |

    发表user->pass('editor', true) ? '轻语' : '评论' ?>

    98 |
    user->pass('editor', true)): ?> action="commentUrl() ?>" id="comment-form"user->hasLogin()): ?> class="comment-form clearfix"> 99 |

    user->hasLogin()): ?>class="textarea"> 100 | 101 |

    102 |

    user->hasLogin()): ?>class="textbutton"> 103 | user->hasLogin()): ?> 104 | 105 | options->commentsRequireMail): ?> required /> 106 | options->commentsRequireURL): ?> required /> 107 | 108 | 109 |

    110 |
    111 |
    112 | 113 | 114 |
    115 |
    116 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 117 | need('footer.php'); ?> -------------------------------------------------------------------------------- /style.min.css: -------------------------------------------------------------------------------- 1 | body{font:17px/1.2 -apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif;margin:0;color:#444;background-color:#fff;font-family:"Droid Serif",Georgia,"Times New Roman","PingFang SC","Hiragino Sans GB","Source Han Sans CN","WenQuanYi Micro Hei","Microsoft Yahei",serif}a,.nav-menu ul a,.post-content .more a{color:#666;border:0;text-decoration:none}a:hover,.rewards a:hover,.tags a:hover,.comment-author a:hover,#footer .links a:hover,.icpnum:hover{color:#333}ul{padding-left:30px}ul li p,#footer p,.whisper .comment-author,.whisper .comment-children .comment-children{margin:0}h1,h1.post-title{font-size:1.4em}h2,#catalog-col b{font-size:1.2em}pre,code{font-family:Consolas,Inconsolata,Courier,monospace,"PingFang SC","Microsoft YaHei",sans-serif;font-size:.9em;background:#f7f3f7}code{padding:2px 4px;color:#b94a48}pre{padding:8px}pre code{display:block;padding:3px;color:#444}.hljs{color:#695d69}.hljs-comment,.hljs-quote{color:#776977}.hljs-variable,.hljs-template-variable,.hljs-attribute,.hljs-tag,.hljs-name,.hljs-regexp,.hljs-link,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#ca402b}.hljs-number,.hljs-meta,.hljs-built_in,.hljs-builtin-name,.hljs-literal,.hljs-type,.hljs-params{color:#a65926}.hljs-string,.hljs-symbol,.hljs-bullet{color:#918b3b}.hljs-title,.hljs-section{color:#516aec}.hljs-keyword,.hljs-selector-tag{color:#7b59c0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}blockquote{margin:1em 0;padding-left:1.5em;background:#f9f9f9;border-left:4px solid #ddd;color:#555}table{border:1px solid #ddd;width:100%}table th,table td{padding:5px 10px;border:1px solid #eee}table th{background:#f3f3f3}input,textarea,button{font-family:inherit;font-size:100%;line-height:1.2;margin:0;outline:0;appearance:none;-webkit-appearance:none}input,textarea{padding:5px;border:1px solid #eee;width:100%;height:30px;border-radius:2px;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}textarea{height:150px;resize:vertical;overflow:auto}button,input[type=submit]{padding:0 6px;background:#ddd;border:0}button,input[type=submit],.menu-parent a,.rewards a,.whisper .whisper-reply,#cornertool li{cursor:pointer}.browsehappy{padding:8px 0;background:#fbe3e4;color:#8a1f11;text-align:center}.browsehappy a{color:#8a1f11;text-decoration:underline;font-weight:bold}.clearfix{zoom:1}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.container{max-width:1060px;margin-left:auto;margin-right:auto;padding-left:10px;padding-right:10px}.head-fixed .browsehappy{position:fixed;bottom:0;width:100%}.head-fixed #header{position:fixed;top:0;width:100%;background:rgba(255,255,255,.95);z-index:999}.head-fixed #body{padding-top:71px}#header{line-height:40px;padding:15px 0;border-bottom:1px solid #eee}.site-name,.comment-form p{float:left}.site-name .site-title{height:40px;font-size:1.6em;margin:0;font-weight:normal}.site-name .site-title,#logo{display:flex;align-items:center}#logo,.post-title a{color:#333}#logo img{display:block;max-height:30px;margin-right:5px}#nav-swith{position:relative;float:right;margin-left:5px;color:#444}#nav-swith,#search button{top:5px;right:0;width:30px;height:30px;background:0}#nav-swith:before,#search button:before{content:"";position:absolute;top:7px;left:7px;width:9px;height:9px;border:solid 2px currentColor;border-radius:50%}#nav-swith:after,#search button:after{content:"";position:absolute;top:19px;left:17px;width:6px;height:2px;background:currentColor}#nav-swith:before,#nav-swith:after,#nav-swith span,#nav,#site-search,.nav-menu,.menu-parent ul,#catalog-col,.rewards img,#cornertool li,#music span,#catalog:before,#catalog:after,#catalog span{transition:.2s;-webkit-transition:.2s}.on #nav-swith:before,.on #nav-swith:after{content:"";position:absolute;top:14px;left:6px;width:18px;height:2px;background:currentColor;border:0;border-radius:0}.on #nav-swith:before,.author-icon{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}#nav-swith:after,.on #nav-swith:after,#search button:after{transform:rotate(45deg);-webkit-transform:rotate(45deg)}#nav-swith span{display:block;width:18px;height:2px;background:currentColor;visibility:hidden}#nav,.whisper .post-title .more{position:relative;float:right}.on #site-search{top:0}.on #site-search,.menu-parent:hover>ul,#catalog-col.catalog,.rewards a:hover img,#cornertool li{visibility:visible;opacity:1}#site-search{position:absolute;top:-10px;right:0;width:200px}#site-search,.menu-parent ul,#catalog-col,.rewards img,#cornertool .hidden{visibility:hidden;opacity:0}#search,.rewards,.menu-parent,.l_logo,.loading,.whisper .comment-meta{position:relative}#search input{padding-right:30px;background:0;border:0;border-bottom:1px solid #999;border-radius:0;text-align:center}#search button{position:absolute;color:#666}.nav-menu,.comment-list,.comment-list ol{list-style:none;margin:0;padding:0}.nav-menu::-webkit-scrollbar,#catalog-col::-webkit-scrollbar{width:6px;height:6px}.nav-menu::-webkit-scrollbar-thumb,#catalog-col::-webkit-scrollbar-thumb{border-radius:3px;background-color:#ddd}.nav-menu li{display:inline-block;margin:0 10px}.nav-menu a{color:#444}.nav-menu a:hover,.page-navigator a:hover{border-bottom:1px solid #444}.menu-parent ul{position:absolute;left:50%;min-width:100px;padding:0;border-radius:5px;background:rgba(238,238,238,.95);text-align:center;list-style:none;transform:translateX(-50%);-webkit-transform:translateX(-50%)}.menu-parent ul:before{content:"";position:absolute;top:-7px;left:50%;margin-left:-7px;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(238,238,238,.95)}.menu-parent li,#cornertool li:before,.whisper .comment-list .respond,.whisper.permission .respond{display:block}.menu-parent ul a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.menu-parent .menu-parent .menu-child{background:rgba(221,221,221,.95)}#bar,.loading:after{position:fixed;top:0;height:3px;background:#333;animation:loading 1s infinite;-webkit-animation:loading 1s infinite}@keyframes loading{0%{right:50%;left:50%}30%{right:0;left:0}100%{right:50%;left:50%}}@-webkit-keyframes loading{0%{right:50%;left:50%}30%{right:0;left:0}100%{right:50%;left:50%}}#main{float:left;width:70%}.one-col #main{float:none;margin:0 auto;width:750px}#main>*:not(.breadcrumbs){animation:pin .3s;-webkit-animation:pin .3s}@keyframes pin{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes pin{0%{opacity:0}100%{opacity:1}}.breadcrumbs{margin:15px 0 -15px;color:#666}.post{padding:20px 0}.post-title{margin:.83em 0;font-size:1.25em}.post-meta{margin-top:-0.5em;padding:0;color:#666;font-size:1em}.post-meta li{display:inline-block;margin:0 .5em .5em 0;padding-left:.6em;border-left:1px solid #eee}.post-meta li:first-child{padding:0;border:0}#catalog-col,#cornertool{position:fixed;bottom:5px;z-index:999}#catalog-col{right:50%;margin-right:-515px;min-width:150px;max-width:50%;max-height:50%;color:#eee;background:rgba(0,0,0,.7);border:1em solid transparent;border-right-width:.3em;overflow:auto}#catalog-col.catalog{margin-right:-535px}#catalog-col>ul{margin:1em .5em 0 0}#catalog-col ul{padding-left:20px}#catalog-col a{color:#eee;border:0}#catalog-col a:hover{border-bottom:1px solid #eee}.post-content .cl-offset{position:relative;display:block;top:-10px;height:0;border:0}.head-fixed .cl-offset{top:-51px}.post{border-bottom:1px solid #eee}.one-col .post:last-of-type,.whisper .whisper-body:last-child{border:0}.post.whisper{min-height:40px;margin:2.2em 0 15px;padding:0 1em;text-align:center;border:1px solid #444;border-radius:2px}.whisper .post-title{font-size:1em;line-height:1.5;font-weight:normal;margin:0 -1em}.whisper.post .post-title a{display:block;padding:2px 1em;color:#fff;background:#444}.whisper .post-title a,.post-content .links a{transition:.3s;-webkit-transition:.3s}.whisper .post-title a:hover{background:#000}.whisper .post-content pre{text-align:left}.whisper .notice{display:block;font-size:.9em;padding:5px;color:#f44336;border:1px solid;border-radius:2px}.post-content,.comment-content{line-height:1.6;word-wrap:break-word}.post-content a,.comment-content a{color:#3354aa;border-bottom:1px solid #eee}.post-content a:hover,.comment-content a:hover,.nav-menu ul a:hover{color:#333;border:0}.post-content img,.post-content video,.comment-content img,.comment-content video,.whisper img,.whisper video{max-width:100%}.post-content hr,.comment-content hr{margin:2em auto;width:100px;border:1px solid #ddd;border-width:2px 0 0 0}.post-content .word{display:inline}.post-content .thumb,.post-content .more{text-align:center}.protected input{width:auto}.rewards,.post .tags{clear:both}.rewards a,.tags a,.comment-author a{color:#3354aa;border:0}.rewards img{position:absolute;top:0;left:50%;margin:-15% 0 0 -15%;padding:5px;max-width:30%;background:#eee}.license{font-size:.8em;color:#999;margin:0}.post-near{list-style:none;margin:30px 0;padding:0;color:#999}.post-near li{margin:10px 0}.page-navigator{list-style:none;margin:25px 0;padding:0;text-align:center}.page-navigator li{display:inline-block;margin:0 5px;height:24px;line-height:24px}.page-navigator a{padding:0 2px}.page-navigator .current a{color:#444;border-bottom:1px solid #444}.ajaxload li,.whisper .respond{display:none}.ajaxload .next{display:block;color:#666}.ajaxload a{padding:5px 20px;border:1px solid #666;border-radius:2px}.ajaxload a:hover{border-color:#333}.ajaxload .loading,.ajaxload .loading:hover,.word.loading{padding:5px;color:#333;border:0}.loading:after{content:"";display:block;position:absolute;top:auto;bottom:0;height:1px}#comments{margin-bottom:30px;border-top:1px solid #eee}.whisper .whisper-body{padding:20px 10px;background:0;border:0;border-bottom:1px solid #eee}.whisper .whisper-body>div>.comment-content,.whisper .comment-meta,.whisper .comment-children{margin:1em 0 0 42px}.comment-meta .whisper-reply{position:absolute;right:0;bottom:0;font-size:.9em}.whisper .comment-body,.comment-parent>.comment-whisper{font-size:.94em;margin:0;padding:0;background:0;border:0}.whisper .comment-parent,.comment-whisper{margin-top:2px;padding:2px 5px;background:#e6e6e6;border:0;border-radius:2px}.whisper .comment-body .comment-content{line-height:20px}.whisper .comment-body .avatar{margin:2px 5px 0 0}.whisper .comment-parent>.comment-children{margin-left:5px}.comment-list li{margin-top:10px;padding:10px;border:1px solid #eee}.comment-level-odd,.comment-whisper{background:#f6f6f6}.comment-level-even{background:#fff}.comment-by-author,.whisper .comment-parent.comment-by-author,.comment-by-author>.comment-whisper{position:relative;background:#f2f7fc}.author-icon{font-size:.8em;display:block;position:absolute;top:8px;left:-15px;width:60px;height:15px;line-height:15px;text-align:center;background:linear-gradient(135deg,transparent 30%,rgba(230,230,230,.8) 0) left,linear-gradient(-135deg,transparent 30%,rgba(230,230,230,.8) 0) right;background-size:50% 100%;background-repeat:no-repeat}.comment-list li .comment-reply{text-align:right;font-size:.9em}.comment-meta time{color:#999;font-size:.8em}.comment-author{display:block;color:#444}.comment-author .avatar{float:left;margin-right:10px}.comment-at{font-size:.8em;margin-right:5px;font-weight:bold}.comment-list .respond{margin-top:15px;border-top:1px solid #eee}.respond .cancel-comment-reply{float:right;margin-top:15px;font-size:.9em}.comment-form input{margin-bottom:10px}.comment-form .textarea{width:68%;margin:0 2% 0 0}.comment-form .textbutton{width:30%;margin:0}#comment-form button{width:100%;height:30px;border-radius:2px}#secondary{margin-left:74%;padding-top:15px;word-wrap:break-word}#secondary .more{display:block;font-size:.8em}.widget{margin-bottom:30px}.widget-list,.widget-tile,.links,#cornertool ul{list-style:none;padding:0}.widget-list li,#catalog-col li{margin:5px 0;line-height:1.6}.widget-list li ul{margin-left:15px}.widget-tile{margin-left:-5px;margin-right:-5px}.widget-tile li{display:inline-block;margin:5px;line-height:1.6;color:#666}#footer{font-size:.8em;padding:2em 0;line-height:1.5;text-align:center;border-top:1px solid #eee}#footer,#footer .links a,.icpnum{color:#999}.post-content .links{letter-spacing:-9em}.post-content .links li{display:inline-block;width:25%;letter-spacing:0}.post-content .links a{display:block;height:20px;line-height:20px;margin:5px 10px;padding:5px 10px;text-align:center;color:#444;background:#fcfcfc;border:0;border-radius:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-shadow:0 1px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.1)}.post-content .links a:hover{box-shadow:0 2px 5px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.3)}.post-content .links .l_logo{padding-left:40px}.l_logo img,.l_logo i{position:absolute;top:0;left:0;width:16px;height:16px;padding:7px;background:#ccc;overflow:hidden}.l_logo i{font:16px/1 Segoe UI Symbol}#footer .links,#cornertool ul{margin:0;text-align:center}#footer .links li{display:inline-block;margin:0 3px 2px}#cornertool{right:50%;margin-right:-580px}#cornertool .hidden{left:20px}#cornertool li{position:relative;display:block;left:0;width:40px;height:40px;line-height:40px;margin-top:5px;color:#fff;background:rgba(0,0,0,.7)}#top:before{content:"\25b2"}#top:hover:before{content:"Top"}#music:before{content:"\266b"}#music:hover:before{content:"\25b2"}#music:hover:before,#catalog.catalog span{transform:rotate(90deg);-webkit-transform:rotate(90deg)}#music.play:hover:before{content:"\3013";animation:0;-webkit-animation:0}.play:before{animation:play 5s linear infinite;-webkit-animation:play 5s linear infinite}@keyframes play{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@-webkit-keyframes play{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}#music span{position:absolute;display:block;bottom:0;height:5px;width:0;background:#666;opacity:.7}#music.play span{width:100%}#music.play span i{display:block;height:100%;width:0;background:#eee}#catalog span,#catalog:before,#catalog:after{position:absolute;display:block;top:50%;left:50%;margin:-1px 0 0 -6px;width:12px;height:1px;background:currentColor}#catalog:before{content:"";margin-top:-5px}#catalog:after{content:"";margin-top:3px}#catalog.catalog{left:-5px}#catalog.catalog:before{margin:-4px 0 0 -11px;transform:rotate(-30deg);-webkit-transform:rotate(-30deg)}#catalog.catalog:after{margin:2px 0 0 -11px;transform:rotate(30deg);-webkit-transform:rotate(30deg)}.error-page{margin:100px 0;text-align:center}#archives li{margin:5px 0}@media(min-width:601px){.on .nav-menu{visibility:hidden;opacity:0}.menu-parent .menu-parent .menu-child{top:5px;left:-30px;transform:translateX(-100%);-webkit-transform:translateX(-100%)}.menu-parent .menu-parent:hover>.menu-child{left:-7px}.menu-parent .menu-parent .menu-child:before{top:7px;left:100%;margin:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:7px solid rgba(221,221,221,.95)}}@media(max-width:1170px){#catalog-col{right:65px;margin:0}#catalog-col.catalog{right:50px;margin:0}#cornertool{right:5px;margin:0}}@media(max-width:990px){#catalog-col.catalog{right:45px}#secondary{margin-left:72%}#cornertool li{width:35px;height:35px;line-height:35px}}@media(max-width:768px){#main,.one-col #main{width:100%}#secondary{display:none}.post-title,.post-meta,.protected .post-content{text-align:center}}@media(max-width:600px){#nav-swith{margin:0}#nav-swith:before,#nav-swith:after{left:6px;width:18px;height:2px;background:currentColor;border:0;border-radius:0;transform:none;-ms-transform:none;-webkit-transform:none}#nav-swith:after{top:21px}#nav-swith span{visibility:visible}.on #nav-swith span{visibility:hidden;opacity:0}#nav{width:100%;max-height:0;overflow:hidden;text-align:center}.on #nav{max-height:240px}.head-fixed .on #nav{margin-bottom:5px}.nav-menu{max-height:200px;overflow:auto}.nav-menu li,.nav-menu a{display:block}.nav-menu a:hover{font-weight:bold;border:0}.menu-parent ul{position:relative;left:0;margin:0 auto;width:75%;visibility:visible;opacity:1;transform:none;-webkit-transform:none}.menu-parent .menu-parent .menu-child:before{border-bottom:7px solid rgba(221,221,221,.95)}#site-search{position:static;width:50%;margin:0 auto}.post-content .links li{width:33.33333%}.comment-form .textarea{width:58%}.comment-form .textbutton{width:40%}}@media(max-width:420px){.post-content .links li{width:50%}}.post-content h1{border-bottom: 2px solid #eee}.post-content h2 {display: inline;box-shadow: 0 -0.5rem 0 #eee inset} -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | GravatarUrl) define('__TYPECHO_GRAVATAR_PREFIX__', Helper::options()->GravatarUrl); 6 | 7 | function themeConfig($form) { 8 | $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL, _t('站点标题 LOGO 地址'), _t('在这里填入一个图片 URL 地址, 以显示网站标题 LOGO')); 9 | $form->addInput($logoUrl); 10 | 11 | $customTitle = new Typecho_Widget_Helper_Form_Element_Text('customTitle', NULL, NULL, _t('自定义站点标题'), _t('仅用于替换页面头部位置的“标题”显示,和Typecho后台设置的站点名称不冲突,留空则显示默认站点名称')); 12 | $form->addInput($customTitle); 13 | 14 | $titleForm = new Typecho_Widget_Helper_Form_Element_Radio('titleForm', 15 | array('title' => _t('仅文字'), 16 | 'logo' => _t('仅LOGO'), 17 | 'all' => _t('LOGO+文字')), 18 | 'title', _t('站点标题显示内容'), _t('默认仅显示文字标题,若要显示LOGO,请在上方添加 LOGO 地址')); 19 | $form->addInput($titleForm); 20 | 21 | $subTitle = new Typecho_Widget_Helper_Form_Element_Text('subTitle', NULL, NULL, _t('自定义站点副标题'), _t('浏览器副标题,仅在当前页面为首页时显示,显示格式为:标题 - 副标题,留空则不显示副标题')); 22 | $form->addInput($subTitle); 23 | 24 | $favicon = new Typecho_Widget_Helper_Form_Element_Text('favicon', NULL, NULL, _t('Favicon 地址'), _t('在这里填入一个图片 URL 地址, 以添加一个Favicon,留空则不单独设置Favicon')); 25 | $form->addInput($favicon); 26 | 27 | $CustomCSS = new Typecho_Widget_Helper_Form_Element_Textarea('CustomCSS', NULL, NULL, _t('自定义样式'), _t('在这里填入你的自定义样式(直接填入css,无需<style>标签)')); 28 | $form->addInput($CustomCSS); 29 | 30 | $cjcdnAddress = new Typecho_Widget_Helper_Form_Element_Text('cjcdnAddress', NULL, NULL, _t('主题静态文件(css和js)的链接地址替换'), _t('请输入你的CDN云存储地址,例如://cdn.jsdelivr.net/gh/jielive/initial/
    被替换的原地址为主题文件位置,即:http://www.example.com/usr/themes/initial/')); 31 | $form->addInput($cjcdnAddress); 32 | 33 | $AttUrlReplace = new Typecho_Widget_Helper_Form_Element_Textarea('AttUrlReplace', NULL, NULL, _t('文章内的链接地址替换(建议用在图片等静态资源的链接上)'), _t('按照格式输入你的CDN链接以替换原链接,格式:
    原地址=替换地址
    原地址与新地址之间用等号“=”分隔,例如:
    http://www.example.com/usr/uploads/=http://cdn.example.com/usr/uploads/
    可设置多个规则,换行即可,一行一个')); 34 | $form->addInput($AttUrlReplace); 35 | 36 | $Navset = new Typecho_Widget_Helper_Form_Element_Checkbox('Navset', 37 | array('ShowCategory' => _t('显示分类'), 38 | 'AggCategory' => _t('↪合并分类'), 39 | 'ShowPage' => _t('显示页面'), 40 | 'AggPage' => _t('↪合并页面')), 41 | array('ShowCategory', 'AggCategory', 'ShowPage'), _t('导航栏显示'), _t('默认显示合并的分类,显示页面')); 42 | $form->addInput($Navset->multiMode()); 43 | 44 | $CategoryText = new Typecho_Widget_Helper_Form_Element_Text('CategoryText', NULL, NULL, _t('导航栏-分类 下拉菜单显示名称(使用“导航栏显示-合并分类”时生效)'), _t('在这里输入导航栏分类下拉菜单的显示名称,留空则默认显示为“分类”')); 45 | $form->addInput($CategoryText); 46 | 47 | $PageText = new Typecho_Widget_Helper_Form_Element_Text('PageText', NULL, NULL, _t('导航栏-页面 下拉菜单显示名称(使用“导航栏显示-合并页面”时生效)'), _t('在这里输入导航栏页面下拉菜单的显示名称,留空则默认显示为“其他”')); 48 | $form->addInput($PageText); 49 | 50 | $Breadcrumbs = new Typecho_Widget_Helper_Form_Element_Checkbox('Breadcrumbs', 51 | array('Postshow' => _t('文章内显示'), 52 | 'Text' => _t('↪文章标题替换为“正文”'), 53 | 'Pageshow' => _t('页面内显示')), 54 | array('Postshow', 'Text', 'Pageshow'), _t('面包屑导航显示'), _t('默认在文章与页面内显示,并将文章标题替换为“正文”')); 55 | $form->addInput($Breadcrumbs->multiMode()); 56 | 57 | $WeChat = new Typecho_Widget_Helper_Form_Element_Text('WeChat', NULL, NULL, _t('微信打赏二维码(建议图片尺寸不低于240*240)'), _t('在这里填入一个图片 URL 地址, 以添加一个微信打赏二维码,留空则不设置微信打赏')); 58 | $form->addInput($WeChat); 59 | 60 | $Alipay = new Typecho_Widget_Helper_Form_Element_Text('Alipay', NULL, NULL, _t('支付宝打赏二维码(建议图片尺寸不低于240*240)'), _t('在这里填入一个图片 URL 地址, 以添加一个支付宝打赏二维码,留空则不设置支付宝打赏')); 61 | $form->addInput($Alipay); 62 | 63 | $LicenseInfo = new Typecho_Widget_Helper_Form_Element_Text('LicenseInfo', NULL, NULL, _t('文章许可信息'), _t('填入后将在文章底部显示你填入的许可信息(支持HTML标签,输入数字“0”可关闭显示),留空则默认使用 (CC BY-SA 4.0)国际许可协议。')); 64 | $form->addInput($LicenseInfo); 65 | 66 | $HeadFixed = new Typecho_Widget_Helper_Form_Element_Radio('HeadFixed', 67 | array(1 => _t('启用'), 68 | 0 => _t('关闭')), 69 | 0, _t('浮动显示头部'), _t('默认关闭')); 70 | $form->addInput($HeadFixed); 71 | 72 | $SidebarFixed = new Typecho_Widget_Helper_Form_Element_Radio('SidebarFixed', 73 | array(1 => _t('启用'), 74 | 0 => _t('关闭')), 75 | 0, _t('动态显示侧边栏'), _t('默认关闭')); 76 | $form->addInput($SidebarFixed); 77 | 78 | $cjCDN = new Typecho_Widget_Helper_Form_Element_Radio('cjCDN', 79 | array('jd' => _t('jsDelivr'), 80 | 'sc' => _t('Staticfile'), 81 | 'cf' => _t('CDNJS')), 82 | 'jd', _t('公共静态资源来源'), _t('默认jsDelivr,若JS文件异常,可尝试切换来源')); 83 | $form->addInput($cjCDN); 84 | 85 | $GravatarUrl = new Typecho_Widget_Helper_Form_Element_Radio('GravatarUrl', 86 | array(false => _t('官方源'), 87 | 'https://cn.gravatar.com/avatar/' => _t('国内源'), 88 | 'https://gravatar.loli.net/avatar/' => _t('loli源'), 89 | 'https://sdn.geekzu.org/avatar/' => _t('极客族源'), 90 | 'https://dn-qiniu-avatar.qbox.me/avatar/' => _t('七牛源')), 91 | false, _t('Gravatar头像源'), _t('默认官方源,若头像显示异常,可尝试切换来源')); 92 | $form->addInput($GravatarUrl); 93 | 94 | $compressHtml = new Typecho_Widget_Helper_Form_Element_Radio('compressHtml', 95 | array(1 => _t('启用'), 96 | 0 => _t('关闭')), 97 | 0, _t('HTML压缩'), _t('默认关闭,启用则会对HTML代码进行压缩,可能与部分插件存在兼容问题,请酌情选择开启或者关闭')); 98 | $form->addInput($compressHtml); 99 | 100 | $PjaxOption = new Typecho_Widget_Helper_Form_Element_Radio('PjaxOption', 101 | array(1 => _t('启用'), 102 | 0 => _t('关闭')), 103 | 0, _t('全站Pjax'), _t('默认关闭,启用则会强制关闭“反垃圾保护”,强制“将较新的的评论显示在前面”')); 104 | $form->addInput($PjaxOption); 105 | 106 | $AjaxLoad = new Typecho_Widget_Helper_Form_Element_Radio('AjaxLoad', 107 | array('auto' => _t('自动'), 108 | 'click' => _t('点击'), 109 | 0 => _t('关闭')), 110 | 0, _t('Ajax翻页'), _t('默认关闭,启用则会使用Ajax加载下一页的文章')); 111 | $form->addInput($AjaxLoad); 112 | 113 | $Highlight = new Typecho_Widget_Helper_Form_Element_Radio('Highlight', 114 | array(1 => _t('启用'), 115 | 0 => _t('关闭')), 116 | 0, _t('代码高亮'), _t('默认关闭,启用则会渲染页面内代码块”')); 117 | $form->addInput($Highlight); 118 | 119 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 120 | array('post' => _t('使用文章内设定'), 121 | 'open' => _t('全部启用'), 122 | 0 => _t('全部关闭')), 123 | 'post', _t('文章目录'), _t('一键开关全部文章目录,默认使用文章内的设定,(若文章内无任何标题,则不显示目录)')); 124 | $form->addInput($catalog); 125 | 126 | $scrollTop = new Typecho_Widget_Helper_Form_Element_Radio('scrollTop', 127 | array(1 => _t('启用'), 128 | 0 => _t('关闭')), 129 | 0, _t('返回顶部'), _t('默认关闭,启用将在右下角显示“返回顶部”按钮')); 130 | $form->addInput($scrollTop); 131 | 132 | $MusicSet = new Typecho_Widget_Helper_Form_Element_Radio('MusicSet', 133 | array('order' => _t('顺序播放'), 134 | 'shuffle' => _t('随机播放'), 135 | 0 => _t('关闭')), 136 | 0, _t('背景音乐'), _t('默认关闭,启用后请填写音乐地址,否则开启无效')); 137 | $form->addInput($MusicSet); 138 | 139 | $MusicUrl = new Typecho_Widget_Helper_Form_Element_Textarea('MusicUrl', NULL, NULL, _t('背景音乐地址(建议使用mp3格式)'), _t('请输入完整的音频文件路径,例如:
    https://music.163.com/song/media/outer/url?id={MusicID}.mp3
    可设置多个音频,换行即可,一行一个,留空则关闭背景音乐')); 140 | $form->addInput($MusicUrl); 141 | 142 | $MusicVol = new Typecho_Widget_Helper_Form_Element_Text('MusicVol', NULL, NULL, _t('背景音乐播放音量(输入范围:0~1)'), _t('请输入一个0到1之间的小数(0为静音 0.5为50%音量 1为100%最大音量)输入错误内容或留空则使用默认音量100%')); 143 | $form->addInput($MusicVol); 144 | 145 | $InsideLinksIcon = new Typecho_Widget_Helper_Form_Element_Radio('InsideLinksIcon', 146 | array(1 => _t('启用'), 147 | 0 => _t('关闭')), 148 | 0, _t('显示链接图标(内页)'), _t('默认关闭,启用后内页(链接模板)链接将显示链接图标')); 149 | $form->addInput($InsideLinksIcon); 150 | 151 | $IndexLinksSort = new Typecho_Widget_Helper_Form_Element_Text('IndexLinksSort', NULL, NULL, _t('首页显示的链接分类(支持多分类,请用英文逗号“,”分隔)'), _t('若只需显示某分类下的链接,请输入链接分类名(建议使用字母形式的分类名),留空则默认显示全部链接')); 152 | $form->addInput($IndexLinksSort); 153 | 154 | $InsideLinksSort = new Typecho_Widget_Helper_Form_Element_Text('InsideLinksSort', NULL, NULL, _t('内页(链接模板)显示的链接分类(支持多分类,请用英文逗号“,”分隔)'), _t('若只需显示某分类下的链接,请输入链接分类名(建议使用字母形式的分类名),留空则默认显示全部链接')); 155 | $form->addInput($InsideLinksSort); 156 | 157 | $ShowLinks = new Typecho_Widget_Helper_Form_Element_Checkbox('ShowLinks', array('footer' => _t('页脚'), 'sidebar' => _t('侧边栏')), NULL, _t('首页显示链接')); 158 | $form->addInput($ShowLinks->multiMode()); 159 | 160 | $ShowWhisper = new Typecho_Widget_Helper_Form_Element_Checkbox('ShowWhisper', array('index' => _t('首页'), 'sidebar' => _t('侧边栏')), NULL, _t('显示最新的“轻语”')); 161 | $form->addInput($ShowWhisper->multiMode()); 162 | 163 | $sidebarBlock = new Typecho_Widget_Helper_Form_Element_Checkbox('sidebarBlock', 164 | array('ShowHotPosts' => _t('显示热门文章(根据评论数量排序)'), 165 | 'ShowRecentPosts' => _t('显示最新文章'), 166 | 'ShowRecentComments' => _t('显示最近回复'), 167 | 'IgnoreAuthor' => _t('↪不显示作者回复'), 168 | 'ShowCategory' => _t('显示分类'), 169 | 'ShowTag' => _t('显示标签'), 170 | 'ShowArchive' => _t('显示归档'), 171 | 'ShowOther' => _t('显示其它杂项')), 172 | array('ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowTag', 'ShowArchive', 'ShowOther'), _t('侧边栏显示')); 173 | $form->addInput($sidebarBlock->multiMode()); 174 | 175 | $OneCOL = new Typecho_Widget_Helper_Form_Element_Radio('OneCOL', 176 | array(1 => _t('启用'), 177 | 0 => _t('关闭')), 178 | 0, _t('单栏模式'), _t('关闭侧边栏,仅显示主栏内容。')); 179 | $form->addInput($OneCOL); 180 | 181 | $ICPbeian = new Typecho_Widget_Helper_Form_Element_Text('ICPbeian', NULL, NULL, _t('ICP备案号'), _t('在这里输入ICP备案号,留空则不显示')); 182 | $form->addInput($ICPbeian); 183 | 184 | $CustomContent = new Typecho_Widget_Helper_Form_Element_Textarea('CustomContent', NULL, NULL, _t('底部自定义内容'), _t('位于底部,footer之后body之前,适合放置一些JS内容,如网站统计代码等(若开启全站Pjax,目前支持Google和百度统计的回调,其余统计代码可能会不准确)')); 185 | $form->addInput($CustomContent); 186 | } 187 | 188 | function themeInit($archive) { 189 | $options = Helper::options(); 190 | $options->commentsAntiSpam = false; 191 | if ($options->PjaxOption || FindContents('page-whisper.php', 'commentsNum', 'd')) { 192 | $options->commentsOrder = 'DESC'; 193 | $options->commentsPageDisplay = 'first'; 194 | } 195 | if ($archive->is('single')) { 196 | $archive->content = hrefOpen($archive->content); 197 | if ($options->AttUrlReplace) { 198 | $archive->content = UrlReplace($archive->content); 199 | } 200 | if ($archive->is('post') && (($options->catalog == 'post' && $archive->fields->catalog) || $options->catalog == 'open')) { 201 | $archive->content = createCatalog($archive->content); 202 | } 203 | } 204 | } 205 | 206 | function cjUrl($path) { 207 | $options = Helper::options(); 208 | $ver = '?ver='.constant("INITIAL_VERSION_NUMBER"); 209 | if ($options->cjcdnAddress) { 210 | echo rtrim($options->cjcdnAddress, '/').'/'.$path.$ver; 211 | } else { 212 | $options->themeUrl($path.$ver); 213 | } 214 | } 215 | 216 | function hrefOpen($obj) { 217 | return preg_replace('/]+?)\bhref="((?!'.addcslashes(Helper::options()->index, '/._-+=#?&').'|\#).*?)"([^>]*?)>/i', '', $obj); 218 | } 219 | 220 | function UrlReplace($obj) { 221 | $list = explode(PHP_EOL, Helper::options()->AttUrlReplace); 222 | foreach ($list as $tmp) { 223 | list($old, $new) = explode('=', $tmp); 224 | $obj = str_replace($old, $new, $obj); 225 | } 226 | return $obj; 227 | } 228 | 229 | function postThumb($obj) { 230 | $thumb = $obj->fields->thumb; 231 | if (!$thumb) { 232 | return false; 233 | } 234 | if (is_numeric($thumb)) { 235 | preg_match_all('//i', $obj->content, $matches); 236 | if (isset($matches[1][$thumb-1])) { 237 | $thumb = $matches[1][$thumb-1]; 238 | } else { 239 | return false; 240 | } 241 | } 242 | if (Helper::options()->AttUrlReplace) { 243 | $thumb = UrlReplace($thumb); 244 | } 245 | return ''; 246 | } 247 | 248 | function Postviews($archive) { 249 | $db = Typecho_Db::get(); 250 | $cid = $archive->cid; 251 | if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { 252 | $db->query('ALTER TABLE `'.$db->getPrefix().'contents` ADD `views` INT(10) DEFAULT 0;'); 253 | } 254 | $exist = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid))['views']; 255 | if ($archive->is('single')) { 256 | $cookie = Typecho_Cookie::get('contents_views'); 257 | $cookie = $cookie ? explode(',', $cookie) : array(); 258 | if (!in_array($cid, $cookie)) { 259 | $db->query($db->update('table.contents') 260 | ->rows(array('views' => (int)$exist+1)) 261 | ->where('cid = ?', $cid)); 262 | $exist = (int)$exist+1; 263 | array_push($cookie, $cid); 264 | $cookie = implode(',', $cookie); 265 | Typecho_Cookie::set('contents_views', $cookie); 266 | } 267 | } 268 | echo $exist == 0 ? '暂无阅读' : $exist.' 次阅读'; 269 | } 270 | 271 | function Breadcrumbs($archive) { 272 | $options = Helper::options(); 273 | if (!empty($options->Breadcrumbs) && in_array('Pageshow', $options->Breadcrumbs)) { 274 | echo ''.PHP_EOL; 275 | } 276 | } 277 | 278 | function createCatalog($obj) { 279 | global $catalog; 280 | global $catalog_count; 281 | $catalog = array(); 282 | $catalog_count = 0; 283 | $obj = preg_replace_callback('/(.*?)<\/h\1>/i', function($obj) { 284 | global $catalog; 285 | global $catalog_count; 286 | $catalog_count ++; 287 | $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count); 288 | return ''.$obj[3].''; 289 | }, $obj); 290 | return $obj.PHP_EOL .getCatalog(); 291 | } 292 | 293 | function getCatalog() { 294 | global $catalog; 295 | $index = ''; 296 | if ($catalog) { 297 | $index = '
      '.PHP_EOL; 298 | $prev_depth = ''; 299 | $to_depth = 0; 300 | foreach($catalog as $catalog_item) { 301 | $catalog_depth = $catalog_item['depth']; 302 | if ($prev_depth) { 303 | if ($catalog_depth == $prev_depth) { 304 | $index .= ''.PHP_EOL; 305 | } elseif ($catalog_depth > $prev_depth) { 306 | $to_depth++; 307 | $index .= PHP_EOL .'
        '.PHP_EOL; 308 | } else { 309 | $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth; 310 | if ($to_depth2) { 311 | for ($i=0; $i<$to_depth2; $i++) { 312 | $index .= ''.PHP_EOL .'
      '.PHP_EOL; 313 | $to_depth--; 314 | } 315 | } 316 | $index .= ''.PHP_EOL; 317 | } 318 | } 319 | $index .= '
    • '.$catalog_item['text'].''; 320 | $prev_depth = $catalog_item['depth']; 321 | } 322 | for ($i=0; $i<=$to_depth; $i++) { 323 | $index .= '
    • '.PHP_EOL .'
    '.PHP_EOL; 324 | } 325 | $index = '
    '.PHP_EOL .'文章目录'.PHP_EOL .$index.''.PHP_EOL .'
    '.PHP_EOL; 326 | } 327 | return $index; 328 | } 329 | 330 | function CommentAuthor($obj, $autoLink = NULL, $noFollow = NULL) { 331 | $options = Helper::options(); 332 | $autoLink = $autoLink ? $autoLink : $options->commentsShowUrl; 333 | $noFollow = $noFollow ? $noFollow : $options->commentsUrlNofollow; 334 | if ($obj->url && $autoLink) { 335 | echo 'url, $options->index) == $obj->url ? NULL : ' target="_blank"').'>'.$obj->author.''; 336 | } else { 337 | echo $obj->author; 338 | } 339 | } 340 | 341 | function CommentAt($coid){ 342 | $db = Typecho_Db::get(); 343 | $prow = $db->fetchRow($db->select('parent')->from('table.comments') 344 | ->where('coid = ? AND status = ?', $coid, 'approved')); 345 | $parent = $prow['parent']; 346 | if ($prow && $parent != '0') { 347 | $arow = $db->fetchRow($db->select('author')->from('table.comments') 348 | ->where('coid = ? AND status = ?', $parent, 'approved')); 349 | echo '@'.$arow['author'].''; 350 | } 351 | } 352 | 353 | function Contents_Post_Initial($limit = 10, $order = 'created') { 354 | $db = Typecho_Db::get(); 355 | $options = Helper::options(); 356 | $posts = $db->fetchAll($db->select()->from('table.contents') 357 | ->where('type = ? AND status = ? AND created < ?', 'post', 'publish', $options->time) 358 | ->order($order, Typecho_Db::SORT_DESC) 359 | ->limit($limit), array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 360 | if ($posts) { 361 | foreach($posts as $post) { 362 | echo '
  • PjaxOption ? '' : ' href="'.$post['permalink'].'"').'>'.htmlspecialchars($post['title']).'
  • '.PHP_EOL; 363 | } 364 | } else { 365 | echo '
  • 暂无文章
  • '.PHP_EOL; 366 | } 367 | } 368 | 369 | class Initial_Widget_Comments_Recent extends Widget_Abstract_Comments 370 | { 371 | public function __construct($request, $response, $params = NULL) { 372 | parent::__construct($request, $response, $params); 373 | $this->parameter->setDefault(array('pageSize' => $this->options->commentsListSize, 'parentId' => 0, 'ignoreAuthor' => false)); 374 | } 375 | public function execute() { 376 | $select = $this->select()->limit($this->parameter->pageSize) 377 | ->where('table.comments.status = ?', 'approved') 378 | ->order('table.comments.coid', Typecho_Db::SORT_DESC); 379 | if ($this->parameter->parentId) { 380 | $select->where('cid = ?', $this->parameter->parentId); 381 | } 382 | if ($this->options->commentsShowCommentOnly) { 383 | $select->where('type = ?', 'comment'); 384 | } 385 | if ($this->parameter->ignoreAuthor) { 386 | $select->where('ownerId <> authorId'); 387 | } 388 | $page_whisper = FindContents('page-whisper.php', 'commentsNum', 'd'); 389 | if ($page_whisper) { 390 | $select->where('cid <> ? OR (cid = ? AND parent <> ?)', $page_whisper[0]['cid'], $page_whisper[0]['cid'], '0'); 391 | } 392 | $this->db->fetchAll($select, array($this, 'push')); 393 | } 394 | } 395 | 396 | function FindContent($cid) { 397 | $db = Typecho_Db::get(); 398 | return $db->fetchRow($db->select()->from('table.contents') 399 | ->where('cid = ?', $cid) 400 | ->limit(1), array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 401 | } 402 | 403 | function FindContents($val = NULL, $order = 'order', $sort = 'a', $publish = NULL) { 404 | $db = Typecho_Db::get(); 405 | $sort = ($sort == 'a') ? Typecho_Db::SORT_ASC : Typecho_Db::SORT_DESC; 406 | $select = $db->select()->from('table.contents') 407 | ->where('created < ?', Helper::options()->time) 408 | ->order($order, $sort); 409 | if ($val) { 410 | $select->where('template = ?', $val); 411 | } 412 | if ($publish) { 413 | $select->where('status = ?','publish'); 414 | } 415 | $content = $db->fetchAll($select, array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 416 | return empty($content) ? NULL : $content; 417 | } 418 | 419 | function Whisper($sidebar = NULL) { 420 | $db = Typecho_Db::get(); 421 | $options = Helper::options(); 422 | $page = FindContents('page-whisper.php', 'commentsNum', 'd'); 423 | $p = $sidebar ? 'li' : 'p'; 424 | $remind = ''; 425 | if (Typecho_Widget::widget('Widget_User')->pass('editor', true) && (!$page || isset($page[1]))) { 426 | $remind = '<'.$p.' class="notice">仅管理员可见: '.($page ? '发现多个"轻语"模板页面,已自动选取内容较多的页面来展示,请删除多余模板页面。' : '未找到"轻语"模板页面,请创建"轻语"模板页面。').''.PHP_EOL; 427 | } 428 | if ($page) { 429 | $page = $page[0]; 430 | $title = $sidebar ? '

    '.$page['title'].'

    ' : '

    '.$page['title'].'···

    '; 431 | $comment = $db->fetchAll($db->select()->from('table.comments') 432 | ->where('cid = ? AND status = ? AND parent = ?', $page['cid'], 'approved', '0') 433 | ->order('coid', Typecho_Db::SORT_DESC) 434 | ->limit(1)); 435 | if ($comment) { 436 | $content = hrefOpen(Markdown::convert($comment[0]['text'])); 437 | if ($options->AttUrlReplace) { 438 | $content = UrlReplace($content); 439 | } 440 | $content = strip_tags($content, '


    '.$options->commentsHTMLTagAllowed).($sidebar ? PHP_EOL .'
  • 查看更多...
  • ' : ''); 441 | } else { 442 | $content = '<'.$p.'>暂无内容'; 443 | } 444 | } else { 445 | $title = $sidebar ? '

    轻语

    ' : '

    轻语

    '; 446 | $content = '<'.$p.'>暂无内容'; 447 | } 448 | echo $title.PHP_EOL .($sidebar ? '
      ' : '
      ').PHP_EOL .$content.PHP_EOL .$remind.($sidebar ? '
    ' : '
    ').PHP_EOL; 449 | } 450 | 451 | function Links($sorts = NULL, $icon = 0) { 452 | $db = Typecho_Db::get(); 453 | $link = NULL; 454 | $list = NULL; 455 | $page_links = FindContents('page-links.php', 'order', 'a'); 456 | if ($page_links) { 457 | $exist = $db->fetchRow($db->select()->from('table.fields') 458 | ->where('cid = ? AND name = ?', $page_links[0]['cid'], 'links')); 459 | if (empty($exist)) { 460 | $db->query($db->insert('table.fields') 461 | ->rows(array( 462 | 'cid' => $page_links[0]['cid'], 463 | 'name' => 'links', 464 | 'type' => 'str', 465 | 'str_value' => NULL, 466 | 'int_value' => 0, 467 | 'float_value' => 0 468 | ))); 469 | return NULL; 470 | } 471 | $list = $exist['str_value']; 472 | } 473 | if ($list) { 474 | $list = explode(PHP_EOL, $list); 475 | foreach ($list as $val) { 476 | list($name, $url, $description, $logo, $sort) = explode(',', $val); 477 | if ($sorts) { 478 | $arr = explode(',', $sorts); 479 | if ($sort && in_array($sort, $arr)) { 480 | $link .= '
  • '.PHP_EOL; 481 | } 482 | } else { 483 | $link .= '
  • '.PHP_EOL; 484 | } 485 | } 486 | } 487 | echo $link ? $link : '
  • 暂无链接
  • '.PHP_EOL; 488 | } 489 | 490 | function Playlist() { 491 | $options = Helper::options(); 492 | $arr = explode(PHP_EOL, $options->MusicUrl); 493 | if ($options->MusicSet == 'shuffle') { 494 | shuffle($arr); 495 | } 496 | echo implode(',', $arr); 497 | } 498 | 499 | function compressHtml($html_source) { 500 | $chunks = preg_split('/(.*?|.*?<\/nocompress>|||)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE); 501 | $compress = ''; 502 | foreach ($chunks as $c) { 503 | if (strtolower(substr($c, 0, 19)) == '') { 504 | $c = substr($c, 19, strlen($c) - 19 - 20); 505 | $compress .= $c; 506 | continue; 507 | } else if (strtolower(substr($c, 0, 12)) == '') { 508 | $c = substr($c, 12, strlen($c) - 12 - 13); 509 | $compress .= $c; 510 | continue; 511 | } else if (strtolower(substr($c, 0, 4)) == ' $char) { 525 | if ($char == '"' && $chars[$key - 1] != '\\' && !$is_apos) { 526 | $is_quot = !$is_quot; 527 | } else if ($char == '\'' && $chars[$key - 1] != '\\' && !$is_quot) { 528 | $is_apos = !$is_apos; 529 | } else if ($char == '/' && $chars[$key + 1] == '/' && !$is_quot && !$is_apos) { 530 | $tmp = substr($tmp, 0, $key); 531 | break; 532 | } 533 | } 534 | } 535 | $c .= $tmp; 536 | } 537 | } 538 | $c = preg_replace('/[\\n\\r\\t]+/', ' ', $c); 539 | $c = preg_replace('/\\s{2,}/', ' ', $c); 540 | $c = preg_replace('/>\\s <', $c); 541 | $c = preg_replace('/\\/\\*.*?\\*\\//i', '', $c); 542 | $c = preg_replace('//', '', $c); 543 | $compress .= $c; 544 | } 545 | return $compress; 546 | } 547 | 548 | function themeFields($layout) { 549 | $thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, NULL, _t('自定义缩略图'), _t('在这里填入一个图片 URL 地址, 以添加本文的缩略图,若填入纯数字,例如 3 ,则使用文章第三张图片作为缩略图(对应位置无图则不显示缩略图),留空则默认不显示缩略图')); 550 | $thumb->input->setAttribute('class', 'w-100'); 551 | $layout->addItem($thumb); 552 | 553 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 554 | array(1 => _t('启用'), 555 | 0 => _t('关闭')), 556 | 0, _t('文章目录'), _t('默认关闭,启用则会在文章内显示“文章目录”(若文章内无任何标题,则不显示目录),需要在“控制台-设置外观-文章目录”启用“使用文章内设定”后,方可生效')); 557 | $layout->addItem($catalog); 558 | } 559 | --------------------------------------------------------------------------------