upload plugin
This commit is contained in:
		
							
								
								
									
										11
									
								
								Last_Volatility/conf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Last_Volatility/conf.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "Volatility",
 | 
				
			||||||
 | 
					    "brief": "与浏览器融为一体 - 更接近原生APP的主题, 目前仅作用于手机页面, (更新: 修复导航滚动)",
 | 
				
			||||||
 | 
					    "version": "1.2",
 | 
				
			||||||
 | 
					    "bbs_version": "4.0",
 | 
				
			||||||
 | 
					    "installed": 1,
 | 
				
			||||||
 | 
					    "enable": 1,
 | 
				
			||||||
 | 
					    "hooks_rank": [],
 | 
				
			||||||
 | 
					    "overwrites_rank": [],
 | 
				
			||||||
 | 
					    "dependencies": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								Last_Volatility/hook/footer_js_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Last_Volatility/hook/footer_js_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<script>
 | 
				
			||||||
 | 
					    // 监听滚动事件,判断滚动方向
 | 
				
			||||||
 | 
					    var Before_scollH = 0
 | 
				
			||||||
 | 
					    var header_phone = $("header.header_phone")
 | 
				
			||||||
 | 
					    var header_phonex = $("header.header_phone ul:first-child")
 | 
				
			||||||
 | 
					    $(window).on('scroll', function () {
 | 
				
			||||||
 | 
					        var After_scollH = $(window).scrollTop()
 | 
				
			||||||
 | 
					        var differH = After_scollH - Before_scollH
 | 
				
			||||||
 | 
					        if (differH == 0) { return false }
 | 
				
			||||||
 | 
					        if (differH > 0) {
 | 
				
			||||||
 | 
					            if ($(document).scrollTop() < 50) { return false }
 | 
				
			||||||
 | 
					            $('nav').removeClass('shrink');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            //if (document.documentElement.scrollHeight-document.documentElement.scrollTop-document.documentElement.clientHeight < 50) { return false }
 | 
				
			||||||
 | 
					            if ($(document).height() - $(document).scrollTop() - $(window).height() < 50) { return false }
 | 
				
			||||||
 | 
					            $('nav').addClass('shrink');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Before_scollH = After_scollH
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<script src="plugin/Last_Volatility/view/js/user.js?v11" type="text/javascript"></script>
 | 
				
			||||||
							
								
								
									
										1
									
								
								Last_Volatility/hook/forum_start.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Last_Volatility/hook/forum_start.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<?php include _include(APP_PATH.'plugin/Last_Volatility/view/htm/nav.htm');?>
 | 
				
			||||||
							
								
								
									
										3
									
								
								Last_Volatility/hook/header_link_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Last_Volatility/hook/header_link_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<meta name="apple-mobile-web-app-capable" content="yes">
 | 
				
			||||||
 | 
					<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="plugin/Last_Volatility/view/css/style.css?v10s">
 | 
				
			||||||
							
								
								
									
										1
									
								
								Last_Volatility/hook/index_start.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Last_Volatility/hook/index_start.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<?php include _include(APP_PATH.'plugin/Last_Volatility/view/htm/nav.htm');?>
 | 
				
			||||||
							
								
								
									
										3
									
								
								Last_Volatility/hook/post_list_inc_filelist_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Last_Volatility/hook/post_list_inc_filelist_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <span class="date text-grey"><?php echo $_post['create_date_fmt'];?></span>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
							
								
								
									
										11
									
								
								Last_Volatility/hook/thread_username_before.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Last_Volatility/hook/thread_username_before.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<a class="user_avatar" href='<?php echo url("user-$thread[uid]");?>' tabindex="-1">
 | 
				
			||||||
 | 
					    <img class="avatar-3 mr-3" src="<?php echo $thread['user_avatar_url'];?>">
 | 
				
			||||||
 | 
					</a>
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <div class="a">
 | 
				
			||||||
 | 
					        <span class="username">
 | 
				
			||||||
 | 
					            <a href="<?php echo url("user-$thread[uid]");?>"
 | 
				
			||||||
 | 
					                class="text-muted font-weight-bold"><?php echo $thread['username'];?></a>
 | 
				
			||||||
 | 
					        </span>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="b">
 | 
				
			||||||
							
								
								
									
										2
									
								
								Last_Volatility/hook/thread_views_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Last_Volatility/hook/thread_views_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								Last_Volatility/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Last_Volatility/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 7.5 KiB  | 
							
								
								
									
										405
									
								
								Last_Volatility/view/css/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										405
									
								
								Last_Volatility/view/css/style.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,405 @@
 | 
				
			|||||||
 | 
					.message .date {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 576px) {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					    .thread .media-body {
 | 
				
			||||||
 | 
					        min-width: 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .thread .media-body .subject {
 | 
				
			||||||
 | 
					        white-space: nowrap;
 | 
				
			||||||
 | 
					        overflow: hidden;
 | 
				
			||||||
 | 
					        text-overflow: ellipsis;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    **/
 | 
				
			||||||
 | 
					    a {
 | 
				
			||||||
 | 
					        color: #555555;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a:link {
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a:visited {
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a:hover {
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a:active {
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    body {
 | 
				
			||||||
 | 
					        padding-top: 0;
 | 
				
			||||||
 | 
					        background: #ffffff;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .navbar {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    #body>.container>.row>div {
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        border: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card {
 | 
				
			||||||
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					        min-width: 0;
 | 
				
			||||||
 | 
					        word-wrap: break-word;
 | 
				
			||||||
 | 
					        background-color: #fff;
 | 
				
			||||||
 | 
					        background-clip: border-box;
 | 
				
			||||||
 | 
					        border: 0;
 | 
				
			||||||
 | 
					        border-radius: 0.25rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-body {
 | 
				
			||||||
 | 
					        flex: 1 1 auto;
 | 
				
			||||||
 | 
					        padding: 9px 18px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message {
 | 
				
			||||||
 | 
					        padding-top: 5px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message p {
 | 
				
			||||||
 | 
					        margin: 0;
 | 
				
			||||||
 | 
					        line-height: 2;
 | 
				
			||||||
 | 
					        color: #525252;
 | 
				
			||||||
 | 
					        font-family: Helvetica Neue, NotoSansHans-Regular, AvenirNext-Regular, arial, Hiragino Sans GB, Microsoft Yahei, WenQuanYi Micro Hei, serif;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message img {
 | 
				
			||||||
 | 
					        max-width: 100%;
 | 
				
			||||||
 | 
					        height: auto !important;
 | 
				
			||||||
 | 
					        border: 0px;
 | 
				
			||||||
 | 
					        border-radius: 3px;
 | 
				
			||||||
 | 
					        margin-bottom: 9px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message textarea {
 | 
				
			||||||
 | 
					        border: none;
 | 
				
			||||||
 | 
					        border-radius: 1rem;
 | 
				
			||||||
 | 
					        background: #f8f9fa;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message textarea:focus {
 | 
				
			||||||
 | 
					        border-radius: 1rem;
 | 
				
			||||||
 | 
					        background: #f8f9fa;
 | 
				
			||||||
 | 
					        outline: none;
 | 
				
			||||||
 | 
					        border: 0;
 | 
				
			||||||
 | 
					        outline: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 主题列表 */
 | 
				
			||||||
 | 
					    .card-threadlist {
 | 
				
			||||||
 | 
					        margin-top: 8rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-threadlist .card-header {
 | 
				
			||||||
 | 
					        display: none !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-threadlist a:visited {
 | 
				
			||||||
 | 
					        color: #666666;
 | 
				
			||||||
 | 
					        text-decoration: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message .date {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					        font-size: .8rem;
 | 
				
			||||||
 | 
					        margin-top: .5rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 移除全局页脚 */
 | 
				
			||||||
 | 
					    #footer {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 附件 */
 | 
				
			||||||
 | 
					    .message .fieldset>legend {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .message .fieldset::before {
 | 
				
			||||||
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        top: -1.4rem;
 | 
				
			||||||
 | 
					        left: 0;
 | 
				
			||||||
 | 
					        content: "attach";
 | 
				
			||||||
 | 
					        padding: 0 10px;
 | 
				
			||||||
 | 
					        font-size: 1rem;
 | 
				
			||||||
 | 
					        border-radius: .5rem;
 | 
				
			||||||
 | 
					        color: #ffffff;
 | 
				
			||||||
 | 
					        background-color: #FFBA10;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* DEBUG - info */
 | 
				
			||||||
 | 
					    .fieldset {
 | 
				
			||||||
 | 
					        padding: 8px;
 | 
				
			||||||
 | 
					        margin: 24px 0;
 | 
				
			||||||
 | 
					        border: none;
 | 
				
			||||||
 | 
					        border-radius: 2px;
 | 
				
			||||||
 | 
					        background: #f8f9fa;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .fieldset>p {
 | 
				
			||||||
 | 
					        color: #525252;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .fieldset>ul {
 | 
				
			||||||
 | 
					        list-style: none;
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        margin: 0;
 | 
				
			||||||
 | 
					        color: #525252;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .debug::before {
 | 
				
			||||||
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        top: -1.4rem;
 | 
				
			||||||
 | 
					        left: 0;
 | 
				
			||||||
 | 
					        content: "DEBUG";
 | 
				
			||||||
 | 
					        padding: 0 10px;
 | 
				
			||||||
 | 
					        font-size: 1rem;
 | 
				
			||||||
 | 
					        border-radius: .5rem;
 | 
				
			||||||
 | 
					        color: #ffffff;
 | 
				
			||||||
 | 
					        background-color: #FFBA10;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-thread .media .user_avatar {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-thread .card-body .media .media-body .a {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 576px) {
 | 
				
			||||||
 | 
					    /* 主贴标题 */
 | 
				
			||||||
 | 
					    .card-thread .card-body>.media {
 | 
				
			||||||
 | 
					        margin: 1rem 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body>.media>a {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body>h4 {
 | 
				
			||||||
 | 
					        margin-bottom: 0.8rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body>div>div {
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        flex-direction: row;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body>div>div:first-child>a {
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        align-items: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body>div>div>div {
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body .a {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body .a span.username {
 | 
				
			||||||
 | 
					        font-size: 1rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body .b span.username {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-thread .card-body .media .media-body .b span.date {
 | 
				
			||||||
 | 
					        margin-left: 0 !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 主贴分割线 */
 | 
				
			||||||
 | 
					    .card-thread .card-body>hr {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .thread,
 | 
				
			||||||
 | 
					    .post {
 | 
				
			||||||
 | 
					        border-bottom: 0;
 | 
				
			||||||
 | 
					        padding: 0.8rem 0px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 移除原有时间 */
 | 
				
			||||||
 | 
					    .post .media-body .justify-content-between>div>span.date {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 分页导航 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 576px) {
 | 
				
			||||||
 | 
					    .page-item:first-child .page-link {
 | 
				
			||||||
 | 
					        margin-left: 0;
 | 
				
			||||||
 | 
					        padding-left: 1rem;
 | 
				
			||||||
 | 
					        border-top-left-radius: .5rem;
 | 
				
			||||||
 | 
					        border-bottom-left-radius: .5rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .page-item:last-child .page-link {
 | 
				
			||||||
 | 
					        padding-right: 1rem;
 | 
				
			||||||
 | 
					        border-top-right-radius: .5rem;
 | 
				
			||||||
 | 
					        border-bottom-right-radius: .5rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .page-link {
 | 
				
			||||||
 | 
					        font-size: 1.2rem;
 | 
				
			||||||
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					        padding: 0.5rem 1rem;
 | 
				
			||||||
 | 
					        margin-left: -1px;
 | 
				
			||||||
 | 
					        line-height: 1.25;
 | 
				
			||||||
 | 
					        color: #555555;
 | 
				
			||||||
 | 
					        background-color: #fff;
 | 
				
			||||||
 | 
					        border: 1px solid #dee2e6;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .page-item.active .page-link {
 | 
				
			||||||
 | 
					        z-index: 1;
 | 
				
			||||||
 | 
					        color: #fff;
 | 
				
			||||||
 | 
					        background-color: #999999;
 | 
				
			||||||
 | 
					        border-color: #999999;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Rw Nav */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nav.navbar {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 576px) {
 | 
				
			||||||
 | 
					    nav.navbar {
 | 
				
			||||||
 | 
					        position: fixed;
 | 
				
			||||||
 | 
					        right: 0;
 | 
				
			||||||
 | 
					        left: 0;
 | 
				
			||||||
 | 
					        top: 0;
 | 
				
			||||||
 | 
					        z-index: 1030;
 | 
				
			||||||
 | 
					        border-width: 0 0 1px;
 | 
				
			||||||
 | 
					        min-height: 50px;
 | 
				
			||||||
 | 
					        margin-bottom: 20px;
 | 
				
			||||||
 | 
					        border: 1px solid transparent;
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					        background-color: #ffffff;
 | 
				
			||||||
 | 
					        -webkit-transition: all 0.8s ease;
 | 
				
			||||||
 | 
					        transition: all 0.8s ease;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar.shrink {
 | 
				
			||||||
 | 
					        min-height: 120px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar ul {
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        align-items: center;
 | 
				
			||||||
 | 
					        flex-direction: row;
 | 
				
			||||||
 | 
					        list-style: none;
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        margin: 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar>.a {
 | 
				
			||||||
 | 
					        opacity: 0;
 | 
				
			||||||
 | 
					        height: 0;
 | 
				
			||||||
 | 
					        -webkit-transition: all 0.8s ease;
 | 
				
			||||||
 | 
					        transition: all 0.8s ease;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar>.b {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					        overflow-x: scroll;
 | 
				
			||||||
 | 
					        overflow-y: hidden;
 | 
				
			||||||
 | 
					        white-space: nowrap;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar>.b::-webkit-scrollbar {display:none}
 | 
				
			||||||
 | 
					    nav.navbar.shrink>.a {
 | 
				
			||||||
 | 
					        opacity: 1;
 | 
				
			||||||
 | 
					        height: 3rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar .user {}
 | 
				
			||||||
 | 
					    nav.navbar .user img {}
 | 
				
			||||||
 | 
					    nav.navbar .search {
 | 
				
			||||||
 | 
					        flex: 8;
 | 
				
			||||||
 | 
					        padding: 0 12px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar .search div {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					        min-width: 150px;
 | 
				
			||||||
 | 
					        height: 2.2rem;
 | 
				
			||||||
 | 
					        padding: 0 1rem;
 | 
				
			||||||
 | 
					        border-radius: 1.1rem;
 | 
				
			||||||
 | 
					        background: #eeeeee;
 | 
				
			||||||
 | 
					        border: 0;
 | 
				
			||||||
 | 
					        outline: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /** 暂时放弃输入框
 | 
				
			||||||
 | 
					    nav.navbar .search input {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					        min-width: 150px;
 | 
				
			||||||
 | 
					        height: 2.2rem;
 | 
				
			||||||
 | 
					        padding: 0 1rem;
 | 
				
			||||||
 | 
					        border-radius: 1.1rem;
 | 
				
			||||||
 | 
					        background: #eeeeee;
 | 
				
			||||||
 | 
					        border: 0;
 | 
				
			||||||
 | 
					        outline: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     ::-webkit-input-placeholder {
 | 
				
			||||||
 | 
					        color: #ddd;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     :-moz-placeholder {
 | 
				
			||||||
 | 
					        color: #ddd;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     ::-moz-placeholder {
 | 
				
			||||||
 | 
					        color: #ddd;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					     :-ms-input-placeholder {
 | 
				
			||||||
 | 
					        color: #ddd;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    nav.navbar .add {
 | 
				
			||||||
 | 
					        flex: 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar .add a {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					        height: 2.2rem;
 | 
				
			||||||
 | 
					        width: 2.2rem;
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					        border-radius: 1.1rem;
 | 
				
			||||||
 | 
					        line-height: 2.2rem;
 | 
				
			||||||
 | 
					        color: #ccc;
 | 
				
			||||||
 | 
					        background: #eeeeee;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    nav.navbar .add .icon-edit:before {
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					        color: #555555;
 | 
				
			||||||
 | 
					        line-height: 2.2rem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* 返回按钮 */
 | 
				
			||||||
 | 
					    .xn-back {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					        width: 60%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USER */
 | 
				
			||||||
 | 
					#signin {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    position: fixed;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    z-index: 1031;
 | 
				
			||||||
 | 
					    background: rgba(255, 255, 255, .8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*设置移动效果*/
 | 
				
			||||||
 | 
					.card-threadlist .card-body {
 | 
				
			||||||
 | 
					    padding-left: 0;
 | 
				
			||||||
 | 
					    padding-right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.thread {
 | 
				
			||||||
 | 
					    padding-left: 18px;
 | 
				
			||||||
 | 
					    padding-right: 18px;
 | 
				
			||||||
 | 
					    transition:all 0.2s ;
 | 
				
			||||||
 | 
					    -webkit-transition:all 0.2s ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.moveleft{
 | 
				
			||||||
 | 
					    transform: translateX(-20px);
 | 
				
			||||||
 | 
					    -webkit-transform: translateX(-20px);
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    transition:all 0.2s ;
 | 
				
			||||||
 | 
					    -webkit-transition:all 0.2s ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.moveleft::after {
 | 
				
			||||||
 | 
					    content: " ";
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    right: -20px;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    background: #FFBA10;
 | 
				
			||||||
 | 
					    width: 20px;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    margin-top: -0.8rem;
 | 
				
			||||||
 | 
					    transition:all 0.2s ;
 | 
				
			||||||
 | 
					    -webkit-transition:all 0.2s ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								Last_Volatility/view/htm/nav.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								Last_Volatility/view/htm/nav.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					<nav class="navbar shrink" role="navigation">
 | 
				
			||||||
 | 
					    <ul class="a">
 | 
				
			||||||
 | 
					        <li class="user" id="user">
 | 
				
			||||||
 | 
					            <?php if(empty($uid)) { ?>
 | 
				
			||||||
 | 
					            <a href="<?php echo url('user-login');?>"><img src="<?php echo $conf['logo_mobile_url'];?>"
 | 
				
			||||||
 | 
					                    class="logo-3"></a>
 | 
				
			||||||
 | 
					            <?php } else { ?>
 | 
				
			||||||
 | 
					            <a href="<?php echo url('my');?>"><img class="avatar-3" src="<?php echo $user['avatar_url'];?>"></a>
 | 
				
			||||||
 | 
					            <?php } ?>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					        <li class="search">
 | 
				
			||||||
 | 
					            <a href="?search.htm">
 | 
				
			||||||
 | 
					                <div></div>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					        <li class="add">
 | 
				
			||||||
 | 
					            <?php if(empty($uid)) { ?>
 | 
				
			||||||
 | 
					            <a class="navbar-brand hidden-lg" href="<?php echo url('user-login');?>" aria-label="<?php echo lang('login');?>"><i class="icon-user icon"></i></a>
 | 
				
			||||||
 | 
					            <?php } else { ?>
 | 
				
			||||||
 | 
					            <a class="navbar-brand hidden-lg" href='<?php echo url("thread-create-$fid");?>' aria-label="<?php echo lang('thread_create');?>"><i class="icon-plus icon"></i></a>
 | 
				
			||||||
 | 
					            <?php } ?>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <div class="b">
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    <ul class="b">
 | 
				
			||||||
 | 
					        <!--{hook header_nav_forum_start.htm}-->
 | 
				
			||||||
 | 
					        <li class="nav-item home" fid="0" data-active="fid-0"><a class="nav-link" href="."><i
 | 
				
			||||||
 | 
					                    class="icon-home d-md-none"></i> <?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'];?>" data-active="fid-<?php echo $_forum['fid'];?>">
 | 
				
			||||||
 | 
					            <a class="nav-link" href='<?php echo url("forum-$_forum[fid]");?>'><i class="icon-circle-o d-md-none"></i>
 | 
				
			||||||
 | 
					                <?php echo $_forum['name'];?></a>
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					        <!--{hook header_nav_forumlist_loop_end.htm}-->
 | 
				
			||||||
 | 
					        <?php } ?>
 | 
				
			||||||
 | 
					        <!--{hook header_nav_forum_end.htm}-->
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
							
								
								
									
										1
									
								
								Last_Volatility/view/js/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Last_Volatility/view/js/main.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										167
									
								
								Last_Volatility/view/js/user.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								Last_Volatility/view/js/user.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
				
			|||||||
 | 
					var storage = {
 | 
				
			||||||
 | 
					    // 检查可用的模式
 | 
				
			||||||
 | 
					    test: function () {
 | 
				
			||||||
 | 
					        // 本地存储是否可用
 | 
				
			||||||
 | 
					        var test = 'test';
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            localStorage.setItem(test, test);
 | 
				
			||||||
 | 
					            localStorage.removeItem(test);
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        } catch (e) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    setItem: function (k, v) {
 | 
				
			||||||
 | 
					        localStorage.setItem(k, v)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // cookies 是否可用
 | 
				
			||||||
 | 
					    // 都不可用, 直接提示无法登陆
 | 
				
			||||||
 | 
					    // 要存储的数据一般有 身份信息, 状态信息"x, 设置信息? 统计信息
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					var cookie = {
 | 
				
			||||||
 | 
					    get: function (cname) {
 | 
				
			||||||
 | 
					        var name = cname + "="
 | 
				
			||||||
 | 
					        var ca = document.cookie.split(';')
 | 
				
			||||||
 | 
					        for (var i = 0; i < ca.length; i++) {
 | 
				
			||||||
 | 
					            var c = ca[i].trim()
 | 
				
			||||||
 | 
					            if (c.indexOf(name) == 0) return c.substring(name.length, c.length)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    sid: function () {
 | 
				
			||||||
 | 
					        return this.get("bbs_sid")
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    token: function () {
 | 
				
			||||||
 | 
					        return this.get("bbs_token")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					var user = {
 | 
				
			||||||
 | 
					    signin: function () {
 | 
				
			||||||
 | 
					        var div = document.createElement("div")
 | 
				
			||||||
 | 
					        div.id = "signin"
 | 
				
			||||||
 | 
					        div.innerHTML = `<ul>
 | 
				
			||||||
 | 
					            <li>
 | 
				
			||||||
 | 
					                <i class="icon icon-user icon-fw"></i>
 | 
				
			||||||
 | 
					                <input type="text" placeholder="Email / 用户名" id="email" name="email">
 | 
				
			||||||
 | 
					            </li>
 | 
				
			||||||
 | 
					            <li>
 | 
				
			||||||
 | 
					                <i class="icon icon-lock icon-fw"></i>
 | 
				
			||||||
 | 
					                <input type="password" placeholder="密码" id="password" name="password">
 | 
				
			||||||
 | 
					            </li>
 | 
				
			||||||
 | 
					            <li>
 | 
				
			||||||
 | 
					                <button type="button" >登录</button>
 | 
				
			||||||
 | 
					                <a href="?user-create.htm" class="text-muted"><small>用户注册</small></a>
 | 
				
			||||||
 | 
					            </li>
 | 
				
			||||||
 | 
					        </ul>`
 | 
				
			||||||
 | 
					        document.body.appendChild(div)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 为登录按钮挂载一个事件监听, 如果已经登录则这个挂载是不必要的
 | 
				
			||||||
 | 
					        // 为窗口背景挂载一个关闭按钮区域
 | 
				
			||||||
 | 
					        // 当登录成功, 移除登录窗口时, 事件监听是否还存在?
 | 
				
			||||||
 | 
					        return div.onclick = function () {
 | 
				
			||||||
 | 
					            if (div.style.display == "none") {
 | 
				
			||||||
 | 
					                div.style.display = ""
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                div.style.display = "none"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    signout: function () {
 | 
				
			||||||
 | 
					        // 发送退出数据 转变模式到游客
 | 
				
			||||||
 | 
					        // 清空本地存储的所有数据, 通常退出的意义
 | 
				
			||||||
 | 
					        // 当退出登录时, 重新挂载登录窗口, 也可以始终都不移除它?
 | 
				
			||||||
 | 
					        // alert("aoaoaoaoaoao")
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    regedit: function () {
 | 
				
			||||||
 | 
					        // 游客可以注册, 但通常作为低频数据结构, 它不应放入js
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    id: "int",
 | 
				
			||||||
 | 
					    token: "string",
 | 
				
			||||||
 | 
					    name: "string",
 | 
				
			||||||
 | 
					    avact: "string",
 | 
				
			||||||
 | 
					    online: false,
 | 
				
			||||||
 | 
					    init: function () {
 | 
				
			||||||
 | 
					        // 基本数据初始化
 | 
				
			||||||
 | 
					        this.online = cookie.token == "" ? false : true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 基本状态初始化
 | 
				
			||||||
 | 
					        this.online ? this.signout() : this.signin()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					user.init()
 | 
				
			||||||
 | 
					//alert("cacxscasca")
 | 
				
			||||||
 | 
					// 所以只在判断未登录状态下才挂载这个面板
 | 
				
			||||||
 | 
					// 为页面添加默认隐藏的登录窗口
 | 
				
			||||||
 | 
					// signin()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var admin = {
 | 
				
			||||||
 | 
					    thread: {
 | 
				
			||||||
 | 
					        list: [],
 | 
				
			||||||
 | 
					        delete: function(){},
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 侧滑选中
 | 
				
			||||||
 | 
					window.onload = function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //侧滑显示删除按钮
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var open = null;//open初始化,判断是否是已展开元素
 | 
				
			||||||
 | 
					    var list = document.getElementsByClassName("thread");//list获取所有的待展开框
 | 
				
			||||||
 | 
					    for (var i = 0; i < list.length; i++) {
 | 
				
			||||||
 | 
					        var x, y, X, Y, moveX, moveY;
 | 
				
			||||||
 | 
					        list[i].addEventListener('touchstart', function (e) {
 | 
				
			||||||
 | 
					            /*获取最初的触摸位置*/
 | 
				
			||||||
 | 
					            x = e.changedTouches[0].pageX;
 | 
				
			||||||
 | 
					            y = e.changedTouches[0].pageY;
 | 
				
			||||||
 | 
					            moveX = true;
 | 
				
			||||||
 | 
					            moveY = true;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        list[i].addEventListener('touchmove', function (e) {
 | 
				
			||||||
 | 
					            X = e.changedTouches[0].pageX;
 | 
				
			||||||
 | 
					            Y = e.changedTouches[0].pageY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //左右滑动
 | 
				
			||||||
 | 
					            if (moveX && Math.abs(X - x) - Math.abs(Y - y) > 0) {
 | 
				
			||||||
 | 
					                e.stopPropagation();//阻止冒泡事件
 | 
				
			||||||
 | 
					                //右滑收起删除按钮
 | 
				
			||||||
 | 
					                if (X - x > 10) {
 | 
				
			||||||
 | 
					                    e.preventDefault();
 | 
				
			||||||
 | 
					                    this.classList.remove("moveleft");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                //左滑显示删除按钮
 | 
				
			||||||
 | 
					                if (x - X > 10) {
 | 
				
			||||||
 | 
					                    e.preventDefault();
 | 
				
			||||||
 | 
					                    this.classList.add("moveleft");
 | 
				
			||||||
 | 
					                    open = this;//存入展开的li元素
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                //moveY = false;//左右滑动时不执行上下滑动时的事件
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //上下滑动
 | 
				
			||||||
 | 
					            if (moveY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
 | 
				
			||||||
 | 
					                moveX = false;//上下滑动时不执行左右滑动时的事件
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        list[i].addEventListener('click', function (e) {
 | 
				
			||||||
 | 
					            //在已展开的元素中执行操作
 | 
				
			||||||
 | 
					            if (open) {
 | 
				
			||||||
 | 
					                var obj = e.target;
 | 
				
			||||||
 | 
					                var objli = e.target.closest(".list-li");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //点击li元素里不是删除按钮的部分,li元素收起
 | 
				
			||||||
 | 
					                if (obj.className != "btn") {
 | 
				
			||||||
 | 
					                    open.classList.remove("moveleft");
 | 
				
			||||||
 | 
					                } else if (obj.className == "btn") {//点击删除按钮执行删除
 | 
				
			||||||
 | 
					                    var objp = obj.parentNode;
 | 
				
			||||||
 | 
					                    var objpp = obj.parentNode.parentNode;
 | 
				
			||||||
 | 
					                    objpp.removeChild(objp);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										81
									
								
								git_tags/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								git_tags/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					### 前言
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果大家以及感兴趣的开发者朋友,希望拥有一个传统的帖子标签插件,请支持该项目,请前来完善协作该插件,插件挂载在码云,可以多人协作代码,以便更好的完善。该插件是否完善的更好,取决于大家协作的效果,本人只是开个门。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 插件简介
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					插件名:帖子标签
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					插件ID:git_tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					邀请广大的xiuno bbs开发者朋友,请前来协助完善这款标签插件。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这款标签插件,可以给标签任意加标签,传统方式纯用途的帖子标签插件。可以结合官方axiuno的标签插件共同使用,没有冲突,可以正常使用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 最新版本
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					版本号:1.0.0 beta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					说明:版本未经过多测试,如有问题请反馈!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					下载:https://gitee.com/soyoumi/git_tags/tree/History/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 申请加入协作
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如要加入申请协作该项目,请在此进行申请加入项目协作。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					http://bbs.xiuno.com/thread-21013.htm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					加入QQ交流群 625244937,[点击加入](https://jq.qq.com/?_wv=1027&k=5JYjW6A),随时沟通讨论完善项目.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 插件协作历史
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年5月24日
 | 
				
			||||||
 | 
					>修复tag主题列表页翻页功能
 | 
				
			||||||
 | 
					>修正数据表索引
 | 
				
			||||||
 | 
					>修正删除主题时删标签
 | 
				
			||||||
 | 
					>精简字符过滤
 | 
				
			||||||
 | 
					>允许输入空格
 | 
				
			||||||
 | 
					>标签云加缓存
 | 
				
			||||||
 | 
					>前端自动聚焦
 | 
				
			||||||
 | 
					>后端样式调整
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年5月3日
 | 
				
			||||||
 | 
					>暂不启用关联主题,等待方案后续完成<br>
 | 
				
			||||||
 | 
					>整理推送1.0测试版,原因:目前项目整体代码,并不适合发布正式版,仅适合测试使用
 | 
				
			||||||
 | 
					<br><br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年4月16日
 | 
				
			||||||
 | 
					>√标签页已经完成<br>
 | 
				
			||||||
 | 
					>√完善标签页页面名信息,暂定方式<br>
 | 
				
			||||||
 | 
					>暂时丢弃主题列表后面标签推<br>
 | 
				
			||||||
 | 
					>待完成<br>
 | 
				
			||||||
 | 
					>...帖子内容页下方,相关主题推荐,完成后预备发布版本<br>
 | 
				
			||||||
 | 
					>后续考虑<br>
 | 
				
			||||||
 | 
					>...前端重写,放置发布版本之后再做考虑 <br>
 | 
				
			||||||
 | 
					<br><br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年3月18日
 | 
				
			||||||
 | 
					>【予感开发者】更新 conf.json、优化、修正<br>
 | 
				
			||||||
 | 
					>【动态】第3位协作者加入<br>
 | 
				
			||||||
 | 
					>【商量讨论】经过讨论,确定不采纳新的查询方式,虽然新查询方法更高效,但查询有问题,以及不好处理,继续采用原方法<br>
 | 
				
			||||||
 | 
					>【soyoumi开发者】增加2个空hook,以及备注hook作用,以便其它协作者即将开始的工作,更新插件信息,设计新的插件黑色图标
 | 
				
			||||||
 | 
					<br><br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年3月17日
 | 
				
			||||||
 | 
					> 迎来第二位协作者<br>
 | 
				
			||||||
 | 
					>【予感开发者】增加 tag单页方法,增加优化样式逻辑<br>
 | 
				
			||||||
 | 
					>【soyoumi开发者】变更插件标识名,解决与xn_tag插件安装时只能选其一的问题,标识名全变更为:git_tags,git意为git上多人协作版插件。
 | 
				
			||||||
 | 
					<br><br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2018年3月16日
 | 
				
			||||||
 | 
					>【soyoumi开发者】创建项目,上传原标签插件项目文件<br>
 | 
				
			||||||
 | 
					>【soyoumi开发者】简单修复已无法使用的标签插件,修复为可用,但存在问题,问题是标签列表,有错位问题,未修复!
 | 
				
			||||||
							
								
								
									
										11
									
								
								git_tags/conf.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								git_tags/conf.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "标签",
 | 
				
			||||||
 | 
					    "brief": "主题任意加标签, 通过关联调取近相关的主题用于推送,<br><a style='font-size:12px;' href='https://gitee.com/soyoumi/git_tags' target='_blank'>协作完善<a>",
 | 
				
			||||||
 | 
					    "version": "1.0.0",
 | 
				
			||||||
 | 
					    "bbs_version": "4.3",
 | 
				
			||||||
 | 
					    "installed": 1,
 | 
				
			||||||
 | 
					    "enable": 1,
 | 
				
			||||||
 | 
					    "hooks_rank": [],
 | 
				
			||||||
 | 
					    "overwrites_rank": [],
 | 
				
			||||||
 | 
					    "dependencies": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								git_tags/hook/bk/post_subject_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								git_tags/hook/bk/post_subject_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
						$taglist = '';
 | 
				
			||||||
 | 
						$page = '1';
 | 
				
			||||||
 | 
						$pagesize = '12';
 | 
				
			||||||
 | 
						$data = db_find('git_tags_thread', array('tid'=>$tid), array(), $page, $pagesize);
 | 
				
			||||||
 | 
						if($data){
 | 
				
			||||||
 | 
							$tagid = arrlist_values($data, 'tagid');
 | 
				
			||||||
 | 
							$tag = db_find('git_tags',array('tagid'=>$tagid), array(), $page, $pagesize);
 | 
				
			||||||
 | 
							foreach($tag as $k){ $taglist .= $k['name'].' '; }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="input-group mb-3">
 | 
				
			||||||
 | 
						<div class="input-group-prepend"><span class="input-group-text" id="basic-addon1"><i class="icon-tags"></i></span></div>
 | 
				
			||||||
 | 
						<input type="text" class="form-control" placeholder="标签" aria-label="标签" aria-describedby="basic-addon1" name="tag_post" value="<?php echo $taglist;?>">
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
							
								
								
									
										41
									
								
								git_tags/hook/bk/post_update_get_post.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								git_tags/hook/bk/post_update_get_post.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					//获取填写框内容,进行字符替换处理
 | 
				
			||||||
 | 
					$from_tag=param('tag_post'); //取到填写框的值
 | 
				
			||||||
 | 
					$from_tag=str_replace(" ",",",$from_tag);
 | 
				
			||||||
 | 
					$regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\(|\)|\+|\{|\}|\<|\>|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\s+/";
 | 
				
			||||||
 | 
					$from_tag=preg_replace($regex,"",$from_tag);
 | 
				
			||||||
 | 
					$from_tag=str_replace(",",",",str_replace(" ",",",$from_tag));
 | 
				
			||||||
 | 
					$from_tag=str_replace(",,",",",str_replace(",,,",",",$from_tag));
 | 
				
			||||||
 | 
					$tag_arry=array_unique(explode(',',$from_tag)); //最终得到填写框的内容数组
 | 
				
			||||||
 | 
					$tag_arry=array_merge($tag_arry);
 | 
				
			||||||
 | 
					$from_tag=implode(",",$tag_arry); //将填写框内容分割为逗号隔开的字符串
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if($from_tag==true){
 | 
				
			||||||
 | 
						//删除淀余的标签记录
 | 
				
			||||||
 | 
						$aa = db_sql_find("SELECT * FROM bbs_git_tags_thread where tid='$tid'");
 | 
				
			||||||
 | 
						if($aa !== false || count($aa)>0) {
 | 
				
			||||||
 | 
							$db_tagid_arry = array_map('array_shift',$aa); 
 | 
				
			||||||
 | 
							db_delete('git_tags_thread', array('tid'=>$tid));
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for($y=0;$y<count($db_tagid_arry);$y++){
 | 
				
			||||||
 | 
								$tagid=$db_tagid_arry[$y];
 | 
				
			||||||
 | 
								$if_g = db_find_one('git_tags_thread', array('tagid'=>$tagid));
 | 
				
			||||||
 | 
								if($if_g === FALSE){
 | 
				
			||||||
 | 
								 db_delete('git_tags', array('tagid'=>$tagid));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						//将填写框重新编辑的标签,更新进数据库
 | 
				
			||||||
 | 
					    db_delete('git_tags_thread', array('tid'=>$tid));
 | 
				
			||||||
 | 
					    for($i=0;$i<count($tag_arry) & count($tag_arry)!==0;$i++){
 | 
				
			||||||
 | 
							$arrlist = db_find_one('git_tags', array('name'=>$tag_arry[$i]));
 | 
				
			||||||
 | 
							if($arrlist==FALSE){
 | 
				
			||||||
 | 
								$tagid = db_insert('git_tags',array('tagid'=>null,'name'=>$tag_arry[$i]));
 | 
				
			||||||
 | 
								db_insert('git_tags_thread',array('tagid'=>$tagid,'tid'=>$tid));
 | 
				
			||||||
 | 
							}else{
 | 
				
			||||||
 | 
								db_insert('git_tags_thread',array('tagid'=>$arrlist['tagid'],'tid'=>$tid));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								git_tags/hook/bk/thread_create_thread_end.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								git_tags/hook/bk/thread_create_thread_end.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					$from_tag=param('tag_post');
 | 
				
			||||||
 | 
					$from_tag=str_replace(" ",",",$from_tag);
 | 
				
			||||||
 | 
					$regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\(|\)|\+|\{|\}|\<|\>|\[|\]|\.|\/|\;|\'|\`|\=|\\\|\s+/";
 | 
				
			||||||
 | 
					$from_tag=preg_replace($regex,"",$from_tag);
 | 
				
			||||||
 | 
					$from_tag=str_replace(" ",",",str_replace(",",",",$from_tag));
 | 
				
			||||||
 | 
					$from_tag=str_replace(",,",",",str_replace(",,,",",",$from_tag));
 | 
				
			||||||
 | 
					$tag_arry=array_unique(explode(',',$from_tag));
 | 
				
			||||||
 | 
					$from_tag=implode(",",$tag_arry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if($from_tag==true){
 | 
				
			||||||
 | 
					    for($i=0;$i<count($tag_arry);$i++){
 | 
				
			||||||
 | 
					    	$arrlist = db_find_one('git_tags', array('name'=>$tag_arry[$i]));
 | 
				
			||||||
 | 
					    	if($arrlist == FALSE){
 | 
				
			||||||
 | 
					        	$tagid = db_insert('git_tags',array('tagid'=>null,'name'=>$tag_arry[$i]));
 | 
				
			||||||
 | 
					        	db_insert('git_tags_thread',array('tagid'=>$tagid,'tid'=>$tid));
 | 
				
			||||||
 | 
					    	}else{
 | 
				
			||||||
 | 
					    		db_insert('git_tags_thread',array('tagid'=>$arrlist['tagid'],'tid'=>$tid));
 | 
				
			||||||
 | 
					    	}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								git_tags/hook/forum_mod_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								git_tags/hook/forum_mod_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<!-- 列表右侧 -->
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_cloud.htm');?>
 | 
				
			||||||
							
								
								
									
										2
									
								
								git_tags/hook/header_link_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								git_tags/hook/header_link_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<!-- TAG Style -->
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="plugin/git_tags/view/css/tag.css?1.0">
 | 
				
			||||||
							
								
								
									
										2
									
								
								git_tags/hook/index_route_case_end.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								git_tags/hook/index_route_case_end.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<?php exit;
 | 
				
			||||||
 | 
					case 'tag': include APP_PATH.'plugin/git_tags/route/tag.php'; break;
 | 
				
			||||||
							
								
								
									
										2
									
								
								git_tags/hook/index_site_brief_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								git_tags/hook/index_site_brief_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<!-- 主页右侧 -->
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_cloud.htm');?>
 | 
				
			||||||
							
								
								
									
										2
									
								
								git_tags/hook/model_inc_file.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								git_tags/hook/model_inc_file.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<?php exit;
 | 
				
			||||||
 | 
					APP_PATH.'plugin/git_tags/model/tag.func.php',
 | 
				
			||||||
							
								
								
									
										3
									
								
								git_tags/hook/model_thread_delete_end.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								git_tags/hook/model_thread_delete_end.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<?php exit;
 | 
				
			||||||
 | 
					// 删除主题时删除标签
 | 
				
			||||||
 | 
					tag_del($tid, 'all');
 | 
				
			||||||
							
								
								
									
										15
									
								
								git_tags/hook/post_delete_end.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								git_tags/hook/post_delete_end.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					<?php exit;
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					if($isfirst) {
 | 
				
			||||||
 | 
						$page = '1';
 | 
				
			||||||
 | 
						$pagesize = '12';
 | 
				
			||||||
 | 
						$data = db_find('git_tags_thread', array('tid'=>$tid), array(), $page, $pagesize);
 | 
				
			||||||
 | 
						if($data){
 | 
				
			||||||
 | 
							// 删关联 降计数 ( 权限主题已验证 )
 | 
				
			||||||
 | 
							$arr = arrlist_values($data, 'tagid');
 | 
				
			||||||
 | 
							db_delete('git_tags_thread', array('tid'=>$tid));
 | 
				
			||||||
 | 
							db_update('git_tags', array('tagid'=>$arr), array('link-'=>1));
 | 
				
			||||||
 | 
							db_delete('git_tags', array('tagid'=>$arr,'link'=>0));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
							
								
								
									
										7
									
								
								git_tags/hook/thread_filelist_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								git_tags/hook/thread_filelist_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<!-- TAG -->
 | 
				
			||||||
 | 
					<?php $list = tag_taglist($tid); ?>
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_tag.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- 相关推荐 ( 或考虑取消 ) -->
 | 
				
			||||||
 | 
					<?php //$lists = tag_push($tagid); ?>
 | 
				
			||||||
 | 
					<?php //include _include(APP_PATH.'plugin/git_tags/view/htm/inc_push.htm');?>
 | 
				
			||||||
							
								
								
									
										4
									
								
								git_tags/hook/thread_js.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								git_tags/hook/thread_js.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					<?php if (!empty($uid)){ $kv = kv_cache_get('git_tags'); if( $kv['lock']==1 || $gid==1 || $uid==$thread['uid'] ){ ?>
 | 
				
			||||||
 | 
					<!-- 增删标签 ( 若是全局锁, 则只允许作者编辑, 作者锁同样放通权限 ) -->
 | 
				
			||||||
 | 
					<script src="plugin/git_tags/view/js/tag.js?v2"></script>
 | 
				
			||||||
 | 
					<?php }} ?>
 | 
				
			||||||
							
								
								
									
										6
									
								
								git_tags/hook/thread_user_after.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								git_tags/hook/thread_user_after.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- 右侧栏 标签云 -->
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_cloud.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- 右侧栏 作者主题 -->
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_other.htm');?>
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								git_tags/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								git_tags/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 4.9 KiB  | 
							
								
								
									
										39
									
								
								git_tags/install.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								git_tags/install.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/* new table - git_tags
 | 
				
			||||||
 | 
					 * new table - git_tags_thread
 | 
				
			||||||
 | 
					 * new cache - git_tags
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!defined('DEBUG') AND exit('Forbidden');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$tablepre = $db->tablepre;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$sql="CREATE TABLE IF NOT EXISTS {$tablepre}git_tags (
 | 
				
			||||||
 | 
					  tagid int(11) unsigned NOT NULL AUTO_INCREMENT,            # 标签id
 | 
				
			||||||
 | 
					  name char(32) NOT NULL DEFAULT '',                         # 标签名
 | 
				
			||||||
 | 
					  link int(11) NOT NULL DEFAULT '0',                         # 关联数量
 | 
				
			||||||
 | 
					  PRIMARY KEY (tagid),
 | 
				
			||||||
 | 
					  KEY (name)
 | 
				
			||||||
 | 
					) ENGINE=MyISAM  DEFAULT CHARSET=utf8";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					db_exec($sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$sql="CREATE TABLE IF NOT EXISTS {$tablepre}git_tags_thread (
 | 
				
			||||||
 | 
					  tagid int(11) unsigned NOT NULL DEFAULT '0',
 | 
				
			||||||
 | 
					  tid int(11) unsigned NOT NULL DEFAULT '0',
 | 
				
			||||||
 | 
					  PRIMARY KEY (tagid,tid),
 | 
				
			||||||
 | 
					  KEY (tid)
 | 
				
			||||||
 | 
					) ENGINE=MyISAM  DEFAULT CHARSET=utf8;";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					db_exec($sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$kv = kv_cache_get('git_tags');
 | 
				
			||||||
 | 
					if(!$kv) {
 | 
				
			||||||
 | 
						$kv = array('lock'=>'1', 'stop'=>'商女不知亡国恨 隔江犹唱双截棍', 'limit'=>'24');
 | 
				
			||||||
 | 
						kv_cache_set('git_tags', $kv);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										156
									
								
								git_tags/model/tag.func.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								git_tags/model/tag.func.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * User: last
 | 
				
			||||||
 | 
					 * Date: 2018/5/17
 | 
				
			||||||
 | 
					 * Time: 上午4:42
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 标签关联的主题 (先读出相应页数的主题tid, 用tid读出对应数量的主题, 故主题页码只会是1)
 | 
				
			||||||
 | 
					function tag_list($tagid, $page, $pagesize,$order){
 | 
				
			||||||
 | 
						$r = db_find('git_tags_thread', array('tagid'=>$tagid),$order,$page,$pagesize);
 | 
				
			||||||
 | 
						$r = arrlist_values($r,'tid');
 | 
				
			||||||
 | 
						$r = db_find('thread', array('tid'=>$r),$order,1,$pagesize);
 | 
				
			||||||
 | 
						return $r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 标签的完整信息
 | 
				
			||||||
 | 
					function tag_info($tagid){
 | 
				
			||||||
 | 
						$r = db_find_one('git_tags', array('tagid'=>$tagid));
 | 
				
			||||||
 | 
						return $r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 主题对应的标签
 | 
				
			||||||
 | 
					function tag_taglist($tid){
 | 
				
			||||||
 | 
						$list = array();
 | 
				
			||||||
 | 
						$r = db_find('git_tags_thread', array('tid'=>$tid), array(), 1, 12);
 | 
				
			||||||
 | 
						if($r){
 | 
				
			||||||
 | 
							$r = arrlist_values($r, 'tagid');
 | 
				
			||||||
 | 
							$list = db_find('git_tags', array('tagid'=>$r), array(), 1, 12);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $list;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function tag_push($tagid){
 | 
				
			||||||
 | 
						//关联推荐 (取得所有关联的主题, 可能数量庞大, 暂限制1k) (暂弃用)
 | 
				
			||||||
 | 
						$tlist = db_find('git_tags_thread', array('tagid'=>$tagid), array('tid'=>-1), 1 , 1000);
 | 
				
			||||||
 | 
						$tlist = arrlist_values($tlist, 'tid');                      // 取出tid, 可能数量庞大
 | 
				
			||||||
 | 
						$tlist = array_unique($tlist);                               // 移除重复
 | 
				
			||||||
 | 
						$tlist = array_diff($tlist,array('tid'=>$tid));              // 移除自身id
 | 
				
			||||||
 | 
						shuffle($tlist);                                             // 打乱排序(需要保障多标签时不只取前面的)
 | 
				
			||||||
 | 
						$tlist = array_slice($tlist,0,4);                            // 取前 4 个,(可能不足4个)
 | 
				
			||||||
 | 
						if($tlist){ $lists = db_find('thread', array('tid'=>$tlist)); }
 | 
				
			||||||
 | 
						return $list;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// add
 | 
				
			||||||
 | 
					function tag_add($tid,$tag){
 | 
				
			||||||
 | 
						$r = db_find_one('git_tags',array('name'=>$tag));
 | 
				
			||||||
 | 
						if ($r == FALSE){
 | 
				
			||||||
 | 
							$r = db_insert('git_tags',array('name'=>$tag, 'link'=>1));
 | 
				
			||||||
 | 
							db_insert('git_tags_thread',array('tid'=>$tid, 'tagid'=>$r));
 | 
				
			||||||
 | 
							// 记录到历史
 | 
				
			||||||
 | 
						}else{
 | 
				
			||||||
 | 
							$r = $r['tagid'];
 | 
				
			||||||
 | 
							db_insert('git_tags_thread',array('tid'=>$tid, 'tagid'=>$r));
 | 
				
			||||||
 | 
							db_update('git_tags',array('tagid'=>$r),array('link+'=>1));
 | 
				
			||||||
 | 
							// 记录到历史
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $r;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// del (输入的参数不能为空)
 | 
				
			||||||
 | 
					function tag_del($tid,$tagid){
 | 
				
			||||||
 | 
						if($tagid == 'all'){
 | 
				
			||||||
 | 
							$r = db_find('git_tags_thread', array('tid'=>$tid), array(), 1, 12);
 | 
				
			||||||
 | 
							if($r){
 | 
				
			||||||
 | 
								// 删关联 降计数 (批量)
 | 
				
			||||||
 | 
								$arr = arrlist_values($r, 'tagid');
 | 
				
			||||||
 | 
								db_delete('git_tags_thread', array('tid'=>$tid));
 | 
				
			||||||
 | 
								db_update('git_tags', array('tagid'=>$arr), array('link-'=>1));
 | 
				
			||||||
 | 
								db_delete('git_tags', array('tagid'=>$arr, 'link'=>0));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}else{
 | 
				
			||||||
 | 
							// 删关联 降计数 (单条)
 | 
				
			||||||
 | 
							db_delete('git_tags_thread', array('tid'=>$tid,'tagid'=>$tagid));
 | 
				
			||||||
 | 
							db_update('git_tags', array('tagid'=>$tagid), array('link-'=>1));
 | 
				
			||||||
 | 
							db_delete('git_tags', array('tagid'=>$tagid, 'link'=>0));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 状态判断
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function tag_max($tid){
 | 
				
			||||||
 | 
					        $r = db_count('git_tags_thread', array('tid'=>$tid));
 | 
				
			||||||
 | 
					        if ($r > 11) return true;
 | 
				
			||||||
 | 
					        return  FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function tag_lock($uid,$tid,$gid,$lock) {
 | 
				
			||||||
 | 
						/* 若是管理员或作者
 | 
				
			||||||
 | 
						 * 若是 TAG 全局未锁且作者未锁
 | 
				
			||||||
 | 
						 * $t 是作者锁, 暂未实装
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						$t = '1';
 | 
				
			||||||
 | 
						$k = db_find_one('thread', array('tid'=>$tid, 'uid'=>$uid));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ($k != FALSE  || $gid == 1) { return FALSE; }
 | 
				
			||||||
 | 
						if ($lock==1 && $t==1){ return FALSE; }
 | 
				
			||||||
 | 
						return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function tag_law($tag,$kv){
 | 
				
			||||||
 | 
						/* 验证长度, 小于2和大于设定的最大字符数禁止
 | 
				
			||||||
 | 
						 * 检查危险字符 (首尾空格前端过滤, 此处发现即非法)
 | 
				
			||||||
 | 
						 * 移除两侧空格, 转化所有符号为空格, 不相等则非法
 | 
				
			||||||
 | 
						 * 检查禁用词汇 (回避词 而非脏词过滤, 不宜设置过多)
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if( mb_strlen($tag)<2 || mb_strlen($tag)>$kv['limit']) return true;
 | 
				
			||||||
 | 
						$r = preg_replace("/[[:punct:]\s]/",' ',trim($tag));
 | 
				
			||||||
 | 
						if ($tag !== $r) return true;
 | 
				
			||||||
 | 
						$r = array_unique(explode(' ',$kv['stop']));
 | 
				
			||||||
 | 
						foreach ($r as $v) { if(strpos($tag,$v)) return true; }
 | 
				
			||||||
 | 
						return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function tag_rep($tag,$tid){
 | 
				
			||||||
 | 
						/* 重复标签检查 (此处效率略低)
 | 
				
			||||||
 | 
						 * 不要使用反查! 先取出本主题的标签最多 12 个
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						$data = db_find('git_tags_thread', array('tid'=>$tid), array(), 1, 12);
 | 
				
			||||||
 | 
						if($data){
 | 
				
			||||||
 | 
							$tagidlist = arrlist_values($data, 'tagid');
 | 
				
			||||||
 | 
							$kb = db_find('git_tags', array('tagid'=>$tagidlist));
 | 
				
			||||||
 | 
							$kblist  = arrlist_values($kb, 'name');
 | 
				
			||||||
 | 
							if(in_array($tag,$kblist)){
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										65
									
								
								git_tags/route/tag.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								git_tags/route/tag.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * User: last
 | 
				
			||||||
 | 
					 * Date: 2018/5/13
 | 
				
			||||||
 | 
					 * Time: 下午10:06
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!defined('DEBUG') AND exit('Access Denied.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$action = param(1);
 | 
				
			||||||
 | 
					$kv = kv_cache_get('git_tags');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($action=='add'){
 | 
				
			||||||
 | 
						$tid = param('tid', 0);
 | 
				
			||||||
 | 
						$tag = param('tag');
 | 
				
			||||||
 | 
						empty($uid) AND message(-1, "未登录");
 | 
				
			||||||
 | 
						tag_law($tag,$kv) AND message(-1, "非法字符或长度");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tag_lock($uid,$tid,$gid,$kv['lock']) AND message(-1, "TAG锁");
 | 
				
			||||||
 | 
						tag_rep($tag,$tid) AND message(-1, "重复标签");
 | 
				
			||||||
 | 
						tag_max($tid) AND message(-1, "最多12个");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$r = tag_add($tid,$tag);
 | 
				
			||||||
 | 
						message(1, $r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}elseif ($action=='del') {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$tid = param('tid', 0);
 | 
				
			||||||
 | 
						$tagid = param('tag', 0);
 | 
				
			||||||
 | 
						empty($uid) AND message(-1, "未登录");
 | 
				
			||||||
 | 
						tag_lock($uid,$tid,$gid,$kv['lock']) AND message(-1, "TAG锁");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tag_del($tid,$tagid);
 | 
				
			||||||
 | 
						message(0, '删除完毕');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}elseif (is_numeric($action)){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$page     = param(2, 1);
 | 
				
			||||||
 | 
						$pagesize = $conf['pagesize'];
 | 
				
			||||||
 | 
						$order    = array('tid'=>-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// lastpid 似乎会导致错误..
 | 
				
			||||||
 | 
						// $order = $conf['order_default'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$tag  = tag_info($action) OR message(-1,'TAG 不存在');
 | 
				
			||||||
 | 
						$list = tag_list($action, $page, $pagesize, $order);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 过滤无权访问的(或许会导致页码总数错误..?)
 | 
				
			||||||
 | 
						// thread_list_access_filter($list, $gid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$header['title'] = $tag['name'];
 | 
				
			||||||
 | 
						$header['mobile_title'] = $tag['name'];
 | 
				
			||||||
 | 
						$header['mobile_link']= "#";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if($ajax && !isset($_SERVER['HTTP_X_PJAX'])) message(0, $list);
 | 
				
			||||||
 | 
						include _include(APP_PATH.'plugin/git_tags/view/htm/tag.htm');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}else{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// hook tag_end.php
 | 
				
			||||||
 | 
						message(-1, "error");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										135
									
								
								git_tags/setting.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								git_tags/setting.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
				
			|||||||
 | 
					<?php include _include(ADMIN_PATH.'view/htm/header.inc.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					.c-indicator { position: absolute; top: 0; left: 0; display: block; width: 1rem; height: 1rem; font-size: 65%; line-height: 1rem; color: #eee; user-select: none; background-color: #eee; background-repeat: no-repeat; background-position: center center; -webkit-background-size: 50% 50%; background-size: 50% 50%; }
 | 
				
			||||||
 | 
					.c-radio .c-indicator { border-radius: 50%; }
 | 
				
			||||||
 | 
					.c-input>input { position: absolute; z-index: -1; opacity: 0; }
 | 
				
			||||||
 | 
					.c-input>input:checked~.c-indicator { color: #fff; background-color: #ffa7bf; }
 | 
				
			||||||
 | 
					.c-input+.c-input { margin-left: 1rem; }
 | 
				
			||||||
 | 
					.c-input { display: inline; padding-left: 1.5rem; color: #555; }
 | 
				
			||||||
 | 
					.c-input, .input-group, .input-group-btn, .input-group-btn>.btn { position: relative; }
 | 
				
			||||||
 | 
					.bd-example { position: relative; padding: 1rem; margin: 1rem -1rem; border: solid #f7f7f9; border-width: .2rem 0 0; }
 | 
				
			||||||
 | 
					.bd-example::after { content: ""; display: table; clear: both; }
 | 
				
			||||||
 | 
					.bd-example p b { color:#ffa7bf; }
 | 
				
			||||||
 | 
					.card textarea { margin:0; border:none; background:#f1f1f1; line-height:32px; font-size:.8rem; color:#555; padding:0 .8rem; width:100%; border-radius: 3px}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					<div class="row">
 | 
				
			||||||
 | 
						<div class="col-lg-10 offset-lg-1">
 | 
				
			||||||
 | 
							<div class="card">
 | 
				
			||||||
 | 
								<div class="card-body">
 | 
				
			||||||
 | 
									<form action="<?php echo url("plugin-setting-git_tags");?>" method="post" id="form">
 | 
				
			||||||
 | 
										<h4 class="card-title">TAG 设置</h4>
 | 
				
			||||||
 | 
										<div class="bd-example" data-example-id="">
 | 
				
			||||||
 | 
											<h5 class="card-title" title="锁定后除作者外都不可编辑标签">全局锁</h5>
 | 
				
			||||||
 | 
											<label class="c-input c-radio">
 | 
				
			||||||
 | 
												<input id="radio11" name="lock" type="radio" value="1" <?php if($kv['lock']==1){echo 'checked';}; ?> >
 | 
				
			||||||
 | 
												<span class="c-indicator"></span>
 | 
				
			||||||
 | 
												开放
 | 
				
			||||||
 | 
											</label>
 | 
				
			||||||
 | 
											<label class="c-input c-radio">
 | 
				
			||||||
 | 
												<input id="radio22" name="lock" type="radio" value="2" <?php if($kv['lock']==2){echo 'checked';}; ?> >
 | 
				
			||||||
 | 
												<span class="c-indicator"></span>
 | 
				
			||||||
 | 
												锁定
 | 
				
			||||||
 | 
											</label>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<div class="bd-example" data-example-id="">
 | 
				
			||||||
 | 
											<h5 class="card-title" title="限制标签长度, 英文长度1字符, 中文长度3字符">字数限制</h5>
 | 
				
			||||||
 | 
											<label class="c-input c-radio">
 | 
				
			||||||
 | 
												<input id="radio1" name="limit" type="radio" value="12" <?php if($kv['limit']==12){echo 'checked';}; ?> >
 | 
				
			||||||
 | 
												<span class="c-indicator"></span>
 | 
				
			||||||
 | 
												2 - 12 个字符限制
 | 
				
			||||||
 | 
											</label>
 | 
				
			||||||
 | 
											<label class="c-input c-radio">
 | 
				
			||||||
 | 
												<input id="radio2" name="limit" type="radio" value="24" <?php if($kv['limit']==24){echo 'checked';}; ?> >
 | 
				
			||||||
 | 
												<span class="c-indicator"></span>
 | 
				
			||||||
 | 
												2 - 24 个字符限制
 | 
				
			||||||
 | 
											</label>
 | 
				
			||||||
 | 
											<label class="c-input c-radio" >
 | 
				
			||||||
 | 
												<input id="radio3" name="limit" type="radio" value="42" <?php if($kv['limit']==42){echo 'checked';}; ?> >
 | 
				
			||||||
 | 
												<span class="c-indicator"></span>
 | 
				
			||||||
 | 
												2 - 42 个字符限制
 | 
				
			||||||
 | 
											</label>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<div class="bd-example" data-example-id="">
 | 
				
			||||||
 | 
											<h5 class="card-title" title="需要过滤的短语, 以英文空格分词, 请勿设置过多">回避词</h5>
 | 
				
			||||||
 | 
											<textarea id="exampleTextarea" rows="4" name="stop"><?php echo $kv['stop']; ?></textarea>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<div class="bd-example" data-example-id="">
 | 
				
			||||||
 | 
											<h5 class="card-title">关于</h5>
 | 
				
			||||||
 | 
											<p class="m-a-1 small">TAG锁开启时, 则所有会员都可以编辑和删除标签, 锁定则只允许作者和管理员编辑 (当前作者锁未实装)</p>
 | 
				
			||||||
 | 
											<p class="m-a-1 small">按业务场景调整允许的字数范围, 1 中文等于 3 字母</p>
 | 
				
			||||||
 | 
											<p class="m-a-1 small">回避词非 <b>危险字符过滤</b> 亦非 <b>脏词过滤字典</b>, 请勿添加过多词汇, 否则效率低下</p>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<style>
 | 
				
			||||||
 | 
										#Developer { padding:2rem 1rem; margin: 1rem 0; background:#eee; border-radius: 5px }
 | 
				
			||||||
 | 
										#Developer h5 { padding:0 10px; color:#999; font-weight: 500 }
 | 
				
			||||||
 | 
										#Developer p { padding:10px; color:#aaa; }
 | 
				
			||||||
 | 
										#Developer p a { color:#ffa7bf; font-weight: 600}
 | 
				
			||||||
 | 
										#Developer ul{ margin:0; padding:0px; list-style-type: none }
 | 
				
			||||||
 | 
										#Developer ul li { margin:5px; border-radius: 5px; background:#fcfcfc; float: left; border:1px solid #E3E9ED; }
 | 
				
			||||||
 | 
										#Developer ul li a { display: block; padding:10px; }
 | 
				
			||||||
 | 
										#Developer ul li img { width:62px; margin-right:10px; border-radius: 50%; -webkit-filter: grayscale(10%);filter: grayscale(10%); }
 | 
				
			||||||
 | 
										#Developer ul li span { font-size: 1rem; color:#a89fb2; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										#Developer a:hover { text-decoration:none; }
 | 
				
			||||||
 | 
										#Developer ul:after{ content: ""; display: block; height: 0; clear: both; visibility: hidden; }
 | 
				
			||||||
 | 
										#Developer ul li:hover { background:#fff; border:solid 1px #fad1df; }
 | 
				
			||||||
 | 
										#Developer ul li:hover span { color: #ffa7bf; }
 | 
				
			||||||
 | 
										#Developer ul li:hover img { -webkit-filter: grayscale(0%);filter: grayscale(0%); }
 | 
				
			||||||
 | 
										</style>
 | 
				
			||||||
 | 
										<div id="Developer">
 | 
				
			||||||
 | 
											<h5>开源合作项目 <i class="icon icon-connectdevelop"></i></h5>
 | 
				
			||||||
 | 
											<ul>
 | 
				
			||||||
 | 
												<li><a href="https://bbs.xiuno.com/thread-21013.htm" target="_Blank"><img src="../plugin/git_tags/view/img/user_soyoumi.png"><span>@聂云风情</span></a></li>
 | 
				
			||||||
 | 
												<li><a href="https://bbs.xiuno.com/thread-21013.htm" target="_Blank"><img src="../plugin/git_tags/view/img/user_shitou.png"><span>@shitou</span></a></li>
 | 
				
			||||||
 | 
												<li><a href="https://bbs.xiuno.com/thread-21013.htm" target="_Blank"><img src="../plugin/git_tags/view/img/user_last.png"><span>@Last</span></a></li>
 | 
				
			||||||
 | 
												<li><a href="https://bbs.xiuno.com/thread-21013.htm" target="_Blank"><img src="../plugin/git_tags/view/img/user_none.png"><span>期待<b>你</b>的加入</span></a></li>
 | 
				
			||||||
 | 
											</ul>
 | 
				
			||||||
 | 
											<p>
 | 
				
			||||||
 | 
												项目地址 <a href="https://gitee.com/soyoumi/git_tags/" target="_Blank">https://gitee.com/soyoumi/git_tags/</a><br>
 | 
				
			||||||
 | 
												错误反馈与建议 :  企鹅群625244937<br>
 | 
				
			||||||
 | 
											</p>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<div class="form-group row">
 | 
				
			||||||
 | 
											<div class="col-sm-11 center">
 | 
				
			||||||
 | 
												<button type="submit" class="btn btn-primary btn-block" id="submit" data-loading-text="<?php echo lang('submiting');?>..."><?php echo lang('confirm');?></button>
 | 
				
			||||||
 | 
												<a role="button" class="btn btn-secondary btn-block m-t-1" href="javascript:history.back();"><?php echo lang('back');?></a>
 | 
				
			||||||
 | 
											</div>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</form>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?php include _include(ADMIN_PATH.'view/htm/footer.inc.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					$('.c-checkbox').prop('indeterminate', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var jform = $("#form");
 | 
				
			||||||
 | 
					var jsubmit = $("#submit");
 | 
				
			||||||
 | 
					var referer = '<?php echo http_referer();?>';
 | 
				
			||||||
 | 
					jform.on('submit', function(){
 | 
				
			||||||
 | 
						jform.reset();
 | 
				
			||||||
 | 
						jsubmit.button('loading');
 | 
				
			||||||
 | 
						var postdata = jform.serialize();
 | 
				
			||||||
 | 
						$.xpost(jform.attr('action'), postdata, function(code, message) {
 | 
				
			||||||
 | 
							if(code == 0) {
 | 
				
			||||||
 | 
								$.alert(message);
 | 
				
			||||||
 | 
								jsubmit.text(message).delay(2000).button('reset').location(referer);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								$.alert(message);
 | 
				
			||||||
 | 
								jsubmit.button('reset');
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										22
									
								
								git_tags/setting.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								git_tags/setting.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * TAG setting
 | 
				
			||||||
 | 
					 * admin/plugin-setting-git_tags.htm
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!defined('DEBUG') AND exit('Access Denied.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if($method == 'GET') {	
 | 
				
			||||||
 | 
						$kv = kv_cache_get('git_tags');
 | 
				
			||||||
 | 
						$input = array();
 | 
				
			||||||
 | 
						$input['lock'] = form_text('lock', $kv['lock']);
 | 
				
			||||||
 | 
						include _include(APP_PATH.'plugin/git_tags/setting.htm');
 | 
				
			||||||
 | 
					} else {
 | 
				
			||||||
 | 
						$kv = array();
 | 
				
			||||||
 | 
						$kv['lock'] = param('lock');
 | 
				
			||||||
 | 
						$kv['stop'] = param('stop');
 | 
				
			||||||
 | 
						$kv['limit'] = param('limit');
 | 
				
			||||||
 | 
						kv_cache_set('git_tags', $kv);
 | 
				
			||||||
 | 
						message(0, '修改成功');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										31
									
								
								git_tags/tagtool.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								git_tags/tagtool.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 对标签灌水
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 跳过路由
 | 
				
			||||||
 | 
					define('SKIP_ROUTE', TRUE);
 | 
				
			||||||
 | 
					include '../index.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$fid = 1; // 版块 id
 | 
				
			||||||
 | 
					$uid = 1; // 用户 id
 | 
				
			||||||
 | 
					$gid = 1; // 用户组 id; 1: 管理员; 101:普通用户
 | 
				
			||||||
 | 
					for($i=100; $i<930000; $i++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 范围内取tid(前提是tid必须存在)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for($j=0; $j<6; $j++){
 | 
				
			||||||
 | 
					        // 产生随机标签(36进制3位数则产生4.6w范围的标签 )
 | 
				
			||||||
 | 
					        $s = '标签'.xn_rand(3);
 | 
				
			||||||
 | 
					        $tag = tag_add($i,$s);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if($i % 100 == 0) echo '.';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo '生成数据完毕';
 | 
				
			||||||
							
								
								
									
										18
									
								
								git_tags/unstall.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								git_tags/unstall.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/* unstall xiuno TAG
 | 
				
			||||||
 | 
					 * delete table
 | 
				
			||||||
 | 
					 * delete cache
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!defined('DEBUG') AND exit('Forbidden');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$tablepre = $db->tablepre;
 | 
				
			||||||
 | 
					$sql = "DROP TABLE {$tablepre}git_tags";
 | 
				
			||||||
 | 
					db_exec($sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$sql = "DROP TABLE {$tablepre}git_tags_thread";
 | 
				
			||||||
 | 
					db_exec($sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kv_cache_delete('git_tags');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										64
									
								
								git_tags/view/css/tag.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								git_tags/view/css/tag.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * User: last
 | 
				
			||||||
 | 
					 * Date: 2018/5/14
 | 
				
			||||||
 | 
					 * Time: 上午8:41
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 全局默认 */
 | 
				
			||||||
 | 
					a:link,a:visited,a:hover { text-decoration:none }
 | 
				
			||||||
 | 
					#tag:after,#tagPush:after,#taghot ul:after,#other ul:after { content: " "; display: block; height: 0; clear: both; visibility: hidden }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 主题标签 */
 | 
				
			||||||
 | 
					#tag { padding:10px; margin:20px 0; border-radius: 5px; list-style-type: none; }
 | 
				
			||||||
 | 
					#tag>li { float: left; border:1px solid #e5e9ef; border-radius:15px; margin:10px 8px 0 0; padding:0 5px 0 3px;}
 | 
				
			||||||
 | 
					#tag>li button { font-size:12px; color: #555; border:0; padding:0; background-color:transparent; display:block; width:2rem; }
 | 
				
			||||||
 | 
					#tag>li:hover { border:1px solid #ffa7bf; }
 | 
				
			||||||
 | 
					#tag>li:hover>a,#tag>li:hover>button { color:#ffa7bf; }
 | 
				
			||||||
 | 
					#tag>li>a { font-size:12px; color: #555; display: block; }
 | 
				
			||||||
 | 
					#tag>li>a>i { padding:0 3px }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 主题标签 ( 动态组件 ) */
 | 
				
			||||||
 | 
					#tag-add { display: none; margin-bottom: 3rem; text-align: center }
 | 
				
			||||||
 | 
					#tag-add h5,#tag-add h5 a { font-size: 1rem; color:#555; }
 | 
				
			||||||
 | 
					#tag-add input,#tag-add button { margin:0; border:none; background:#f1f1f1; line-height:32px; font-size:.8rem; color:#555; padding:0 .8rem; }
 | 
				
			||||||
 | 
					#tag-add input  { border-radius:3px 0 0 3px; outline: none; -webkit-tap-highlight-color: rgba(0,0,0,0); }
 | 
				
			||||||
 | 
					#tag-add button { border-radius:0 3px 3px 0; outline: none; -webkit-tap-highlight-color: rgba(0,0,0,0); }
 | 
				
			||||||
 | 
					#tag-add input::placeholder { color: #bbb; font-size: .8rem; }
 | 
				
			||||||
 | 
					#tag-add input:hover, #tag-add button:hover, #tag-add input:focus,#tag-add button:focus  { color: #ffa7bf; background:#fff; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 主题关联 ( 或考虑取消 ) */
 | 
				
			||||||
 | 
					#tagPush { padding:0px; margin:20px 0; border-radius: 5px; list-style-type: none; }
 | 
				
			||||||
 | 
					#tagPush>li { /*float: left; width:25%;*/ border-radius:3px; margin:0; padding:8px; }
 | 
				
			||||||
 | 
					#tagPush>li>a { color:#555; display:block; overflow: hidden; text-overflow:ellipsis; white-space: nowrap; }
 | 
				
			||||||
 | 
					#tagPush>li>a>img { width: 100%; border:none; border-radius:4px; }
 | 
				
			||||||
 | 
					#tagPush>li:hover { background: rgba(50,100,100,.1) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 标签云 ( 边缘色 e5e9ef, 底色 f5f5f5 ) */
 | 
				
			||||||
 | 
					#taghot { padding:1rem; }
 | 
				
			||||||
 | 
					#taghot h5 { color:#999; font-size: 1rem }
 | 
				
			||||||
 | 
					#taghot ul { padding: 0.5rem 0; margin: 0; list-style-type: none;}
 | 
				
			||||||
 | 
					#taghot ul li { margin:0 0.3rem 0.3rem 0; float: left; border:1px solid #f1f1f1; border-radius:4px; background:#f1f1f1; }
 | 
				
			||||||
 | 
					#taghot ul li a { font-size:12px; color: #555; display: block; padding:0 0.5rem;}
 | 
				
			||||||
 | 
					#taghot h5:hover { color:#ffa7bf; }
 | 
				
			||||||
 | 
					#taghot ul li:hover { border:1px solid #ffe7ff; background:#fff; }
 | 
				
			||||||
 | 
					#taghot ul li:hover a { color: #ffa7bf; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 作者相关 */
 | 
				
			||||||
 | 
					#other { padding:1rem; }
 | 
				
			||||||
 | 
					#other h5 { color:#999; font-size: 1rem }
 | 
				
			||||||
 | 
					#other ul { padding: 0.5rem 0; margin: 0; list-style-type: none;}
 | 
				
			||||||
 | 
					#other ul li { margin:0 0.3rem; padding:.5rem 0; border-bottom: 1px solid #f1f1f1; border-radius:4px }
 | 
				
			||||||
 | 
					#other ul li a { font-size:12px; color: #555; display: block; padding:0 0.5rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
 | 
				
			||||||
 | 
					#other h5:hover { color:#ffa7bf; }
 | 
				
			||||||
 | 
					#other ul li:hover { background:#fff; }
 | 
				
			||||||
 | 
					#other ul li:hover a { color: #ffa7bf;}
 | 
				
			||||||
 | 
					#other ul li:last-child { border-bottom: none }
 | 
				
			||||||
							
								
								
									
										16
									
								
								git_tags/view/htm/inc_cloud.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								git_tags/view/htm/inc_cloud.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					$tagCloud = cache_get('tagCloud');
 | 
				
			||||||
 | 
					if(empty($tagCloud)){
 | 
				
			||||||
 | 
						// 缓存10分钟更新一次(标签过少时,删标签后未及时更新可能出现标签不存在)
 | 
				
			||||||
 | 
						$tagCloud = db_find('git_tags', array(), array('link'=>-1), 1, 20);
 | 
				
			||||||
 | 
						cache_set('tagCloud', $tagCloud, 600);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					<div id="taghot" class="card">
 | 
				
			||||||
 | 
						<h5><span class="icon-tags"></span>TAG</h5>
 | 
				
			||||||
 | 
						<ul>
 | 
				
			||||||
 | 
							<?php foreach ( $tagCloud as $k ){ ?>
 | 
				
			||||||
 | 
							<li><a href='<?php echo url("tag-$k[tagid]") ?>'><?php echo $k['name'] ?></a></li>
 | 
				
			||||||
 | 
							<?php } ?>
 | 
				
			||||||
 | 
						</ul>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
							
								
								
									
										9
									
								
								git_tags/view/htm/inc_other.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								git_tags/view/htm/inc_other.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?php $other = db_find('thread', array('uid'=>$thread['uid']), array('lastpid'=>-1),1,6); ?>
 | 
				
			||||||
 | 
					<div id="other" class="card">
 | 
				
			||||||
 | 
						<h5><span class="icon-slack"></span> 作者主题 </h5>
 | 
				
			||||||
 | 
						<ul>
 | 
				
			||||||
 | 
							<?php foreach ( $other as $k ){ $tids = $k["tid"]; ?>
 | 
				
			||||||
 | 
							<li><a href='<?php echo url("thread-$tids") ?>'><?php echo $k['subject']; ?></a></li>
 | 
				
			||||||
 | 
							<?php } ?>
 | 
				
			||||||
 | 
						</ul>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
							
								
								
									
										7
									
								
								git_tags/view/htm/inc_push.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								git_tags/view/htm/inc_push.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<ul id="tagPush">
 | 
				
			||||||
 | 
						<?php foreach ( $lists as $k ){ ?>
 | 
				
			||||||
 | 
						<li><a href='<?php echo url("thread-$k[tid]") ?>'><?php echo $k['subject'] ?></a></li>
 | 
				
			||||||
 | 
						<?php } ?>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- <img src="plugin/git_tags/view/img/test.gif"> -->
 | 
				
			||||||
							
								
								
									
										5
									
								
								git_tags/view/htm/inc_tag.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								git_tags/view/htm/inc_tag.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					<ul id="tag" data-tid="<?php echo $tid; ?>" >
 | 
				
			||||||
 | 
						<?php foreach ( $list as $k ){ ?>
 | 
				
			||||||
 | 
						<li data-tag="<?php echo $k['tagid'] ?>"><a href='<?php echo url("tag-$k[tagid]") ?>'><i class="icon-tag"></i><?php echo $k['name'] ?></a></li>
 | 
				
			||||||
 | 
						<?php } ?>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
							
								
								
									
										60
									
								
								git_tags/view/htm/tag.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								git_tags/view/htm/tag.htm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--{hook forum_start.htm}-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="row">
 | 
				
			||||||
 | 
						<!-- 内容栏 --> 
 | 
				
			||||||
 | 
						<div class="col-lg-9 main">
 | 
				
			||||||
 | 
							<ol class="breadcrumb d-none d-md-flex"><?php echo $tag['name']; ?></ol>
 | 
				
			||||||
 | 
							<div class="card card-threadlist">
 | 
				
			||||||
 | 
								<div class="card-body">
 | 
				
			||||||
 | 
									<ul class="list-unstyled threadlist mb-0">
 | 
				
			||||||
 | 
										<?php if($list) { foreach($list as $k) { ?>
 | 
				
			||||||
 | 
										<?php $user = user_read_cache($k['uid']); ?>
 | 
				
			||||||
 | 
										<li class="media thread tap" data-href="<?php echo url("thread-$k[tid]");?>" data-tid="<?php echo $k['tid'];?>">
 | 
				
			||||||
 | 
											<a href="<?php echo url("user-$k[uid]");?>" tabindex="-1" class="ml-1 mt-1 mr-3">
 | 
				
			||||||
 | 
												<img class="avatar-3" src="<?php echo $user['avatar_url'];?>">
 | 
				
			||||||
 | 
											</a>
 | 
				
			||||||
 | 
											<div class="media-body">
 | 
				
			||||||
 | 
												<div class="subject break-all">
 | 
				
			||||||
 | 
													<a href="<?php echo url("thread-$k[tid]");?>"><?php echo $k['subject'];?></a>
 | 
				
			||||||
 | 
													<?php if($k['files'] > 0) { ?><i class="icon small filetype other"></i><?php } ?>
 | 
				
			||||||
 | 
													<?php if($k['closed'] > 0) { ?><i class="icon-lock"></i><?php } ?>
 | 
				
			||||||
 | 
												</div>
 | 
				
			||||||
 | 
												<div class="d-flex justify-content-between small mt-1">
 | 
				
			||||||
 | 
													<div>
 | 
				
			||||||
 | 
														<span class="username text-grey mr-1 hidden-sm" uid="<?php echo $k['uid'];?>"><?php echo $user['username'];?></span>
 | 
				
			||||||
 | 
														<span class="views text-grey mr-1 hidden-sm"><i class="icon-eye"></i><?php echo $k['views'];?></span>
 | 
				
			||||||
 | 
													</div>
 | 
				
			||||||
 | 
												</div>
 | 
				
			||||||
 | 
											</div>
 | 
				
			||||||
 | 
										</li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										<?php }} else { ?>
 | 
				
			||||||
 | 
										<li><div><?php echo lang('none');?></div></li>
 | 
				
			||||||
 | 
										<?php } ?>
 | 
				
			||||||
 | 
									</ul>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							<!-- 翻页 -->
 | 
				
			||||||
 | 
							<nav class="my-3">
 | 
				
			||||||
 | 
								<ul class="pagination justify-content-center flex-wrap">
 | 
				
			||||||
 | 
									<?php echo pagination(url("tag-{$tag['tagid']}-{page}"), $tag['link'], $page, $pagesize); ?>
 | 
				
			||||||
 | 
								</ul>
 | 
				
			||||||
 | 
							</nav>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<!-- 侧边栏 -->
 | 
				
			||||||
 | 
						<div class="col-lg-3 d-none d-lg-block aside">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!--{hook tag_side_before.htm}-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<?php include _include(APP_PATH.'plugin/git_tags/view/htm/inc_cloud.htm');?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!--{hook tag_side_after.htm}-->
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--{hook forum_end.htm}-->
 | 
				
			||||||
 | 
					<?php include _include(APP_PATH.'view/htm/footer.inc.htm');?>
 | 
				
			||||||
 | 
					<!--{hook forum_js.htm}-->
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								git_tags/view/img/user_last.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								git_tags/view/img/user_last.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 113 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								git_tags/view/img/user_none.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								git_tags/view/img/user_none.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								git_tags/view/img/user_shitou.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								git_tags/view/img/user_shitou.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								git_tags/view/img/user_soyoumi.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								git_tags/view/img/user_soyoumi.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 97 KiB  | 
							
								
								
									
										209
									
								
								git_tags/view/js/tag.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								git_tags/view/js/tag.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
				
			|||||||
 | 
					// 定义输入框的全局变量 #tag-add, 0 为隐藏状态, 1 为显示状态
 | 
				
			||||||
 | 
					var tag_dis = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					| 初始化时添加组建 (显示的)
 | 
				
			||||||
 | 
					| 初始化时添加组件 (隐藏的)
 | 
				
			||||||
 | 
					| 增加标签按钮
 | 
				
			||||||
 | 
					| 删除标签按钮 <button title="添加标签" id="tagRes" class="icon-plus"></button>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					---------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$('#tag').append( '<li style="padding:0;"><button title="添加标签" id="tagRes" class="icon-plus"></button></li>' )
 | 
				
			||||||
 | 
					$('#tag').after(
 | 
				
			||||||
 | 
						'<div id="tag-add">'+
 | 
				
			||||||
 | 
							'<form>'+
 | 
				
			||||||
 | 
								//'<h5>添加标签 <a href="#" title="修改记录"><i class="icon-paste"></i></a></h5>'+
 | 
				
			||||||
 | 
								'<input id="tag-data" type="text" placeholder="输入标签名" maxlength="32"><button type="submit"><i class="icon-paper-plane"></i></button>'+
 | 
				
			||||||
 | 
							'</form>'+
 | 
				
			||||||
 | 
						'</div>'
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					| 监听 #tag-add 显示与隐藏的开关 #tagRes
 | 
				
			||||||
 | 
					| 根据全局变量转变 标签图标
 | 
				
			||||||
 | 
					| 根据全局变量转变 #tag-add 的显隐状态
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					----------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 $(document).on('click', '#tagRes', function() {
 | 
				
			||||||
 | 
					 	if(tag_dis==0){
 | 
				
			||||||
 | 
					 		$("#tag li i").removeClass("icon-tag");
 | 
				
			||||||
 | 
					 		$("#tag li i").addClass("icon-times-circle");	
 | 
				
			||||||
 | 
					 		$("#tag-add").fadeToggle("slow");
 | 
				
			||||||
 | 
					 		$("#tag-data").focus();
 | 
				
			||||||
 | 
					 		tag_dis = 1
 | 
				
			||||||
 | 
					 	}else{
 | 
				
			||||||
 | 
					 		$("#tag li i").removeClass("icon-times-circle");
 | 
				
			||||||
 | 
					 		$("#tag li i").addClass("icon-tag");
 | 
				
			||||||
 | 
					 		$("#tag-add").fadeToggle("slow");
 | 
				
			||||||
 | 
					 		tag_dis = 0
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					| delete
 | 
				
			||||||
 | 
					| 
 | 
				
			||||||
 | 
					----------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(document).on('click', '#tag li a', function() {
 | 
				
			||||||
 | 
						if(tag_dis==1){
 | 
				
			||||||
 | 
							var t   = $(this).parent() // this不能直接传递
 | 
				
			||||||
 | 
							var tid = $('#tag').data('tid')
 | 
				
			||||||
 | 
							var tag = $(this).parent().data('tag')
 | 
				
			||||||
 | 
							var url = 'tag-del.htm'
 | 
				
			||||||
 | 
							if (location.search.indexOf("?") != -1) { url = '?tag-del.htm' }
 | 
				
			||||||
 | 
							$.xpost(url, {'tid': tid, 'tag': tag }, function(code,msg){
 | 
				
			||||||
 | 
								if (code == 0) {
 | 
				
			||||||
 | 
									// 删除成功则移除此标签
 | 
				
			||||||
 | 
									t.remove()
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									alert(msg)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					| add tag ( Allow Space )
 | 
				
			||||||
 | 
					| 
 | 
				
			||||||
 | 
					----------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(document).on('click', '#tag-add button', function() {
 | 
				
			||||||
 | 
						var r = $('#tag-data').val()
 | 
				
			||||||
 | 
						var tid = $('#tag').attr('data-tid')
 | 
				
			||||||
 | 
						if (安检(r)){
 | 
				
			||||||
 | 
							var url = 'tag-add.htm'
 | 
				
			||||||
 | 
							if (location.search.indexOf("?") != -1) { url = '?tag-add.htm' }
 | 
				
			||||||
 | 
							$.xpost(url, {'tid': tid, 'tag': r.trim() }, function(code,msg){
 | 
				
			||||||
 | 
								if (code == 1) {
 | 
				
			||||||
 | 
									if ( $("#tag li[data-tag='"+msg+"']").length > 0 ) {
 | 
				
			||||||
 | 
										//alert(tag+'标签已存在')
 | 
				
			||||||
 | 
										return false
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// 先移除结尾的元素, 增加完毕再添加结尾的元素
 | 
				
			||||||
 | 
									$("#tag li:last").remove()
 | 
				
			||||||
 | 
									$("#tag").append('<li data-tag="'+msg+'"><a href="?tag-'+msg+'.htm"><i class="icon-tag"></i>'+r+'</a></li>')
 | 
				
			||||||
 | 
									$('#tag').append('<li style="padding:0;"><button title="添加标签" id="tagRes" class="icon-plus"></button></li>')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 关闭组件 并切回tag状态
 | 
				
			||||||
 | 
									$("#tag-add").fadeOut("slow");
 | 
				
			||||||
 | 
									$("#tag li i").removeClass("icon-times-circle");
 | 
				
			||||||
 | 
									$("#tag li i").addClass("icon-tag");
 | 
				
			||||||
 | 
									$("#tagRes").focus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									tag_dis = 0
 | 
				
			||||||
 | 
									$("#tag-data").val("")
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									alert(msg)
 | 
				
			||||||
 | 
								}	
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*----------------------------------------
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					| 封装整理
 | 
				
			||||||
 | 
					| 
 | 
				
			||||||
 | 
					----------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function 安检(r){
 | 
				
			||||||
 | 
						var q = $('#tag').children('li').length
 | 
				
			||||||
 | 
						if(q > 12){
 | 
				
			||||||
 | 
							提示('标签最多设置12个')
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(r==null||r.length==0){
 | 
				
			||||||
 | 
							提示('你明明什么都没写..')
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if( 检查字符长度(r) ){
 | 
				
			||||||
 | 
							提示('中文字数 1-8 个, 英文2-24个 ')
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if( 检查特殊字符(r) ){
 | 
				
			||||||
 | 
							提示('不可使用特殊字符')
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if( 检查重复标签(r) ){
 | 
				
			||||||
 | 
							提示('标签已存在')
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 重复检查( 前端检查 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function 检查重复标签(r){
 | 
				
			||||||
 | 
						// 服务端也需要判断一遍, 或许本地可以省略..
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function 检查特殊字符(r){
 | 
				
			||||||
 | 
						// 特殊符号不可使用 (各种空格与危险字符/但英文空格是允许的)
 | 
				
			||||||
 | 
						var a = new Array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "{", "}", "[", "]", "(", ")")
 | 
				
			||||||
 | 
						a.push(":", ";", "'", "|", "\\\\", "<", ">", "?", "/", "<<", ">>", "||", "//", " ", ",", ".")
 | 
				
			||||||
 | 
						a.push("select", "delete", "update", "insert", "create", "drop", "alter", "trancate")
 | 
				
			||||||
 | 
						var s = r.toLowerCase();
 | 
				
			||||||
 | 
						for (var i = 0; i < a.length; i++) {
 | 
				
			||||||
 | 
							if (s.indexOf(a[i]) >= 0) {
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function 检查字符长度(str){
 | 
				
			||||||
 | 
						// UTF8字符集实际长度计算
 | 
				
			||||||
 | 
						var realLength = 0
 | 
				
			||||||
 | 
						var len = str.length
 | 
				
			||||||
 | 
						var charCode = -1
 | 
				
			||||||
 | 
						for(var i = 0; i < len; i++){
 | 
				
			||||||
 | 
							charCode = str.charCodeAt(i)
 | 
				
			||||||
 | 
							if (charCode >= 0 && charCode <= 128) {
 | 
				
			||||||
 | 
								realLength += 1
 | 
				
			||||||
 | 
							}else{
 | 
				
			||||||
 | 
								// 中文则长度加3
 | 
				
			||||||
 | 
								realLength += 3
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if( realLength>24 || realLength<2 ){
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function 提示(r){
 | 
				
			||||||
 | 
						var timestamp = (new Date()).valueOf()
 | 
				
			||||||
 | 
						$("#tag-add").after('<div class="alert alert-warning" role="alert" id="t'+timestamp+'"><strong>提示!</strong> '+r+'</div>');
 | 
				
			||||||
 | 
						setTimeout(function () { $("#t"+timestamp).hide(1000) }, 4000)
 | 
				
			||||||
 | 
						setTimeout(function () { $("#t"+timestamp).remove() }, 5000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user