每周转载:关于天朝的【网络实名制】(网文5篇,评论若干)

分享心理学电子书(8本)——增加“心理学”大类

俺的招聘经验[5]:面试前的准备工作

每周转载:关于《编译局言情录》的电子书、网文、网友评论

扫盲操作系统虚拟机[5]:虚拟系统的配置(多图)

国际电信世界大会以失败告终——互联网躲过一劫

每周转载:关于莫言的争议(网文4篇)

天朝民众的心理分析:圣君情结

分享政治类电子书(19本)——“电子书清单”增加树状导航目录

每周转载:关于西藏日益频繁的自焚事件(网文5篇)

五毛谬论点评——“每个国家都有审查制度”

行动起来,为了自由和开放的互联网

扫盲操作系统虚拟机[4]:虚拟系统的安装(多图)

扫盲操作系统虚拟机[3]:虚拟机软件的选择

每周转载:关于雷政富(网文4篇,评论若干,图片若干)

两个寓言折射天朝政治现状

每周转载:关于十八大之后的天朝政局(网文3篇)

分享政治类电子书(10本)

2012年11月翻墙快报(用I2P突破18大期间的封锁)

扫盲操作系统虚拟机[2]:介绍各种应用场景

每周转载:“伟光正”的十八大(评论若干,照片多张)

关于【太子党关系网络】的常见问题解答

曝光天朝权贵——【太子党关系网络】1.0 版本发布

每周转载:关于宁波镇海的环保抗议(评论若干,照片多张)

扫盲操作系统虚拟机[1]:基本概念和功能简介

扫盲操作系统虚拟机[0]:概述

每周转载:关于西哈努克的幸福生活(网文3篇)

最“纯正”的共产主义政权——红色高棉简史

如何防止黑客入侵[7]:Web相关的防范(下)

每周转载:网友热议莫言获诺贝尔文学奖

回顾六四系列[21]:反思学运初期暴露出的问题

每周转载:关于天朝富豪的移民现象(网文5篇)

分享政治类电子书(15本)

每周转载:网友热议薄熙来被双开

八卦一下薄熙来的净身出户——好戏还没完

八卦一下王立军的官方定性

每周转载:关于朝廷对爱国主义的忽悠(网文5篇)

2012年9月翻墙快报(兼谈复活 TOR 的方法)

每周转载:关于反日愤青的暴行(评论若干,照片多张)

回顾六四系列[20]:“袁木求愚”的四·二九对话

每周转载:关于香港抗议洗脑教育(网文3篇,图片多张)

如何防止黑客入侵[6]:Web相关的防范(中)

博客评论功能升级(引入 BBCode 语法),顺便分享一下实现方法

每周转载:关于保钓引发的狭隘民族主义(网文4篇)

如何防止黑客入侵[5]:Web相关的防范(上)

每周转载:关于哈尔滨桥梁垮塌事故(网文3篇,微博若干)

谈革命[6]:回顾“最近50年的革命史”

每周转载:关于天朝近期的宏观经济数据(网文4篇)

谈革命[5]:扫盲“非暴力抗争”

每周转载:关于中国体育的举国体制(网文4篇)

谈谈三年大饥荒[3]:关于“苏联逼债”的谎言

每周转载:关于启东的环保抗议(照片多张、视频若干)

谈谈环保问题的根源和解决之道

会叫的孩子有奶吃——启东人民在行动,上海人民怎么办?

每周转载:汇总北京7-21暴雨的照片和评论

回顾六四系列[19]:四·二七大游行

每周转载:关于北朝鲜高层人事地震(网文4篇)

回顾六四系列[18]:各界人士对“四·二六社论”的反应

每周转载:汇总近几年天朝的雷人语录 {2013-11-05}

朝廷为何落入“塔西佗陷阱”——天津火灾随想

2012年7月翻墙快报

每周转载:关于什邡的环保抗议(网文3篇、照片若干、视频若干)

聊聊天朝的政治体制

政治常识扫盲:聊聊常见的政治体制

每周转载:关于人工智能对人类的影响(网文3篇)

书评:《少有人走的路——心智成熟的旅程》

每周转载:关于社保和养老(网文6篇)

回顾六四系列[17]:“四·二六社论”出笼的经过

每周转载:关于辩证法(网文3篇)

“如何翻墙”系列:简单扫盲 I2P 的使用

每周转载:高考背后的“公平问题、人口问题、腐败问题”(网文3篇)

天朝民众的心理分析:斯德哥尔摩综合症

每周转载:“六四事件”23周年纪念(网文4篇)

谈革命[4]:为啥改良【不】可行?

每周转载:IT 大牛谈编程语言(网文3篇)

分享关于“六四”的电子书(6本)

每周转载:关于北朝鲜(网文5篇)

回顾六四系列[16]:“四·二六社论”的民间背景

每周转载:关于天朝的政治改革(网文4篇)

谈谈三年大饥荒[2]:关于死亡人数的谎言

每周转载:关于三年大饥荒(网文3篇)

谈谈三年大饥荒[1]:扫盲一下大饥荒的死亡人数

谈谈三年大饥荒[0]:为啥要写这个话题?

每周转载:看看当年的共产党是如何唱高调的(网文4篇)

谈革命[3]:政治变革需要哪些素质?

每周转载:关于人生(网文3篇)

回顾六四系列[15]:《世界经济导报》事件

2012年4月翻墙快报

俺的 Google+ 复活,打算派上新用途

八卦一下薄熙来被立案调查的官方报道和小道消息

方校长和方校长

分享政治类电子书(16本)

看看全国人大代表都是啥货色——兼谈“议会道路的改良”行不通

回顾六四系列[14]:4月22日,胡耀邦的两场追悼会

八卦一下薄熙来去职的官方报道和小道消息

如何隐藏你的踪迹,避免跨省追捕[5]:用多重代理隐匿公网 IP

用提问来促进思维——兼谈【非】技术领域的 WHAT HOW WHY 三部曲

为啥俺不常用微博?——兼谈时间管理心得

回顾六四系列[13]:4月19、20日,新华门事件

2012年2月翻墙快报

八卦一下王立军事件的官方报道和小道消息

为啥俺推荐 Python[4]:作为函数式编程语言的 Python

如何隐藏你的踪迹,避免跨省追捕[4]:通讯工具的防范

回顾六四系列[12]:4月18日,从悼念到请愿

“心智模式”系列:如何面对【逆境】?——兼谈“斯托克代尔悖论”

谈革命[2]:先有制度还是先有素质

