提交 7fd27759 编写于 作者: 街头小贩's avatar 街头小贩

同步bs4 风格用的js

上级 f06eef19
......@@ -907,6 +907,15 @@ jQuery(function($){
try{
$('select.select2').select2();
}catch(e){}
//
$(".datetimepicker").datetimepicker({
autoclose: true,
componentIcon: '.mdi.mdi-calendar',
navIcons:{
rightIcon: 'mdi mdi-chevron-right',
leftIcon: 'mdi mdi-chevron-left'
}
});
$('#smiley_pic_jsonp_select').on("select2:select",function(e){
var picFile = e.params.data.id;//文件名
var themeDirect = $('select[name=themeDirect]').find('option:selected').val(); //风格目录名
......
......@@ -159,11 +159,39 @@ function parseQueryJson(dataQueryVal){
data[tmp[0].trim()] = tmp[1].trim();
})
return data;
}
};
//话题的快速回复
function buildRichEditor(jqEle){
jqEle.find('[data-richEditor="CKEditor"]').trigger('initEvent');
};
function buildEditorMessage(errJson){
//在线吗
var cam = getCurrentActiveMemberInfo();
var t = '<div class="topic_posts_item main-color">'
+' <dl class="topic_posts_item_left">'
+' <dt style="padding-top: 20px;padding-left: 20px;width:180px">'
+' <div class="posts-member-avatar">'
+' <div class="avatar">'
+' <img class="avatar" src="'+BASE+'/avatar/empty.png" alt="User avatar" />'
+' </div>'
+' </div>'
+' </dt>'
+' </dl>'
+' <div class="topic_posts_item_right h260">'
+' <div class="posts-body">'
+' <h5 class="hl45 default-txt-color">快速回复</h5>'
+' <div id="block-paper">'
+' <p>'+errJson.message;
if(jQuery.isEmptyObject(cam) || parseInt(cam.id) < 1){
t += ' &nbsp; <a href="'+BASE+'/member/login">登录</a>&nbsp; | &nbsp;<a href="'+BASE+'/member/register">注册</a>';
}
t += ' </p></div>'
+' </div>'
+' </div>'
+'</div>'
$('#quick_reply_posts').removeClass('ld-over running').find('div.ld').remove();
$('#quick_reply_posts').append(t);
}
//底部的版块导航
function buildBoardNavigateSelect(json){
//生成select
......@@ -243,7 +271,7 @@ function drawMemberPanel(json, jqueryEle){ //[NW]
};
//是否要去拉取数据,客户端缓存的cookie标记是否过期了
function getMemberVerify(){
var verify = Cookies.get('msa') || -1;
var verify = Cookies.get('msa') || -1;
return verify;
};
//客户端缓存的cookie标记未过期时更新会员的信息到哪取
......@@ -272,7 +300,7 @@ function drawMemberInfo(json, jqueryEle){
+' <a href="{APP}/member/{id}.xhtml" title="会员主页"><img class="img-circle" src="{APP}/member/avatar/{id}.png" style="width:100px;height:100px"/></a>'
+' </div>'
+' <div class="text-center member_embed_info">'
+' <h5><a href="{APP}/member/home" title="会员中心" class="member-{roleName}">{nickname}</a></h5>'
+' <h5><a href="{APP}/member/home/" title="会员中心" class="member-{style}">{nickname}</a></h5>'
+' <div class="row">'
+' <dl class="col-xs-6 col-sm-4"><dt>{status}</dt><dd>状态</dd></dl>'
+' <dl class="col-xs-6 col-sm-4"><dt>{group}</dt><dd>组</dd></dl>'
......@@ -437,6 +465,17 @@ function drawBoardModeratorList(json, element){
Mustache.parse(T, ['{', '}']);
$(element).append(Mustache.render(T, $.extend(data, {"APP":BASE})));
}
//大版主列表
function drawBoardGroupModeratorList(json, element){
var data ={};
data.result = json;
var T =''
+'{#result}'
+' <dl class="d-inline-block p-2"><dt><img src="{APP}/member/avatar/{id}.png" width="32px" height="32px"/></dt><dd><a href="{APP}/member/{id}.xhtml">{title}</a></dd></dl>'
+'{/result}';
Mustache.parse(T, ['{', '}']);
$(element).append(Mustache.render(T, $.extend(data, {"APP":BASE})));
}
//版块内容页的置顶话题列表[NW][7]
function drawBoardTopSectionTopic(data, element){
var currentId = "dynamic-section-"+randomAlphaNumeric(8);
......@@ -566,29 +605,6 @@ function loadBoardStatsResult(json, element){
}
});
};
//{"date":{"year":2019,"month":4,"day":14},"time":{"hour":12,"minute":38,"second":32,"nano":0}}
//构造日期格式:YYYY-MM-DD HH:MM:SS
function buildStatsDate(json){
if(jQuery.isEmptyObject(json)){
return '';
}
var temp = '%Y%-%M%-%D% %HH%:%MM%:%SS%';
try{
return temp.replace('%Y%', json.date.year)
.replace('%M%', json.date.month)
.replace('%D%', json.date.day)
.replace('%HH%', json.time.hour)
.replace('%MM%', json.time.minute)
.replace('%SS%', json.time.second);
}catch(e){
return temp.replace('%Y%', json.year)
.replace('%M%', json.monthValue)
.replace('%D%', json.dayOfMonth)
.replace('%HH%', json.hour)
.replace('%MM%', json.minute)
.replace('%SS%', json.second);
}
};
//版块主页的 汇总统计
function getBoardStats(pURI){
var def = $.Deferred();
......@@ -793,8 +809,8 @@ function buildMemberProfileMenu(json, jqEle){
jqEle.popover({
placement : 'right',
title : '',
html : true,
trigger: 'focus',
trigger: 'focus',
html : true,
content : menuContent
});
jqEle.popover('show');
......@@ -896,6 +912,7 @@ function packAlbumHoldSection(json){
function buildMenuList(json){
var jqEle = $('#'+json.element);
var T=''; var tmpSize=1; var kt = Object.keys(json.result).length;
$.each(json.result, function(key, value){ //公共|私有
$.each(value, function(index, item){ //连接
var tmp;
......@@ -1119,22 +1136,8 @@ function newTagHandler(json){
};
//UID检查的回调
function uidDetectionHandler(nickname, jqEle){
jqEle.removeClass('has-error');
jqEle.find('input[name=uid]').removeAttr("disabled");
if($('#acc-tip').length == 1){
$('#acc-tip').find('input[name=snames]').val(nickname);
return;
}
var T=''
+'<div class="form-group">'
+' <label class="col-sm-2 control-label">会员:</label>'
+' <div class="col-sm-10">'
+' <input type="text" name="snames" class="inputbox no-radius form-control w600" value="%NN%" readonly="readonly" />'
+' </div>'
+'</div>';
T = T.replace('%NN%', nickname);
$(T).attr('id', 'acc-tip').insertAfter(jqEle);
jqEle.find('input[name=uid]').removeAttr("disabled").removeClass('is-invalid');
$('#suggest-uid').parents('form').find('input[name=snames]').val(nickname);
};
//获取JS.Store缓存的值
function getActionCacheStore(json){
......@@ -1378,7 +1381,7 @@ jQuery(function($){
$('input[name=id]:checkbox').on('click',function(){
$(this).parents('tr').toggleClass('active');
});
//引用
//引用@20200506
$('body').on('click', '.post-action-quote', function(){
var self = $(this);
var options=parseQueryJson(self.attr('data-query'));
......@@ -1386,13 +1389,13 @@ jQuery(function($){
if(jQuery.isEmptyObject(json)){
return errorMessage('读取原文内容失败');
}
if(json.errors){
return errorMessage(json.errors);
if(json.level ==='err'){
return errorMessage(json.message);
}
if(json.infoTip){
insertEditorHtml('');
$('#reply-tip-message').html('<strong>提示!</strong>&nbsp;'+json.infoTip);
//插入到表单中
//插入到表单中@20200506
$('#quick_reply_form').find('input[name=quote]').val(json.quote);
$('#quick_reply_form').find('input[name=scale]').val(json.scale);
}
......@@ -1489,7 +1492,7 @@ jQuery(function($){
});
return false;
}).trigger('checkEvent');
//快速回复[NW]
//快速回复[NW]@20200506
$('#quick_reply_posts').on('submit', '#quick_reply_form', function(e){
e.preventDefault();
var self = $(this);
......@@ -1585,19 +1588,20 @@ jQuery(function($){
return false;
});
//uid[NW]
$('body').on('mouseleave', '#suggest-uid', function(e){
var self = $(this);
$('body').on('click', '#suggest-btn', function(e){
var self = $('#suggest-uid');
var p = self.parents('.form-group');
if(isBlank(self.val())){
errorMessage('输入收件人的UID');
self.attr('placeholder', '输入收件人的UID').focus();
return;
}
self.attr("disabled","disabled");
$.getJSON($(this).attr('data-handler'), 'value='+self.val(), function( data ){
$.getJSON(self.attr('data-handler'), 'value='+self.val(), function( data ){
if(data.level ==='acc'){
uidDetectionHandler(data.message, p);
}else{
p.addClass('has-error').find('input[name=uid]').removeAttr("disabled").focus();
$('input[name=snames]').val('');
self.addClass('is-invalid').removeAttr("disabled").focus();
}
});
});
......@@ -1700,8 +1704,7 @@ jQuery(function($){
return this.value;
}).get().join(",");
if(isBlank(idString)){
errorMessage('请选择要操作的消息');
return;
return errorMessage('请选择要操作的消息');
}
$.ajax({
url: requestURI,
......@@ -1943,6 +1946,7 @@ jQuery(function($){
}
});
}).trigger('loadDataEvent');
//创建话题:初始化版块[NW]
$('#asyn-board-select').on('initDataEvent', function(){
var self = $(this);
......@@ -2014,7 +2018,7 @@ jQuery(function($){
if(jQuery.isEmptyObject(data)){
return;
}
//drawSpaPageMenu(data);
//
var T = '<div id="toc">'
+ ' <div id="toctitle">{term}</div>'
+ ' <div id="tocbot">'
......@@ -2147,6 +2151,12 @@ jQuery(function($){
}
self.addClass('ld-over running');
self.load(rawdata.uri+' body', function(response, status, xhr){
try{
var err = $.parseJSON(response);
if(err.level && err.level ==='err'){
return (window[self.attr('data-error-function')]).call(this, err);
}
}catch(e){}
self.append(response);
self.removeClass('ld-over running');
try{
......
/**
* jquery 动态分页
* Copyright (c) 2019 xiaofanku
* build on jQuery 3.2.1 & BootStrap v3
* @author xiaofanku <xiaofanku@live.cn>
* @version 0.0.1 - 20191212
*
*/
(function($) {
'use strict';
var pagination = {
/**
* 计算有多少页
* @param {number} totalRecords - 总记录数
* @param {number} pageSize - 每页显示的记录数
* @returns {Object}
*/
getTotalPage: function(totalRecords, pageSize){
var tp = 1;
if(totalRecords > pageSize){
var tp = Math.floor(totalRecords / pageSize);
if(totalRecords % pageSize !== 0){
tp+=1;
}
}
return {
pageSize : pageSize,
pages : tp,
records : totalRecords
};
},
/**
* 获取数据
* @param {string} requestURI - 异步请求的地址
* @param {string} dataType - 请求的数据类型, json|jsonp
* @param {number} pageSize - 每页显示的记录数
* @param {number} page - 当前页码值
* @param {Object} jqEle - 当前的jQuery元素
*/
getData: function(requestURI, dataType, pageSize, page, jqEle){
var self = this; //self.disable();
var formatAjaxParams = {
type: 'get',
cache: false,
data: {},
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: dataType,
async: true,
timeout: 3000
};
formatAjaxParams.url = requestURI;
var postData = {};
postData.pageSize = pageSize;
postData.pageNumber = page;
$.extend(formatAjaxParams.data || {}, postData);
formatAjaxParams.success = function(response){
var a = self.getTotalPage(response.total, pageSize);
// gtx.range=页码范围
// a.pages=总页数
var b = self.calc(page, 5, a.pages);
self.render(b.start, b.end, page, a.pages, jqEle);
if($.isFunction(self.jsonCallbackHandler)){
self.jsonCallbackHandler(response.result);
}
//滚动到顶部
$('html, body').animate({ scrollTop: 0 }, 500);
console.log('[pagination] scroll is top');
};
formatAjaxParams.error = function(jqXHR, textStatus, errorThrown){
};
formatAjaxParams.beforeSend = function(xhr) {
if($.isFunction(self.ajaxBeforeHandler)){
self.ajaxBeforeHandler(xhr);
}
console.log('[pagination] ajax before send exec');
};
formatAjaxParams.complete = function(xhr, textStatus) {
if($.isFunction(self.ajaxCompleteHandler)){
self.ajaxCompleteHandler(xhr, textStatus);
}
//记入历史
recordHistory(page, pageSize);
console.log('[pagination] ajax is complete');
};
$.ajax(formatAjaxParams);
},
/**
* 绑定翻页事件
* @param {Object} page - 所有的配置参数
* @param {Object} jqEle - 当前的jQuery元素
*/
bindEvent: function(finalConfig, jqEle){
var self = this;
$('body').on('click', 'a.previous-btn,a.next-btn', function(e){
e.stopPropagation();
//
var _pageNumber = $(this).parent().attr('data-num');
self.getData(finalConfig.url, finalConfig.dataType, finalConfig.pageSize, parseInt(_pageNumber), jqEle);
return false;
});
$('body').on('click', 'li[data-num]', function(e){
//
var _pageNumber = $(this).attr('data-num');
self.getData(finalConfig.url, finalConfig.dataType, finalConfig.pageSize, parseInt(_pageNumber), jqEle);
});
},
/**
* 渲染HTML
* @param {number} rangeStart - 显示页码值显示的上界
* @param {number} rangeEnd - 显示页码值显示的下界
* @param {number} currentPage - 当前页码值
* @param {number} totalPage - 总页数
* @param {Object} jqEle - 当前的jQuery元素
*/
render: function(rangeStart, rangeEnd, currentPage, totalPage, jqEle){
var pnSelector = '.page-navigation';
var T = ''
+'<nav class="'+pnSelector.substring(1)+'" aria-label="Page navigation">'
+' <ul class="pagination">';
//是否显示前页
if(currentPage > 1){
T +=' <li class="page-item" data-num="'+ (currentPage-1) +'">'
+' <a href="javascript:;" aria-label="Previous" class="previous-btn page-link">'
+' <span aria-hidden="true">&laquo;</span>'
+' </a>'
+' </li>';
}
// Main loop
for(var i = rangeStart; i <= rangeEnd; i++){
if(i == currentPage){
T += '<li class="page-item active"><a href="#" class="page-link">'+ i +'<\/a><\/li>';
}else{
T += '<li class="page-item" data-num="'+ i +'"><a href="javascript:;" class="page-link">'+ i +'<\/a><\/li>';
}
}
//是否显示下页
if(currentPage < totalPage){
T +=' <li class="page-item" data-num="'+ (currentPage+1) +'">'
+' <a href="#" aria-label="Next" class="next-btn page-link">'
+' <span aria-hidden="true">&raquo;</span>'
+' </a>'
+' </li>';
}
T+=' </ul>'
+'</nav>';
jqEle.find('.page-navigation').remove();
jqEle.append(T);
//
if($.isFunction(this.renderCompleteHandler)){
this.renderCompleteHandler(T, pnSelector);
}
},
/**
* 计算显示页码值显示的上下界
* @param {number} currentPage - 当前页码值
* @param {number} pageRange - 页码显示的范围值
* @param {number} totalPage - 总页数
* @returns {Object}
*/
calc: function(currentPage, pageRange, totalPage){
var rangeStart = currentPage - pageRange;
var rangeEnd = currentPage + pageRange;
if(rangeEnd > totalPage){
rangeEnd = totalPage;
rangeStart = totalPage - pageRange * 2;
rangeStart = rangeStart < 1 ? 1 : rangeStart;
}
if(rangeStart <= 1){
rangeStart = 1;
rangeEnd = Math.min(pageRange * 2 + 1, totalPage);
}
return {
start : rangeStart,
end : rangeEnd
};
},
/**
* 合成配置参数
* @param {Object} option - 配置参数
* @returns {Object}
*/
init:function(option){
var config=$.extend({pageSize:20, totalRecords:0, page:1, range:5, url: '', dataType: 'json'}, option);
return config;
}
};
$.fn.pagination = function(option) {
option.page = getCurrentPageNumber();
var gtx = pagination.init(option);
//增加外部回调函数
//拿到数据后的回调
pagination.jsonCallbackHandler = option.jsonCallback || null;
//ajax开始的回调,用以显示loading...
pagination.ajaxBeforeHandler = option.ajaxBefore || null;
//ajax完成后的回调,用以删除loading...
pagination.ajaxCompleteHandler = option.ajaxComplete || null;
//附加回调,在完成HTML分页元素时触发
pagination.renderCompleteHandler = option.randerPageStruct || null;
var _self=this;
// 没有总记录数
pagination.getData(gtx.url, gtx.dataType, gtx.pageSize, gtx.page, _self);
//绑定事件
pagination.bindEvent(gtx, _self);
return this;
};
//无分页查询字符串返回1,有的返回其值
function getCurrentPageNumber(){
//固定的参数:写诗在此(Pagination)
var pnParam = 'p';
//当前浏览器地址栏中的查询参数
var cuQueryString = window.location.search;
if(cuQueryString){
var pn = getQueryString(pnParam, cuQueryString);
return (isBlank(pn))?1:pn;
}
return 1;
};
//设置历史
//https://developer.mozilla.org/en-US/docs/Web/API/History/pushState
function recordHistory(pageNumber, pageSize){
//固定的参数:写诗在此(Pagination)
var pnParam = 'p';
//没有分页参数的地址
var location = clearPageQueryNameURL();
//加入
if(location.indexOf('?')== -1){
location+='?';
}else{
location+='&';
}
location+=pnParam+'='+pageNumber;
//是否考虑页标题中加入第n页
var pageTitle = document.title;
var state = {'page_number': pageNumber, 'page_size': pageSize};
window.history.pushState(state, pageTitle, location);
};
//清掉分页参数的地址
function clearPageQueryNameURL(){
//固定的参数:写诗在此(Pagination)
//var pnParam = 'p=';
//当前浏览器地址栏中的地址
var cuLocation = window.location.href;
var cuQueryString = window.location.search;
if(cuQueryString){
cuLocation=cuLocation.substring(0, cuLocation.indexOf('?'));
cuQueryString = cuQueryString.replace(/[?&]p=\d+/g, '').substring(1);
if(!isBlank(cuQueryString)){
cuLocation+='?'+cuQueryString;
}
}
return cuLocation;
};
/**
* Get the value of a querystring
* @param {String} field The field to get the value of
* @param {String} url The URL to get the value from (optional)
* @return {String} The field value
*/
function getQueryString(field, url) {
var href = url ? url : window.location.href;
var reg = new RegExp( '[?&]' + field + '=([^&#]*)', 'i' );
var string = reg.exec(href);
return string ? string[1] : null;
};
})(jQuery);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册