Add files via upload

This commit is contained in:
Last 2018-11-15 17:39:11 +08:00 committed by GitHub
parent ed7db38abd
commit eec60a63f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 2338 additions and 0 deletions

10
z_daisy/conf.json Normal file
View File

@ -0,0 +1,10 @@
{
"name": "「雏菊」 - 主题",
"brief": "雏菊 - xiuno 4.0 主题",
"version": "1.0",
"bbs_version": "4.0",
"installed": 0,
"enable": 0,
"hooks_rank": [],
"dependencies": []
}

21
z_daisy/hook/forum_js.htm Normal file
View File

@ -0,0 +1,21 @@
<script type="text/javascript">
/*判断可显示区域高度 用于决定显示主图的高度 这里高度比例和内容页不同*/
var getBgHeight = function(windowHeight, bannerHeight, mobileBannerHeight){
windowHeight = windowHeight || 560;
if (windowHeight > window.screen.availHeight) {
windowHeight = window.screen.availHeight;
}
bannerHeight = bannerHeight.trim();
mobileBannerHeight = mobileBannerHeight.trim();
if (window.innerHeight > window.innerWidth) {
bannerHeight = parseFloat(mobileBannerHeight);
} else {
bannerHeight = parseFloat(bannerHeight);
}
bannerHeight = Math.round(windowHeight * bannerHeight / 100);
return bannerHeight;
};
var head = $("#masthead");
var bgHeight = getBgHeight(window.innerHeight, '35', '25');
head.css('height', bgHeight + "px");
</script>

View File

