This is a sitelog of Easun.org.
因为 本地评论 JS 化,又重写了一遍 MT 的 ajax 提交过程。梳理了一下流程。
主要是删除了 MT 提交过程的 2次服务器认证,把第一次服务器认证(登录信息预提交验证) mtCommentSessionVerify
有限度地交给 JS
+ cookie
。
简单的说,就是设置全局变量 user
为 null
,然后重新在 cookie
中读取 user
来判断登录信息是否正常? 然后其他的认证在 提交表格 时完成就好。 简单 JS
片段如下:
code var refresh_user = function(u) {
if (u) mtSetUser(u);
if (!u) { user = null; mtFireEvent('usersignin'); u = mtGetUser(); }
if ( u && u.is_authenticated ) { /* do nothing*/ }
else { $f.find(':input[name="sid"]').attr("value","") ; ShowCommentsOpenData(); }
};
然后发现 JQ $.ajax
的小问题:
我的 $.ajax
如下:
code$.ajax({
type: 'POST',
cache:false,
url: url,
context: el,
xhrFields: { withCredentials: true },
data: $f.serialize(),
success: successfuc,
beforeSend:beforefun,
error: errorfun,
complete:completefuc
});
本来是吧 refresh_user
写到 beforeSend
中的,但是执行的时候发现 refresh_user
中对 $f
的改变,并没有在 data: $f.serialize()
中 体现出来。 所以只好显式在 $.ajax
前调用此函数了。
笔记下来,为自己提醒。
另外,本来对 JS 全面进行 JQ 改写来着,但是实际对 form
元素操作中发现,同样对
code<form name="comments_form" id="comments-form">
<input type="hidden" name="preview" value="" />
...
</form>
中 的 name="preview"
的 value
操作。
原来的代码是
codevar f = document['comments_form'];
if (f.preview.value == '') f.preview.value = '1';
而 JQ 呢? 貌似。。。。。
codevar $f = $("#comments-form");
var $preview= $f.find(':input[name="preview"]');
if ($preview.attr("value") == '') $preview.attr("value","1");
f
和 $f
是为了方便操作预先定义好的。 貌似还是不用 JQ 操作的快一点。或者就现在这样混合用吧。。。。
另外,给 ajax 提交完成后刷新新评论搞了一段简单的 JQ 特效: 代码如下:
code var animate_item = function(id) {
var $el =$("#comments-content .comment#comment-"+id);
var _top = $el.offset().top - ( $(window).height() - $el.height() )/2;
$("html,body").animate({scrollTop:_top},1000);
$el.addClass("notice")
.animate({left:'30px',opacity:'0.2'},"slow")
.animate({left:'0px',right:'30px',opacity:'0.8'},"slow")
.animate({left:'0px',right:'0px',top:'30px',opacity:'0.2'},"slow")
.animate({left:'0px',right:'0px',top:'0px',bottom:'30px',opacity:'0.8'},"slow")
.animate({left:'0px',right:'0px',top:'0px',bottom:'0px',opacity:'1'},"slow");
var total= parseInt( $("#comments").attr("data-total"));
function c() { $el.removeClass("notice").addClass( (total%2) ? "odd":"even" ); }
$el.one('click',c).one('mouseover',c);
};
没有抓 gif ,简单完成效果如下:
貌似评论系统做的好看多了
主要是重写本地评论。 另外评论的收起和展开、评论框的收起和展开同时兼容多说系统和本地系统。
晚上正式放上新版本的 JS。 拆分 mt.js 为 mt.js 和 mt_comments.js .
原来还有个本站评论系统,没仔细看都发现不了了,其实默认本地评论不是更好?
MT后台效率有点低,所以无奈启用了多说。 其实多说每条评论现在都实时同步到了本地,定期变成本地~
现在逐步改进效率,如果哪天效率可言接受,则会平缓取消多说。
默认评论本地JS调整成了系统本身而不是多说,但是由于 CDN 。估计大家看见的依然是多说。
测试下以前注册的 typepad 账号。
今天又小小修改了一下相关JS