开博三周年总结,博文分类汇总

回顾2011年重大群体事件(多图)

回顾六四系列[11]:4月15日至18日,悼念活动迅速升温

"); $(".post-body h2").each( function(nIndex) { var sHash = "head-"+(nIndex+1); $(this).before(" "); var sTitle = $(this).html().replace(/<.>|/g, ""); $(".post-inner-index").append(""+sTitle+"
"); } ); } function initArticleInternalLinks() { var sSite = "http://"+Url.getDomain()+"/"; // Force HTTPS $(".post-body a").each( function(nIndex) { var sUrl = $(this).attr("href"); (sUrl && sUrl.startsWith(sSite)) && $(this).attr("href", sUrl.replace(/^http:/i, "https:")); } ); } function initArticleMaxMinBox() { $(".post-toolbar-1 .post-config-buttons") .append("配置") .append("进入全屏") .append("退出全屏") $(".post-config-buttons .maximize").click( function() { $("#sidebar").hide(); $("#main").css("width", "100%"); $("#comments").hide(); $("#Header1").hide(); var mapConfig = loadConfig(); ("true"==mapConfig["side-toolbar.show"]) && $("#side-toolbar").hide(); $(".post-config-buttons .minimize").show(); $(this).hide(); $("a[name=article]").scrollTo("fast"); } ); $(".post-config-buttons .minimize").hide().click( function() { layoutReset() } ); } // initArticleMaxMinBox() end var RATIO_NUM = 10000; function loadToolbarPos() { if(!hadConfig()) { return; } var mapConfig = loadConfig(); if(mapConfig["side-toolbar.show"]!="true" || mapConfig["side-toolbar.drag"]!="true") { return; } $("#side-toolbar").css("margin-left", "0px"); $("#side-toolbar").css("margin-top", "0px"); var sPos = mapConfig["side-toolbar.drag-pos"]; if(sPos.match(/\d{1,5}_\d{1,5}/)) { var offset = { left: parseInt(sPos.split("_")[0]), top: parseInt(sPos.split("_")[1]) }; offset.left = Math.round($(window).width() * offset.left / RATIO_NUM); offset.top = Math.round($(window).height() * offset.top / RATIO_NUM); if(offset.left > $(window).width()/2) { offset.left -= $("#side-toolbar").width(); } if(offset.top > $(window).height()/2) { offset.top -= $("#side-toolbar").height(); } $("#side-toolbar").adjustPosition(offset); } else if("" == sPos) { var offset = { left: $(window).width() - 38, top: $(window).height()/2 - 60 }; $("#side-toolbar").adjustPosition(offset); } } function saveToolbarPos() { var offset = $("#side-toolbar").offset(); offset.left = offset.left - $(window).scrollLeft(); offset.top = offset.top - $(window).scrollTop(); offset = $("#side-toolbar").adjustPosition(offset); if(!hadConfig()) { showBottomTip("到“界面配置”" + "开启相关选项,既可【自动保存】工具条的位置", 10000); return; } var mapConfig = loadConfig(); if(mapConfig["side-toolbar.show"]!="true" || mapConfig["side-toolbar.drag"]!="true") { return; } (offset.left > $(window).width()/2) && (offset.left += $("#side-toolbar").width()); (offset.top > $(window).height()/2) && (offset.top += $("#side-toolbar").height()); offset.left = Math.round(offset.left / $(window).width() * RATIO_NUM); offset.top = Math.round(offset.top / $(window).height() * RATIO_NUM); mapConfig["side-toolbar.drag-pos"] = offset.left+"_"+offset.top; if(saveConfig(mapConfig)) { showBottomTip("已经把工具条的位置保存到 cookie 中。", 3000); } else { showBottomTip("【无法】保存工具条的位置到 cookie 中!请检查你的浏览器设置。", 5000); } } function initToolbar(mapConfig) { if(mapConfig["side-toolbar.show"] != "true") { return; } $("#side-toolbar .go-options").show(); if("true" == mapConfig["side-toolbar.drag"]) { $("#side-toolbar").draggable({ cancel: "a", cursor: "move", start: function(event, ui) { $("#side-toolbar").css("margin-left", "0px"); $("#side-toolbar").css("margin-top", "0px"); }, stop: function(event, ui) { saveToolbarPos() } }); if(hadConfig()) { $("#side-toolbar").hover( function() { $("#side-toolbar .drag").show(); var offset = $("#side-toolbar").offset(); offset.left = offset.left - $(window).scrollLeft(); offset.top = offset.top - $(window).scrollTop() - 32; $("#side-toolbar").adjustPosition(offset); }, function() { $("#side-toolbar .drag").hide(); var offset = $("#side-toolbar").offset(); offset.left = offset.left - $(window).scrollLeft(); offset.top = offset.top - $(window).scrollTop() + 32; $("#side-toolbar").adjustPosition(offset); } ); } else { $("#side-toolbar .drag").show(); } } $(window).resize( function(event) { delayRun(function() { loadToolbarPos() }, 300) } ); $(window).trigger("resize"); // trick $("#side-toolbar").css("visibility", "visible"); } // initToolbar() end function init() { var mapConfig = loadConfig(); // Apply font size $(".post").css("font-size", mapConfig["article.font-size"]+"%"); $("#comments").css("font-size", mapConfig["comments.font-size"]+"%"); $("#tweets").css("font-size", mapConfig["tweets.font-size"]+"%"); initArticleMaxMinBox(); initToolbar(mapConfig); initArticleInnerLinks(mapConfig); initArticleInternalLinks(); $(document).tooltip({ content: Tooltip.content, open: function(event, ui) { Tooltip.open(event, ui, 3000); } }); } $(document).ready( function() { try { init(); } catch(err) { reportError("init: Catch exception:\n" + err); } } ); });
主页
正文
最新
编程随想

博客主站点 (BlogSpot)
俺的邮箱 (Gmail)
俺的收藏 (GitHub)
俺的推特 (@programthink)

博客订阅网址

RSS 订阅网址  邮件订阅网址

【免翻墙】的资源