@ -0,0 +1,32 @@
<!-- 直接结束掉 container 并去除上下边距 -->
</div>
<!-- 部分 style 打包放进气泡的 CSS 文件, 只有列表,主题,编辑页面需要 主页不要 -->
<style>
.blog-background { background:#2C2A2A url(<?php echo $forum['icon_url'];?>); color:#CCC; }
#body { padding-bottom: 0; padding-top: 0;}
</style>
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
<!-- DAISY 需要最大宽度, 所以要把 header 中限制宽度的 DIV 移到每个页面中去? -->
<header id="masthead">
<div class="blog-background"></div>
<div class="inner">
<!-- 似乎没有必要再显示名称
<h1 class="blog-title" style="" itemprop="name"><?php //echo $forum['name'];?></h1>
<h2 class="blog-description light bordered bordered-top" style="" itemprop="description">12 月 23 日 2015 年 • 已有 3952 位童鞋围观过</h2>
-->
</div>
<!-- CSS3 气泡 同上 放全局并先隐藏-->
<ul class="bg-bubbles">
<li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li>
</ul>
</header>
<!-- 重新开始 container 这是一种兼容的做法 thread 页的 id="body" 将失去意义-->
<div class="container">

58
z_daisy/hook/post_js.htm Normal file
View File

@ -0,0 +1,58 @@
<script>
//上传view图片到附件表
$('#addattachs').on('change', function(e) {
var files = xn.get_files_from_event(e);
if (!files) return;
// 并发下会 服务端 session 写入会有问题,由客户端控制改为串行
var jprogress = $('.attachlist_parents').find('progress');
if (!$('.attachlist_parents').find('.attachlist').length) {
$('.attachlist_parents').append('<ul class="attachlist"><ul>');
}
if(!jprogress.length) {
jprogress = $('<progress class="progress progress-success" value="0" max="100">0%</progress>').appendTo('.attachlist_parent > ul');
//jprogress = $('.attachlist_parents').append('<div class="progress"><div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div></div>');
}
$.each_sync(files, function(i, callback) {
var file = files[i];
xn.upload_file(file, xn.url('attach-create'), {
is_image: 2
}, function(code, message) {
if (code != 0) return $.alert(message);
// 把文件 append 到附件列表 替换到wivebg
var url = message.url;
var filetype = message.filetype;
var aid = message.aid;
$('.attachlist').append('<li aid="' + aid + '"><a href="' + message.url + '" target="_blank"><i class="icon filetype ' + filetype + '"></i> ' + message.orgfilename + '</a> <a href="javascript:void(0);" class="delete m-l-1"><i class="icon-remove"></i> <?php echo lang('delete');?></a></li>');
callback();
jprogress.hide();
jprogress.val(0);
jprogress.text('0%');
}, function(percent) {
/*
var jprogress = $('.attachlist_parents').find('.progress');
jprogressbar = jprogress.find('.progress-bar');
jprogressbar.css('width', percent+'%');
jprogressbar.text(percent+'%');
*/
jprogress.show();
jprogress.val(percent);
jprogress.text(percent+'%');
console.log('progress:'+ percent);
});
});
});
// 删除附件 这里的删除hhh
$('.attachlist_parents').on('click', 'a.delete', function() {
var jlink = $(this);
var jli = jlink.parents('li');
var aid = jli.attr('aid');
if(!window.confirm(lang.confirm_delete)) return false;
$.xpost(xn.url('attach-delete-'+aid), function(code, message) {
if(code != 0) return $.alert(message);
jlink.parent().remove();
});
return false;
})
</script>

View File

@ -0,0 +1,20 @@
<?php
//判断图片是否存在输出BG路径, 如果没有则为空
$u = db_find_one('attach', array('tid'=>$tid,'isimage'=>2));
if ($u==NULL){ $viewimg = '';}
else{ $viewimg = 'url('.$conf['upload_url'].'attach/'.$u['filename'].')'; }
?>
<!-- 部分 style 打包成文件放进气泡的 CSS, 只有列表,主题,编辑页面需要 主页不要 -->
<style>.viewimg { background:#2C2A2A <?php echo $viewimg; ?>; color:#CCC; }</style>
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
<!-- 主题图片的上传按钮, 只有编辑页需要 还要有删除按钮 -->
<div class="row" style="padding: 0px 0 0 0">
<div class="col-lg-10 attachlist_parents">
<p class="small text-right"><label class="addattach" id="addattachs"><i class="icon-plus-square-o icon-3x"></i><input type="file" multiple="multiple" /></label></p>
</div>
</div>

View File

@ -0,0 +1,21 @@
<script type="text/javascript">
/*判断可显示区域高度 用于决定显示主图的高度*/
var getBgHeight = function(windowHeight, bannerHeight, mobileBannerHeight){
windowHeight = windowHeight || 560;
if (windowHeight > window.screen.availHeight) {
windowHeight = window.screen.availHeight;
}
bannerHeight = bannerHeight.trim();
mobileBannerHeight = mobileBannerHeight.trim();
if (window.innerHeight > window.innerWidth) {
bannerHeight = parseFloat(mobileBannerHeight);
} else {
bannerHeight = parseFloat(bannerHeight);
}
bannerHeight = Math.round(windowHeight * bannerHeight / 100);
return bannerHeight;
};
var head = $("#masthead");
var bgHeight = getBgHeight(window.innerHeight, '65', '45');
head.css('height', bgHeight + "px");
</script>

View File

@ -0,0 +1,35 @@
<!-- 直接结束掉 container 并去除上下边距 -->
</div>
<?php
//判断图片是否存在 输出BG路径, 没有则为空
$u = db_find_one('attach', array('tid'=>$tid,'isimage'=>2));
if ($u==NULL){ $viewimg = '';}
else{ $viewimg = 'url('.$conf['upload_url'].'attach/'.$u['filename'].')'; }
?>
<!-- 部分 style 打包放进气泡的 CSS 文件, 只有列表,主题,编辑页面需要 主页不要 -->
<style>
.blog-background { background:#2C2A2A <?php echo $viewimg; ?>; color:#CCC; }
#body { padding-bottom: 0; padding-top: 0;}
</style>
<!-- CSS3 气泡 不能放全局 否则不需要气泡的页面会被遮挡-->
<link rel="stylesheet" href="plugin/z_daisy/view/css/bubble.css">
<!-- DAISY 需要最大宽度, 所以要把 header 中限制宽度的 DIV 移到每个页面中去? -->
<header id="masthead">
<div class="blog-background"></div>
<div class="inner">
<h1 class="blog-title" style="" itemprop="name"><?php echo $thread['subject'];?></h1>
<h2 class="blog-description light bordered bordered-top" style="" itemprop="description">12 月 23 日 2015 年 • 已有 3952 位童鞋围观过</h2>
</div>
<!-- CSS3 气泡 同上 放全局并先隐藏-->
<ul class="bg-bubbles">
<li></li><li></li><li></li><li></li><li></li>
<li></li><li></li><li></li><li></li><li></li>
</ul>
</header>
<!-- 重新开始 container 这是一种兼容的做法 thread 页的 id="body" 将失去意义-->
<div class="container">

BIN
z_daisy/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,53 @@
<?php $db = G('db');?>
<?php $starttime = G('starttime');?>
<?php $time = G('time');?>
<?php $forumlist = G('forumlist');?>
<?php $forumarr = G('forumarr');?>
<?php $fid = G('fid');?>
<?php $conf = G('conf');?>
<?php $static_version = $conf['static_version'];?>
<!--{hook footer_start.htm}-->
<?php echo xn_debug_info(); ?>
</div>
<!--{hook footer_nav_before.htm}-->
<?php include _include(APP_PATH.'view/htm/footer_nav.inc.htm');?>
<!--{hook footer_nav_after.htm}-->
<!--[if lt IE 9]>
<script>window.location = '<?php echo url('browser');?>';</script>
<![endif]-->
<?php $browser = get__browser();?>
<?php if($browser['name'] == 'ie') { ?>
<script src="<?php echo $conf['view_url'];?>js/es6-shim.js<?php echo $static_version;?>"></script>
<?php } ?>
<!--{hook footer_js_before.htm}-->
<script src="lang/<?php echo $conf['lang'];?>/bbs.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/jquery-3.1.0.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/tether.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/bootstrap.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/bootstrap-plugin.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/async.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/xiuno.js<?php echo $static_version;?>"></script>
<script src="<?php echo $conf['view_url'];?>js/form.js<?php echo $static_version;?>"></script>
<script>
var debug = DEBUG = <?php echo DEBUG; ?>;
var url_rewrite_on = <?php echo $conf['url_rewrite_on'];?>;
var forumarr = <?php echo xn_json_encode($forumarr);?>;
var fid = <?php echo $fid;?>;
</script>
<script src="<?php echo $conf['view_url'];?>js/bbs.js<?php echo $static_version;?>"></script>
<!--{hook footer_js_after.htm}-->
</div>
</body>
</html>
<!--{hook footer_end.htm}-->
<?php echo cron_run();?>

View File

@ -0,0 +1,17 @@
<div class="text-muted" id="footer">
<div class="container" style="overflow: hidden;">
<dl class="row">
<dt>
<!--{hook footer_footer_left_start.htm}-->
Powered by <a href="http://bbs.xiuno.com/" target="_blank" class="text-muted"><b>Xiuno BBS <span><?php echo $conf['version'];?></span></b></a>
<!--{hook footer_footer_left_end.htm}-->
</dt>
<dd class="text-right">
<!--{hook footer_footer_right_start.htm}-->
Time: <b><?php echo substr(microtime(1) - $starttime, 0, 5);?></b>, SQL: <b><?php echo count($db->sqls);?></b>
<!--{hook footer_footer_right_end.htm}-->
</dd>
</dl>
</div>
</div>

View File

@ -0,0 +1,51 @@
<?php $conf = G('conf');?>
<?php $header = G('header');?>
<?php $user = G('user');?>
<?php $uid = G('uid');?>
<?php $gid = G('gid');?>
<?php $fid = G('fid');?>
<?php $tid = G('tid');?>
<?php $pid = G('pid');?>
<?php $route = G('route');?>
<?php $forumlist_show = G('forumlist_show');?>
<?php $static_version = $conf['static_version'];?>
<!DOCTYPE html>
<html lang="<?php echo $conf['lang'];?>">
<head>
<?php echo defined('BASE_HREF') ? '<base href="'.BASE_HREF.'" />' : '' ;?>
<!--{hook header_mete_before.htm}-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="XiunoBBS 4.0" />
<meta name="keywords" content="<?php echo $header['keywords'];?>" />
<meta name="description" content="<?php echo $header['description'];?>" />
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<title><?php echo $header['title'];?></title>
<link rel="shortcut icon" href="<?php echo $conf['view_url'];?>img/favicon.ico" />
<link rel="icon" sizes="32x32" href="<?php echo $conf['view_url'];?>img/favicon.ico">
<link rel="Bookmark" href="<?php echo $conf['view_url'];?>img/favicon.ico" />
<?php if(DEBUG) { ?>
<link rel="stylesheet" href="<?php echo $conf['view_url'];?>css/bootstrap.css<?php echo $static_version;?>">
<?php } else { ?>
<link rel="stylesheet" href="<?php echo $conf['view_url'];?>css/bootstrap.min.css<?php echo $static_version;?>">
<?php } ?>
<!--{hook header_link_after.htm}-->
</head>
<body>
<!--{hook header_body_start.htm}-->
<div id="wrapper">
<!--{hook header_wrapper_start.htm}-->
<?php include _include(APP_PATH.'view/htm/header_nav.inc.htm');?>

View File

@ -0,0 +1,168 @@
<!--{hook header_nav_start.htm}-->
<!-- 删掉影响样式的css -->
<nav class="navbar navbar-dark bg-inverse navbar-full navbar-fixed-top" id="header">
<!-- PC 导航 -->
<div class="container collapse navbar-toggleable-md">
<div class="row">
<!-- 左侧:版块区域 -->
<div class="col-md-8">
<ul class="nav navbar-nav" id="nav_pc">
<!--{hook header_nav_pc_start.htm}-->
<!-- LOGO -->
<li class="nav-item"><img src="<?php echo $conf['view_url'];?>img/logo.png" class="logo-sm"></li>
<!--{hook header_nav_logo_after.htm}-->
<!-- 前台首页 -->
<li class="nav-item home" fid="0"><a class="nav-link" href="."><?php echo lang('index_page');?></a></li>
<!--{hook header_nav_home_link_after.htm}-->
<!-- 版块 -->
<?php foreach($forumlist_show as $_forum) { ?>
<!--{hook header_nav_forumlist_loop_start.htm}-->
<li class="nav-item" fid="<?php echo $_forum['fid'];?>">
<a class="nav-link" href="<?php echo url("forum-$_forum[fid]");?>"><?php echo $_forum['name'];?></a>
</li>
<!--{hook header_nav_forumlist_loop_end.htm}-->
<?php } ?>
<!--{hook header_nav_pc_end.htm}-->
</ul>
</div>
<!-- 右侧:用户区域-->
<div class="col-md-4">
<ul class="nav navbar-nav pull-right">
<!--{hook header_nav_pc_user_start.htm}-->
<!-- 游客 -->
<?php if(empty($uid)) { ?>
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-login');?>"><?php echo lang('login');?></a></li>
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-create');?>"><?php echo lang('register');?></a></li>
<!-- 登陆用户 -->
<?php } else { ?>
<li class="nav-item"><a class="nav-link" href="<?php echo url('my');?>" tabindex="-1"><img class="avatar-xs" src="<?php echo $user['avatar_url'];?>"></a></li>
<li class="nav-item username m-l-xs"><a class="nav-link" href="<?php echo url('my');?>"><?php echo $user['username'];?></a></li>
<!-- 管理员 -->
<?php if($gid == 1) { ?>
<li class="nav-item"><a class="nav-link" href="admin/"><i class="icon-home"></i> <?php echo lang('admin_page');?></a></li>
<?php } ?>
<li class="nav-item"><a class="nav-link" href="<?php echo url('user-logout');?>"><?php echo lang('logout');?></a></li>
<?php } ?>
<!--{hook header_nav_pc_user_end.htm}-->
</ul>
</div>
</div>
</div>
<!-- 手机导航 -->
<table width="100%" class="hidden-lg-up navbar-nav">
<tr>
<td width="100">
<?php if($route == 'index' || $route == 'forum') { ?>
<a class="icon-navicon navbar-toggler" role="button" data-toggle="collapse" data-target="#mobile_collapsing_bavbar"></a>
<?php } else { ?>
<div class="nav-item">
<a class="nav-link icon-chevron-left xn-back" href="javascript:history.back();" aria-label="<?php echo lang('back');?>"></a>
</div>
<?php } ?>
</td>
<td>
<a class="nav-link text-center" href="<?php echo $header['mobile_link'];?>">
<?php if($header['mobile_title']) { ?>
<?php echo $header['mobile_title'];?>
<?php } else { ?>
<img src="<?php echo $conf['view_url'];?>img/logo.png" class="logo-sm center-block">
<?php } ?>
</a>
</td>
<td width="100" align="right">
<?php if(empty($uid)) { ?>
<a class="nav-link m-r-xs" href="<?php echo url('user-login');?>" aria-label="<?php echo lang('login');?>"> <i class="icon-user icon-2x"></i></a>
<?php } else { ?>
<?php if($route != 'thread') { ?>
<a class="nav-link icon-edit icon" href="<?php echo url("thread-create-$fid");?>" aria-label="<?php echo lang('thread_create');?>"></a>
<?php } else { ?>
<a class="nav-link icon-reply icon" href="<?php echo url("post-create-$tid");?>" aria-label="<?php echo lang('post_create_new');?>"></a>
<?php } ?>
<?php } ?>
</td>
</tr>
</table>
<!-- 手机导航:下拉菜单 mobile navigation drop menu -->
<div class="collapse" id="mobile_collapsing_bavbar" style="overflow-y: auto;">
<div class="p-a-1">
<ul class="nav navbar-nav" id="nav_mobile">
<li class="nav-item">
<a class="nav-link" href="./"><i class="icon-home"></i> <?php echo lang('index_page');?></a>
</li>
<!--{hook header_nav_mobile_forum_before.htm}-->
<?php foreach($forumlist_show as $_forum) { ?>
<li class="nav-item" fid="<?php echo $_forum['fid'];?>">
<a class="nav-link m-l-2" href="<?php echo url("forum-$_forum[fid]");?>"><i class="icon-circle-blank"></i> <?php echo $_forum['name'];?></a>
</li>
<?php } ?>
<!--{hook header_nav_mobile_forum_after.htm}-->
<!-- 个人资料 / profile -->
<?php if($uid) { ?>
<li class="nav-item">
<a class="nav-link" href="<?php echo url('my');?>"><i class="icon-user"></i> <?php echo lang('user_profile');?></a>
</li>
<?php } ?>
<!-- 后台 / background -->
<?php if($gid == 1) { ?>
<li class="nav-item">
<a class="nav-link" href="admin/"><i class="icon-home"></i> <?php echo lang('admin_page');?></a>
</li>
<?php } ?>
<!--{hook header_nav_mobile_logout_before.htm}-->
<!-- 退出 / logout-->
<?php if($uid) { ?>
<li class="nav-item">
<a class="nav-link" href="<?php echo url('user-logout');?>"><i class="icon-off"></i> <?php echo lang('logout');?></a>
</li>
<?php } ?>
<!--{hook header_nav_mobile_logout_after.htm}-->
</ul>
</div>
</div>
</nav>
<!--{hook header_nav_footer.htm}-->

View File

@ -0,0 +1,284 @@
<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>
<div id="body" class="container">
<!--{hook body_start.htm}-->
<!--{hook thread_start.htm}-->
<!-- only for screenreader -->
<a role="button" class="sr-only sr-focusable" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
<div class="row">
<div class="col-lg-9">
<!--{hook thread_breadcrumb_before.htm}-->
<ol class="breadcrumb m-b-sm hidden-lg-down">
<li class="breadcrumb-item"><a href="./" aria-label="<?php echo lang('index_page');?>"><i class="icon-home"></i></a></li>
<li class="breadcrumb-item"><a href="<?php echo url("forum-$fid");?>"><?php echo $forum['name'];?></a></li>
<li class="breadcrumb-item active"><a href="<?php echo url("thread-$tid");?>" title="<?php echo lang('index_page');?>返回主题第一页"><?php echo $thread['subject'];?></a></li>
<!--{hook thread_breadcrumb.htm}-->
</ol>
<!--{hook thread_breadcrumb_after.htm}-->
<div class="card card-block">
<dl class="row">
<dt class="vtop p-r-1 td-avatar">
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
<img class="avatar" src="<?php echo $thread['user_avatar_url'];?>">
</a>
</dt>
<dd>
<!--{hook thread_subject_before.htm}-->
<h3 class="break-all">
<!--{hook thread_subject_start.htm}-->
<?php echo $thread['subject'];?>
<!--{hook thread_subject_end.htm}-->
</h3>
<!--{hook thread_subject_after.htm}-->
<dl class="row small">
<dt>
<!--{hook thread_username_before.htm}-->
<span class="username text-muted">
<a href="<?php echo url("user-$thread[uid]");?>"><?php echo $thread['username'];?></a>
</span>
<span class="date text-grey m-l-1"><?php echo $thread['create_date_fmt'];?></span>
<span class="text-grey m-l-1 hidden-md-down"><i class="icon-eye"></i> <?php echo $thread['views'];?></span>
<!--{hook thread_views_after.htm}-->
</dt>
<dd class="text-right">
<!--{hook thread_update_before.htm}-->
<?php if($allowupdate || $first['allowupdate']) { ?>
<a href="<?php echo url("post-update-$thread[firstpid]");?>" class="text-grey m-r-1 post_update"><i class="icon-edit"></i> <?php echo lang('edit');?></a>
<?php } ?>
<?php if($allowdelete || $first['allowdelete']) { ?>
<a data-href="<?php echo url("post-delete-$thread[firstpid]");?>" href="javascript:void(0);" class="text-grey post_delete" isfirst="1"><i class="icon-remove"></i> <?php echo lang('delete');?></a>
<?php } ?>
<!--{hook thread_delete_after.htm}-->
</dd>
</dl>
</dd>
</dl>
<hr />
<div class="message break-all" isfirst="1">
<?php if($page == 1) { ?>
<!--{hook thread_message_before.htm}-->
<?php echo $first['message_fmt'];?>
<!--{hook thread_message_after.htm}-->
<?php echo post_file_list_html($first['filelist']);?>
<!--{hook thread_filelist_after.htm}-->
<?php } else { ?>
<!--{hook thread_message_more_before.htm}-->
<p><a href="<?php echo url("thread-$tid");?>"><?php echo lang('view_thread_message');?></a></p>
<!--{hook thread_message_more_after.htm}-->
<?php } ?>
</div>
</div>
<!--{hook thread_postlist_before.htm}-->
<div class="card post p-a-sm">
<table class="table postlist m-b-0">
<thead>
<tr>
<th colspan="2" class="p-a-0 p-b-sm">
<dl class="row">
<dt>
<b><?php echo lang('new_post');?></b> (<span class="posts"><?php echo $thread['posts'];?></span>)
</dt>
<dd>
<!--{hook thread_post_list_title_right.htm}-->
</dd>
</dl>
</th>
</tr>
</thead>
<tbody>
<?php include _include(APP_PATH.'view/htm/post_list.inc.htm'); ?>
<?php if(!empty($user)) { ?>
<tr class="post">
<td class="td-avatar">
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
<img class="avatar" src="<?php echo $user['avatar_url'];?>">
</a>
</td>
<td class="p-l-0">
<form action="<?php echo url("post-create-$tid-1");?>" method="post" id="quick_reply_form">
<input type="hidden" name="doctype" value="1" />
<input type="hidden" name="return_html" value="1" />
<input type="hidden" name="quotepid" value="0" />
<dl class="row small text-muted">
<dt class="username"><?php echo $user['username'];?></dt>
<dd class="text-right text-grey"><span class="floor"><?php echo ($thread['posts'] + 1);?></span><?php echo lang('floor');?></dd>
</dl>
<div class="message m-t-xs">
<fieldset class="form-group m-b-0">
<textarea class="form-control" placeholder="<?php echo lang('message');?>" name="message" id="message"></textarea>
</fieldset>
</div>
<div class="text-muted m-t-sm small">
<dl class="row">
<dt>
<!--{hook thread_quick_reply_left_start.htm}-->
<button type="submit" class="btn btn-sm btn-primary" id="submit" data-loading-text="<?php echo lang('submiting');?>..."> <?php echo lang('post_create');?> </button>
<!--{hook thread_quick_reply_left_end.htm}-->
</dt>
<dd class="text-right vtop">
<!--{hook thread_quick_reply_right_start.htm}-->
<a class="icon-mail-forward text-muted" href="<?php echo url("post-create-$tid");?>" id="advanced_reply"> <?php echo lang('advanced_reply');?></a>
<!--{hook thread_quick_reply_right_end.htm}-->
</dd>
</dl>
</div>
</form>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<!--{hook thread_postlist_after.htm}-->
<?php if($pagination) { ?>
<nav class="text-center"><ul class="pagination m-y-xs"><?php echo $pagination; ?></ul></nav>
<?php }?>
<!--{hook thread_page_after.htm}-->
<a role="button" class="btn btn-secondary btn-block xn-back m-y-1 m-x-auto" style="max-width: 50%;" href="javascript:history.back();"><?php echo lang('back');?></a>
</div>
<div class="col-lg-3 hidden-md-down">
<a role="button" class="btn btn-primary btn-block btn-sm m-b-sm hidden-md-down" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
<div class="card hidden-md-down">
<!--{hook thread_user_before.htm}-->
<a href="<?php echo url("user-$thread[uid]");?>">
<img class="avatar-lg center-block m-t-1" src="<?php echo $thread['user_avatar_url'];?>">
</a>
<h5 class="text-xs-center"><?php echo $thread['username'];?></h5>
<div class="card-group card-group-nest">
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('threads');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['threads'];?></h5>
</div>
</div>
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('posts');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['posts'];?></h5>
</div>
</div>
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('create_rank');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['uid'];?></h5>
</div>
</div>
</div>
</div>
<!--{hook thread_user_after.htm}-->
</div>
</div>
<!--{hook thread_end.htm}-->
<?php include _include(APP_PATH.'view/htm/footer.inc.htm');?>
<script>
var jform = $('#quick_reply_form');
var jsubmit = $('#submit');
jform.on('submit', function() {
jform.reset();
jsubmit.button('loading');
var postdata = jform.serialize();
$.xpost(jform.attr('action'), postdata, function(code, message) {
if(code == 0) {
var s = '<table>'+message+'</table>';
var jtr = $(s).find('tr');
jtr.insertBefore($('table.postlist tr').last());
jsubmit.button('reset');
$('#message').val('');
// 楼层 +1
var jfloor = jform.find('.floor');
jfloor.html(xn.intval(jfloor.html()) + 1);
// 回复数 +1
var jposts = $('.posts');
jposts.html(xn.intval(jposts.html()) + 1);
} else if(code < 0) {
$.alert(message);
jsubmit.button('reset');
} else {
jform.find('[name="'+code+'"]').alert(message).focus();
jsubmit.button('reset');
}
});
return false;
});
// 缩放图片,适应屏幕大小。
function resize_image() {
var jmessagelist = $('div.message');
var first_width = jmessagelist.width(); // 815 : 746; // 734 746
jmessagelist.each(function() {
var jdiv = $(this);
var maxwidth = jdiv.attr('isfirst') ? first_width : first_width - 79; // 734 746
var jmessage_width = Math.min(jdiv.width(), maxwidth);
jdiv.find('img, embed, iframe').each(function() {
var jimg = $(this);
//if(jimg.width() < 500) return;
var img_width = this.org_width;
var img_height = this.org_height;
if(!img_width) {
var img_width = jimg.width();
var img_height = jimg.height();
this.org_width = img_width;
this.org_height = img_height;
}
//var percent = xn.min(100, xn.ceil((img_width / jmessage_width) * 100));
if(img_width > jmessage_width) {
if(this.tagName == 'IMG') {
jimg.width(jmessage_width);
jimg.css('height', 'auto');
} else {
jimg.width(jmessage_width);
var height = (img_height / img_width) * jimg.width();
jimg.height(height);
}
}
});
});
}
$(function() {
resize_image();
$(window).on('resize', resize_image);
});
// 输入框自动伸缩
var jmessage = $('#message');
jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); });
jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); });
$('#nav_pc li[fid="<?php echo $fid;?>"]').tab('show');
$('#nav_mobile li[fid="<?php echo $fid;?>"]').tab('show');
</script>
<?php if($thread['closed'] && ($gid == 0 || $gid > 5)) { ?>
<script>
jmessage.val('<?php echo lang('thread_has_already_closed');?>').attr('readonly', 'readonly');
</script>
<?php } ?>
<!--{hook thread_js.htm}-->
</div>

