js类 from qq
更新时间:2006年11月13日 00:00:00 作者:
复制代码 代码如下:
var Comment = new Object();
var $C = function(tagName)
{
return document.createElement(tagName);
};
String.prototype.trim = function()
{
return this.replace(/^\s*|\s*$/g,"");
};
String.prototype.realLength = function()
{
return this.replace(/[^\x00-\xff]/g,"**").length;
};
String.prototype.left = function(n)
{
if (this.length > n)
{
return this.substr(0, n) + '...';
}
else
{
return this;
}
};
Array.prototype.remove = function(n)
{
if (n < 0)
{
return this;
}
else
{
return this.slice(0, n).concat(this.slice(n + 1, this.length));
}
};
function findPosX(obj)
{
var curleft = 0;
if (obj && obj.offsetParent)
{
while (obj.offsetParent)
{
curleft += obj.offsetLeft;
obj = obj.offsetParent;
}
}
else if (obj && obj.x) curleft += obj.x;
return curleft;
}
function findPosY(obj)
{
var curtop = 0;
if (obj && obj.offsetParent)
{
while (obj.offsetParent)
{
curtop += obj.offsetTop;
obj = obj.offsetParent;
}
}
else if (obj && obj.y) curtop += obj.y;
return curtop;
}
var input_domain = 'http://input.comment.qq.com';
var index_domain = 'http://comment1.qq.com';
var pinglun_domain = 'http://pinglun.qq.com';
var js_domain = 'http://pinglun.qq.com';
var img_domain = 'http://mat1.qq.com/pinglun';
Comment.Configure = {
version: '1.0',
newline: '\n',
site_length: 20,
key_length: 20,
id_length: 10,
index_line_sum: 10000,
index_width: 5,
default_mode: 'origin_count',
default_order: 1,
default_reply_per_page: 10,
quote_str_len: 60,
intro_len: 150,
debate_intro_len: 200,
content_len: 200,
reply_default_title: '请填写标题',
intro_min_length: 20,
request_delay: 100,
login_frame_delay: 2000,
reply_type_def: {
'1': '<span class="reply_top">[精]</span> ',
'2': '<span class="reply_commend">[荐]</span> ',
'3': '<span class="reply_expert">[专]</span> '
},
postUrl: input_domain + '/post.cmt',
logoutUrl: input_domain + '/cgi-bin/qqlogout',
commentIndex: 'http://pinglun.qq.com/',
loginIframeUrl: index_domain + '/i_login.htm',
defaultLogoUrl: img_domain + '/images/defpic.jpg'
}
Comment.Define = {
getReplyType: function(type)
{
if (Comment.Configure.reply_type_def[type])
{
return Comment.Configure.reply_type_def[type];
}
else
{
return '';
}
}
}
Comment.PGV_Count = function(option)
{
if (typeof(pgvMain) == 'function')
{
pvRepeatCount = 1;
pvCurDomain = sDomain;
if (option)
{
if (option.domain)
{
pvCurDomain = option.domain;
}
if (option.path)
{
pvCurUrl = option.path;
}
}
pgvMain();
//Debug.log('call pgv function');
}
}
Comment.UrlFactory = {
get3LevelDir: function(id)
{
var path = parseInt(id / 1000000) + '/';
path += parseInt(id / 1000) + '/';
path += id / 1;
return path;
},
getCommentUrl: function(id)
{
return (this.get3LevelDir(id) + '/');
},
getDebateUrl: function(id)
{
return this.get3LevelDir(id);
},
getUserUrl: function(id)
{
return this.get3LevelDir(id);
},
getReplyUrl: function(key)
{
var path = key.substr(0, 8);
path += '/' + (key.substr(8, 4));
path += '/' + (key.substr(12, 2));
path += '/' + key;
return path;
},
getIndexUrl: function(id)
{
var length = id.toString().length;
if (length < Comment.Configure.index_width)
{
for (var i = 0; i < Comment.Configure.index_width - length; ++i)
{
id = '0' + id;
}
}
return id;
},
getIndexDir: function(mode)
{
var modes = {
'origin_count': 'originindex',
'total_count': 'allindex',
'top_count': 'topindex'
};
return modes[mode];
},
getRangeHeader: function(start, length, line_len)
{
var range_start = start * line_len;
var range_length = length * line_len;
return ['Range','bytes=' + range_start + '-' + (parseInt(range_start) + parseInt(range_length) - 1 - Comment.Configure.newline.length)];
},
getCommentNormalUrl: function(site, id)
{
return 'comment.htm?site=' + site + '&id=' + id;
},
getCommentGroupUrl: function(site, id)
{
return 'comment_group.htm?site=' + site + '&id=' + id;
},
getCommentDebateUrl: function(site, id)
{
return 'comment_debate.htm?site=' + site + '&id=' + id;
},
getCommentUserUrl: function(uin)
{
return 'comment_user.htm?uin=' + uin;
},
getCommentUserLink: function(uin, nick)
{
return '<a href="' + this.getCommentUserUrl(uin) + '" target="_blank">' + (nick ? nick : uin) + '</a>';
},
getCommentListLink: function(site_en, site_cn, sort_en, sort_cn, className)
{
if (className)
{
className = 'class="' + className + '"';
}
else
{
className = '';
}
return '<a href="' + Comment.Configure.commentIndex + '" ' + className + ' target="_blank">评论首页</a> >> '
+ '<a href="list.htm?' + site_en + '." ' + className + ' target="_blank">' + site_cn + '</a> >> '
+ '<a href="list.htm?' + site_en + '.' + sort_en + '" ' + className + ' target="_blank">' + sort_cn + '</a>';
}
}
Comment.ContentFormat = {
decode: function(content)
{
return content.split(Comment.Configure.newline);
}
}
Comment.DataObjectFactory = function(content, model)
{
content = Comment.ContentFormat.decode(content);
var dataModel = Comment.DataObject[model];
if (content.length - 1 != dataModel.length)
{
if (model != 'commentinfo' && model != 'listsum')
{
//alert('[DEBUG 信息] O/R 映射失败,远程数据和本地模型数量不匹配!请检查!');
}
}
var dataObject = new Object();
for (var i = 0; i < dataModel.length; ++i)
{
dataObject[dataModel[i]] = content[i];
}
return dataObject;
}
Comment.DataObject = {
'commentinfo':
[
'site_cn',
'sort_en',
'sort_cn',
'source',
'source_url',
'title',
'url',
'intro',
'intro_img',
'group_id',
'intro_show',
'create_time',
'debate_id'
],
'groupinfo':
[
'site_cn',
'title',
'url',
'intro',
'intro_img',
'comment_id',
'intro_show',
'create_time'
],
'debateinfo':
[
'site_cn',
'title',
'url',
'intro',
'intro_img',
'agree_id',
'disagree_id',
'middle_id',
'intro_show',
'create_time'
],
'sum':
[
'origin_count',
'total_count',
'top_count'
],
'reply':
[
'comment_id',
'uin',
'nickname',
'pub_time',
'pass_time',
'ip',
'title',
'content',
'reply_key',
'is_del',
'reply_type',
'reply_kind',
'tips'
],
'pksum':
[
'agree',
'disagree',
'middle'
],
'listsum':
[
'all'
],
'usersum':
[
'total_count',
'top_count',
'is_expert'
],
'userinfo':
[
'user_img',
'user_intro'
]
}
/* 控制器类 */
Comment.Control = new Object();
/* 分页控制器 */
Comment.Control.Pagination = Class.create();
Comment.Control.Pagination.prototype = {
initialize: function(option)
{
this.totalPage = option.totalPage;
this.currPage = 1;
this.zoom_start = 3;
this.zoom_end = 613;
this.bindControl();
},
reset: function(option)
{
this.totalPage = option.totalPage;
this.currPage = 1;
this.movePageControl(this.currPage);
},
updateOrder: function()
{
},
countCurrPage: function(offset)
{
var page = parseInt(offset * this.totalPage / this.zoom_end) + 1;
if (page > this.totalPage)
{
page = this.totalPage;
}
return page;
},
movePageControl: function(toPage)
{
if (toPage < 1 || toPage > this.totalPage)
{
return;
}
var offset = 0;
if (toPage == 1)
{
offset = this.zoom_start;
}
else if (toPage == this.totalPage)
{
offset = this.zoom_end;
}
else
{
offset = this.zoom_start + (toPage - 1) * (this.zoom_end / (this.totalPage - 1));
}
$('scrfloat').style.left = offset + 'px';
//$('scrfloat_2').style.left = offset + 'px';
},
bindControl: function()
{
var self = this;
var tooltip = $('Page_tip');
var offsetX = 10;
var offsetY = -10;
function getSite(o)
{
var obj = o;
var objS = obj.offsetLeft;
while (obj != obj.offsetParent && obj.offsetParent)
{
obj = obj.offsetParent;
if (obj.tagName == 'span')
{
objS += obj.offsetLeft;
}
}
return objS;
}
Event.observe($('scr'), 'mousedown', mDown, false);
//Event.observe($('scr_2'), 'mousedown', mDown, false);
var flag = false;
function mDown()
{
flag = true;
if(window.event.srcElement.id != 'scr'
&& window.event.srcElement.id != 'scr_2')
{
$('scrfloat').style.left = $('scrfloat').offsetLeft;
//$('scrfloat_2').style.left = $('scrfloat').style.left;
}
else
{
$('scrfloat').style.left = (window.event.x - 5);
//$('scrfloat_2').style.left = $('scrfloat').style.left;
}
tooltip.style.display = 'block';
t = $('scrfloat').offsetLeft;
tooltip.innerHTML = self.countCurrPage(t);
tooltip.style.left = window.event.clientX + offsetX + 'px';
tooltip.style.top = window.event.clientY + offsetY + document.documentElement.scrollTop + 'px';
}
function mMove()
{
if(flag)
{
$('scrfloat').style.left = window.event.clientX - getSite($('scr')) - 5 + 'px';
//$('scrfloat_2').style.left = window.event.clientX - getSite($('scr')) - 5 + 'px';
}
if (parseInt($('scrfloat').style.left.replace('px', '')) > self.zoom_end)
{
$('scrfloat').style.left = self.zoom_end + 'px';
//$('scrfloat_2').style.left = $('scrfloat').style.left;
}
if (parseInt($("scrfloat").style.left.replace('px', '')) < self.zoom_start)
{
$('scrfloat').style.left = self.zoom_start + 'px';
//$('scrfloat_2').style.left = $('scrfloat').style.left;
}
if (flag)
{
t = $('scrfloat').offsetLeft;
tooltip.innerHTML = self.countCurrPage(t);
tooltip.style.left = window.event.clientX + offsetX + 'px';
tooltip.style.top = window.event.clientY + offsetY + document.documentElement.scrollTop + 'px';
}
}
function mUp()
{
if (flag)
{
t = $('scrfloat').offsetLeft;
self.setCurrPage(self.countCurrPage(t));
}
flag = false;
tooltip.style.display = 'none';
}
function mEnd()
{
window.event.returnValue = false;
}
window.document.onmousemove = mMove;
window.document.ondragstart = mEnd;
window.document.onmouseup = mUp;
Event.observe($('up'), 'click', mUpBtn, false);
Event.observe($('down'), 'click', mDownBtn, false);
function mUpBtn()
{
self.setCurrPage(self.currPage - 1, 1);
}
function mDownBtn()
{
self.setCurrPage(self.currPage + 1, 1);
}
},
nextPage: function()
{
if (this.currPage < this.totalPage)
{
++this.currPage;
this.onPageChange();
}
},
previousPage: function()
{
if (this.currPage > 0)
{
--this.currPage;
this.onPageChange();
}
},
setCurrPage: function(page, move)
{
if (page > 0 && page <= this.totalPage && page != this.currPage)
{
this.currPage = page;
this.onPageChange();
if (move != null)
{
this.movePageControl(page);
}
}
},
onPageChange: function()
{
},
getCurrPage: function()
{
return this.currPage;
}
}
Comment.Iterator = {
getIndex: function(objComment)
{
var rangeList = new Array();
function getIndexId(reply_id)
{
return parseInt(reply_id / Comment.Configure.index_line_sum);
}
function getReplyPos(reply_id)
{
return (reply_id % Comment.Configure.index_line_sum);
}
if (objComment.order == 0)
{
var reply_start = (objComment.currPage - 1) * objComment.replyPerPage;
var start_index_id = getIndexId(reply_start);
var start_reply_id = getReplyPos(reply_start);
var currReply = 1;
var replySum = 0;
while (currReply++)
{
if (reply_start + currReply > objComment.totalReply)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(start_reply_id, currReply - replySum - 1, objComment.index_line_len)
});
break;
}
if (currReply == objComment.replyPerPage)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(start_reply_id, currReply - replySum, objComment.index_line_len)
});
break;
}
if (start_reply_id + currReply > Comment.Configure.index_line_sum)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(start_reply_id, currReply, objComment.index_line_len)
});
start_index_id++;
start_reply_id = 0;
replySum = currReply - 1;
}
}
}
else
{
var reply_start = objComment.totalReply - 1 - (objComment.currPage - 1) * objComment.replyPerPage;
var start_index_id = getIndexId(reply_start);
var start_reply_id = getReplyPos(reply_start);
var currReply = 1;
var replySum = 0;
while (currReply++)
{
if (reply_start - currReply < 0)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, objComment.index_line_len)
});
break;
}
if (currReply == objComment.replyPerPage)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(start_reply_id - currReply + replySum + 1, currReply - replySum, objComment.index_line_len)
});
break;
}
if (start_reply_id - currReply < 0)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, objComment.index_line_len)
});
start_index_id--;
start_reply_id = Comment.Configure.index_line_sum - 1;
replySum = currReply;
}
}
}
return rangeList;
}
}
/* 显示样式控制器 */
Comment.Control.Display = Class.create();
Comment.Control.Display.prototype = {
initialize: function()
{
}
}
/* 页面显示类 */
Comment.Page = new Object();
/* 评论页控制接口 */
Comment.Page.Base = {
changeMode: function(mode)
{
this.mode = mode;
this.totalReply = this.data_sum[mode];
this.totalPage = parseInt(this.totalReply / this.replyPerPage)
+ (this.totalReply % this.replyPerPage != 0 ? 1 : 0);
},
changeOrder: function(order)
{
if (this.order == order)
return;
this.order = order;
this.currPage = 1;
this.resetPageControl();
this.bindPageNav();
this.bindReplyList();
this.bindOrderControl();
},
bindOrderControl: function()
{
var self = this;
if (self.order == 0)
{
$('order_front').style.cursor = 'none';
$('order_front').style.color = '#000';
$('order_front').onclick = function(e)
{
return false;
}
$('order_desc').style.cursor = 'pointer';
$('order_desc').style.color = '#3B78AF';
$('order_desc').onclick = function()
{
self.changeOrder(1);
return false;
}
}
else if (self.order == 1)
{
$('order_front').style.cursor = 'pointer';
$('order_front').style.color = '#3B78AF';
$('order_front').onclick = function(e)
{
self.changeOrder(0);
return false;
}
$('order_desc').style.cursor = 'none';
$('order_desc').style.color = '#000';
$('order_desc').onclick = function()
{
return false;
}
}
},
bindRowsPerPage: function()
{
var self = this;
$A($('rows_page').getElementsByTagName('a')).each(function(button)
{
button.onclick = function()
{
self.replyPerPage = button.value;
self.currPage = 1;
self.resetPageControl();
self.bindPageNav();
self.bindReplyList();
return false;
}
});
},
selectTab: function(mode)
{
var self = this;
$A($('mode_tab').getElementsByTagName('p')).each(function(tab)
{
if (tab.value == mode)
{
$A($('mode_tab').getElementsByTagName('p')).each(function(t)
{
if (t.value != '')
{
t.className = 'none';
}
});
tab.className = 'c';
}
});
},
appendTab: function(option)
{
var pTab = $C('p');
pTab.innerHTML = option.title;
pTab.value = '';
$('mode_tab').appendChild(pTab);
pTab.onclick = function()
{
window.open(option.url);
}
return false;
},
bindTabControl: function()
{
var self = this;
$A($('mode_tab').getElementsByTagName('p')).each(function(tab)
{
var mode = tab.value;
if (mode != '')
{
tab.onclick = function()
{
$A($('mode_tab').getElementsByTagName('p')).each(function(t)
{
t.className = 'none';
});
this.className = 'c';
self.currPage = 1;
self.changeMode(mode)
self.resetPageControl();
self.bindPageNav();
self.bindReplyList();
return false;
}
}
});
},
bindPageRandom: function()
{
var self = this;
$A($('page_random', 'page_random_2')).each(function(button)
{
button.onclick = function()
{
if (self.totalPage == 1)
{
self.currPage = 1;
}
else
{
self.currPage = Math.floor(Math.random() * (self.totalPage + 1));
if (self.currPage == 0)
{
self.currPage = 1;
}
}
self.bindPageNav();
self.bindReplyList();
return false;
}
});
},
bindPageNav: function(flag)
{
var self = this;
var currPage = self.currPage;
if (flag != 1)
{
this.pageControl.movePageControl(currPage);
}
var pagesPerRange = 6;
this.totalPage = parseInt(this.totalReply / this.replyPerPage)
+ (this.totalReply % this.replyPerPage != 0 ? 1 : 0);
var startPage = parseInt((self.currPage - 1) / pagesPerRange) * pagesPerRange + 1;
createPageNav($('page_nav'), false);
createPageNav($('page_nav_2'), true);
function createPageNav(obj, top)
{
obj.innerHTML = '';
var i = startPage;
if (self.currPage != 1)
{
obj.appendChild(createPage2(1, '第一页', top));
obj.appendChild(createPage({
page: '上一页',
onclick:function()
{
self.currPage = self.currPage - 1;
self.bindPageNav();
self.bindReplyList();
if (top)
{
window.location.replace('#reload');
}
return false;
}
}));
}
for (; i < startPage + pagesPerRange; ++i)
{
if (i > self.totalPage)
{
break;
}
obj.appendChild(createPage2(i, '', top));
}
if (self.currPage < self.totalPage)
{
obj.appendChild(createPage({
page: '下一页',
onclick:function()
{
self.currPage = self.currPage + 1;
self.bindPageNav();
self.bindReplyList();
if (top)
{
window.location.replace('#reload');
}
return false;
}
}));
obj.appendChild(createPage2(self.totalPage, '最末页', top));
}
}
function createPage(option)
{
var p = $C('a');
if (option.page == self.currPage)
{
p.style.fontWeight = 'bold';
}
p.innerHTML = (option.text && option.text != '') ? option.text : option.page;
p.href = '';
p.onclick = option.onclick;
if (option.title)
{
p.title = option.title;
}
return p;
}
function createPage2(page, text, top)
{
return createPage({
page: page,
onclick:function()
{
self.currPage = page;
self.bindPageNav();
self.bindReplyList();
if (top)
{
window.location.replace('#reload');
}
return false;
},
text: text != '' ? text : ''
});
}
},
bindPageControl: function()
{
this.totalPage = parseInt(this.totalReply / this.replyPerPage)
+ (this.totalReply % this.replyPerPage != 0 ? 1 : 0);
this.pageControl = new Comment.Control.Pagination({
totalPage: this.totalPage
});
/* overwrite event virtual function */
var self = this;
this.pageControl.onPageChange = function()
{
self.currPage = this.getCurrPage();
self.bindPageNav(1);
self.bindReplyList();
}
},
resetPageControl: function()
{
this.totalPage = parseInt(this.totalReply / this.replyPerPage)
+ (this.totalReply % this.replyPerPage != 0 ? 1 : 0);
this.pageControl.reset({
totalPage: this.totalPage
});
},
bindTopReply: function()
{
var self = this;
var rangeList = new Array();
function getIndexId(reply_id)
{
return parseInt(reply_id / Comment.Configure.index_line_sum);
}
function getReplyPos(reply_id)
{
return (reply_id % Comment.Configure.index_line_sum);
}
var top_show_sum = 5;
var index_line_len = self.index_line_len;
var reply_start = self.data_sum['top_count'] - 1;
var start_index_id = getIndexId(reply_start);
var start_reply_id = getReplyPos(reply_start);
var currReply = 1;
var replySum = 0;
while (currReply++)
{
if (reply_start - currReply < 0)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, index_line_len)
});
break;
}
if (currReply == top_show_sum)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(start_reply_id - currReply + replySum + 1, currReply - replySum, index_line_len)
});
break;
}
if (start_reply_id - currReply < 0)
{
rangeList.push({
url: Comment.UrlFactory.getIndexUrl(start_index_id),
range: Comment.UrlFactory.getRangeHeader(0, start_reply_id + 1, index_line_len)
});
start_index_id--;
start_reply_id = Comment.Configure.index_line_sum - 1;
replySum = currReply;
}
}
var replyList = new Array();
var replyAllList = new Array();
var rangeSum = rangeList.length;
for (var i = 0; i < rangeList.length; ++i)
{
new getReplyList(i);
}
function getReplyList(i)
{
var comment_type = 'normal';
var comment_id = self.commentId;
if (self.name == 'Group')
{
comment_type = 'group';
comment_id = self.groupId;
}
var sCommentIndexUrl = '/' + self.site + '/' + comment_type + '/'
+ Comment.UrlFactory.getCommentUrl(comment_id)
+ Comment.UrlFactory.getIndexDir('top_count')
+ '/'
+ rangeList[i].url
+ '.htm' + noCacheUrl();
new Ajax.Request(
sCommentIndexUrl,
{
method: 'get',
asynchronous: true,
onSuccess: onSucc,
onFailure: onError,
requestHeaders:rangeList[i].range
}
);
function onSucc(response)
{
replyList[i] = Comment.ContentFormat.decode(response.responseText);
if (i == rangeSum - 1)
{
replySort();
self.bindReplyList();
}
}
function onError()
{
}
}
function replySort()
{
if (self.order == 0)
{
if (replyList.length == 1)
{
replyAllList = replyAllList.concat(replyList[0]);
}
else
{
for (var i = 0; i < replyList.length; ++i)
{
replyAllList = replyAllList.concat(replyList[i]);
}
}
}
else
{
if (replyList.length == 1)
{
for (var i = replyList[0].length - 1; i >= 0; --i)
{
replyAllList.push(replyList[0][i])
}
}
else
{
for (var i = 0; i < replyList.length; ++i)
{
for (var j = replyList[i].length - 1; j >= 0; --j)
{
replyAllList.push(replyList[i][j])
}
}
}
}
var str = '';
for (var j = 0; j < replyAllList.length; ++j)
{
str += replyAllList[j] + '\r\n';
}
self.topReplyList = replyAllList;
}
}
}
Comment.User = {
logined: null,
uin: null
}
Comment.Post = {
init: function(option)
{
this.base = option.base;
this.option = option;
this.initAsyncForm();
this.bindPostTypeSelector();
this.bindOtherEvent();
this.bindPostBtn();
this.bindBottomPostBtn();
this.bindBottomTitleEvent();
this.bindBottomPostTypeEvent();
this.setDefault();
},
bindOpenPostBtn: function(btn, c_id)
{
$(btn).onclick = function()
{
Comment.Post.beforeOpenPost(0, '', c_id);
return false;
}
},
formElem: [
'b_anonymous',
'c_id',
'c_site',
'c_sort',
'c_title',
'c_content',
'r_key',
'r_type',
'r_tips',
'g_id'
],
initAsyncForm: function()
{
var formElem = this.formElem;
var form = $C('form');
form.id = 'post_form';
$A(formElem).each(function(elem_name)
{
var elem = $C('input');
elem.type = 'hidden';
elem.name = elem_name;
elem.value = '';
form.appendChild(elem);
});
document.getElementsByTagName('body')[0].appendChild(form);
},
clearAsyncForm: function()
{
$A($('post_form').getElementsByTagName('input')).each(function(elem)
{
elem.value = '';
});
},
setDefault: function()
{
$('stat_post_type').innerHTML = '非匿名发表';
},
bindOtherEvent: function()
{
if (!$('r_quote_del'))
{
return;
}
/* 引用事件 */
$('r_quote_del').onclick = function()
{
$('r_quote').style.display = 'none';
return false;
}
/* 选择回复立场 */
$A($('reply_type').getElementsByTagName('input')).each(
function(radio)
{
if (radio.value == 'middle')
{
radio.checked = true;
}
radio.onclick = function()
{
if (this.value == 'agree')
{
$('stat_reply_type').innerHTML = '支持原帖';
makeFormValue({r_type:'0'});
}
else if (this.value == 'disagree')
{
$('stat_reply_type').innerHTML = '反对原帖';
makeFormValue({r_type:'1'});
}
else
{
$('stat_reply_type').innerHTML = '中立态度';
makeFormValue({r_type:'2'});
}
}
});
/* 选择辩论立场 */
$A($('debate_id').getElementsByTagName('input')).each(
function(radio)
{
radio.onclick = function()
{
if (this.value == 'agree')
{
$('stat_debate_type').innerHTML = '我是正方';
makeFormValue({c_id:Comment.Post.base.data_info.agree_id});
}
else if (this.value == 'disagree')
{
$('stat_debate_type').innerHTML = '我是反方';
makeFormValue({c_id:Comment.Post.base.data_info.disagree_id});
}
else if (this.value == 'middle')
{
$('stat_debate_type').innerHTML = '我是中立方';
makeFormValue({c_id:Comment.Post.base.data_info.middle_id});
}
}
});
},
setReplyType: function(type)
{
$A($('reply_type').getElementsByTagName('input')).each(
function(radio)
{
if (radio.value == type)
{
radio.click();
return;
/*
radio.checked = true;
var type_num = {
'agree': '0',
'disagree': '1',
'middle': '2'
};
makeFormValue({r_type:type_num[type]});
*/
}
else
{
radio.checked = false;
}
});
},
setDebate: function(type, c_id)
{
$A($('debate_id').getElementsByTagName('input')).each(
function(radio)
{
if (radio.value == type)
{
radio.checked = true;
makeFormValue({c_id:c_id});
}
else
{
radio.checked = false;
}
});
},
clearValue: function()
{
$A($(
'l_c_title',
'l_c_content'
)).each(
function(input)
{
input.value = '';
});
},
bindTitleEvent: function()
{
var d_title = Comment.Configure.reply_default_title;
$('l_c_title').value = d_title;
$('l_c_title').onfocus = function()
{
if ($('l_c_title').value == d_title)
{
$('l_c_title').value = '';
}
}
$('l_c_title').onblur = function()
{
if ($('l_c_title').value == '')
{
$('l_c_title').value = d_title;
}
}
},
bindBottomTitleEvent: function()
{
if (!$('b_c_title'))
{
return;
}
var d_title = Comment.Configure.reply_default_title;
$('b_c_title').value = d_title;
$('b_c_title').onfocus = function()
{
if ($('b_c_title').value == d_title)
{
$('b_c_title').value = '';
}
}
$('b_c_title').onblur = function()
{
if ($('b_c_title').value == '')
{
$('b_c_title').value = d_title;
}
}
},
setPostTypeSelector: function(type)
{
if (type == 'login_select')
{
$('l_login_frame').src = 'i_login.htm?l_login_frame';
showElement('l_login_post');
$('stat_post_type').innerHTML = '登录发表';
$('l_b_tips').disabled = false;
$('l_b_tips').checked = false;
$('l_b_anonymous').checked = false;
}
else if (type == 'anonymous_select')
{
hideElement('l_login_post');
$('stat_post_type').innerHTML = '匿名发表';
$('l_b_tips').disabled = true;
$('l_b_tips').checked = false;
$('l_b_anonymous').checked = true;
}
},
bindPostTypeSelector: function()
{
if (!$('l_b_anonymous'))
{
return;
}
$('l_b_anonymous').onclick = function()
{
if ($('l_b_anonymous').checked)
{
Comment.Post.setPostTypeSelector('anonymous_select');
}
else
{
Comment.Post.setPostTypeSelector('login_select');
}
}
},
bindPostBtn: function()
{
if (!$('l_post_btn'))
{
return;
}
var self = this;
$('l_post_btn').onclick = function()
{
if (!getCookie('skey') && !$('l_b_anonymous').checked)
{
alert('很抱歉,您尚未登录,请先登录');
return;
}
if ($('l_c_title').value.length > 32)
{
alert('很抱歉,标题不得超过32个字符');
return;
}
var c_content = $('l_c_content').value.trim();
if (c_content == '')
{
alert('很抱歉,请填写评论内容');
$('l_c_content').focus();
return;
}
else if (c_content.realLength() > 10000)
{
alert('很抱歉,评论内容不能超过10,000个字符(5,000个汉字)');
$('l_c_content').focus();
return;
}
if (self.base.min_len)
{
if (c_content.realLength() < self.base.min_len)
{
alert('很抱歉,评论内容不能少于' + self.base.min_len + '个字符(' + self.base.min_len / 2 + '个汉字)');
$('l_c_content').focus();
return;
}
}
makeFormValue(
{
b_anonymous: $('l_b_anonymous').checked ? '1' : '',
c_site: self.base.site,
c_sort: self.base.sort_en,
c_title: ($('l_c_title').value == Comment.Configure.reply_default_title ? '' : $('l_c_title').value),
c_content: $('l_c_content').value,
g_id: self.base.comment_g_id,
r_tips: $('l_b_tips').checked ? '1' : ''
});
self.postData();
return false;
};
},
bindBottomPostBtn: function()
{
if (!$('b_post_btn'))
{
return;
}
var self = this;
$('b_post_btn').onclick = function()
{
if (!getCookie('skey') && !$('b_b_anonymous').checked)
{
alert('很抱歉,您尚未登录,请先登录');
return;
}
if ($('b_c_title'))
{
if ($('b_c_title').value.length > 32)
{
alert('很抱歉,标题不得超过32个字符');
$('b_c_title').focus();
return;
}
}
var c_content = $('b_c_content').value.trim();
if (c_content == '')
{
alert('很抱歉,请填写评论内容');
$('b_c_content').focus();
return;
}
else if (c_content.realLength() > 10000)
{
alert('很抱歉,评论内容不能超过10,000个字符');
$('b_c_content').focus();
return;
}
if (self.base.min_len)
{
if (c_content.realLength() < self.base.min_len)
{
alert('书评内容不能少于' + self.base.min_len + '字符');
$('b_c_content').focus();
return;
}
}
makeFormValue(
{
b_anonymous: $('b_b_anonymous').checked ? '1' : '',
c_site: self.base.site,
c_sort: self.base.sort_en,
c_title: ($('b_c_title').value == Comment.Configure.reply_default_title ? '' : $('b_c_title').value),
c_content: $('b_c_content').value,
g_id: self.base.comment_g_id,
c_id: self.base.commentId,
r_tips: $('b_b_tips').checked ? '1' : ''
});
self.postData();
return false;
};
},
bindBottomPostTypeEvent: function()
{
var self = this;
if (!$('b_b_anonymous'))
{
return;
}
if (self.base.name != 'MiniNormal')
{
setTimeout(setBottomLocation, Comment.Configure.login_frame_delay);
}
function setBottomLocation()
{
$('b_login_frame').src = 'i_login.htm?b_login_frame';
}
$('b_b_anonymous').onclick = function()
{
if ($('b_b_anonymous').checked)
{
hideElement('b_login_post');
with ($('b_b_tips'))
{
disabled = true;
checked = false;
}
}
else
{
$('b_login_frame').src = 'i_login.htm?b_login_frame';
showElement('b_login_post');
$('b_b_tips').disabled = false;
}
if (self.base.name == 'MiniNormal')
{
self.base.updateHeight();
}
}
},
postData: function()
{
showLoading('正在发送...');
var post_form = $('post_form');
post_form.action = Comment.Configure.postUrl;
post_form.target = 'post_async';
post_form.method = 'post';
post_form.submit();
},
fastReplyWords:
[
[
'精彩,一针见血',
'观点独到',
'说得很对',
'你说得有道理'
],
[
'乱七八糟说什么',
'你说得没道理',
'简直是胡说八道'
]
],
fastReply: function(btn, type, r_key, c_id)
{
var self = this;
$('fastLayer').innerHTML = '';
$('fastLayer').style.display = 'block';
$('fastLayer').style.left = findPosX(btn) + 1 + 'px';
$('fastLayer').style.top = findPosY(btn) + 20 + 'px';
var replyWords = this.fastReplyWords[type];
for (var i = 0; i < replyWords.length; ++i)
{
var word = $C('a');
word.innerHTML = replyWords[i];
word.href = '#';
$('fastLayer').appendChild(word);
word.onclick = function()
{
replyPost(this.innerHTML);
return false;
}
}
function replyPost(content)
{
makeFormValue(
{
b_anonymous: (getCookie('skey') ? '' : '1'),
c_id: c_id,
c_site: self.base.site,
c_sort: self.base.data_commentinfo.sort_en,
r_key: r_key,
r_type: (type == 0 ? '3' : '4'),
r_tips: '',
c_title: '',
c_content: content,
g_id: self.base.comment_g_id
});
self.postData();
}
},
onError: function(msg)
{
alert(msg);
},
onSucc: function()
{
var self = this;
setTimeout(reload, 300);
function reload()
{
self.base.reload();
window.location.replace('#reload');
}
},
clearBottomInput: function()
{
$A($(
'b_c_title',
'b_c_content'
)).each(function(elem)
{
if (elem)
{
elem.value = '';
}
});
},
logout: function()
{
var url = Comment.Configure.loginIframeUrl + '?l_login_frame';
if ($('l_login_frame'))
{
$('l_login_frame').src = Comment.Configure.logoutUrl + '?url=' + url;
}
if ($('b_login_frame'))
{
$('b_login_frame').src = Comment.Configure.logoutUrl + '?url=' + url;
}
},
callback: function(url)
{
hideLoading();
$('post_async').src = 'about:blank';
var code = url.substr(url.indexOf('code=') + 5);
if (code == '-')
{
code = -1;
}
code = code / 1;
getFormValue('r_type');
if (code == -1 && Comment.Post.r_type >= 3)
{
code = 0;
}
var errMsg = '';
switch (code)
{
case -1:
errMsg = '您的评论已提交审核,感谢您的参与!';
this.closePostLayer();
this.clearBottomInput();
break;
case 0:
errMsg = '发表成功,感谢您的参与!';
this.onSucc();
this.closePostLayer();
this.clearBottomInput();
break;
case 1:
errMsg = '很抱歉,您填写的内容不完整,请重新输入您的内容。';
break;
case 2:
errMsg = '很抱歉,您尚未登录或登录已经过期,请先登录。';
this.logout();
break;
case 3:
errMsg = '您的评论已提交审核,感谢您的参与!';
this.closePostLayer();
this.clearBottomInput();
break;
case 4:
errMsg = '您的IP地址已暂时被屏蔽。';
break;
case 5:
errMsg = '您的QQ号已暂时禁止在本评论系统发言。';
break;
case 6:
errMsg = '很抱歉,您的QQ号码和密码不匹配。';
break;
case 7:
errMsg = '很抱歉,系统繁忙,请稍候再试。';
break;
case 8:
errMsg = '很抱歉,您发表的频率太快,请稍后再试。';
break;
}
if (errMsg != '')
{
this.onError(errMsg);
}
},
openPostLayer: function()
{
$('sPost').style.top = document.documentElement.scrollTop + 50;
$('sPost').style.left = 300;
$('sLayer').style.height = document.documentElement.scrollHeight;
$('sLayer').oncontextmenu = function(){return false};
$('sLayer').className = 'dis';
$('sPost').className= 'dis';
this.auto = setInterval(setAuto, 200);
function setAuto()
{
$('sPost').style.top = document.documentElement.scrollTop + 50;
}
},
closePostLayer: function()
{
if (!$('sLayer'))
{
return;
}
$('sLayer').oncontextmenu = function(){return true};
$('sLayer').className = 'undis';
$('sPost').className = 'undis';
clearInterval(this.auto);
this.clearAsyncForm();
this.clearValue();
Debug.log('clearAsyncForm');
},
beforeOpenPost: function(type, r_key, c_id, content)
{
/* type -> 发表评论的方式
0:普通评论的回复
1:普通评论的引用回复
2:辩论评论的回复
*/
this.bindTitleEvent();
$('post_article').innerHTML = this.base.comment_title.left(20);
if (getCookie('skey'))
{
this.setPostTypeSelector('login_select');
}
else
{
this.setPostTypeSelector('anonymous_select');
}
$('l_b_tips').checked = false;
switch (type)
{
case 0:
hideElement('debate_id', 'reply_type', 'r_quote');
makeFormValue(
{
c_id: c_id
});
break;
case 1:
hideElement('debate_id');
$('post_quote').innerHTML = (content).stripTags();
showElement('r_quote', 'reply_type');
this.setReplyType('middle');
$('stat_reply_type').innerHTML = '中立态度';
makeFormValue(
{
r_key: r_key,
r_type: '2',
c_id: c_id
});
break;
case 2:
hideElement('reply_type', 'r_quote');
showElement('debate_id');
break;
}
this.openPostLayer();
}
}
var NDEBUG = true;
var Debug = {
init: function()
{
if (NDEBUG == true)
{
return;
}
var divDebug = $C('div');
this.divDebug = divDebug;
with (divDebug.style)
{
top = '10px';
left = '10px';
width = '300px';
height = '200px';
overflow = 'scroll';
verticalAlign = 'top';
position = 'absolute';
backgroundColor = '#fff';
padding = '5px';
lineHeight = '110%';
}
document.getElementsByTagName('body')[0].appendChild(divDebug);
this.auto = setInterval(setAuto, 200);
function setAuto()
{
divDebug.style.top = document.documentElement.scrollTop + 10;
}
Debug.log('<b>Debug</b>');
divDebug.ondblclick = function()
{
NDEBUG = true;
Element.remove(divDebug);
}
this.height = 0;
},
log: function(str)
{
if (NDEBUG == true)
{
return;
}
var now = new Date();
this.divDebug.innerHTML += '[' + now.getHours() + ':'
+ now.getMinutes() + ':'
+ now.getSeconds() + '] ' + str + '<br>';
this.divDebug.scrollTop = 10000000;
}
}
var divLoading = null;
function showLoading(action)
{
if (!divLoading)
{
divLoading = $C('div');
divLoading.className = 'loading';
document.getElementsByTagName('body')[0].appendChild(divLoading);
}
if (!action)
{
divLoading.innerHTML = '正在读取...';
}
else
{
divLoading.innerHTML = action;
}
divLoading.style.top = document.documentElement.scrollTop;
divLoading.style.left = '0px';
divLoading.style.display = 'block';
}
function hideLoading()
{
if (!divLoading)
{
return;
}
divLoading.style.display = 'none';
}
function showElement()
{
for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if ($(element))
{
$(element).style.display = 'block';
}
}
}
function hideElement()
{
for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if ($(element))
{
$(element).style.display = 'none';
}
}
}
function getFormValue(name)
{
$A($('post_form').getElementsByTagName('input')).each(function(elem)
{
if (elem.name == name)
{
Comment.Post.r_type = elem.value;
return elem.value;
}
else
{
return null;
}
});
}
function makeFormValue(name2Value)
{
Debug.log('makeFormValue start');
$A($('post_form').getElementsByTagName('input')).each(function(elem)
{
if (name2Value[elem.name] != null)
{
elem.value = name2Value[elem.name];
}
Debug.log(elem.name + ': ' + elem.value);
});
Debug.log('makeFormValue end');
}
function noCacheUrl()
{
return '?cache=' + rndNum(9);
}
function rndNum(n)
{
var rnd= '1.';
for(var i = 0; i < n; i++)
rnd += Math.floor(Math.random() * 10);
return rnd;
}
var sUrl = window.location.href.toString();
var sDomain = sUrl.substring(7, sUrl.indexOf('/', 7));
var sPath = sUrl.substring(sUrl.indexOf('/', 7));
var sParam = sUrl.substring(sUrl.indexOf('?') + 1);
if (sParam.indexOf('#') != -1)
{
sParam = sParam.substr(0, sParam.indexOf('#'));
}
document.domain = 'qq.com';
var initWith = {
'comment': 'Normal',
'i_comment': 'MiniNormal',
'comment_group': 'Group',
'comment_debate': 'Debate',
'comment_reply_pk': 'ReplyPK',
'comment_user': 'UserReply',
'list': 'List'
};
window.onload = function()
{
Comment.Start();
}
Comment.Start = function()
{
Debug.init();
for (var url in initWith)
{
if (sUrl.indexOf('/' + url + '.htm') != -1)
{
if (url == 'list')
{
Comment.Page[initWith[url]].load(sUrl);
}
else
{
Comment.Page[initWith[url]].load(sParam.toQueryParams());
}
}
}
document.body.onclick = function()
{
if ($('fastLayer'))
{
$('fastLayer').style.display = 'none';
}
}
}
Comment.HotList =
{
siteObject: {
'news': '新闻',
'ent': '娱乐',
'finance': '财经',
'tech': '科技',
'auto': '汽车',
'gamezone': '游戏',
'edu': '教育',
'book': '读书',
'lady': '女性',
'astro': '星座',
'sports': '体育',
'comic': '动漫',
'luxury': '时尚',
'joke': '笑话',
'cq': '重庆',
'xian': '西安',
'view': '说吧'
},
getRandomSite: function()
{
if (!this.siteArray)
{
this.siteArray = new Array();
for (var site_en in this.siteObject)
{
this.siteArray.push(site_en);
}
}
var site_sum = this.siteArray.length;
var rnd_site = Math.floor(Math.random() * site_sum);
return this.siteArray[rnd_site];
},
bindTopHotList: function(container, site)
{
var topSiteSum = 6;
var topSite = new Object();
if (site != '')
{
if (this.siteObject[site])
{
topSite[site] = this.siteObject[site];
topSiteSum--;
}
}
while (topSiteSum > 0)
{
var rnd_site = this.getRandomSite();
if (topSite[rnd_site])
{
continue;
}
topSite[rnd_site] = this.siteObject[rnd_site];
topSiteSum--;
}
var hot_index = 0;
var hot_header = '';
var hot_body = '';
for (var site_en in topSite)
{
hot_header += '<p' + (hot_index == 0 ? ' class="c"' : '') + ' onclick="getMe(this)">' + topSite[site_en] + '</p>';
hot_body += '<dd' + (hot_index != 0 ? ' class="undis"' : '') + ' id="Hot_Top_' + site_en + '"></dd>';
hot_index++;
}
var hot_html = '<dl><dt>' + hot_header + '</dt>' + hot_body + '</dl>';
$(container).innerHTML = hot_html;
for (var site_en in topSite)
{
this.bindTopSite('Hot_Top_' + site_en, '/c/async_html/' + site_en + '_top.htm');
}
},
bindRightHotList: function(container, site)
{
var topSiteSum = 3;
var topSite = new Object();
if (site != '')
{
if (this.siteObject[site])
{
topSite[site] = this.siteObject[site];
topSiteSum--;
}
}
while (topSiteSum > 0)
{
var rnd_site = this.getRandomSite();
if (topSite[rnd_site])
{
continue;
}
topSite[rnd_site] = this.siteObject[rnd_site];
topSiteSum--;
}
var hot_body = '';
for (var site_en in topSite)
{
hot_body += '<dl><dt>' + topSite[site_en] + '热评</dt><div id="Hot_Right_' + site_en + '"></div></dl>';
}
$(container).innerHTML = hot_body;
for (var site_en in topSite)
{
this.bindTopSite('Hot_Right_' + site_en, '/c/async_html/' + site_en + '_right.htm');
}
},
bindTopSite: function(container, url)
{
new Ajax.Request(
url,
{
method: 'get',
onSuccess: onSucc,
onFailure: onError
}
);
function onSucc(response)
{
$(container).innerHTML = response.responseText;
}
function onError()
{
$(container).innerHTML = '';
}
}
}
相关文章
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
这篇文章主要介绍了JavaScript自定义函数实现查找两个字符串最长公共子串的方法,涉及javascript针对字符串的遍历、比较、查找等相关操作技巧,需要的朋友可以参考下2016-11-11JavaScript具有类似Lambda表达式编程能力的代码(改进版)
在之前的一篇博文中我介绍了一种方法可以让JavaScript具有一种近似于Lambda表达式的编程能力——但是它有一些缺点,其中妨碍它的使用的最主要的一条就是多了一层括号,让代码变得难以阅读。2010-09-09
最新评论