420 lines
12 KiB
JavaScript
420 lines
12 KiB
JavaScript
// 返回是否是re.Ok == true
|
||
function reIsOk(re) {
|
||
return re && typeof re == "object" && re.Ok;
|
||
}
|
||
function showAlert(id, msg, type, id2Focus) {
|
||
$(id).html(msg).removeClass("alert-danger").removeClass("alert-success").removeClass("alert-warning").addClass("alert-" + type).show();
|
||
if(id2Focus) {
|
||
$(id2Focus).focus();
|
||
}
|
||
}
|
||
function hideAlert(id, timeout) {
|
||
if(timeout) {
|
||
setTimeout(function() {
|
||
$(id).hide();
|
||
}, timeout);
|
||
} else {
|
||
$(id).hide();
|
||
}
|
||
}
|
||
function ajaxGet(url, param, func) {
|
||
$.get(url, param, func);
|
||
}
|
||
|
||
function ajaxPost(url, param, func) {
|
||
$.post(url, param, func);
|
||
}
|
||
//------
|
||
// jsonp
|
||
function ajaxGetP(url, param, callback) {
|
||
ajaxP("GET", url, param, callback)
|
||
}
|
||
function ajaxPostP(url, param, callback) {
|
||
ajaxP("POST", url, param, callback)
|
||
}
|
||
function ajaxP(method, url, param, callback) {
|
||
param = param || {};
|
||
callback = callback || function() {};
|
||
$.ajax({
|
||
dataType: "jsonp",//跨域访问 dataType 必须是jsonp 类型。
|
||
url: url,
|
||
type: method,
|
||
data: param,
|
||
jsonp: "callback",
|
||
jsonpCallback: "jsonpCallback",
|
||
success: callback
|
||
});
|
||
}
|
||
|
||
//------------------
|
||
// 分享
|
||
var windowParam = 'width=700, height=580, top=180, left=320, toolbar=no, menubar=no, scrollbars=no, location=yes, resizable=no, status=no';
|
||
function getShareUrl() {
|
||
return location.href;
|
||
}
|
||
function getShareTitle(title) {
|
||
return encodeURI(title + " (from https://leanote.com)");
|
||
}
|
||
function shareSinaWeibo(noteId, title, pic) {
|
||
var url = "http://service.weibo.com/share/share.php?title=" + getShareTitle(title) + "&url=" + getShareUrl(noteId);
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
function shareTencentWeibo(noteId, title, pic) {
|
||
var _appkey = '801542571';
|
||
var url = "http://share.v.t.qq.com/index.php?c=share&a=index&appkey=" + _appkey +"&title=" + getShareTitle(title) + "&url=" + getShareUrl(noteId) +"&pic=" + pic;
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
function shareQQ(noteId, title, pic) {
|
||
var url = 'http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + getShareUrl(noteId) + '&title=' + title + '&pics=' + pic;
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
function shareRenRen(noteId, title, pic) {
|
||
var url = 'http://widget.renren.com/dialog/share?resourceUrl=' + getShareUrl(noteId) + '&srcUrl=' + getShareUrl(noteId) + '&title=' + getShareTitle(title) + '&pic=' + pic;
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
|
||
// https://twitter.com/intent/tweet?text=&pic=
|
||
function shareTwitter(noteId, title, pic) {
|
||
var url = 'https://twitter.com/intent/tweet?text=' + getShareTitle(title) + '&pic=' + pic;
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
// http://www.facebook.com/sharer.php?u=<?php the_permalink();?>&t=<?php the_title(); ?>”
|
||
function shareFacebook(noteId, title, pic) {
|
||
var url = ' http://www.facebook.com/sharer.php?t=' + getShareTitle(title) + '&pic=' + pic;
|
||
window.open(url, 'Share', windowParam);
|
||
}
|
||
|
||
|
||
// go的datetime转成datetime字符串
|
||
// 2014-01-06T18:29:48.802+08:00 => 2012-12-12 12:12:12 字符串
|
||
function goNowToDatetime(goNow) {
|
||
if(!goNow) {
|
||
return "";
|
||
}
|
||
return goNow.substr(0, 10) + " " + goNow.substr(11, 8);
|
||
}
|
||
|
||
// 转成Date()
|
||
// 2014-01-06T18:29:48.802+08:00 => new Date(year, month, day, hour, minute, second)
|
||
function goNowToDate(goNow) {
|
||
if(!goNow) {
|
||
return "";
|
||
}
|
||
var str = goNow.substr(0, 10) + " " + goNow.substr(11, 8);
|
||
// 2012-12-12 12:12:12
|
||
var tempStrs = str.split(" ");
|
||
var dateStrs = tempStrs[0].split("-");
|
||
var year = parseInt(dateStrs[0], 10);
|
||
var month = parseInt(dateStrs[1], 10) - 1;
|
||
var day = parseInt(dateStrs[2], 10);
|
||
var timeStrs = tempStrs[1].split(":");
|
||
var hour = parseInt(timeStrs [0], 10);
|
||
var minute = parseInt(timeStrs[1], 10) - 1;
|
||
var second = parseInt(timeStrs[2], 10);
|
||
var date = new Date(year, month, day, hour, minute, second);
|
||
return date;
|
||
}
|
||
|
||
// 距离现在有多久, 评论时间间隔
|
||
var diff = {
|
||
minute : 1000 * 60,
|
||
hour : 1000 * 60 * 60,
|
||
day : 1000 * 60 * 60 * 24,
|
||
halfamonth : 1000 * 60 * 60 * 24 * 15,
|
||
month : 1000 * 60 * 60 * 24 * 30
|
||
}
|
||
function getDateDiff(dateTimeStamp) {
|
||
var now = new Date().getTime();
|
||
var diffValue = now - dateTimeStamp;
|
||
if (diffValue < 0) {
|
||
return "";
|
||
}
|
||
var monthC = diffValue / diff.month;
|
||
var weekC = diffValue / (7 * diff.day);
|
||
var dayC = diffValue / diff.day;
|
||
var hourC = diffValue / diff.hour;
|
||
var minC = parseInt(diffValue / diff.minute);
|
||
if (monthC >= 1) {
|
||
result = parseInt(monthC) + " month ago";
|
||
} else if (weekC >= 1) {
|
||
result = parseInt(weekC) + " weeks ago";
|
||
} else if (dayC >= 1) {
|
||
result = parseInt(dayC) + " days ago";
|
||
} else if (hourC >= 1) {
|
||
result = parseInt(hourC) + " hours ago";
|
||
} else if (minC > 1) {
|
||
result = minC + " minutes ago";
|
||
} else {
|
||
result = "Just now";
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function weixin() {
|
||
var local=window.location.href;
|
||
var title = $.trim($(".title").text());
|
||
var desc = $.trim($("#desc").text());
|
||
var imgUrl = $("#content img").eq(0).attr('src');
|
||
window.shareData = {
|
||
"imgUrl": imgUrl,
|
||
"timeLineLink":local,
|
||
"sendFriendLink": local,
|
||
"weiboLink":local,
|
||
"tTitle": title,
|
||
"tContent": desc,
|
||
"fTitle": title,
|
||
"fContent": desc,
|
||
"wContent": desc
|
||
};
|
||
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
|
||
// 发送给好友
|
||
WeixinJSBridge.on('menu:share:appmessage', function (argv) {
|
||
WeixinJSBridge.invoke('sendAppMessage', {
|
||
"img_url": window.shareData.imgUrl,
|
||
"img_width": "200",
|
||
"link": window.shareData.sendFriendLink,
|
||
"desc": window.shareData.fContent,
|
||
"title": window.shareData.fTitle
|
||
}, function (res) {
|
||
hs_guide('none');
|
||
_report('send_msg', res.err_msg);
|
||
})
|
||
});
|
||
|
||
// 分享到朋友圈
|
||
WeixinJSBridge.on('menu:share:timeline', function (argv) {
|
||
WeixinJSBridge.invoke('shareTimeline', {
|
||
"img_url": window.shareData.imgUrl,
|
||
"img_width": "200",
|
||
"link": window.shareData.timeLineLink,
|
||
"desc": window.shareData.tContent,
|
||
"title": window.shareData.tTitle
|
||
}, function (res) {
|
||
hs_guide('none');
|
||
_report('timeline', res.err_msg);
|
||
});
|
||
});
|
||
|
||
// 分享到微博
|
||
WeixinJSBridge.on('menu:share:weibo', function (argv) {
|
||
WeixinJSBridge.invoke('shareWeibo', {
|
||
"content": window.shareData.wContent,
|
||
"url": window.shareData.weiboLink,
|
||
}, function (res) {
|
||
hs_guide('none');
|
||
_report('weibo', res.err_msg);
|
||
});
|
||
});
|
||
}, false);
|
||
}
|
||
|
||
|
||
function scrollTo(self, tagName, text) {
|
||
var iframe = $("#content");
|
||
var target = iframe.find(tagName + ":contains(" + text + ")");
|
||
|
||
// 找到是第几个
|
||
// 在nav是第几个
|
||
var navs = $('#blogNavContent [data-a="' + tagName + '-' + encodeURI(text) + '"]');
|
||
var len = navs.size();
|
||
for(var i = 0; i < len; ++i) {
|
||
if(navs[i] == self) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (target.size() >= i+1) {
|
||
target = target.eq(i);
|
||
// 之前插入, 防止多行定位不准
|
||
var top = target.offset().top;
|
||
if(LEA.isMobile) {
|
||
top -= 50;
|
||
}
|
||
var nowTop = $(document).scrollTop();
|
||
// 用$("body").scrllTop(10)没反应 firefox下
|
||
$('html,body').animate({scrollTop: top}, 200);
|
||
return;
|
||
}
|
||
}
|
||
function genNav() {
|
||
var $con = $("#content");
|
||
var html = $con.html();
|
||
// 构造一棵树
|
||
// {"h1-title":{h2-title:{}}}
|
||
var tree = [];//[{title: "xx", children:[{}]}, {title:"xx2"}];
|
||
var hs = $con.find("h1,h2,h3,h4,h5,h6").toArray();
|
||
var titles = '<ul>';
|
||
for(var i = 0; i < hs.length; ++i) {
|
||
var text = $(hs[i]).text();
|
||
var tagName = hs[i].tagName.toLowerCase();
|
||
// scrollTo在page.js中定义
|
||
titles += '<li class="nav-' + tagName + '"><a data-a="' + tagName + '-' + encodeURI(text)+'" onclick="window.scrollTo(this, \'' + tagName + '\', \'' + text + '\')">' + text + '</a></li>';
|
||
}
|
||
titles += "</ul>";
|
||
$("#blogNavContent").html(titles);
|
||
if(!hs.length) {
|
||
$("#blogNavContent").html("无");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function initNav() {
|
||
var hasNav = genNav();
|
||
if(!hasNav) {
|
||
return;
|
||
}
|
||
|
||
var $title = $(".title");
|
||
var titlePos = $title.offset();
|
||
var top = titlePos.top + 10;// - $title.height();
|
||
// 手机下不要与标题在同一高度
|
||
if(LEA.isMobile){
|
||
top += 30;
|
||
}
|
||
if(top < 0) {
|
||
top = 10;
|
||
}
|
||
|
||
var left = $title.width() + titlePos.left - 100;
|
||
$("#blogNav").css("top", top).css("left", left);
|
||
$("#blogNav").show();
|
||
|
||
$("#blogNavNav").click(function() {
|
||
var $o = $("#blogNavContent");
|
||
if($o.is(":hidden")) {
|
||
$o.show();
|
||
} else {
|
||
$o.hide();
|
||
}
|
||
});
|
||
|
||
var $d = $(document);
|
||
function reNav() {
|
||
var vtop = $d.scrollTop();
|
||
if(vtop <= top) {
|
||
$("#blogNav").css("top", top-vtop);
|
||
} else {
|
||
// 差距很磊了
|
||
if(LEA.isMobile) {
|
||
$("#blogNav").css("top", 50);
|
||
} else {
|
||
$("#blogNav").css("top", 10);
|
||
}
|
||
}
|
||
}
|
||
reNav();
|
||
$(window).scroll(reNav);
|
||
}
|
||
|
||
//-----------
|
||
// 分享与评论
|
||
|
||
// 得到登录的链接
|
||
function goLogin(){
|
||
var loginUrl = siteUrl + '/login?from=' + encodeURI(location.href);
|
||
location.href = loginUrl;
|
||
}
|
||
// 得到注册链接
|
||
function goRegister() {
|
||
var registerUrl = siteUrl + '/register?from=' + encodeURI(location.href);
|
||
location.href = registerUrl;
|
||
}
|
||
// 是否需要登录, 评论时用到
|
||
function needLogin() {
|
||
if(typeof visitUserInfo == "undefined" || !visitUserInfo || !visitUserInfo.UserId) {
|
||
// 弹框之
|
||
var loginUrl = siteUrl + '/login?from=' + encodeURI(location.href);
|
||
var registerUrl = siteUrl + '/register?from=' + encodeURI(location.href);
|
||
try {
|
||
var modal = BootstrapDialog.show({
|
||
title: "Please sign in first",
|
||
message: '<div class="needLogin" style="border:none"><a href="' + loginUrl + '">Sign in</a> to to leave a comment.<br />No Leanote account? <a href="' + registerUrl +'">Sign up now</a>',
|
||
nl2br: false
|
||
});
|
||
} catch(e) {}
|
||
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
// 定位评论
|
||
function scrollToTarget(t, fixed) {
|
||
if(!fixed) {
|
||
fixed = 0;
|
||
}
|
||
var $t = $(t)
|
||
var targetOffset = $t.offset().top + fixed;
|
||
$('html,body').animate({scrollTop: targetOffset}, 300);
|
||
}
|
||
|
||
// 得到访问者信息, 因为自定义域名的原因, 需要用jsonp来获取
|
||
function getCurVisitUserInfo() {
|
||
|
||
}
|
||
// 增加阅读次数
|
||
function incReadNum(noteId) {
|
||
//if(!$.cookie(noteId)) {
|
||
// $.cookie(noteId, 1);
|
||
ajaxGet(getCurHostUrl() + "/blog/incReadNum", {noteId: noteId});
|
||
//}
|
||
}
|
||
function getCurHostUrl() {
|
||
return "//" + location.host;
|
||
}
|
||
function getLeanoteUrl() {
|
||
return siteUrl || "http://leanote.com";
|
||
}
|
||
// 得到博客统计信息
|
||
function getPostStat(noteId, callback) {
|
||
ajaxGet(getCurHostUrl() + "/blog/getPostStat", {noteId: noteId}, callback);
|
||
}
|
||
// 得到赞
|
||
function getLikes(noteId, callback) {
|
||
ajaxGetP(getLeanoteUrl() + "/blog/getLikes", {noteId: noteId}, callback);
|
||
}
|
||
// 得到赞和评论
|
||
function getLikesAndComments(noteId, callback) {
|
||
ajaxGetP(getLeanoteUrl() + "/blog/getLikesAndComments", {noteId: noteId}, callback);
|
||
}
|
||
// 得到评论
|
||
function getComments(noteId, page, callback) {
|
||
ajaxGetP(getLeanoteUrl() + "/blog/getComments", {noteId: noteId, page: page}, callback);
|
||
}
|
||
// 点赞
|
||
function likePost(noteId, callback) {
|
||
ajaxPostP(getLeanoteUrl() + "/blog/likePost", {noteId: noteId}, callback)
|
||
}
|
||
// 提交评论
|
||
function commentPost(noteId, commentId, content, callback) {
|
||
var data = {noteId: self.noteId, toCommentId: commentId, content: content};
|
||
ajaxPostP(getLeanoteUrl() + "/blog/commentPost", data, callback);
|
||
}
|
||
// 删除评论
|
||
function deleteComment(noteId, commentId, callback) {
|
||
ajaxPostP(getLeanoteUrl() + "/blog/deleteComment", {noteId: noteId, commentId: commentId}, callback);
|
||
}
|
||
// 点赞评论
|
||
function likeComment(commentId, callback) {
|
||
ajaxPostP(getLeanoteUrl() + "/blog/likeComment", {commentId: commentId}, callback);
|
||
}
|
||
|
||
// 分享与评论结束
|
||
//------------
|
||
|
||
//------------
|
||
// 手机端
|
||
var LEA = {isMobile: false};
|
||
function isMobile() {
|
||
var u = navigator.userAgent;
|
||
LEA.isMobile = false;
|
||
LEA.isMobile = /Mobile|Android|iPhone/i.test(u);
|
||
if(!LEA.isMobile && $(document).width() <= 600){
|
||
LEA.isMobile = true
|
||
}
|
||
}
|
||
$(function() {
|
||
isMobile();
|
||
});
|