146
z_daisy/route/doc.htm Normal file
View File

@ -0,0 +1,146 @@
<?php
!defined('DEBUG') AND exit('Access Denied.');
$action = param(1);
// hook thread_start.php
// 发表主题帖 | create new thread
if($action == 'create') {
// hook thread_create_get_post.php
user_login_check();
if($method == 'GET') {
// hook thread_create_get_start.php
$fid = param(2, 0);
$forum = $fid ? forum_read($fid) : array();
$forumlist_allowthread = forum_list_access_filter($forumlist, $gid, 'allowthread');
$forumarr = xn_json_encode(arrlist_key_values($forumlist_allowthread, 'fid', 'name'));
if(empty($forumlist_allowthread)) {
message(-1, lang('user_group_insufficient_privilege'));
}
$header['title'] = lang('create_thread');
$header['mobile_title'] = $fid ? $forum['name'] : '';
$header['mobile_linke'] = url("forum-$fid");
// hook thread_create_get_end.php
include _include(APP_PATH.'view/htm/post.htm');
} else {
// hook thread_create_thread_start.php
include XIUNOPHP_PATH.'xn_html_safe.func.php';
$fid = param('fid', 0);
$forum = forum_read($fid);
empty($forum) AND message('fid', lang('forum_not_exists'));
$r = forum_access_user($fid, $gid, 'allowthread');
!$r AND message(-1, lang('user_group_insufficient_privilege'));
$subject = htmlspecialchars(param('subject', '', FALSE));
empty($subject) AND message('subject', lang('please_input_subject'));
xn_strlen($subject) > 128 AND message('subject', lang('subject_length_over_limit', array('maxlength'=>128)));
$message = param('message', '', FALSE);
empty($message) AND message('message', lang('please_input_message'));
$doctype = param('doctype', 0);
$doctype > 10 AND message(-1, lang('doc_type_not_supported'));
xn_strlen($message) > 2028000 AND message('message', lang('message_too_long'));
$thread = array (
'fid'=>$fid,
'uid'=>$uid,
'sid'=>$sid,
'subject'=>$subject,
'message'=>$message,
'time'=>$time,
'longip'=>$longip,
'doctype'=>$doctype,
);
// hook thread_create_thread_before.php
$tid = thread_create($thread, $pid);
$pid === FALSE AND message(-1, lang('create_post_failed'));
$tid === FALSE AND message(-1, lang('create_thread_failed'));
// hook thread_create_thread_end.php
message(0, lang('create_thread_sucessfully'));
}
// 帖子详情 | post detail
} else {
// thread-{tid}-{page}-{keyword}.htm
$tid = param(1, 0);
$page = param(2, 1);
$keyword = param(3);
$pagesize = $conf['postlist_pagesize'];
//$pagesize = 10;
//$page == 1 AND $pagesize++;
// hook thread_info_start.php
$thread = thread_read($tid);
empty($thread) AND message(-1, lang('thread_not_exists'));;
$fid = $thread['fid'];
$forum = forum_read($fid);
empty($forum) AND message(3, lang('forum_not_exists'));
$postlist = post_find_by_tid($tid, $page, $pagesize);
empty($postlist) AND message(4, lang('post_not_exists'));
if($page == 1) {
empty($postlist[$thread['firstpid']]) AND message(-1, lang('data_malformation'));
$first = $postlist[$thread['firstpid']];
unset($postlist[$thread['firstpid']]);
$attachlist = $imagelist = $filelist = array();
// 如果是大站,可以用单独的点击服务,减少 db 压力
// if request is huge, separate it from mysql server
thread_inc_views($tid);
} else {
$first = post_read($thread['firstpid']);
}
$keywordurl = '';
if($keyword) {
$thread['subject'] = post_highlight_keyword($thread['subject'], $keyword);
//$first['message'] = post_highlight_keyword($first['subject']);
$keywordurl = "-$keyword";
}
$allowpost = forum_access_user($fid, $gid, 'allowpost') ? 1 : 0;
$allowupdate = forum_access_mod($fid, $gid, 'allowupdate') ? 1 : 0;
$allowdelete = forum_access_mod($fid, $gid, 'allowdelete') ? 1 : 0;
forum_access_user($fid, $gid, 'allowread') OR message(-1, lang('user_group_insufficient_privilege'));
$pagination = pagination(url("thread-$tid-{page}$keywordurl"), $thread['posts'] + 1, $page, $pagesize);
$header['title'] = $thread['subject'].'-'.$forum['name'].'-'.$conf['sitename'];
//$header['mobile_title'] = lang('thread_detail');
$header['mobile_title'] = $forum['name'];;
$header['mobile_link'] = url("forum-$fid");
$header['keywords'] = '';
$header['description'] = $thread['subject'];
$_SESSION['fid'] = $fid;
// hook thread_info_end.php
include _include(APP_PATH.'plugin/z_doc/view/htm/doc.htm');
}
// hook thread_end.php
?>