博客打包下载(用于离线浏览)
BTSync 同步密钥:(使用说明
B7P64IMWOCXWEYOXIMBX6HN5MHEULFS4V

俺分享的各类电子书
电子书清单(含“BTSync”与“微软网盘”两种下载链接)

曝光天朝权贵
太子党关系网络

博客主要内容

  • 提升思维能力
  • 普及政治常识
  • 扫盲翻墙姿势
  • 揭露党国嘴脸
  • 网络安全教程
  • 软件开发技术

博客站内搜索


历史归档

"); $sub_comment.before($restore); } arrId.push($sub_comment.attr("data")); } } ); arrId.length && $restore.attr("data", arrId.join(",")).find(".number").html(arrId.length); } // showRestoreLink() end function filterReset() { m_sMenuState = "reset"; $.each(m_arrLevelInfo, function(i, info){ info.bVisible = true }); var $comment_holder = $("#comments #comment-holder"); $comment_holder.find("li.comment:hidden").show(); $comment_holder.find("li.restore.filter").remove(); $comment_holder.find(".comment-block.match").removeClass("match"); m_nLevelUpdateTime = getCurrentMS(); initAllGoLevel(); showBottomTip("已经重新显示:所有被过滤的评论。", 3000); } function filterShow(fnCondition, fnComplete, sType) { assert(typeof fnCondition === "function" && fnCondition, "filterShow: Invalid 'fnCondition'!"); assert(typeof fnComplete === "function" && fnComplete, "filterShow: Invalid 'fnComplete'!"); assert(typeof sType === "string" && sType.length > 0, "filterShow: Invalid 'sType'!"); m_sMenuState = "show." + sType; location.hash = "#comments"; var nProcCount = 0; asyncEachTopComment( "li.comment.top:visible", function($top_comment) { var nLevel = findLevel(parseInt($top_comment.attr("data")), false); if(m_arrCommentId.length > 150) { nProcCount += m_arrLevelInfo[nLevel].arrSubId.length; var nPercent = Math.floor(1000 * nProcCount / m_arrCommentId.length) / 10; showBottomTip("正在过滤,已经完成 " + nPercent + "%,请稍候 ...", 0); } function _setMatch($comment) { $comment.show(); ("user" == sType || "time" == sType) && $comment.children(".comment-block").addClass("match"); ("user" == sType) && $comment.find(".filter:first .user-others").hide(); return true; } if(fnCondition($top_comment)) // top comment match { _setMatch($top_comment); $top_comment.find("li.comment.sub").each( function(){ fnCondition($(this)) ? _setMatch($(this)) : $(this).hide() } ); showRestoreLink($top_comment, "根据你的过滤条件"); } else // top comment NOT match { var bHad = false; $top_comment.find("li.comment.sub").each( function(){ fnCondition($(this)) ? (bHad = _setMatch($(this))) : $(this).hide() } ); bHad ? showRestoreLink($top_comment, "根据你的过滤条件") : $top_comment.hide() && (m_arrLevelInfo[nLevel].bVisible = false); // NOT found visible sub comment } }, function() { var nNum = $("#comments #comment-holder li.comment:visible").length; showBottomTip("过滤完成,还剩下 " + nNum + " 条评论", 5000); m_nLevelUpdateTime = getCurrentMS(); initAllGoLevel(); fnComplete(); } ); } // filterShow() end function filterHide(fnCondition, fnComplete) { assert(typeof fnCondition === "function" && fnCondition, "filterHide: Invalid 'fnCondition'!"); assert(typeof fnComplete === "function" && fnComplete, "filterHide: Invalid 'fnComplete'!"); m_sMenuState = "hide"; location.hash = "#comments"; var nProcCount = 0; asyncEachTopComment( "li.comment.top:visible", function($top_comment) { var nLevel = findLevel(parseInt($top_comment.attr("data")), false); if(m_arrCommentId.length > 150) { nProcCount += m_arrLevelInfo[nLevel].arrSubId.length; var nPercent = Math.floor(1000 * nProcCount / m_arrCommentId.length) / 10; showBottomTip("正在过滤,已经完成 " + nPercent + "%,请稍候 ...", 0); } if(fnCondition($top_comment)) { $top_comment.hide(); m_arrLevelInfo[nLevel].bVisible = false; } else { $top_comment.find("li.comment.sub").each(function(){ fnCondition($(this)) && $(this).hide() }); showRestoreLink($top_comment, "根据你的过滤条件"); } }, function() { var nNum = $("#comments #comment-holder li.comment:visible").length; showBottomTip("过滤完成,还剩下 " + nNum + " 条评论", 5000); m_nLevelUpdateTime = getCurrentMS(); initAllGoLevel(); fnComplete(); } ); } // filterHide() end function filterByTime(nMinTime, nMaxTime) { if(nMinTime > nMaxTime) { showBottomTip("“时间范围”的设置有误——“开始时间”必须小于或等于“结束时间”", 5000); return; } filterReset(); function _condition($comment) { var nTime = Math.floor(parseInt($comment.attr("data")) / 1000); return (nMinTime 电梯", nMaxWidth = String(m_arrLevelInfo.length).length, arrSpamRange = null; for(var i=0; i 0) { (null === arrSpamRange) ? (arrSpamRange = [i, i]) : (arrSpamRange[1] = i); continue; } if(arrSpamRange) // show merge range { var sText = intToStr(arrSpamRange[0] + 1, nMaxWidth, " ").replace(/ /g, " "); (arrSpamRange[0] != arrSpamRange[1]) && (sText += "——" + (arrSpamRange[1] + 1)); sHtml += ""; arrSpamRange = null; } var sText = intToStr(i+1, nMaxWidth, " ").replace(/ /g, " ") + " 楼"; var sTip = sText + ": " + commentTop.oAuthor.sName; info.arrSubId.length && (sText += " / " + info.arrSubId.length + " 回复"); info.arrSubId.length && (sTip += "\n最后回复: " + getComment(info.arrSubId.last()).oAuthor.sName); sHtml += ""; } // for() end $(".comment-actions .go-level").each( function() { $(this).html(sHtml).change( function() { ($(this).val().length > 0) && (location.hash = "#" + $(this).val()); $(this)[0].selectedIndex = 0; } ).tooltip({ position: { my:"left center", at:"right+20 center-20" }, content: Tooltip.content, open: function(event, ui){ Tooltip.open(event, ui, 3000) } }); } ); } // initAllGoLevel() end function goLevelCurrent($cur_comment) { assert($cur_comment.hasClass("sub"), "goLevelCurrent: Invalid class!"); location.hash = "#" + $cur_comment.closest("li.comment.top").attr("data"); } function goLevelUp($cur_comment) { assert($cur_comment.hasClass("top") || $cur_comment.hasClass("sub"), "goLevelUp: Invalid class!"); if($cur_comment.hasClass("top")) { var $prev_comment = $cur_comment.prev(); while($prev_comment.length > 0) { if($prev_comment.is(":visible")) { location.hash = "#" + $prev_comment.attr("data"); return; } $prev_comment = $prev_comment.prev(); } showBottomTip("当前楼层已经是最高!", 3000); } else { goLevelUp($cur_comment.closest("li.comment.top")); } } function goLevelDown($cur_comment) { assert($cur_comment.hasClass("top") || $cur_comment.hasClass("sub"), "goLevelDown: Invalid class!"); if($cur_comment.hasClass("top")) { var $next_comment = $cur_comment.next(); while($next_comment.length > 0) { if($next_comment.is(":visible")) { location.hash = "#" + $next_comment.attr("data"); return; } $next_comment = $next_comment.next(); } showBottomTip("当前楼层已经是最低!", 3000); } else { goLevelDown($cur_comment.closest("li.comment.top")); } } function saveComment(commentNew, bAddUI) { assert(typeof commentNew.nId === "number", "saveComment: Invalid type of comment id!"); assert(!(commentNew.nId in m_mapComments), "saveComment: Repeat comment id!"); assert(m_arrCommentId.length == Object.keys(m_mapComments).length, "saveComment: Consistency check failed! The length is " + m_arrCommentId.length + " & " + Object.keys(m_mapComments).length); m_mapComments[commentNew.nId] = commentNew; var bNeedSort = (m_arrCommentId.length && commentNew.nId = m_nTimeGroupCritical) && (commentNew.nSpamType = 20); if(nNum == m_nTimeGroupCritical) { var arrId = m_spamTimeGroup.getSimilarTimes(commentNew.nId); assert(arrId.length > 0, "_detectSpam: The 'arrId' is EMPTY!"); eachCommentId(arrId, function(comment){ !comment.nSpamType && (comment.nSpamType = 20) }); } } if(0 == commentNew.nSpamType) { commentNew.nTextGroupId = m_spamTextGroup.addComment(commentNew); var arrId = m_spamTextGroup.getSimilarId(commentNew); if(arrId.length >= 3) { assert(commentNew.nTextGroupId != commentNew.nId, "_detectSpam: Invalid 'nTextGroupId'"); commentNew.nSpamType = 30; (3 == arrId.length) && eachCommentId(arrId, function(comment){ (comment.nTextGroupId != comment.nId) && (comment.nSpamType = 30) }); } } } // _detectSpam() end } // saveComment() end function procBannedTopComment(commentSub, bAddUI) // TOP comment banned by Google/Blogger { var commentTop = new Comment(null); // make a fake comment as placeholder commentTop.nId = 1 + (m_arrLevelInfo.length ? m_arrLevelInfo.last().nId : getArticleTime().getTime()); commentTop.sId = String(commentTop.nId); commentTop.dtCreate = new Date(commentTop.nId); commentTop.sLongId = commentSub.sParentLongId; commentTop.bIsBanned = true; commentTop.sUrl = commentSub.sUrl.replace(commentSub.sId, commentTop.sId); commentTop.oAuthor = new Author(null); commentTop.oAuthor.sName = "匿名"; commentTop.oAuthor.sAvatarUrl = "https://img1.blogblog.com/img/anon36.png"; // Save banned parent assert(!(commentTop.nId in m_mapComments), "procBannedTopComment: Repeat parent id!"); m_mapComments[commentTop.nId] = commentTop; m_arrCommentId.push(commentTop.nId); m_arrCommentId.sort(); // for robust m_mapLongId[commentTop.sLongId] = commentTop.nId; m_arrLevelInfo.push({ nId:commentTop.nId, arrSubId:[], bVisible:true, nHot:0.0 }); commentTop.nTopIndex = m_arrLevelInfo.length; commentTop.nSubIndex = 0; // Save child m_arrLevelInfo[commentTop.nTopIndex - 1].arrSubId.push(commentSub.nId); commentSub.nTopIndex = commentTop.nTopIndex; commentSub.nSubIndex = m_arrLevelInfo[commentSub.nTopIndex - 1].arrSubId.length; if(!bAddUI) { return } // Show banned parent comment var $top_comment = $(commentTop.showFull()), $top_ol = $("#comments #comment-holder ol.top"); assert(1 == $top_ol.length, "procBannedTopComment: Multi 'ol.top'!"); $top_comment.appendTo($top_ol); assert(!$top_comment.find(".comment-replies").length, "procBannedTopComment: Found '.comment-replies'!"); $top_comment.append("
" + "" + "
    " + "
    "); // Show child comment var $sub_ol = $top_comment.find(".comment-replies .comment-thread ol.sub"); assert($sub_ol.length > 0, "procBannedTopComment: NOT found 'ol.sub'!"); $sub_ol.append( $(commentSub.showFull({ starList: getAuthorStarList(commentSub) })) ); calcAllHot(); asyncEachTopLevel( function(n, info) { $top_ol.children("li.comment.top[data='" + info.nId + "']").attr("hot", info.nHot) .find(".hot:first").html(formatHotTitle(info.nHot)); }, function() { sortTopComments("nHot", true); m_nLevelUpdateTime = getCurrentMS(); initAllGoLevel(); } ); } // procBannedTopComment() end function updateTitle() { var sTitle = (m_arrCommentId.length ? (m_arrLevelInfo.length + "楼 / " + m_arrCommentId.length + "条") : "暂无"); var nSpamCount = 0; eachCommentId(m_arrCommentId, function(comment){ comment.nSpamType && nSpamCount++ }); var sSpamDesc = (nSpamCount ? " (自动隐藏了 " + nSpamCount + " 条“垃圾/刷屏”)" : ""); $("#comments #comments-label").html(sTitle + "评论" + sSpamDesc); $(".post-toolbar .post-comment-link .comment-link").html("评论数:" + sTitle); $("#side-toolbar a.comment-number").html( m_arrCommentId.length >= 1000 ? (Math.floor(m_arrCommentId.length / 1000) + "K+") : m_arrCommentId.length ); } window.g_loadNewComments = function(mapOpts) { mapOpts = mapOpts || {}; var nMaxResults = ("maxResults" in mapOpts ? mapOpts.maxResults : 50); var fnOnData = ("onData" in mapOpts ? mapOpts.onData : null); var fnOnError = ("onError" in mapOpts ? mapOpts.onError : null); var nMinTime = 1 + (m_arrCommentId.length ? m_arrCommentId.last() : getArticleTime().getTime()); assert(m_sPostId.match(/\d+/), "g_loadNewComments: Invalid 'm_sPostId'!"); var sUrl = Url.getFeedUrlPrefix() + "/" + m_sPostId + "/comments/default" + "?alt=json&v=2&orderby=published&reverse=false&max-results=" + nMaxResults + "&published-min=" + new Date(nMinTime).toISOString(); var $top_ol = $("#comments #comment-holder ol.top"); assert(1 == $top_ol.length, "g_loadNewComments: Multi 'ol.top'!"); var bAddUI = $top_ol.is(":visible"); $.ajax({ url: sUrl, dataType: "json", success: function(json) { if(!("feed" in json) || !("entry" in json.feed)) { fnOnData && fnOnData(0); // notify 'no more data' return; } //delayRun(function(){ window.g_loadTweets(false, true) }, 1000); // Notify tweets module to refresh var nEntryNum = json.feed.entry.length; assert(nEntryNum > 0, "g_loadNewComments: The 'entry' is empty!"); fnOnData && fnOnData(nEntryNum); $.each(json.feed.entry, _procJson); }, error: function(xhr, sStatus) { reportHttpError("加载评论出错", xhr, sStatus); fnOnError && fnOnError(""); }, timeout: 1000 * 40 }); // ajax end function _procJson(i, entry) { var comment = new Comment(entry); if(comment.nId in m_mapComments) { return } if(comment.bIsDeleted && !comment.nId) // for robust, make a fake comment id { comment.nId = 1 + (m_arrCommentId.length ? m_arrCommentId.last() : getArticleTime().getTime()); comment.sId = "" + comment.nId; comment.dtCreate = new Date(comment.nId); } assert(comment.nId, "_procJson: Invalid url at entry[" + i + "]!"); saveComment(comment, bAddUI); _showComment(comment); } function _showComment(comment) { if(!bAddUI || comment.bIsInstruction) { return } // create DOM var mapOpts = { starList: getAuthorStarList(comment) }; if(comment.isTop()) { var info = m_arrLevelInfo[comment.nTopIndex - 1]; mapOpts.hotValue = info.nHot; mapOpts.hotTitle = formatHotTitle(info.nHot); } var $comment = $(comment.showFull(mapOpts)); // append DOM if(comment.isSub()) { var nParentId = m_arrLevelInfo[comment.nTopIndex - 1].nId; var $top_comment = $top_ol.children("li.comment[data='" + nParentId + "']"); if($top_comment.length > 0) // for robust { !$top_comment.find(".comment-replies").length && $top_comment.append("
    " + "" + "
      " + "
      "); $top_comment.find(".comment-replies .comment-thread ol.sub").append($comment); } else { assert(false, "addComment: NOT found top comment, parent id: " + nParentId); } } else // is top { $comment.appendTo($top_ol); } (0 == comment.nSpamType) && $comment.children(".comment-block").addClass("unread"); updateTitle(); calcAllHot(); asyncEachTopLevel( function(n, info) { $top_ol.children("li.comment.top[data='" + info.nId + "']").attr("hot", info.nHot) .find(".hot:first").html(formatHotTitle(info.nHot)) }, function(){ sortTopComments("nHot", true) } ); } // _showComment() end } // g_loadNewComments() end function onHashChange() { var $comment_holder = $("#comments #comment-holder"); $comment_holder.find(".comment-block.current").removeClass("current"); var nCurCommentId = parseInt(location.hash.substring(1)); if(!(nCurCommentId in m_mapComments)) { return } var $cur_comment = $comment_holder.find("li.comment[data='" + nCurCommentId + "']"); if(0 == $cur_comment.length) { return } //TODO: show hidden spam comment $cur_comment.children(".comment-block").addClass("current"); if($cur_comment.is(":visible")) { return } // show hidden comments for(var i=0; i 0) { return "" } var sAuthorKey = comment.oAuthor.getKey(); if(!sAuthorKey) { return "★" } // anonymous WITHOUT name if(!(sAuthorKey in m_mapAuthors)) { return "" } var info = m_mapAuthors[sAuthorKey]; var sStar = ""; for(var i=0; i 0) { return } var sKey = comment.oAuthor.getKey(); if(!sKey) { return } (sKey in m_mapAuthors) ? m_mapAuthors[sKey].nCommentNum++ : (m_mapAuthors[sKey] = { oAuthor:comment.oAuthor, nCommentNum:1 }); } eachCommentId(m_arrCommentId, _procComment); for(var sKey in m_mapAuthors) { assert(sKey, "initAuthorHot: The 'sKey' is empty!"); var info = m_mapAuthors[sKey], author = info.oAuthor; info.nUserWeight = (author.isAnonymous() ? 1.5 : (author.isAdmin() ? 6.0 : 3.0) ); info.nStar = Math.log2(info.nCommentNum + 1); info.nHot = info.nUserWeight * info.nStar; info.sTip = "此人的用户类型权重:" + info.nUserWeight + "(" + (author.isAnonymous() ? "设了网名的匿名用户" : (author.isAdmin() ? "博主" : "登录用户") ) + ")" + "\n此人在本文的评论数:" + info.nCommentNum + "\n此人在本文的星级:" + (Math.round(info.nStar * 100) / 100) + " == log2(在本文的评论数+1)" + "\n此人每条评论的热度:" + (Math.round(info.nHot * 100) / 100) + " == 用户类型权重 * 在本文的星级"; } m_nAuthorsUpdateTime = getCurrentMS(); } // initAuthorHot() end function formatHotTitle(nHot) { return "热度 " + Math.round(nHot * 10) / 10 + "℃"; } function getCommentHot(comment) { if(comment.bIsDeleted || comment.nSpamType > 0) { return 0.0 } var sAuthorKey = comment.oAuthor.getKey(); if(!sAuthorKey) { return 1.0 } if(sAuthorKey in m_mapAuthors) { return m_mapAuthors[sAuthorKey].nHot } reportError("getCommentHot: Invalid 'sAuthorKey':" + sAuthorKey); return 1.0; } function setCommentHot($comment) { var nCommentId = parseInt($comment.attr("data")); assert(nCommentId in m_mapComments, "setHotInfo: Invalid comment id!"); var oAuthor = getComment(nCommentId).oAuthor, sAuthorKey = oAuthor.getKey(); if(!sAuthorKey) // anonymous WITHOUT name { $comment.find(".comment-header:first .star").html("★").attr("update", getCurrentMS()); var sTip = "此人的用户类型权重:1(无网名的匿名用户)" + "\n此人在本文的评论数:1" + "\n此人在本文的星级:1 == log2(在本文的评论数+1)" // Math.log2(nCommentNum+1) + "\n此人每条评论的热度:1 == 用户类型权重 * 在本文的星级"; $comment.children(".comment-block").find(".user, .star").attr("title", sTip); return; } if(sAuthorKey in m_mapAuthors) { var info = m_mapAuthors[sAuthorKey], sStar = ""; for(var i=0; i 0) { info.nHot = 0.0; return; } info.nHot = getCommentHot(getComment(info.nId)); // top if(info.arrSubId.length > 0) // sub { var mapUser = {}; eachCommentId( info.arrSubId, function(comment) { if(comment.bIsDeleted || comment.nSpamType > 0) { return } var sKey = comment.oAuthor.getKey(); if(!sKey) // anonymous user WITHOUT name { info.nHot += 1.0; } else if(comment.oAuthor.isAdmin()) // blogger admin { info.nHot += getCommentHot(comment); } else // logined user or anonymous user with name { var nNum = ((sKey in mapUser) ? ++mapUser[sKey] : (mapUser[sKey] = 1)); info.nHot += ((nNum 全站搜索评论" + "显示全部评论" + ""; var $toolbar = $("#comments #comments-toolbar").html("
      " + sHtml + "
      "); $toolbar.find(".filter").children("a").attr("href", "javascript:;"); $toolbar.find(".filter .reset").click(function(){ filterReset() }); var menu = $toolbar.find(".dropdown").menu({ position: {my:"left top", at:"left bottom"} }); $(menu).mouseleave(function(){ menu.menu("collapseAll") }); function showTimeRange() { var $range = $("
      " + "自定义时间过滤: " + "开始  " + "结束  " + "过滤
      ").appendTo($toolbar); $range.find("input").attr("size", "10").attr("readonly", true).attr("title", "日期") .datepicker(getDatePickerOpts()).val( (new Date()).format("%Y-%0m-%0d") ); var sOptionHtml = ""; for(var i=0; i" + intToStr(i, 2, " ").replace(/ /g, " ") + ""; } $range.find("#min-hour, #max-hour").html(sOptionHtml).attr("title", "小时"); var $min_hour = $range.find("#min-hour").val("00"); var $max_hour = $range.find("#max-hour").val("23"); $range.children("a#search").click( function() { var dtMin = Date.parseISO($range.find("#min-date").val() + "T" + $min_hour.val() + ":00:00"); var dtMax = Date.parseISO($range.find("#max-date").val() + "T" + $max_hour.val() + ":59:59"); filterByTime(dtMin.getTime() / 1000, dtMax.getTime() / 1000); } ).attr("href", "javascript:;"); menu.menu("collapseAll"); } $toolbar.find(".filter-time li a.menuitem").click( function() { if($(this).hasAttr("span")) { var nSpan = parseInt($(this).attr("span")), nMaxTime = Math.floor(getCurrentMS() / 1000); assert(!isNaN(nSpan) && nSpan > 0, "initToolbar: Invalid 'span' attr!"); menu.menu("collapseAll"); delayRun(function(){ filterByTime(nMaxTime - nSpan, nMaxTime) }, 100); } else { showTimeRange(); $(this).parent().hide(); } } ).attr("href", "javascript:;"); } // initToolbar() end function complete() { $("#comments #comments-loading").remove(); $("#blog-pager").show(); initToolbar(); m_nLevelUpdateTime = getCurrentMS(); initAllGoLevel(); setInterval(function(){ g_loadNewComments() }, 1000 * 60 * 10); (parseInt($("#comments").attr("init_num")) = 0, "setProgress: Invalid 'nInc'!"); var nLoadWeight = 2.0, nShowWeight = 1.0; if("load" == sType) { nInc *= nLoadWeight } else if("show" == sType) { nInc *= nShowWeight } else { assert(false, "setProgress: Invalid 'sType': " + sType) } var $comments = $("#comments"), nInitTotal = parseInt($comments.attr("init_num")); var nProcTotal = nInitTotal * (nShowWeight + nLoadWeight); var $progress_bar = $comments.find("#comments-loading #progress-bar"); assert(1 == $progress_bar.length, "setProgress: NOT found DOM '#progress-bar'!"); var nCurNum = parseInt($progress_bar.attr("data")); assert(!isNaN(nCurNum), "setProgress: Invalid 'data' attr!"); nCurNum += nInc; var nPercent = Math.floor(nCurNum * 100 / nProcTotal); (nPercent > 100) && (nPercent = 100); // @see 'procBannedTopComment' $progress_bar.attr("data", nCurNum).children("#progress-label").html(nPercent + "%"); $progress_bar.progressbar({value: nPercent}); return $progress_bar; } // setProgress() end function loadAllComments() { assert(Array.isArray(m_arrCommentId), "loadAllComments: Invalid size of 'm_arrCommentId'!"); var $comments = $("#comments"), nInitTotal = parseInt($comments.attr("init_num")); m_spamManual.parseSpamList($(".post .post-body").html()); setProgress("load", 0); (new Url(null)).getParam("comment") && $comments.scrollTo("fast"); var bIsLoading = false, dtLastLoad = new Date(), nLoadNum = 0, nNetErrNum = 0; var mapOpts = { onData: function(nCommentNum) { bIsLoading = false; if(nCommentNum > 0) { dtLastLoad = new Date(); nNetErrNum = 0; ((nLoadNum += nCommentNum) >= 50) && setProgress("load", nLoadNum) && (nLoadNum = 0); if(m_arrCommentId.length = nInitTotal, "loadAllComments.onData"); dtLastLoad = null; // flag of 'no more data' }, onError: function(sDesc) { bIsLoading = false; sDesc ? reportError(sDesc) : nNetErrNum++; }, maxResults: (nInitTotal 10) || (getCurrentMS() - dtLastLoad.getTime() > 1000 * 60) ) // load timeout { clearInterval(timer); timer = null; var sHtml = "
      由于" + (nNetErrNum ? "网络故障" : " JS 脚本出错") + ",只有 " + m_arrCommentId.length + " 条评论被加载。" + "

      显示已加载的这部分评论
      "; $comments.children("#comments-warning").append(sHtml) .find("a#show").attr("href", "javascript:;").click( function() { $(this).closest("span").remove(); $comments.children("#comments-loading").prepend("
      正在处理已加载的这部分评论
      "); asyncCallChain([calcAllHot, showAllComments], 50); } ); } }, 100 ); // setInterval() end } // loadAllComments() end function showAllComments() { var $top_ol = $("#comments #comment-holder").show().children(".comment-thread").children("ol"); updateTitle(); // SYNC sort array var arrLevelInfo = m_arrLevelInfo.slice(); arrLevelInfo.sort(function(a, b){ return Number.cmp(a.nHot, b.nHot) * -1 }); var nLevel = 0, nCommentCount = 0, sLevelsHtml = "", nTimeSpan = 30, arrTopSpamId = []; asyncLoop( function() { var nBeginTime = getCurrentMS(); while(nLevel 500) { setProgress("show", nCommentCount) && (nCommentCount = 0); return true; } } sLevelsHtml && $top_ol.append(sLevelsHtml) && (sLevelsHtml = ""); (nCommentCount > 0) && setProgress("show", nCommentCount) && (nCommentCount = 0); arrTopSpamId.length && $top_ol.append(_mergeSpam(arrTopSpamId)); complete(); return false; }, nTimeSpan, "showAllComments" ); // asyncLoop end function _showLevel(info) { var nBufLen = 1024 * 128; (0 == getComment(info.nId).nSpamType) ? ((sLevelsHtml += _getLevelHtml(info)).length > nBufLen) && $top_ol.append(sLevelsHtml) && (sLevelsHtml = "") : arrTopSpamId.push(info.nId); // merge multi top spam return (1 + info.arrSubId.length); } function _getLevelHtml(info) { assert(Array.isArray(info.arrSubId), "_getLevelHtml: Invalid 'arrSubId' type!"); var commentTop = getComment(info.nId), sSubCommentHtml = "", arrSubSpamId = []; assert(0 == commentTop.nSpamType, "_getLevelHtml: Top comment is SPAM!"); function _procSub(commentSub) { if(commentSub.nSpamType > 0) // merge multi spam { arrSubSpamId.push(commentSub.nId); return; } arrSubSpamId.length && (sSubCommentHtml += _mergeSpam(arrSubSpamId)) && (arrSubSpamId = []); sSubCommentHtml += commentSub.showFull({ starList: getAuthorStarList(commentSub) }); } eachCommentId(info.arrSubId, _procSub); arrSubSpamId.length && (sSubCommentHtml += _mergeSpam(arrSubSpamId)); var mapOpts = { starList: getAuthorStarList(commentTop), hotValue: info.nHot, hotTitle: formatHotTitle(info.nHot), subComments: sSubCommentHtml }; return commentTop.showFull(mapOpts); } // _getLevelHtml() end function _mergeSpam(arrId) { var sHtml = "
    1. "; $.each(arrId, function(i, nId){ sHtml += " " }); var sSize = (arrId.length > 20 ? (arrId.length > 100 ? "150%" : "125%") : "100%"); sHtml += "此处有 " + arrId.length + " 条评论" + "被判定为“垃圾或刷屏”,已经自动隐藏。重新显示
    2. "; return sHtml; } } // showAllComments() end function initEvent($comments) { $(window).scroll(function(){ $comments.inScreen(false) && (m_nLastActiveTime = getCurrentMS()) }); $comments .on("click", ".comment-actions .add-btn", function(){ showEditor(null) }) .on("click", ".comment-actions .reply-btn", function() { var nCommentId = parseInt( $(this).closest("li.comment").attr("data") ); assert(!isNaN(nCommentId), "initEvent: Invalid 'data' attr at 'li.comment'!"); showEditor(getComment(nCommentId)); } ) .on("click", ".comment-actions .go-level-up", function(){ goLevelUp($(this).closest("li.comment")) }) .on("click", ".comment-actions .go-level-down", function(){ goLevelDown($(this).closest("li.comment")) }) .on("click", ".comment-actions .go-level-current", function(){ goLevelCurrent($(this).closest("li.comment")) }) .on("click", ".comment-actions .mark-spam", function() { var nCommentId = parseInt( $(this).closest("li.comment").attr("data") ); assert(!isNaN(nCommentId), "initEvent: Invalid 'data' attr at 'li.comment'!"); m_spamManual.addCommentId(nCommentId); $(this).after($(" BANNED ")).remove(); } ) .on("click", ".spam-actions .show-banned", function(){ $(this).parent().children("#banned-code").val(m_spamManual.getBannedJson()) } ) .on("mouseenter", "li.comment .comment-block", function() { _onMouseEnterComment($(this)); $(this).children(".comment-actions").find(".menubars, .blog-admin").show(); } ) .on("mouseleave", "li.comment .comment-block", function(){ $(this).children(".comment-actions").find(".menubars, .blog-admin").hide() } ) .on("click", ".comment-replies .thread-toggle", function(){ _toggleThread($(this)) }) .on("click", ".comment-replies .restore.filter a", function(){ _showFilterComments($(this)) }) .on("click", ".restore.spam-merge a.load", function(){ _loadSpamComments($(this)) }) .on("click", ".comment-content .restore.spam a.load", function(){ _loadSpamComment($(this)) }) .on("click", ".comment-content .read-more", function(){ _readMore($(this)) }) .on("click", ".comment-content a.goto", function(evt){ _clickGotoLink(evt, $(this)) }) .on("click", ".comment-content a.bbcode", function(evt){ _clickBBCodeLink(evt, $(this)) }) .on("click", ".comment-content .bbcode.image .show-icon", function(){ _switchBBCodeIcon($(this)) }) .on("click", ".comment-content .bbcode.image .show-real", function(){ _switchBBCodeImg($(this)) }) .on("mouseenter", ".comment-content .bbcode", function(){ !$(this).hasAttr("title") && $(this).attr( "title", _getBBCodeTip($(this)) ) } ) .mousemove(function(){ m_nLastActiveTime = getCurrentMS() }); function _onMouseEnterComment($block) { var $comment = $block.closest("li.comment"), nCommentId = parseInt($comment.attr("data")); assert(!isNaN(nCommentId), "_onMouseEnterComment: Invalid 'data' attr!"); var $menubars = $block.children(".comment-actions").children(".menubars"); if($menubars.length>0 && $menubars.hasAttr("update")) { var nUpdateTime = parseInt($menubars.attr("update")); assert(!isNaN(nUpdateTime), "_onMouseEnterComment: Invalid 'update' attr at menubars!"); (!$menubars.find(".menubar").length || nUpdateTime = m_arrLevelInfo.length) { return } if(nSub >= m_arrLevelInfo[nTop].arrSubId.length) { return } location.hash = "#" + m_arrLevelInfo[nTop].arrSubId[nSub]; } function _clickBBCodeLink(event, $btn) { var oUrl = new Url($btn.attr("href")), oUrlPage = new Url(); if(oUrlPage.sHost == oUrl.sHost && oUrlPage.sPath == oUrl.sPath) // current page { event.preventDefault(); location.hash = "#" + (oUrl.getParam("comment") || ""); } } function _switchBBCodeIcon($btn) { var $center = $btn.hide().closest("center"); $center.find(".show-real, img.icon").show(); $center.find("img.real, .size").hide(); } function _switchBBCodeImg($btn) { var $center = $btn.hide().closest("center"); $center.find(".show-icon").show(); var $img_icon = $center.find("img.icon"), $img_real = $center.find("img.real"); if(!$img_icon.prop("complete")) { $img_icon.attr("alt", "无法显示评论图片 :( 可能是: 图片网址有误 或 网络传输超时"); return; } $img_icon.hide(); $img_real.show(); $center.find(".size").show(); if($img_real.hasAttr("src")) { return } var sImgUrl = $img_icon.attr("src").replace(/&resize_w=\d+/, ""); $img_real.attr("alt", "正在载入原始图 ......").attr("src", sImgUrl) .error(function(){ $(this).attr("alt", "图片无法加载 :( 可能是: 图片网址有误 或 网络传输超时") }) .load(function(){ onImgLoad($(this)) }); function onImgLoad($img) { var nFitWidth = $img.attr("alt", "").parent().width() - 8; if($img[0].clientWidth 切换原始图的显示尺寸:
      "; $(sHtml).insertAfter($img).children("select") .change(function(){ $img.css( "max-width", parseInt($(this).val()) ) }); } } // _switchBBCodeImg() end function _getBBCodeTip($element) { var sUrlProto = "\n\n(网址必须以 http:// 或 https:// 开头)"; var arrConfig = [ [ "a", "simple", "超链接语法:\n评论中插入的网址会自动识别成可点击的超链\n" + "为避免误判,网址【两端】最好是空格或回车,【不能是】半角符号" + sUrlProto ], [ "a", "text", "超链接语法:\n[url=网址]标题文字[/url]" + sUrlProto ], [ null, "image", "评论中的网址,如果对应的是图片,会被智能识别并把图片嵌入到评论中。\n\n" + "(为保护读者隐私,嵌入的图片用【Google图片代理】加载。\n" + "因此,存放图片的服务器【不会】看到你的“访问者IP”及“浏览器信息”)" ], [ "b", null, "粗体语法:\n[b]带粗体的文字[/b]" ], [ "i", null, "斜体语法:\n[i]带斜体的文字[/i]" ], [ "center", null, "居中语法:\n[center]居中的文字[/center]" ], [ null, "quote", "引用语法:\n[quote]被引用的文字[/quote]" ], [ "del", null, "删除线语法:\n[del]带删除线的文字[/del]" ], [ "a", "goto", "XX单元\nX楼XX单元\n会自动识别成可点击的超链,点击后跳到相应评论" ] ]; var sTipContent = "【BBCode 语法提示】\n"; $.each( arrConfig, function(i, arrFields) { if(arrFields[0] && arrFields[0] != $element.prop("tagName").toLowerCase()) { return true } if(arrFields[1] && !$element.hasClass(arrFields[1])) { return true } return (sTipContent += arrFields[2]) && false; }); return sTipContent; } // _getBBCodeTip() end } // initEvent() end function init($comments) { { var $editor_src = $("a#comment-editor-src"); $editor_src.length && (m_sEditorUrl = $editor_src.attr("href")); assert(m_sEditorUrl, "init: Invalid 'm_sEditorUrl'!"); (m_sEditorUrl.indexOf("#") == -1) && (m_sEditorUrl += "#"); m_sPostId = (new Url(m_sEditorUrl)).getParam("postID"); assert(m_sPostId, "init: NOT found 'postID' in 'm_sEditorUrl' attr!"); } initEvent($comments); var nInitTotal = 0; if($comments.hasAttr("init_num")) { nInitTotal = parseInt($comments.attr("init_num")); assert(!isNaN(nInitTotal) && nInitTotal > 0, "init: Invalid 'init_num' attr!"); } else { $comments.attr("init_num", "0"); } $("#side-toolbar a.comment-number").html(nInitTotal >= 1000 ? (Math.floor(nInitTotal / 1000) + "K+") : nInitTotal); if(nInitTotal > 0) { $comments.find("#comment-holder").html("
        "); $comments.children("#comments-loading").html("
        "); $("#blog-pager").hide(); loadAllComments(); } else { var sHtml = " " + "

        " + "
        " + "
        " + "
        " + "
          " + "
          "; // comments-content $comments.html(sHtml).find("#comment-holder").show(); complete(); } // 'comment-actions' to add top comment { var sSpamTool = ""; var sHtml = "" + (isBlogAdmin() ? sSpamTool : ""); $comments.find("#comment-holder").after($(sHtml)); } $("#ie-ver-lt-10").length // IE version 初始化评论界面出错!", 0); reportError("init: Catch exception:\n" + err); } } ); });

          最新评论

          " : ""); bLoadOld ? $content.append($comment_block) : $content.prepend($comment_block); (nHiddenCount > 0) && (nHiddenCount = 0); if(!bInit) { $comment_block.css("background-color", "LightYellow"); delayRun(function(){ $comment_block.css("background-color", "White") }, 1000*10); } } // for() end } // showTweets() end function initAutoLoad(mapConfig) { if(mapConfig["tweets.auto-load"] != "true") { $("#tweets .comments-auto-load .disable").show(); return; } var nMinutes = parseInt(mapConfig["tweets.auto-load-timeout"]); (isNaN(nMinutes) || nMinutes 100) && (m_nInitNum = 100); g_loadTweets(true, false); initAutoLoad(mapConfig); }, timeout: 1000 * 40 }); } // loadManualBannedId() end function init() { if(location.pathname.match(/^\/p\/\w+\.html$/)) // This is page, NOT article { $("#tweets").closest(".widget").hide(); return; } loadManualBannedId(); Comment.initArticlesMap(8); $("#tweets .comments-toolbar .refresh").click( function() { $(this).hide(); g_loadTweets(false, false); } ); setInterval(updateCreateTime, 1000 * 60 * 10); } // init() end $(document).ready( function() { try { init() } catch(err) { reportError("init: Catch exception: " + err) } } ); });
          订阅地址 界面配置

          共自动过滤了 条【没信息量】的留言
          共自动过滤了 条【垃圾或刷屏】的留言