提交 9713ccdc 编写于 作者: 街头小贩's avatar 街头小贩

js更新

上级 8042a35b
......@@ -23,39 +23,84 @@ var jForum = (function ($) {
}).trigger('initEditorEvent');
//
//分页加载数据
$('.page_navigation').on('initDataEvent', function (e) {
var _pn = $(e.target);
var rawdata = {};
rawdata.uri = _pn.attr('data-handler');
rawdata.data = util.parseQueryJson(_pn.attr('data-query'));
rawdata.callFun = _pn.attr('data-function');
rawdata.defFun = _pn.attr('data-deferred') || null;
if (!$.isEmptyObject(rawdata.data)) {
rawdata.uri += '?' + $.param(rawdata.data);
}
//Deferred
var def = $.Deferred();
_pn.pagination({
url: rawdata.uri,
ajaxBefore: function () {
loading_control.start();
},
ajaxComplete: function () {
loading_control.stop();
},
randerPageStruct: function (pageHtmlStruct, pnSelector) {
var extEle = $('#page_another_navigation');
extEle.find(pnSelector).remove();
extEle.append(pageHtmlStruct);
},
jsonCallback: function (jsonArray) {
if (jQuery.isEmptyObject(jsonArray)) {
return;
}
var fn = jForum.template[rawdata.callFun];
if (typeof fn === "function") {
fn.call(this, jsonArray);
def.resolve();
}
}
});
//
$.when(def).done(function () {
var fn = jForum.defer[rawdata.defFun];
if (typeof fn === "function") {
fn.call(this);
}
}).fail(function () {
console.log('[page_navigation] def fail');
});
}).trigger('initDataEvent');
//加载版块组[NW]
$('.asyn-loadate-select').on('initDataEvent', function(e){
$('.asyn-loadate-select').on('initDataEvent', function (e) {
var _ls = $(e.target); var currentOption = _ls.attr('data-current') || '-1';
$.getJSON(_ls.attr('data-handler'), function( data ){
var optionData='';
$.each( data, function( index, item ) {
$.getJSON(_ls.attr('data-handler'), function (data) {
var optionData = '';
$.each(data, function (index, item) {
optionData += '<option value="%V%">%T%</option>'.replace('%V%', item.id).replace('%T%', item.title);
});
if(optionData.length>0){
_ls.append(optionData).find('option[value='+currentOption+']').attr("selected", true);
_ls.select2({theme: 'bootstrap4'});
if (optionData.length > 0) {
_ls.append(optionData).find('option[value=' + currentOption + ']').attr("selected", true);
_ls.select2({ theme: 'bootstrap4' });
}
});
}).trigger('initDataEvent');
//创建话题:初始化版块[NW]
$('#asyn-board-select').on('initDataEvent', function(e){
$('#asyn-board-select').on('initDataEvent', function (e) {
var _bs = $(e.target);
if(_bs.attr('data-current') === '0'){
if (_bs.attr('data-current') === '0') {
return; //没有选择版块,不初始化
}
var parentSelect = $('#asyn-volumes-select').attr('data-current');
if(util.isBlank(parentSelect)){
if (util.isBlank(parentSelect)) {
return; //没有选择版块组(卷),不初始化
}
$.getJSON(_bs.attr('data-handler'), 'volumes='+parentSelect, function( data ){
var optionData='';
$.each( data, function( index, item ) {
$.getJSON(_bs.attr('data-handler'), 'volumes=' + parentSelect, function (data) {
var optionData = '';
$.each(data, function (index, item) {
optionData += '<option value="%V%">%T%</option>'.replace('%V%', item.id).replace('%T%', item.title);
});
if(optionData.length>0){
_bs.append(optionData).find('option[value='+_bs.attr('data-current')+']').attr("selected", true);
_bs.select2({theme: 'bootstrap4'});
if (optionData.length > 0) {
_bs.append(optionData).find('option[value=' + _bs.attr('data-current') + ']').attr("selected", true);
_bs.select2({ theme: 'bootstrap4' });
}
});
}).trigger('initDataEvent');
......@@ -64,43 +109,43 @@ var jForum = (function ($) {
var selectBoard = e.params.data.id;
var selectChild = $('#asyn-board-select');
$.getJSON(selectChild.attr('data-handler'), 'volumes='+selectBoard, function( data ){
var optionData='';
$.each( data, function( index, item ) {
$.getJSON(selectChild.attr('data-handler'), 'volumes=' + selectBoard, function (data) {
var optionData = '';
$.each(data, function (index, item) {
optionData += '<option value="%V%">%T%</option>'.replace('%V%', item.id).replace('%T%', item.title);
});
if(optionData.length>0){
if (optionData.length > 0) {
//清空旧值
selectChild.find('option').remove();
selectChild.append(optionData).find('option[value='+selectChild.attr('data-current')+']').attr("selected", true);
$('.selectpicker').select2({theme: 'bootstrap4'});
selectChild.append(optionData).find('option[value=' + selectChild.attr('data-current') + ']').attr("selected", true);
$('.selectpicker').select2({ theme: 'bootstrap4' });
}
});
});
//话题:收藏|点赞,版块:收藏
$('.action-cache').bind('initEvent', function(e){
var _ac=$(e.target);
$('.action-cache').bind('initEvent', function (e) {
var _ac = $(e.target);
//是否存在缓存
var action = _ac.attr('data-action');
var connect = _ac.attr('data-action-key');
//存在设置为disable
var cacheVal = store.get(action+'#'+connect);
if(!util.isBlank(cacheVal) && cacheVal){
var cacheVal = store.get(action + '#' + connect);
if (!util.isBlank(cacheVal) && cacheVal) {
var d = _ac.text().trim();
_ac.prop('disabled', true).html(self.html().replace(d,""+d));
_ac.prop('disabled', true).html(_ac.html().replace(d, "" + d));
}
}).trigger('initEvent');
//member
jForum.member.init();
//ajax
$('[data-result="loader.jsonp"]').on('loadDataEvent', function (e) {
$('[data-result="loader.jsonp"]').on('loadDataEvent', function (e) { //topic/move
var _b = $(e.target);
var rawdata = {};
rawdata.uri = _b.attr('data-handler');
rawdata.callFun = _b.attr('data-function');
rawdata.data = util.parseQueryJson(_b.attr('data-query'));
rawdata.container = _b.attr('data-container') || null;
console.log(rawdata);
//console.log(rawdata);
loader.jsonpLoader(rawdata.uri, rawdata.callFun, rawdata.data, rawdata.container);
}).trigger('loadDataEvent');
$('[data-result="loader.json"]').on('loadDataEvent', function (e) {
......@@ -110,11 +155,11 @@ var jForum = (function ($) {
rawdata.data = util.parseQueryJson(_a.attr('data-query') || '');
rawdata.allowEmpty = $.parseJSON(_a.attr('data-empty-show') || 'true');
rawdata.callFun = _a.attr('data-template-function');
console.log(rawdata);
//console.log(rawdata);
loader.jsonLoader(rawdata.uri, rawdata.callFun, rawdata.data, rawdata.allowEmpty, _a);
}).trigger('loadDataEvent');
$('[data-result="click.jsonp"]').on('click', 'button[data-toggle="dropdown"]', function (e) {
var parent = $(e.target).parent();
$('[data-result="click.jsonp"]').on('click', 'button[data-toggle="dropdown"]', function (e) { //topic[board]/view
var parent = $(this).parent(); //改用e.target有一个弹出不能用
var rawdata = {};
rawdata.uri = parent.attr('data-handler');
rawdata.data = util.parseQueryJson(parent.attr('data-query'));
......@@ -127,10 +172,10 @@ var jForum = (function ($) {
}
rawdata.data.box = currentId;
}
console.log(rawdata);
//console.log(rawdata);
loader.clickJsonpLoader(rawdata.uri, rawdata.callFun, rawdata.data, rawdata.data.box);
});
$('[data-result="batch.jsonp"]').on('loadDataEvent', function (e) {
$('[data-result="batch.jsonp"]').on('loadDataEvent', function (e) { //[/search|/board|/volumes]/index.jsp
var _c = $(e.target);
var rawdata = {};
rawdata.uri = _c.attr('data-handler');
......@@ -138,7 +183,7 @@ var jForum = (function ($) {
rawdata.queryParamKey = _c.attr('data-param');
rawdata.idSelector = _c.attr('data-record');
rawdata.data = util.parseQueryJson(_c.attr('data-query'));
console.log(rawdata);
//console.log(rawdata);
loader.batchJsonpLoader(rawdata.uri, rawdata.callFun, rawdata.data, rawdata.queryParamKey, rawdata.idSelector);
}).trigger('loadDataEvent');
$('.load_content_section').on('initDataEvent', function (e) {
......@@ -147,7 +192,7 @@ var jForum = (function ($) {
rawdata.uri = _d.attr('data-handler');
rawdata.callFun = _d.attr('data-function');
rawdata.data = util.parseQueryJson(_d.attr('data-query'));
console.log(rawdata);
//console.log(rawdata);
loader.bodyLoader(rawdata.uri, rawdata.callFun, rawdata.data, _d);
}).trigger('initDataEvent');
$('body').on('click', '.action-cmd', function (e) {
......@@ -157,20 +202,135 @@ var jForum = (function ($) {
rawdata.data = util.parseQueryJson(_f.attr('data-query'));
rawdata.callFun = _f.attr('data-function');
rawdata.tip = $.parseJSON(_f.attr('data-acctip') || 'true');
console.log(rawdata);
//console.log(rawdata);
loader.action(rawdata.uri, rawdata.callFun, rawdata.data, rawdata.tip, _f);
});
//话题/回复/会员统计
$('#online-list-stats').on('initDataEvent', function (e) {
var _g = $(e.target);
var boardStatsURI = _g.attr('data-board');
var memberStatsURI = _g.attr('data-member');
getBoardStats(boardStatsURI).then(getMemberStats(memberStatsURI)).fail(function () { console.log("出错啦!"); });
}).trigger('initDataEvent');
//版块导航的选中跳转
$('.board-navigator-select').on('click', function (e) {
var _h = $(e.target); _h.html('正在加载数据');
var currentId = "board-navigator-" + util.randomAlphaNumeric(8);
var parent = _h.parents('div.board-navigator-box'); parent.attr('id', currentId);
var rawdata = {};
rawdata.uri = parent.attr('data-handler');
rawdata.callFun = parent.attr('data-function');
rawdata.data = { 'box': currentId };
//console.log(rawdata);
loader.clickJsonpLoader(rawdata.uri, rawdata.callFun, rawdata.data, currentId);
});
//回复点赞
$('body').on('click', '.mood-section a.mood-action', function(e){
var _j=$(this); var parent=_j.parents('.mood-section');
var rawdata = {};
rawdata.uri = '/posts/mood/like';
rawdata.data = {id: parent.attr('data-mood')};
rawdata.data.mood = _j.attr('data-action');
rawdata.callFun = 'updateMoodCounter';
//console.log(rawdata);
loader.action(rawdata.uri, rawdata.callFun, rawdata.data, false, _j);
});
// 收件箱内容页中的加载更多
$('.letter-more-action').on('click', function(){
var pbx = $(this).parents('.letter-item-collect');
var rawdata = {};
rawdata.uri = pbx.attr('data-handler');
rawdata.page = parseInt(pbx.attr('data-page') || '1') +1;
rawdata.ele = pbx.attr('id');
//
var self = $(this);
self.addClass('disabled').html('正在玩命加载');
$.getJSON(rawdata.uri+'&p='+rawdata.page, function( data ){
//self是否显示
if(jQuery.isEmptyObject(data)){
return;
}
//遍历data.result
$.each(data.result, function(index, item){
jForum.template.drawLetterHistoryMessage(item, rawdata.ele);
});
pbx.attr('data-page', rawdata.page).scrollTop();
var letter = $.parseJSON(data.letter);
if(letter.more){
self.removeClass('disabled').html('更多历史消息');
}else{
self.hide();
}
});
});
//提示
$('[data-toggle="tooltip"]').tooltip();$('[data-toggle="popover"]').popover();
//防止多次提交
$('[data-submit="once"]').one('submit', function(){
var submitBtn = $(this).find('[type="submit"]');
submitBtn.prop('disabled', true).val(submitBtn.attr('data-submit-disabled') || '数据发送中');
return true;
});
//像册放大图
$(document).on('click', '[data-toggle="lightbox"]', function(event) {
event.preventDefault();
$(this).ekkoLightbox({alwaysShowClose:true});
});
//侧边栏的工具按钮
$('#sideTool').sideToolBar();
//加载今天的公告
showTodayNotice();
}
function showTodayNotice(){
$.getJSON(BASE+'/message/notice', function( json ){
//版块主页的 汇总统计
function getBoardStats(pURI) {
var def = $.Deferred();
$.getJSON(pURI, function (json) {
$('#online-list-stats').find('#stats-replies').html(json.replies);
$('#online-list-stats').find('#stats-threads').html(json.threads);
def.resolve();
});
return def.promise();
};
//版块主页的 会员统计
function getMemberStats(pURI) {
$.getJSON(pURI, function (json) {
$('#online-list-stats').find('#stats-member').html(json.members);
$('#stats-onlines').html(json.onlines);
$('#stats-onlines-member').html(json.onlines);
var rm = $.parseJSON(json.recentMember);
if (!$.isEmptyObject(rm)) {
var T = '<a href="/member/%MID%.xhtml" class="username">%MN%</a>'.replace('%MID%', rm.id).replace('%MN%', rm.title);
$('#online-list-stats').find('#stats-recent-member').html(T);
}
});
};
function showTodayNotice() {
$.getJSON(BASE + '/message/notice', function (json) {
jForum.template.poperNotice(json);
});
};
//jQuery extends function
$.fn.pagination = function (option) {
var gtx = new jForum.pagination(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;
// 没有总记录数
gtx.getData(gtx.getPage(), _self);
//绑定事件
gtx.bindEvent(_self);
return this;
};
$.fn.sideToolBar = function () {
var _self = this;
var baseTool = _self.attr('data-tools');
......@@ -208,5 +368,82 @@ var jForum = (function ($) {
$('#topTopBar').fadeOut(500);
}
});
return { init: init };
return { init: init};
})(jQuery);
jForum.defer = (function () {
var da = {};
//回复加载后的def
da.gatherMood = function(){
var postsIdStr = $('.dynamic-posts-record').find('.posts-body').map(function(){
return this.id.replace('posts-', '');
}).get().join(",");
if(postsIdStr.length == 0){
return;
}
var requestURI = '/posts/mood/list/jsonp';
$.ajax({
url: requestURI,
jsonp: 'callback',
dataType: 'jsonp',
data: 'ids='+postsIdStr,
success: function( response ) {
try{
jForum.template.drawMoodResult(response);
}catch(e){ }
}
});
};
//回复点赞计数更新
da.updateMoodCounter = function(jqEle){
var cc = jqEle.find('span');
var upC = 1;
if(cc.length == 1){
upC += parseInt(cc.html());
}else{
cc = $('<span></span>').appendTo(jqEle);
}
cc.html(upC);
};
//消息收件箱中条目的未读
da.unreadInboxMessageSize = function(){
var requestURI = '/message/size';
var params = $('#member-message-records').find('.badge').map(function(){
return this.id.replace('notice_', '');
}).get().join(",");
//
$.getJSON(requestURI+'?sender='+params, function( data ){
if(jQuery.isEmptyObject(data)){
return $('.badge').hide();
}
$.each(data, function(index, item) {
$('#notice_'+item.id).addClass('badge-info').html(item.title);
});
//没有的
$('.badge').not( ".badge-info").hide();
});
};
//版块中的两个收藏按钮
da.updateBoardFavoriteCounter = function(jqEle){
var cp = jqEle.parent();
var cc = cp.find('.favoriteCounter').html();
$('.favoriteCounter').html(parseInt(cc) + 1);
$('a[data-action=star-board]').addClass('disabled').html(jqEle.html().replace("收藏","已收藏"));
};
//话题内容页中点击收藏后的回调函数
da.updateFavoriteCounter = function(jqEle){
var cp = jqEle.parent();
var cc = cp.find('.favoriteCounter').html();
cp.find('.favoriteCounter').html(parseInt(cc) + 1);
//更新
jqEle.addClass('disabled').html(jqEle.html().replace("收藏","已收藏"));
};
//话题内容页中点赞后的回调函数
da.updateLikeCounter = function(jqEle){
var cp = jqEle.parent();
var cc = cp.find('.likeCounter').html();
cp.find('.likeCounter').html(parseInt(cc) + 1);
//更新
jqEle.addClass('disabled').html(jqEle.html().replace("","已赞"));
};
return da;
})();
\ No newline at end of file
jForum.pagination = (function () {
jForum.pagination = (function ($) {
class Page {
constructor(option) {
this.config = $.extend({ pageSize: 20, totalRecords: 0, page: 1, range: 10, url: '', dataType: 'json' }, option);
option.page = getCurrentPageNumber();
this.config = $.extend({ pageSize: 20, totalRecords: 0, range: 10, url: '', dataType: 'json' }, option);
}
getPage(){
return this.config.page;
}
/**
* 计算有多少页
* @param {number} totalRecords - 总记录数
* @param {number} pageSize - 每页显示的记录数
* @returns {Object}
* @returns 总页数
*/
getTotalPage(totalRecords, pageSize) {
var tp = (totalRecords == 0) ? -1 : 1;
if (totalRecords > pageSize) {
var tp = Math.floor(totalRecords / pageSize);
if (totalRecords % pageSize !== 0) {
_getTotalPage(totalRecords, pageSize) {
var tr = totalRecords;
var ps = pageSize;
var tp = (tr == 0) ? -1 : 1;
if (tr > ps) {
var tp = Math.floor(tr / ps);
if (tr % ps !== 0) {
tp += 1;
}
}
return {
pageSize: pageSize,
pages: tp,
records: totalRecords
};
return tp;
}
/**
* 获取数据
* @param {string} requestURI - 异步请求的地址
* @param {string} dataType - 请求的数据类型, json|jsonp
* @param {number} pageSize - 每页显示的记录数
* @param {number} page - 当前页码值
* @param {Object} jqEle - 当前的jQuery元素
*/
getData(requestURI, dataType, pageSize, page, jqEle) {
var self = this; //self.disable();
getData(page, jqEle) {
var curi = this.config.url;
var dt = this.config.dataType;
//
var formatAjaxParams = {
type: 'get',
cache: false,
data: {},
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
dataType: dataType,
dataType: dt,
async: true,
timeout: 3000
};
formatAjaxParams.url = requestURI;
var postData = {};
postData.pageSize = pageSize;
formatAjaxParams.url = curi;
var postData = {}; var _curIns = this;
postData.pageSize = this.config.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, 10, a.pages);
self.render(b.start, b.end, page, a.pages, jqEle);
if ($.isFunction(self.jsonCallbackHandler)) {
self.jsonCallbackHandler(response.result);
var a = _curIns._getTotalPage(response.total, response.size);
// 当前页
// a=总页数
var b = _curIns._calc(response.page, a);
_curIns.render(b.start, b.end, response.page, a, jqEle);
if ($.isFunction(_curIns.config.jsonCallback)) {
_curIns.config.jsonCallback(response.result);
}
//滚动到顶部
$('html, body').animate({ scrollTop: 0 }, 500);
......@@ -62,40 +64,41 @@ jForum.pagination = (function () {
};
formatAjaxParams.error = function (jqXHR, textStatus, errorThrown) {
};
formatAjaxParams.beforeSend = function (xhr) {
if ($.isFunction(self.ajaxBeforeHandler)) {
self.ajaxBeforeHandler(xhr);
if ($.isFunction(_curIns.config.ajaxBefore)) {
_curIns.config.ajaxBefore(xhr);
}
console.log('[pagination] ajax before send exec');
};
formatAjaxParams.complete = function (xhr, textStatus) {
if ($.isFunction(self.ajaxCompleteHandler)) {
self.ajaxCompleteHandler(xhr, textStatus);
if ($.isFunction(_curIns.config.ajaxComplete)) {
_curIns.config.ajaxComplete(xhr, textStatus);
}
//记入历史
recordHistory(page, pageSize);
//recordHistory(page, pageSize);
console.log('[pagination] ajax is complete');
};
$.ajax(formatAjaxParams);
}
/**
* 绑定翻页事件
* @param {Object} page - 所有的配置参数
* @param {Object} jqEle - 当前的jQuery元素
*/
bindEvent(finalConfig, jqEle) {
var self = this;
bindEvent(jqEle) {
var _curIns = this;
$('body').on('click', 'a.previous-btn,a.next-btn', function (e) {
e.stopPropagation();
var _ele = $(e.target);
//
var _pageNumber = $(this).parent().attr('data-num');
self.getData(finalConfig.url, finalConfig.dataType, finalConfig.pageSize, parseInt(_pageNumber), jqEle);
var _pageNumber = _ele.parent().attr('data-num');
_curIns.getData(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);
$('body').on('click', 'li[data-num]>a.page-link', function (e) {
var _ele = $(this);
var _pageNumber = _ele.parent().attr('data-num');
_curIns.getData(parseInt(_pageNumber), jqEle);
});
}
/**
......@@ -143,41 +146,32 @@ jForum.pagination = (function () {
jqEle.find('.page-navigation').remove();
jqEle.append(T);
//
if ($.isFunction(this.renderCompleteHandler)) {
this.renderCompleteHandler(T, pnSelector);
if ($.isFunction(this.config.randerPageStruct)) {
this.config.randerPageStruct(T, pnSelector);
}
}
/**
* 计算显示页码值显示的上下界
* @param {number} currentPage - 当前页码值
* @param {number} pageRange - 页码显示的范围值
* @param {number} totalPage - 总页数
* @returns {Object}
*/
calc(currentPage, pageRange, totalPage) {
var nR = Math.floor(currentPage / pageRange);
if (currentPage % pageRange > 0) {
_calc(currentPage, totalPage) {
var cp = this.config.range;
var nR = Math.floor(currentPage / cp);
if (currentPage % cp > 0) {
nR += 1;
}
var rangeEnd = nR * pageRange;
var rangeEnd = nR * cp;
if (rangeEnd > totalPage) {
rangeEnd = totalPage;
}
var rangeStart = nR * pageRange - pageRange + 1;
var rangeStart = nR * cp - cp + 1;
return {
start: rangeStart,
end: rangeEnd
};
}
/**
* 合成配置参数
* @param {Object} option - 配置参数
* @returns {Object}
*/
init(option) {
var config = $.extend({ pageSize: 20, totalRecords: 0, page: 1, range: 10, url: '', dataType: 'json' }, option);
return config;
}
}
//无分页查询字符串返回1,有的返回其值
function getCurrentPageNumber() {
......@@ -187,7 +181,7 @@ jForum.pagination = (function () {
var cuQueryString = window.location.search;
if (cuQueryString) {
var pn = getQueryString(pnParam, cuQueryString);
return (isBlank(pn)) ? 1 : pn;
return (jForum.utils.isBlank(pn)) ? 1 : pn;
}
return 1;
};
......@@ -220,7 +214,7 @@ jForum.pagination = (function () {
if (cuQueryString) {
cuLocation = cuLocation.substring(0, cuLocation.indexOf('?'));
cuQueryString = cuQueryString.replace(/[?&]p=\d+/g, '').substring(1);
if (!isBlank(cuQueryString)) {
if (!jForum.utils.isBlank(cuQueryString)) {
cuLocation += '?' + cuQueryString;
}
}
......@@ -239,4 +233,4 @@ jForum.pagination = (function () {
return string ? string[1] : null;
};
return Page;
})();
\ No newline at end of file
})(jQuery);
\ No newline at end of file
......@@ -328,6 +328,384 @@ jForum.template = (function ($) {
var rs = $.extend(obj, {"APP":BASE});
targetEleSelector.append(Mustache.render(T, rs));
};
//首页话题列表加载像册的回调
tmp.packAlbumHoldSection = function(json){
if(jQuery.isEmptyObject(json)){
return;
}
$('div[data-album]').each(function(){
var tmpBody = $(this);
var aid = tmpBody.attr('data-album');
var rs = {};
rs.result = json[aid];
var T='<ul class="list-inline album-thumb">'
+'{#result}'
+' <li class="list-inline-item"><a href="{link}" data-toggle="lightbox" data-title="{caption}" data-gallery="threads-{album}-gallery" data-type="image"><img class="lazyload" src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-original="{thumbnail}"/></a></li>'
+'{/result}'
+' </ul>';
Mustache.parse(T, ['{', '}']);
tmpBody.append(Mustache.render(T, rs)).find('img.lazyload').lazyload();
});
};
//版块首页加载版块的统计
tmp.loadBoardStatsResult = function(json, element){
if(jQuery.isEmptyObject(json.result)){
return;
}
$.each(json.result, function(index, item){
var tb = $('[data-board="'+item.board+'"]');
tb.find('.threads').html(item.topices);
tb.find('.replies').html(item.postses);
tb.find('.today-counter').html('('+item.todayTopics+')');
//游客操作的不显示
if(parseInt(item.recentAuthor)>0){
var T = ''
+'<dfn>Last posts</dfn>'
+'<a href="{APP}{recentLink}" title="{recentTitle}" class="lastsubject">{recentTitle}</a> '
+'<a href="{APP}/member/{recentAuthor}.xhtml" class="latest-member-color">{recentAuthorNames}</a> &#187; {recentDate}';
Mustache.parse(T, ['{', '}']);
var rs = $.extend(item, {"APP":BASE});
tb.find('.latest').append(Mustache.render(T, rs));
}
});
};
//话题|版块的工具菜单
tmp.buildMenuList = function(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;
if(item.ajax){
tmp='<a href="javascript:;" class="dropdown-item action-cmd" data-handler="%URL%">%UA%</a>';
}else{
tmp='<a class="dropdown-item" href="%URL%" target="_blank">%UA%</a>';
}
T+=tmp.replace('%URL%', BASE+item.uri).replace('%UA%', item.anchor);
});
if(kt > tmpSize){
T+='<div class="dropdown-divider"></div>';
}
tmpSize += 1;
});
jqEle.append(T);
};
//底部的版块导航
tmp.buildBoardNavigateSelect = function(json){
//生成select
var selectEleWrox = $('#'+json.element);
var selectEle = $('<select class="form-control" aria-hidden="true"></select>').appendTo(selectEleWrox);
//
var selectData=new Array();
$.each(json.result, function(key,value){
var dataItem ={};
dataItem.text = key;
dataItem.children = new Array();
$.each(value, function(innerIndex,innerObj){
$.each(innerObj, function (attrName, attrValue) {
dataItem.children.push({id: attrName, text: attrValue});
});
});
selectData.push(dataItem);
});
var sob = selectEle.select2({
theme: 'bootstrap4',
data: selectData
});
sob.on("select2:select", function (e) {
//选中的值是?
var selectBoard = e.params.data.id;
if(selectBoard && !jForum.utils.isBlank(selectBoard)){
window.location.href = BASE+'/board/'+selectBoard+'.xhtml';
}
});
//显示
selectEleWrox.find('p.board-navigator-select').remove();
sob.select2("open");
};
//版块话题的动态加载回调函数
tmp.drawThreads = function(jsonArray){
var targetEleSelector = $('#board_topic_collect');
targetEleSelector.find('.dynamic-topic-record').remove();
var obj = {};
obj.result = jsonArray;
var T='{#result}'
+'<li class="board_item dynamic-topic-record">'
+' <dl class="icon topic_{status}">'
+' <dt>'
+' <div class="board_item_title">'
+' <article class="forum-article-header">'
+' {#oneDay}<span class="label" title="新鲜的">&#x1F31F</span> {/oneDay}'
+' {#top}<span class="label" title="置顶话题">&#x1F4CC</span> {/top}'
+' {#best}<span class="label" title="精华话题">&#x1F48E</span> {/best}'
+' {#image}<span class="label" title="图片话题">&#x1F304</span> {/image}'
+' {#hot}<span class="label" title="很火噢">&#x1F525</span> {/hot}'
+' <a href="{APP}{boardLink}?category={categoryKey}">[{category}]</a> '
+' <a href="{APP}{link}" class="forumtitle">{title}</a>'
+' </article>'
+' <a class="txtline" href="{APP}/member/{author}.xhtml">{authorNames}</a> &#187; {date}'
+' </div>'
+' </dt>'
+' <dd class="replies wp10 stats-item">{replies}<dfn>Replies</dfn></dd>'
+' <dd class="views wp10 stats-item">{views}<dfn>Views</dfn></dd>'
+' <dd class="latest">{#recent}'
+' <span class="last-posts-avatar">'
+' <img src ="{APP}/member/avatar/{recentAuthor}.png" width="32px" height="32px"/>'
+' </span>'
+' <span class="last-posts">'
+' <a href="{APP}/member/{recentAuthor}.xhtml" class="latest-member-color">{recentAuthorNames}</a>'
+' <br/>'
+' {recentDate}'
+' </span>{/recent}'
+' </dd>'
+' </dl>'
+'</li>{/result}';
var extRS={
recent : function(){
return parseInt(this.recentAuthor) > 0;
},
APP : BASE
};
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, extRS);
targetEleSelector.append(Mustache.render(T, rs));
};
//话题回复的动态加载回调函数
tmp.drawReplier = function(jsonArray){
var targetEleSelector = $('#topic_posts_collect');
targetEleSelector.find('.dynamic-posts-record').remove();
var obj = {};
obj.result = jsonArray;
var T='{#result}'
+'<div class="topic_posts dynamic-posts-record">'
+' <div class="topic_posts_item">'
+' <dl class="topic_posts_item_left" data-handler="{APP}/member/profile.json?id={author}">'
+' <dt style="padding-top: 20px;padding-left: 20px;width:180px">'
+' <div class="posts-member-avatar">'
+' <a href="javascript:;" class="avatar poper-member-menu">'
+' <img class="avatar" src="{APP}/member/avatar/{author}.png" alt="User avatar" />'
+' </a>'
+' </div>'
+' <a href="{APP}/member/{author}.xhtml" class="member-info"> <span class="member-{author}-label member-{authorStyle}">{authorNames}</span></a>'
+' </dt>'
+' <dd>{authorGroup}</dd>'
+' {#master}<dd><small class="badge badge-dark">楼主</small></dd>{/master}'
+' </dl>'
+' <div class="topic_posts_item_right">'
+' <div id="posts-{id}" class="posts-body">'
+' <ul class="posts-buttons">'
+' <li><a href="javascript:;" class="action-cmd delete-post" data-handler="{APP}/posts/delete" data-query="id:{id}"><i class="ico-sm mdi mdi-delete" aria-hidden="true"></i><span>删除</span></a></li>'
+' <li><a href="javascript:;" class="post-action-quote" data-handler="{APP}/posts/quote/data.json" data-query="id:{id}"><i class="ico-sm mdi mdi-quote"></i><span>回复</span></a></li>'
+' <li><a href="javascript:;" class="post-action-report" data-handler="{APP}/posts/report" data-query="id:{id}"><i class="ico-sm mdi mdi-flag"></i><span>举报</span></a></li>'
+' <li><a name="#posts-{id}">{floor}<sup>#</sup></a></li>'
+' </ul>'
+' <p class="posts-member">'
+' <a href="{APP}/member/{author}.xhtml">{authorNames} @u{author}</a>&nbsp;&nbsp;&#187;&nbsp;&nbsp; '
+' <i class="ico-sm mdi mdi-time" aria-hidden="true"></i> {date}'
+' </p>'
+' <div class="posts-body-content">'
+' {#block}<p class="alert alert-danger"><strong>提示:</strong> 作者被禁止发言或内容自动屏蔽</p>{/block}'
+' {^block}'
+' {&content}{&modify}'
+' {/block}'
+' <div class="mood-section" data-mood="{id}">'
+' <a href="javascript:;" title="支持" role="button" class="btn-light btn-sm mood-action" data-action="1" id="{id}-likes"><i class="mdi mdi-thumb-up" aria-hidden="true"></i></a>'
+' <a href="javascript:;" title="不赞同" role="button" class="btn-light btn-sm mood-action" data-action="2" id="{id}-hates"><i class="mdi mdi-thumb-down" aria-hidden="true"></i></a>'
+' </div>'
+' </div>'
+' <div class="posts-member-signature member-{author}-signature">{authorSignature}</div>'
+' </div>'
+' </div>'
+' </div>'
+'</div>{/result}';
var extRS={
modify : function(){
return this.modifyDate.length == 0?'':'<p class="alert alert-warning">回复最近由 '+this.modifyer+''+this.modifyDate+' 编辑</p>';
},
APP : BASE
};
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, extRS);
targetEleSelector.append(Mustache.render(T, rs));
//图片的懒加载
targetEleSelector.find('img.lazyload').lazyload();
};
//会员中心的历史记录
tmp.drawActionHistory = function(jsonArray){
var targetEleSelector = $('#member-home-actions');
targetEleSelector.find('.home-record-item').remove();
var obj = {};
obj.result = jsonArray;
var T ='{#result}'
+' <div class="home-record-item">'
+' <div class="record-item-body">'
+' <h6 class="record-item-heading"><a href="{APP}{link}">{title}</a></h6>'
+' <span>{actionTitle}&nbsp;&#187;&nbsp;{actionDate}</span>'
+' </div>'
+' </div>{/result}';
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, {"APP":BASE});
targetEleSelector.append(Mustache.render(T, rs));
};
//个人中心消息收件箱回调
tmp.memberInboxTemplate = function(jsonArray){
var targetEleSelector = $('#member-message-records');
var obj = {};
obj.result = jsonArray;
var T ='<ul class="media-list" style="padding: 10px 20px;">{#result}'
+' <li class="media letter-item">'
+' <div class="media-left mr-3">'
+' {#robot}<img style="width: 64px; height: 64px;" class="img-circle media-object" src="{APP}/member/avatar/0.png" title="message robot">{/robot}'
+' {^robot}<a href="{APP}{senderURI}"><img style="width: 64px; height: 64px;" class="img-circle media-object" src="{APP}/member/avatar/{sender}.png" title="{senderNickname}"></a>{/robot}'
+' </div>'
+' <div class="media-body">'
+' <h6 class="media-heading">{senderNickname} &nbsp;<span id="notice_{sender}" class="badge">0</span><span class="float-right"><i class="ico-sm mdi mdi-time"></i>&nbsp;{datetime}</span></h6>'
+' <div><a href="{APP}/message/view?sender={sender}" target="_blank">{subject}</a></div>'
+' </div>'
+' </li>{/result}</ul>';
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, {"APP":BASE});
targetEleSelector.append(Mustache.render(T, rs));
};
//个人中心消息发件箱回调
tmp.memberOutboxTemplate = function(jsonArray){
var targetEleSelector = $('#member-message-records');
var obj = {};
obj.result = jsonArray;
var T ='<ul class="media-list" style="padding: 10px 20px;">{#result}'
+' <li class="media letter-item">'
+' <div class="media-left mr-3">'
+' {#everyone}<img style="width: 64px; height: 64px;" class="img-circle media-object" src="{APP}/member/avatar/0.png" title="message robot">{/everyone}'
+' {^everyone}<a href="{APP}{receiverURI}"><img style="width: 64px; height: 64px;" class="img-circle media-object" src="{APP}/member/avatar/{receiver}.png" title="{receiverNickname}"></a>{/everyone}'
+' </div>'
+' <div class="media-body">'
+' <h6 class="media-heading">{&reces} &nbsp;<small>[{category}]</small><span class="float-right"><i class="ico-sm mdi mdi-time"></i>&nbsp;{datetime}</span></h6>'
+' <div class="letter-item-content">'
+' <p>{&content}</p>'
+' </div>'
+' </div>'
+' </li>{/result}</ul>';
var extRS={
reces : function(){
var tmp=''; var rs = this.receives;
for (var i = 0, len = rs.length; i < len; ++i) {
var rmid = rs[i].id;
var rmnm = rs[i].nickname;
tmp += '<a href="'+BASE+'/member/'+rmid+'.xhtml">'+rmnm+'</a>';
if(i< len -1){
tmp +'&nbsp;,&nbsp;';
}
}
return tmp;
},
APP : BASE
};
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, extRS);
targetEleSelector.append(Mustache.render(T, rs));
};
//会员中心的话题|回复
tmp.drawMHomeRecord = function(jsonArray){
var targetEleSelector = $('#member-home-records');
targetEleSelector.find('.home-record-item').remove();
var obj = {};
obj.result = jsonArray;
var T ='{#result}'
+' <div class="home-record-item">'
+' <div class="record-item-body">'
+' <h6 class="record-item-heading"><a href="{APP}{link}">{title}</a></h6>'
+' <span>楼主: <a href="{APP}{publisherURI}">{publisher}</a></span>'
+' <span>发布日期: {publishDate}</span>'
+' {#reply}'
+' <span>最近回复: <a href="{APP}{replierURI}">{replier}</a></span>'
+' <span>&#187; {replyDate}</span>'
+' {/reply}'
+' </div>'
+' </div>{/result}';
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, {"APP":BASE});
targetEleSelector.append(Mustache.render(T, rs));
};
//会员中心的点赞|收藏
tmp.drawMHomeAction = function(jsonArray){
var targetEleSelector = $('#member-home-actions');
targetEleSelector.find('.home-record-item').remove();
var cancelURI = targetEleSelector.attr('data-action') || '#';
var cancelCategory = targetEleSelector.attr('data-action-category')+'-topic' || null;
var obj = {};
obj.result = jsonArray;
var T ='{#result}'
+' <div class="home-record-item">'
+' <div class="record-item-body">'
+' <h6 class="record-item-heading"><a href="{APP}{link}">{title}</a></h6>'
+' <span>操作日期: {actionDate}</span>'
+' </div>'
+' <div class="record-item-menu">'
+' <a class="action-cmd" role="button" href="javascript::" data-acctip="false" data-handler="{CU}" data-query="id:{id}" data-function="removeHomeCallbackFun" data-action="{MA}" data-action-key={AK}><i class="mdi mdi-delete"></i>&nbsp;删除</a>'
+' </div>'
+' </div>{/result}';
var extRS={
AK : function(){
var rs = this.link; // /topic/%s.xhtml | javascript:;
if(rs.indexOf('/') !== -1) {
return rs.substring(7, rs.length-6);
}
return null;
},
APP : BASE,
CU : cancelURI,
MA : cancelCategory
};
Mustache.parse(T, ['{', '}']);
var rs = $.extend(obj, extRS);
targetEleSelector.append(Mustache.render(T, rs));
};
//显示回复的点赞汇总结果
tmp.drawMoodResult = function(json){
if(jQuery.isEmptyObject(json.result)){
return;
}
$.each(json.result, function(index,item){
var pid = item.posts;
if(item.likes !== '0'){
$('#'+pid+'-likes').append('<span>'+item.likes+'</span>');
}
if(item.hates !== '0'){
$('#'+pid+'-hates').append('<span>'+item.hates+'</span>');
}
});
};
// 聊天页中的历史记录[NW][8]
tmp.drawLetterHistoryMessage = function(json, jqEle){
var T=''
+'<div class="media{#master} media-master{/master}" id="letter-{id}">'
+' <div class="media-avatar media-left">'
+' <a href="javascript:;">'
+' <img class="media-object img-circle" src="{APP}/member/avatar/{sender}.png" style="height:64px;width:64px;">'
+' </a>'
+' </div>'
+' <div class="media-body">'
+' <div class="media-bubble">'
+' <h6 class="media-heading"><small>{datetime}</small></h6>'
+' {#SM}<strong>{subject}</strong>{/SM}'
+' <p>{&body}</p>'
+' </div>'
+' </div>'
+'</div>';
var rs={
SM : function(){
return this.sender == 0;
},
APP : BASE
};
Mustache.parse(T, ['{', '}']);
var ext = $.extend(json, rs);
$(Mustache.render(T, ext)).insertAfter($('#'+jqEle).find('p.text-center'));
};
tmp.poperNotice = function(json){
if(jQuery.isEmptyObject(json)){
return;
......
jForum.toolbar=(function(){
jForum.toolbar=(function($){
var toolbar={};
toolbar.feedback={
title : '我要反馈',
......@@ -24,7 +24,7 @@ jForum.toolbar=(function(){
btnClass: 'btn-blue',
action: function () {
var content = this.$content.find('textarea[name=content]').val();
if(isBlank(content)){
if(jForum.utils.isBlank(content)){
this.$content.find('textarea[name=content]').focus();
return false;
}
......@@ -61,7 +61,7 @@ jForum.toolbar=(function(){
ico : 'ico mdi mdi-lamp',
action : function(e){
var cacheTheme = Cookies.get('theme');
if(isBlank(cacheTheme)){ //默认为snowhite
if(jForum.utils.isBlank(cacheTheme)){ //默认为snowhite
Cookies.set('theme', 'jetblack');
$('body').removeClass('snowhite').addClass('jetblack');
}else{
......@@ -92,4 +92,4 @@ jForum.toolbar=(function(){
}
};
return toolbar;
})();
\ No newline at end of file
})(jQuery);
\ No newline at end of file
......@@ -8,15 +8,19 @@ jForum.xhr = (function ($) {
rawdata.uri = handler;
rawdata.callFun = callFun;
rawdata.data = queryDataJson;
if (boxContainer) {
rawdata.data.box = boxContainer;
}
$.ajax({
url: rawdata.uri,
jsonpCallback: rawdata.callFun,
jsonp: 'callback',
dataType: 'jsonp',
data: $.param(rawdata.data)
data: $.param(rawdata.data),
success: function( response ) {
try{
template[rawdata.callFun](response);
}catch(e){ }
}
});
};
//抽像的加载JSON的Loader
......@@ -34,10 +38,9 @@ jForum.xhr = (function ($) {
return;
}
jqEle.find('.no-record-tip').remove();
var fn = template[rawdata.callFun];
if (typeof fn === "function") {
fn.call(this, data, jqEle);
}
try{
template[rawdata.callFun](data, jqEle);
}catch(e){ }
});
};
//点击加载
......@@ -47,13 +50,18 @@ jForum.xhr = (function ($) {
rawdata.data = queryDataJson;
rawdata.callFun = callFun;
if (boxContainer) {
rawdata.data.box = currentId;
rawdata.data.box = boxContainer;
}
$.ajax({
url: rawdata.uri,
jsonpCallback: rawdata.callFun,
jsonp: 'callback',
dataType: 'jsonp',
data: $.param(rawdata.data)
data: $.param(rawdata.data),
success: function( response ) {
try{
template[rawdata.callFun](response);
}catch(e){ }
}
});
};
// 批量回调
......@@ -64,18 +72,21 @@ jForum.xhr = (function ($) {
rawdata.queryParamKey = dataParam;
rawdata.idSelector = dataRecord;
rawdata.data = queryDataJson;
rawdata.data[rawdata.queryParamKey] = $(rawdata.idSelector).map(function () {
var reg = /\[(data-(.*?))\]/g;
var dataAttrName = rawdata.idSelector.match(reg)[0].replace('[', '').replace(']', '');
return this.getAttribute(dataAttrName);
}).get().join(",");
$.ajax({
url: rawdata.uri,
jsonpCallback: rawdata.callFun,
jsonp: 'callback',
dataType: 'jsonp',
data: $.param(rawdata.data)
data: $.param(rawdata.data),
success: function( response ) {
try{
template[rawdata.callFun](response);
}catch(e){ }
}
});
};
//加载话题内的回复表单|登录表单
......@@ -84,7 +95,6 @@ jForum.xhr = (function ($) {
rawdata.uri = handler;
rawdata.callFun = callFun;
rawdata.data = queryDataJson;
if (!$.isEmptyObject(rawdata.data)) {
rawdata.uri += '?' + $.param(rawdata.data);
}
......@@ -93,16 +103,13 @@ jForum.xhr = (function ($) {
if (status === "error") {
var err = $.parseJSON(response);
if (err.level && err.level === 'err') {
return (template[jqEle.attr('data-error-function')]).call(this, err);
return template[jqEle.attr('data-error-function')](err);
}
}
jqEle.append(response);
jqEle.removeClass('ld-over running');
try {
var fn = template[rawdata.callFun];
if (typeof fn === "function") {
fn.call(this, jqEle, jqEle);
}
template[rawdata.callFun](jqEle);
} catch (e) { }
});
};
......@@ -113,7 +120,6 @@ jForum.xhr = (function ($) {
rawdata.data = queryDataJson;
rawdata.callFun = callFun;
rawdata.tip = showTip;
$.ajax({
type: 'POST',
url: rawdata.uri,
......@@ -125,11 +131,8 @@ jForum.xhr = (function ($) {
}).done(function (response) {
if(response.level === 'acc'){
try{
var fn = window[rawdata.callFun];
if (typeof fn === "function"){
fn.call(this, jqEle, jqEle);
}
}catch(e){}
jForum.defer[rawdata.callFun](jqEle);
}catch(e){ console.error(e.message); }
}else{
rawdata.tip = true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册