146
z_daisy/route/doc.php Normal file
View File

@ -0,0 +1,146 @@
<?php
!defined('DEBUG') AND exit('Access Denied.');
$action = param(1);
// hook thread_start.php
// 发表主题帖 | create new thread
if($action == 'create') {
// hook thread_create_get_post.php
user_login_check();
if($method == 'GET') {
// hook thread_create_get_start.php
$fid = param(2, 0);
$forum = $fid ? forum_read($fid) : array();
$forumlist_allowthread = forum_list_access_filter($forumlist, $gid, 'allowthread');
$forumarr = xn_json_encode(arrlist_key_values($forumlist_allowthread, 'fid', 'name'));
if(empty($forumlist_allowthread)) {
message(-1, lang('user_group_insufficient_privilege'));
}
$header['title'] = lang('create_thread');
$header['mobile_title'] = $fid ? $forum['name'] : '';
$header['mobile_linke'] = url("forum-$fid");
// hook thread_create_get_end.php
include _include(APP_PATH.'view/htm/post.htm');
} else {
// hook thread_create_thread_start.php
include XIUNOPHP_PATH.'xn_html_safe.func.php';
$fid = param('fid', 0);
$forum = forum_read($fid);
empty($forum) AND message('fid', lang('forum_not_exists'));
$r = forum_access_user($fid, $gid, 'allowthread');
!$r AND message(-1, lang('user_group_insufficient_privilege'));
$subject = htmlspecialchars(param('subject', '', FALSE));
empty($subject) AND message('subject', lang('please_input_subject'));
xn_strlen($subject) > 128 AND message('subject', lang('subject_length_over_limit', array('maxlength'=>128)));
$message = param('message', '', FALSE);
empty($message) AND message('message', lang('please_input_message'));
$doctype = param('doctype', 0);
$doctype > 10 AND message(-1, lang('doc_type_not_supported'));
xn_strlen($message) > 2028000 AND message('message', lang('message_too_long'));
$thread = array (
'fid'=>$fid,
'uid'=>$uid,
'sid'=>$sid,
'subject'=>$subject,
'message'=>$message,
'time'=>$time,
'longip'=>$longip,
'doctype'=>$doctype,
);
// hook thread_create_thread_before.php
$tid = thread_create($thread, $pid);
$pid === FALSE AND message(-1, lang('create_post_failed'));
$tid === FALSE AND message(-1, lang('create_thread_failed'));
// hook thread_create_thread_end.php
message(0, lang('create_thread_sucessfully'));
}
// 帖子详情 | post detail
} else {
// thread-{tid}-{page}-{keyword}.htm
$tid = param(1, 0);
$page = param(2, 1);
$keyword = param(3);
$pagesize = $conf['postlist_pagesize'];
//$pagesize = 10;
//$page == 1 AND $pagesize++;
// hook thread_info_start.php
$thread = thread_read($tid);
empty($thread) AND message(-1, lang('thread_not_exists'));;
$fid = $thread['fid'];
$forum = forum_read($fid);
empty($forum) AND message(3, lang('forum_not_exists'));
$postlist = post_find_by_tid($tid, $page, $pagesize);
empty($postlist) AND message(4, lang('post_not_exists'));
if($page == 1) {
empty($postlist[$thread['firstpid']]) AND message(-1, lang('data_malformation'));
$first = $postlist[$thread['firstpid']];
unset($postlist[$thread['firstpid']]);
$attachlist = $imagelist = $filelist = array();
// 如果是大站,可以用单独的点击服务,减少 db 压力
// if request is huge, separate it from mysql server
thread_inc_views($tid);
} else {
$first = post_read($thread['firstpid']);
}
$keywordurl = '';
if($keyword) {
$thread['subject'] = post_highlight_keyword($thread['subject'], $keyword);
//$first['message'] = post_highlight_keyword($first['subject']);
$keywordurl = "-$keyword";
}
$allowpost = forum_access_user($fid, $gid, 'allowpost') ? 1 : 0;
$allowupdate = forum_access_mod($fid, $gid, 'allowupdate') ? 1 : 0;
$allowdelete = forum_access_mod($fid, $gid, 'allowdelete') ? 1 : 0;
forum_access_user($fid, $gid, 'allowread') OR message(-1, lang('user_group_insufficient_privilege'));
$pagination = pagination(url("thread-$tid-{page}$keywordurl"), $thread['posts'] + 1, $page, $pagesize);
$header['title'] = $thread['subject'].'-'.$forum['name'].'-'.$conf['sitename'];
//$header['mobile_title'] = lang('thread_detail');
$header['mobile_title'] = $forum['name'];;
$header['mobile_link'] = url("forum-$fid");
$header['keywords'] = '';
$header['description'] = $thread['subject'];
$_SESSION['fid'] = $fid;
// hook thread_info_end.php
include _include(APP_PATH.'plugin/z_doc/view/htm/doc.htm');
}
// hook thread_end.php
?>

151
z_daisy/route/upload.php Normal file
View File

@ -0,0 +1,151 @@
<?php
!defined('DEBUG') AND exit('Access Denied.');
echo $user['uid'];
$datetime = date('Ym',time());
$targetDir = '../upload';
$uploadDir = '../../upload/attach/'.$datetime;
$cleanupTargetDir = true;
if (!file_exists($targetDir)) {
@mkdir($targetDir);
}
if (!file_exists($uploadDir)) {
@mkdir($uploadDir);
}
if (isset($_REQUEST["name"])) {
$fileName = $_REQUEST["name"];
} elseif (!empty($_FILES)) {
$fileName = $_FILES["file"]["name"];
} else {
$fileName = uniqid("file_");
}
// xxxxx
$typea = substr($fileName, strrpos($fileName, '.') + 1);
//过滤中文名图片
echo "<br>";
echo $user['uid'];
echo "<br>";
echo xn_rand(15) ;
echo "<br>";
$n=3;
//function () {
$str = '0123456789abcdefghijklmnopqrstuvwxyz';
$len = strlen($str);
$return = '';
for($i=0; $i<$n; $i++) {
$r = xn_rand(1, $len);
$return = $str[$r - 1];
}
return $return;
//}
/*
$fileName = $uid.'_'.xn_rand(15).".".$typea;
$fileName = iconv('UTF-8', 'GB2312', $fileName);
$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
$uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;
$imgUrl= $uploadDir."/".$fileName;
echo str_replace("../../","",$imgUrl);
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;
if ($cleanupTargetDir) {
if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
}
while (($file = readdir($dir)) !== false) {
$tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;
if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {
continue;
}
if (preg_match('/\.(part|parttmp)$/', $file) && (@filemtime($tmpfilePath) < time() - $maxFileAge)) {
@unlink($tmpfilePath);
}
}
closedir($dir);
}
if (!$out = @fopen("{$filePath}_{$chunk}.parttmp", "wb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}
if (!empty($_FILES)) {
if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
}
if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
} else {
if (!$in = @fopen("php://input", "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
}
while ($buff = fread($in, 4096)) {
fwrite($out, $buff);
}
@fclose($out);
@fclose($in);
rename("{$filePath}_{$chunk}.parttmp", "{$filePath}_{$chunk}.part");
$index = 0;
$done = true;
for( $index = 0; $index < $chunks; $index++ ) {
if ( !file_exists("{$filePath}_{$index}.part") ) {
$done = false;
break;
}
}
if ( $done ) {
if (!$out = @fopen($uploadPath, "wb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}
if ( flock($out, LOCK_EX) ) {
for( $index = 0; $index < $chunks; $index++ ) {
if (!$in = @fopen("{$filePath}_{$index}.part", "rb")) {
break;
}
while ($buff = fread($in, 4096)) {
fwrite($out, $buff);
}
@fclose($in);
@unlink("{$filePath}_{$index}.part");
}
flock($out, LOCK_UN);
}
@fclose($out);
}
*/

170
z_daisy/view/css/bubble.css Normal file
View File

@ -0,0 +1,170 @@
/* 这是主视图的样式, 放进气泡的 CSS 文件以减少占用 */
/*#masthead{box-shadow:0 .125rem .4375rem rgba(0,0,0,0.7);-webkit-box-shadow:0 .125rem .4375rem rgba(0,0,0,0.7)}*/
#masthead{position:relative;display:table;text-align:center;width:100%;overflow:hidden;transition:all 1s;color:#fff;background-color:#1e1e1f}
#masthead::before {content: "";position: absolute;top: 0;bottom: 0;left: 0;right: 0;background-color: rgba(0, 0, 0, 0.3);}
#masthead::after {content: '';width: 150%;height: 4.375rem;background: #EEEEF2;left: -25%;bottom: -2.875rem;border-radius: 100%;position: absolute;}
/* 标题 12px等于0.75rem*/
.blog-title {font-size: 2.625rem;line-height: 1.5;margin-bottom: .5rem;font-weight: 200;}
.light{font-weight:300 !important}
.inner{display:table-cell;vertical-align:middle;position:relative;z-index:10;width:100%}
.blog-description {font-size: .75rem;}
.blog-background.loading{opacity:0}
.blog-background{
/*background-attachment: fixed;*/
display:block;
width:100%;height:100%;
background-repeat:no-repeat;
background-size:cover;
background-position:center;
position:absolute;
left:0;top:0;
-webkit-filter: brightness(0.7);
-moz-filter: brightness(0.7);
-o-filter: brightness(0.7);
filter: brightness(0.7);
-webkit-transition:1s ease all;
-moz-transition:1s ease all;
-o-transition:1s ease all;
transition:5s ease all;
opacity:1
}
/*!
* CSS source:https://iu.tn/archives/qi-pao-piao-fu.html
*/
.bg-bubbles {
display:block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
ul,li {
margin: 0;
padding: 0;
}
.bg-bubbles li {
position: absolute;
list-style: none;
display: block;
width: 40px;
height: 40px;
background-color: rgba(255,255,255,.07);
bottom: -160px;
-webkit-animation: square 25s infinite;
animation: square 25s infinite;
-webkit-transition-timing-function: linear;
transition-timing-function: linear;
border-radius: 5rem;
}
.bg-bubbles li:nth-child(1) {
left: 10%
}
.bg-bubbles li:nth-child(2) {
left: 20%;
width: 80px;
height: 80px;
-webkit-animation-delay: 200ms;
animation-delay: 200ms;
-webkit-animation-duration: 17s;
animation-duration: 17s
}
.bg-bubbles li:nth-child(3) {
left: 25%;
-webkit-animation-delay: 400ms;
animation-delay: 400ms
}
.bg-bubbles li:nth-child(4) {
left: 40%;
width: 60px;
height: 60px;
-webkit-animation-duration: 30s;
animation-duration: 30s;
background-color: rgba(255, 255, 255, .1)
}
.bg-bubbles li:nth-child(5) {
left: 70%
}
.bg-bubbles li:nth-child(6) {
left: 80%;
width: 80px;
height: 80px;
-webkit-animation-delay: 5s;
animation-delay: 5s;
background-color: rgba(255, 255, 255, .15)
}
.bg-bubbles li:nth-child(7) {
left: 32%;
width: 60px;
height: 60px;
-webkit-animation-delay: 7s;
animation-delay: 7s
}
.bg-bubbles li:nth-child(8) {
left: 55%;
width: 20px;
height: 20px;
-webkit-animation-delay: 15s;
animation-delay: 15s;
-webkit-animation-duration: 40s;
animation-duration: 40s
}
.bg-bubbles li:nth-child(9) {
left: 25%;
width: 10px;
height: 10px;
-webkit-animation-delay: 2s;
animation-delay: 2s;
-webkit-animation-duration: 40s;
animation-duration: 40s;
background-color: rgba(255, 255, 255, .1)
}
.bg-bubbles li:nth-child(10) {
left: 90%;
width: 80px;
height: 80px;
-webkit-animation-delay: 11s;
animation-delay: 11s
}
@-webkit-keyframes square {
0% {
-webkit-transform: translateY(0);
transform: translateY(0)
}
100% {
-webkit-transform: translateY(-700px) rotate(600deg);
transform: translateY(-700px) rotate(600deg)
}
}
@keyframes square {
0% {
-webkit-transform: translateY(0);
transform: translateY(0)
}
100% {
-webkit-transform: translateY(-700px) rotate(600deg);
transform: translateY(-700px) rotate(600deg)
}
} /* 漂浮 */

366
z_daisy/view/htm/doc.htm Normal file
View File

@ -0,0 +1,366 @@
<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>
<!--{hook thread_start.htm}-->
<!-- only for screenreader -->
<a role="button" class="sr-only sr-focusable" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
<div class="row">
<div class="col-lg-3 hidden-md-down">
<a role="button" class="btn btn-primary btn-block btn-sm m-b-sm hidden-md-down" href="<?php echo url('thread-create-'.$fid);?>"><?php echo lang('thread_create_new');?></a>
<div class="card hidden-md-down">
<!--{hook thread_user_before.htm}-->
<a href="<?php echo url("user-$thread[uid]");?>">
<img class="avatar-lg center-block m-t-1" src="<?php echo $thread['user_avatar_url'];?>">
</a>
<h5 class="text-xs-center"><?php echo $thread['username'];?></h5>
<div class="card-group card-group-nest">
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('threads');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['threads'];?></h5>
</div>
</div>
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('posts');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['posts'];?></h5>
</div>
</div>
<div class="card">
<div class="card-block">
<div class="text-xs-center text-muted small"><?php echo lang('create_rank');?></div>
<h5 class="text-xs-center"><?php echo $thread['user']['uid'];?></h5>
</div>
</div>
</div>
</div>
<!--{hook thread_user_after.htm}-->
<style>
table.nav_tag_list {margin-bottom: 0.2rem;}
table.nav_tag_list td {padding: 0.3rem;}
table.nav_tag_list td a{margin-right: 0.5rem;}
.nav_tag_list .active {font-weight: 800;}
</style>
开始
<table class="small nav_tag_list">
<?php if(!empty($forum['tagcatelist'])) {foreach($forum['tagcatelist'] as $i=>$tagcate) { ?>
<tr>
<td class="text-small text-muted text-nowrap" align="right" valign="top">
<?php echo $tagcate['name'];?>
</td>
<td>
<?php
$tagidadd = '';
$tagactive = '';
/*
switch ($i) {
case 0: $tagidadd = "0_{$tagid2}_{$tagid3}_{$tagid4}";
$tagactive = 0 == $tagid1 ? ' class="active"' : '';
break;
case 1: $tagidadd = "{$tagid1}_0_{$tagid3}_{$tagid4}";
$tagactive = 0 == $tagid2 ? ' class="active"' : '';
break;
case 2: $tagidadd = "{$tagid1}_{$tagid2}_0_{$tagid4}";
$tagactive = 0 == $tagid3 ? ' class="active"' : '';
break;
case 3: $tagidadd = "{$tagid1}_{$tagid2}_{$tagid3}_0";
$tagactive = 0 == $tagid4 ? ' class="active"' : '';
break;
}
*/
?>
<a href="<?php echo url("forum-$fid-$page-$tagidadd");?>" <?php echo $tagactive;?>><?php echo lang('all');?></a>
<?php foreach($tagcate['taglist'] as $tag) { ?>
<?php
switch ($i) {
case 0:
$tagidadd = "{$tag['tagid']}";
//$tagactive = $tag['tagid'] == $tagid1 ? ' class="active"' : '';
//break;
/*
case 1: $tagidadd = "{$tagid1}_{$tag['tagid']}_{$tagid3}_{$tagid4}";
$tagactive = $tag['tagid'] == $tagid2 ? ' class="active"' : '';
break;
case 2: $tagidadd = "{$tagid1}_{$tagid2}_{$tag['tagid']}_{$tagid4}";
$tagactive = $tag['tagid'] == $tagid3 ? ' class="active"' : '';
break;
case 3: $tagidadd = "{$tagid1}_{$tagid2}_{$tagid3}_{$tag['tagid']}";
$tagactive = $tag['tagid'] == $tagid4 ? ' class="active"' : '';
break;*/
}
?>
<a href="<?php echo url("doc-$tid-$page-$tagidadd");?>" <?php echo $tagactive;?>><?php echo $tag['name'];?></a>
<?php } ?>
</td>
</tr>
<?php }} ?>
</table>
结束
</div>
<div class="col-lg-9">
<!-- 这是新增的段落 -->
<div>
<?php echo "PHP输出一段信息"; ?>
<?php echo "PHP输出user".$user['uid']; ?>
<?php echo "PHP输出user".$username; ?>
</div>
<!-- /这是新增的段落 -->
<!--{hook thread_breadcrumb_before.htm}-->
<ol class="breadcrumb m-b-sm hidden-lg-down">
<li class="breadcrumb-item"><a href="./" aria-label="<?php echo lang('index_page');?>"><i class="icon-home"></i></a></li>
<li class="breadcrumb-item"><a href="<?php echo url("forum-$fid");?>"><?php echo $forum['name'];?></a></li>
<li class="breadcrumb-item active"><a href="<?php echo url("thread-$tid");?>" title="<?php echo lang('index_page');?>返回主题第一页"><?php echo $thread['subject'];?></a></li>
<!--{hook thread_breadcrumb.htm}-->
</ol>
<!--{hook thread_breadcrumb_after.htm}-->
<div class="card card-block">
<dl class="row">
<dt class="vtop p-r-1 td-avatar">
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
<img class="avatar" src="<?php echo $thread['user_avatar_url'];?>">
</a>
</dt>
<dd>
<!--{hook thread_subject_before.htm}-->
<h3 class="break-all">
<!--{hook thread_subject_start.htm}-->
<?php echo $thread['subject'];?>
<!--{hook thread_subject_end.htm}-->
</h3>
<!--{hook thread_subject_after.htm}-->
<dl class="row small">
<dt>
<!--{hook thread_username_before.htm}-->
<span class="username text-muted">
<a href="<?php echo url("user-$thread[uid]");?>"><?php echo $thread['username'];?></a>
</span>
<span class="date text-grey m-l-1"><?php echo $thread['create_date_fmt'];?></span>
<span class="text-grey m-l-1 hidden-md-down"><i class="icon-eye"></i> <?php echo $thread['views'];?></span>
<!--{hook thread_views_after.htm}-->
</dt>
<dd class="text-right">
<!--{hook thread_update_before.htm}-->
<?php if($allowupdate || $first['allowupdate']) { ?>
<a href="<?php echo url("post-update-$thread[firstpid]");?>" class="text-grey m-r-1 post_update"><i class="icon-edit"></i> <?php echo lang('edit');?></a>
<?php } ?>
<?php if($allowdelete || $first['allowdelete']) { ?>
<a data-href="<?php echo url("post-delete-$thread[firstpid]");?>" href="javascript:void(0);" class="text-grey post_delete" isfirst="1"><i class="icon-remove"></i> <?php echo lang('delete');?></a>
<?php } ?>
<!--{hook thread_delete_after.htm}-->
</dd>
</dl>
</dd>
</dl>
<hr />
<div class="message break-all" isfirst="1">
<?php if($page == 1) { ?>
<!--{hook thread_message_before.htm}-->
<?php echo $first['message_fmt'];?>
<!--{hook thread_message_after.htm}-->
<?php echo post_file_list_html($first['filelist']);?>
<!--{hook thread_filelist_after.htm}-->
<?php } else { ?>
<!--{hook thread_message_more_before.htm}-->
<p><a href="<?php echo url("thread-$tid");?>"><?php echo lang('view_thread_message');?></a></p>
<!--{hook thread_message_more_after.htm}-->
<?php } ?>
</div>
</div>
<!--{hook thread_postlist_before.htm}-->
<div class="card post p-a-sm">
<table class="table postlist m-b-0">
<thead>
<tr>
<th colspan="2" class="p-a-0 p-b-sm">
<dl class="row">
<dt>
<b><?php echo lang('new_post');?></b> (<span class="posts"><?php echo $thread['posts'];?></span>)
</dt>
<dd>
<!--{hook thread_post_list_title_right.htm}-->
</dd>
</dl>
</th>
</tr>
</thead>
<tbody>
<?php include _include(APP_PATH.'view/htm/post_list.inc.htm'); ?>
<?php if(!empty($user)) { ?>
<tr class="post">
<td class="td-avatar">
<a href="<?php echo url("user-$thread[uid]");?>" tabindex="-1">
<img class="avatar" src="<?php echo $user['avatar_url'];?>">
</a>
</td>
<td class="p-l-0">
<form action="<?php echo url("post-create-$tid-1");?>" method="post" id="quick_reply_form">
<input type="hidden" name="doctype" value="1" />
<input type="hidden" name="return_html" value="1" />
<input type="hidden" name="quotepid" value="0" />
<dl class="row small text-muted">
<dt class="username"><?php echo $user['username'];?></dt>
<dd class="text-right text-grey"><span class="floor"><?php echo ($thread['posts'] + 1);?></span><?php echo lang('floor');?></dd>
</dl>
<div class="message m-t-xs">
<fieldset class="form-group m-b-0">
<textarea class="form-control" placeholder="<?php echo lang('message');?>" name="message" id="message"></textarea>
</fieldset>
</div>
<div class="text-muted m-t-sm small">
<dl class="row">
<dt>
<!--{hook thread_quick_reply_left_start.htm}-->
<button type="submit" class="btn btn-sm btn-primary" id="submit" data-loading-text="<?php echo lang('submiting');?>..."> <?php echo lang('post_create');?> </button>
<!--{hook thread_quick_reply_left_end.htm}-->
</dt>
<dd class="text-right vtop">
<!--{hook thread_quick_reply_right_start.htm}-->
<a class="icon-mail-forward text-muted" href="<?php echo url("post-create-$tid");?>" id="advanced_reply"> <?php echo lang('advanced_reply');?></a>
<!--{hook thread_quick_reply_right_end.htm}-->
</dd>
</dl>
</div>
</form>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<!--{hook thread_postlist_after.htm}-->
<?php if($pagination) { ?>
<nav class="text-center"><ul class="pagination m-y-xs"><?php echo $pagination; ?></ul></nav>
<?php }?>
<!--{hook thread_page_after.htm}-->
<a role="button" class="btn btn-secondary btn-block xn-back m-y-1 m-x-auto" style="max-width: 50%;" href="javascript:history.back();"><?php echo lang('back');?></a>
</div>
</div>
<!--{hook thread_end.htm}-->
<?php include _include(APP_PATH.'view/htm/footer.inc.htm');?>
<script>
var jform = $('#quick_reply_form');
var jsubmit = $('#submit');
jform.on('submit', function() {
jform.reset();
jsubmit.button('loading');
var postdata = jform.serialize();
$.xpost(jform.attr('action'), postdata, function(code, message) {
if(code == 0) {
var s = '<table>'+message+'</table>';
var jtr = $(s).find('tr');
jtr.insertBefore($('table.postlist tr').last());
jsubmit.button('reset');
$('#message').val('');
// 楼层 +1
var jfloor = jform.find('.floor');
jfloor.html(xn.intval(jfloor.html()) + 1);
// 回复数 +1
var jposts = $('.posts');
jposts.html(xn.intval(jposts.html()) + 1);
} else if(code < 0) {
$.alert(message);
jsubmit.button('reset');
} else {
jform.find('[name="'+code+'"]').alert(message).focus();
jsubmit.button('reset');
}
});
return false;
});
// 缩放图片,适应屏幕大小。
function resize_image() {
var jmessagelist = $('div.message');
var first_width = jmessagelist.width(); // 815 : 746; // 734 746
jmessagelist.each(function() {
var jdiv = $(this);
var maxwidth = jdiv.attr('isfirst') ? first_width : first_width - 79; // 734 746
var jmessage_width = Math.min(jdiv.width(), maxwidth);
jdiv.find('img, embed, iframe').each(function() {
var jimg = $(this);
//if(jimg.width() < 500) return;
var img_width = this.org_width;
var img_height = this.org_height;
if(!img_width) {
var img_width = jimg.width();
var img_height = jimg.height();
this.org_width = img_width;
this.org_height = img_height;
}
//var percent = xn.min(100, xn.ceil((img_width / jmessage_width) * 100));
if(img_width > jmessage_width) {
if(this.tagName == 'IMG') {
jimg.width(jmessage_width);
jimg.css('height', 'auto');
} else {
jimg.width(jmessage_width);
var height = (img_height / img_width) * jimg.width();
jimg.height(height);
}
}
});
});
}
$(function() {
resize_image();
$(window).on('resize', resize_image);
});
// 输入框自动伸缩
var jmessage = $('#message');
jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); });
jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); });
$('#nav_pc li[fid="<?php echo $fid;?>"]').tab('show');
$('#nav_mobile li[fid="<?php echo $fid;?>"]').tab('show');
</script>
<?php if($thread['closed'] && ($gid == 0 || $gid > 5)) { ?>
<script>
jmessage.val('<?php echo lang('thread_has_already_closed');?>').attr('readonly', 'readonly');
</script>
<?php } ?>
<!--{hook thread_js.htm}-->

10
z_nav/conf.json Normal file
View File

@ -0,0 +1,10 @@
{
"name": "自动隐藏导航栏",
"brief": "这是针对有大图(横向全屏的 页面制作的显隐导航, 如果不打算放置顶部图片 可以注释掉footer_jsafter.htm的第三行",
"version": "1.0",
"bbs_version": "4.0",
"installed": 1,
"enable": 0,
"hooks_rank": [],
"dependencies": []
}

View File

@ -0,0 +1,41 @@
<script>
//延时150ms? 先删掉影响样式效果的 .bg-inverse
$('.navbar').removeClass('bg-inverse');
//setTimeout("$('.navbar').removeClass('bg-inverse')",150)
//依赖JQ,应该放在页面最后加载
var home = location.href,
s = $('#bgvideo')[0],
Siren = {
// 显示&隐藏导航栏
NH: function(){
var h1 = 0,
h2 = 400,
ss = $(document).scrollTop();
$(window).scroll(function(){
var s = $(document).scrollTop();
if(s== h1){
$('.navbar').removeClass('yya');
}if(s > h1){
$('.navbar').addClass('yya');
}if(s > h2){
$('.navbar').addClass('gizle');
if(s > ss){
$('.navbar').removeClass('sabit');
}else{
$('.navbar').addClass('sabit');
}
ss = s;
}
});
},
}
$(function() {
Siren.NH(); // 显示&隐藏导航栏
})
</script>

View File

@ -0,0 +1,28 @@
<style>
/* 全局的动态导航条样式 可以打包到css文件 不是很重要,也可以放到页面最后加载 */
.navbar {
width: 100%;
background: none;
-webkit-transition: all .4s ease;
transition: all .4s ease;
position: fixed;
z-index: 9999;
top: 0
}
.yya {
position: fixed;
left: 0;
top: 0;
background: rgba(0, 0, 0, .6);
box-shadow: 0 0 1px rgba(0,0,0,.15)
}
.gizle {
top: -100px;
}
.sabit {
top: 0;
z-index: 9999;
}
</style>

BIN
z_nav/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

10
z_postEx/conf.json Normal file
View File

@ -0,0 +1,10 @@
{
"name": "帖内回复",
"brief": "热点讨论,已经是大势所趋",
"version": "1.0",
"bbs_version": "4.0",
"installed": 1,
"enable": 0,
"hooks_rank": [],
"dependencies": []
}

View File

@ -0,0 +1,159 @@
<!-- 独立的
<div class="test">这是test</div>
<p>这是p</p>
<button onclick="afterText()">在图片后面添加文本</button>
<br>
<br>
<br>
<script>
//确认上面已经引用过JQ库文件
function afterText(){
var txt1=$("<i></i>").text("love "); // 通过 jQuery 创建元素
$(".test").after(txt1); // 在 img 之后插入新元素
}
</script>
-->
<!-- 正式回复 -->
<!--script src="//www-static.diyidan.net/static/addface/js/main.js?v=f9faff63b439fec824edbde022b77397"></script-->
<script src="plugin/z_post/main.js?v=f9faff63b439fec824edbde022b77397"></script>
<!-- 二级回复中的一段 -->
<script type="text/javascript">
/*二级回复*/
function send_comment(item) {
do_l2commit(item);
/*if(getCookie('token_id') != null && getCookie('token_id')!=''){
do_l2commit(item);
}else{
onlyLogin()
}*/
//var p_inner_value = $('div.edit_container p.p_emoji_content')
//发送Ajax请求
}
function do_l2commit(item) {
var comment_id = $(item).closest('.reply_right').find('.comment_id_hidden').val();
var reply = getPcontentText($(item).closest('.write_reply').find('#write_container').get(0));
var ajax_url = "/main/post/l2comment";
var louzhu_id = "6293877835964134301";
$.ajax({
url: ajax_url, //登陆页面
type: "POST",
async: true,
timeout: 3000,
data: {
"l1CommentId": comment_id,
"comment": reply,
"commentPage": parseInt('1', 10),
},
dataType: "json",
error: function() {},
success: function(data, status) { //如果调用成功
// var jsonObject = JSON.parse(data);
var code = data.code;
if (code != 200) {
if (data.message != null) {
showMessagePopup(data.message);
}
} else {
//TODO:后台会回传有多少二层回复的页数的
var totalCount = data.data.totalCommentCount;
var page_total_num = parseInt((totalCount - 1) / 10) + 1;
$.ajax({
url: "/main/post/l2comment",
type: "GET",
data: {
"l1CommentId": comment_id,
"page": page_total_num
},
async: true,
timeout: 3000,
dataType: "json",
error: function() {},
success: function(data, status) { //如果调用成功
// var jsonObject = JSON.parse(data);
var code = data.code;
if (code != 200) {
if (data.message != null) {
showMessagePopup(data.message)
}
} else {
displayAjaxL2commentList(item, $('script[type="text/template"]').html(), data.data, page_total_num, page_total_num, ajax_url, comment_id, louzhu_id);
$(item).closest('.write_reply').remove();
}
}
});
}
}
});
}
</script>
<!-- 底部js -->
<script type="text/template">
<li class="clr" {display_str}>
<div class="user_ti f1">
<img src="{avatar}" onclick="{url_to_user}">
</div>
<div class="more_reply_right f1">
<div class="l2_comment user_name">
<span class="user_reply_name" onclick="{url_to_user}">{nickName}</span>
<span class="user_reply_level">Lv{level}</span> {louzhu_span}
<p>:&nbsp;&nbsp; {commentContent}</p>
<!--safe咋办-->
</div>
<div class="user_reply_time">
<span>{commentTime}</span>
<span class="to_reply f2" onclick="showReply(this)">回复</span>
</div>
</div>
</li>
</script>
<script type="text/templateCommentItem">
{anchor_str}
<li class="clr" style="margin-left:70px;position: relative">
<div class="user_ti f1">
<img src="{avatar}" onclick="{url_to_user}">
</div>
<div class="reply_right f1 " >
<input type="hidden" name="comment_id_hidden" class="comment_id_hidden" value="{commentId}" data-floor-num="{commentFloorNum}" />
<div class="user_name">
<span onclick="{url_to_user}">{nickName}</span>
<span class="user_reply_level">Lv{level}</span> {louzhu_span}
<span class="f2 ie2">{commentFloorNum}楼</span>
</div>
{pic_or_music_container_div}
<ul class="more_user_reply">
<div class="user_reply_time">
{commentJudge_judgerRecommendStmt_div} {commentReward_rewardAmount_div}
<span>{commentTime}</span>
<span class="to_reply f2" onclick="showReply(this)">回复</span>
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复({commentl2TotalCount})</span>-->
</div>
{reply_li_container_div}
</ul>
{l2_comment_page_nav_div}
</div>
{commentJudge_judgeStampUrl_span} {commentReward_rewardStampUrl_span}
</li>
</script>

View File

@ -0,0 +1,108 @@
<!-- 一级回复 -->
<div class="reply_right f1 " >
<div class="user_reply_time">
<span>03-14</span>
<span class="to_reply f2" onclick="showReply(this)" style="cursor:pointer">一级回复</span>
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复(1)</span>-->
</div>
</div>
<?php
//创建回复信息 直接从表中读取本次post的ID有多少回复
$postreply = db_find('post_reply', array('pid'=>$_post['pid']), array('create_date'=>1));
if($postreply) { foreach($postreply as $_posts) {
//创建回复人的信息,每条回复都会被查询一遍似乎很消耗资源
$userz = user_read_cache($_posts['uid']);
$postz['username'] = array_value($userz, 'username');
$postz['user_avatar_url'] = array_value($userz, 'avatar_url');
$postz['user'] = $userz ? $userz : user_guest();
!isset($postz['floor']) AND $postz['floor'] = '';
?>
<!-- 剩下的就是细化UI了 -->
<br>
<a href="<?php echo url("user-$_posts[uid]");?>" tabindex="-1">
<img class="avatar" src="<?php echo $postz['user_avatar_url'];?>">
</a>
<?php echo $postz['username'];?>
<span class="user_reply_level">Lv7</span>
<?php echo $_posts['message'];?>
<!-- 二级回复 -->
<div class="reply_right f1 " >
<div class="user_reply_time">
<span>03-14</span>
<span class="to_reply f2" onclick="showReply(this)" style="cursor:pointer">二级回复按钮</span>
<!--<span class="to_hide_reply f2" onclick="hidel2comments(this)">收起回复(1)</span>-->
</div>
</div>
<?php }} ?>
<!-- 以下是全新的 POST -->
<div class="list-item reply-wrap" data-id="461068570" data-index="0">
<div class="user-face">
<a href='<?php echo url("user-$_posts[uid]");?>' target="_blank" data-usercard-mid="14589321">
<img src="<?php echo $postz['user_avatar_url'];?>" alt="">
</a>
</div>
<div class="con ">
<div class="user">
<a data-usercard-mid="14589321" href='<?php echo url("user-$_posts[uid]");?>' target="_blank" class="name "><?php echo $postz['username'];?></a>
<a href="//www.bilibili.com/html/help.html#k_3" target="_blank"><i class="level l4"></i></a>
</div>
<p class="text">这标题不是化学,是哲学<img src="//i0.hdslb.com/bfs/vip/f8219e484d5a55787c3f1722dc3112d0eba03a69.png@50w_50h.webp" alt="思索"></p>
<div class="info">
<span class="floor">#22</span>
<span class="plad">来自<a href="//app.bilibili.com/" target="_blank">安卓客户端</a></span>
<span class="time">45分钟前</span>
<span class="like "><i></i><span>2</span></span>
<span class="hate "><i></i></span>
<span class="reply btn-hover btn-highlight">回复</span>
<div class="operation">
<div class="spot"></div>
<div class="opera-list" style="display: none;">
<ul>
<li class="blacklist">加入黑名单</li>
<li class="report">举报</li>
</ul>
</div>
</div>
</div>
<div class="reply-box">
<div class="reply-item reply-wrap" data-id="461092529" data-index="0">
<a href="//space.bilibili.com/43646124" data-usercard-mid="43646124" target="_blank" class="reply-face">
<img src="//i0.hdslb.com/bfs/face/ba27db05e3f0808b8ee0f19c817fb6219cf9e921.jpg@52w_52h.webp" alt="">
</a>
<div class="reply-con">
<div class="user">
<a href="//space.bilibili.com/43646124" target="_blank" data-usercard-mid="43646124" class="name ">美丽科学-BOS</a>
<a href="//www.bilibili.com/html/help.html#k_3" target="_blank"><i class="level l5"></i></a>
<span class="text-con">科学的尽头是艺术更是哲学 没毛病 哈哈哈哈</span>
</div>
<div class="info">
<span class="time">7分钟前</span>
<span class="like "><i></i><span></span></span>
<span class="reply btn-hover">回复</span>
<div class="operation btn-hover btn-hide-re">
<div class="spot"></div>
<div class="opera-list" style="display: none;">
<ul>
<li class="blacklist">加入黑名单</li>
<li class="report">举报</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="paging-box"></div>
</div>
</div>

46
z_postEx/install.php Normal file
View File

@ -0,0 +1,46 @@
<?php
/*
Xiuno BBS 4.0 插件:楼中楼 插件安装
创建posts表,用于回复楼层的时候多读取一遍楼层
/ 2017-09-16 05:11
*/
!defined('DEBUG') AND exit('Forbidden');
$tablepre = $db->tablepre;
$sql = "CREATE TABLE IF NOT EXISTS {$tablepre}post_reply (
pid int(11) unsigned NOT NULL DEFAULT '0',
rid int(11) unsigned NOT NULL AUTO_INCREMENT,
uid int(11) unsigned NOT NULL DEFAULT '0',
isfirst int(11) unsigned NOT NULL DEFAULT '0',
create_date int(11) unsigned NOT NULL DEFAULT '0',
userip int(11) unsigned NOT NULL DEFAULT '0',
message text NOT NULL DEFAULT '',
PRIMARY KEY (pid),
KEY (rid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$r = db_exec($sql);
/*
目前不使用缓存
// 缓存 tagid 10000,10000,10000,10000
$sql = "ALTER TABLE {$tablepre}thread ADD COLUMN tagids char(32) NOT NULL DEFAULT ''";
$r = db_exec($sql);
// 缓存的时间,用来和 setting('tag_update_time') 对比
$sql = "ALTER TABLE {$tablepre}thread ADD COLUMN tagids_time int(11) unsigned NOT NULL DEFAULT '0'";
$r = db_exec($sql);
// tag 缓存的时间
setting_set('tag_update_time', $time);
//$r === FALSE AND message(-1, '创建表结构失败');
*/
?>

171
z_postEx/main.js Normal file
View File

@ -0,0 +1,171 @@
/*表情添加*/
function showEmoji(ele){
var the_face=$(ele).closest('.face_top').next()
if(the_face.hasClass('emoji_section')){
$(ele).removeClass("to_show");
the_face.removeClass('emoji_section').find('ul').remove()
}else{
$(ele).addClass("to_show").siblings().removeClass("to_show")
the_face.find('ul').remove()
the_face.removeClass('face_section emoji_section').addClass('emoji_section').append(show_emojis())
}
}
function showFace(ele){
var the_face=$(ele).closest('.face_top').next()
if(the_face.hasClass('face_section')){
$(ele).removeClass("to_show");
the_face.removeClass('face_section').find('ul').remove()
}else{
$(ele).addClass("to_show").siblings().removeClass("to_show")
the_face.find('ul').remove()
the_face.removeClass('face_section emoji_section').addClass('face_section').append(show_faces())
}
}
function show_emojis(){
var faceList = [" (๑• . •๑) ", " ˋ( ° ▽、° ) ", " (^人^) ", " _(:3」∠)_ ", " →_→ ", " ←_← ", " (*^^*) ", " ٩(๑`^´๑)۶ ", " ╮(╯_╰)╭ ",
" ヾ(′▽`*)ゝ ", " o(≧v≦)o~~ ", " ↖(^ω^)↗ ", " ヽ( ^∀^)ノ ", " (*∩_∩*) ", " (/≧▽≦)/~ ", " ㄟ( ▔, ▔ )ㄏ ",
" ~( ̄▽ ̄~) ", " (~ ̄▽ ̄)~ ", " /(ㄒoㄒ)/~~ ", " (*/ω\*) ", " ≧▽≦蛤蛤蛤 ", " (°ー°〃) ", " ヾ( ̄▽ ̄) ",
" (╯°Д°)╯︵ ", " (☆ω☆) ", " \@_\@ ", " (*´艸`)、 ", " QAQ ", " (⊙o⊙) ", " (×_×)昏倒 ", " ( ˘•㉨•˘ ) ",
" ヾ(´(エ)`ノ゙ ", " ฅ( ̳• ◡ • ̳)ฅ ", " ⊙﹏⊙‖∣ ", " (。•ˇ‸ˇ•。) ", " ╭(╯^╰)╮ ", " ( •̀∀•́ ) ", " o(&gt;&lt;)o ",
" (ˉ▽ ̄~) 切~~ ", " ⊙ω⊙ ", " =。=b ", " =3333= ", " (ง •̀_•́)ง ", " &lt;(_ _)&gt; ", " o( ̄ヘ ̄o) ", " ヽ( ̄д ̄;) ",
" ヽ(=^・ω・^=)丿 ", " ( ^_^ )/~~拜 ", " Orz ", " ♪(^∇^*) ", " (ฅ´ω`ฅ)留爪 ", " ( ´◔ ‸◔') ", " (*^^*) ", " p(^_^)q ",
" ┗( TT )┛ ", " (ˉ▽ˉ;) ", " Õ_Õ ", " 눈_눈 ", " o(一︿一+)o ", " (〃 ̄︶ ̄)人( ̄︶ ̄〃) "]
var reply_display_emoji ='';
var emoji_li='';
var len_emoji=faceList.length;
for (var i=0; i<len_emoji; i++) {
emoji_li += "<li onclick=\"addEmoji(this, '"+faceList[i]+"');\">"+faceList[i]+ "</li>";
}
reply_display_emoji ='<ul>'+emoji_li+'</ul>';
return reply_display_emoji
}
function addFace(item, imgUlr) {
var $write_reply=$(item).closest('.add_icons').parent();
var img_str = "<img src='"+imgUlr+"'></img>";
$write_reply.find('.in_write').append(img_str).focus()
$write_reply.find('.add_icons').removeClass('face_section').find('ul').remove()
$write_reply.find('.face_top li').removeClass()
placeCaretAtEnd($write_reply.find('.in_write').get(0));
}
function addEmoji(item, str) {
var $write_reply=$(item).closest('.add_icons').parent();
$write_reply.find('.in_write').append(str).focus()
$write_reply.find('.add_icons').removeClass('emoji_section').find('ul').remove()
$write_reply.find('.face_top li').removeClass('to_show')
placeCaretAtEnd($write_reply.find('.in_write').get(0));
}
function placeCaretAtEnd(el) {
el.focus();
if (typeof window.getSelection != "undefined"
&& typeof document.createRange != "undefined") {
var range = document.createRange();
range.selectNodeContents(el);
range.collapse(false);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (typeof document.body.createTextRange != "undefined") {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(false);
textRange.select();
}
}
//这是增加回复输入框的调用按钮触发
function showReply(ele){
var toReply=null
if ($(ele).closest('.more_reply_right').length>0) {
toReply="回复 @"+$(ele).closest('.more_reply_right').find('.user_reply_name').html()+""
}else{
toReply=''
}
var replyDiv="<div class='write_reply'>"+
"<div>"+
"<div id='write_container' class='in_write' contenteditable='true'>"+toReply+"</div>"+
"</div>"+
"<div id='face_top' class='face_top'>"+
"<ul id='face_btn' class='clr'>"+
"<li onclick='showEmoji(this)'>(・ω・)颜文字</li>"+
"<li onclick='showFace(this)'><img src='/static/image/face_01.png'></li>"+
"</ul>"+
"<div class='f2'><span onclick='cancelReply(this)' style='margin-right:10px;'>取消</span><span class='ie2' onclick='send_comment(this)'>发送</span></div>"+
"</div>"+
"<div id='add_icons' class='add_icons'></div>"+
"</div>"
if ($(ele).parents().find('.write_reply').length>0) {
if ($(ele).closest('.user_reply_time').siblings('.write_reply').length>0) {
$(ele).parents().find('.write_reply').detach()
}else{
$(ele).parents().find('.write_reply').detach()
$(replyDiv).insertAfter($(ele).closest('.user_reply_time'))
}
}else{
$(replyDiv).insertAfter($(ele).closest('.user_reply_time'))
placeCaretAtEnd($(ele).closest('.reply_right').find('.in_write').get(0));
}
$('[contenteditable]').each(function() {
// 干掉IE http之类地址自动加链接
try {
document.execCommand("AutoUrlDetect", false, false);
} catch (e) {}
$(this).on('paste', function(e) {
e.preventDefault();
var text = null;
if(window.clipboardData && clipboardData.setData) {
// IE
text = window.clipboardData.getData('text');
} else {
text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');
}
if (document.body.createTextRange) {
if (document.selection) {
textRange = document.selection.createRange();
} else if (window.getSelection) {
sel = window.getSelection();
var range = sel.getRangeAt(0);
// 创建临时元素使得TextRange可以移动到正确的位置
var tempEl = document.createElement("span");
tempEl.innerHTML = "&#FEFF;";
range.deleteContents();
range.insertNode(tempEl);
textRange = document.body.createTextRange();
textRange.moveToElementText(tempEl);
tempEl.parentNode.removeChild(tempEl);
}
textRange.text = text;
textRange.collapse(false);
textRange.select();
} else {
// Chrome之类浏览器
document.execCommand("insertText", false, text);
}
});
// 去除Crtl+b/Ctrl+i/Ctrl+u等快捷键
$(this).on('keydown', function(e) {
// e.metaKey for mac
if (e.ctrlKey || e.metaKey) {
switch(e.keyCode){
case 66: //ctrl+B or ctrl+b
case 98:
case 73: //ctrl+I or ctrl+i
case 105:
case 85: //ctrl+U or ctrl+u
case 117: {
e.preventDefault();
break;
}
}
}
});
});
}
function cancelReply(ele){
$(ele).closest('.write_reply').detach()
}

16
z_postEx/unstall.php Normal file
View File

@ -0,0 +1,16 @@
<?php
/*
Xiuno BBS 4.0 插件实例TAG 插件卸载
admin/plugin-unstall-xn_tag.htm
*/
!defined('DEBUG') AND exit('Forbidden');
$tablepre = $db->tablepre;
$sql = "DROP TABLE IF EXISTS {$tablepre}post_reply;";
$r = db_exec($sql);
$r === FALSE AND message(-1, '卸载表失败');
?>