nodeclub/libs/util.js
2013-02-19 17:23:30 +08:00

92 lines
2.4 KiB
JavaScript

var xss = require('xss');
exports.format_date = function (date, friendly) {
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
if (friendly) {
var now = new Date();
var mseconds = -(date.getTime() - now.getTime());
var time_std = [ 1000, 60 * 1000, 60 * 60 * 1000, 24 * 60 * 60 * 1000 ];
if (mseconds < time_std[3]) {
if (mseconds > 0 && mseconds < time_std[1]) {
return Math.floor(mseconds / time_std[0]).toString() + ' 秒前';
}
if (mseconds > time_std[1] && mseconds < time_std[2]) {
return Math.floor(mseconds / time_std[1]).toString() + ' 分钟前';
}
if (mseconds > time_std[2]) {
return Math.floor(mseconds / time_std[2]).toString() + ' 小时前';
}
}
}
//month = ((month < 10) ? '0' : '') + month;
//day = ((day < 10) ? '0' : '') + day;
hour = ((hour < 10) ? '0' : '') + hour;
minute = ((minute < 10) ? '0' : '') + minute;
second = ((second < 10) ? '0': '') + second;
var thisYear = new Date().getFullYear();
year = (thisYear === year) ? '' : (year + '-');
return year + month + '-' + day + ' ' + hour + ':' + minute;
};
/**
* Escape the given string of `html`.
*
* @param {String} html
* @return {String}
* @api private
*/
exports.escape = function (html) {
var codeSpan = /(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm;
var codeBlock = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
var spans = [];
var blocks = [];
var text = String(html).replace(/\r\n/g, '\n')
.replace('/\r/g', '\n');
text = '\n\n' + text + '\n\n';
text = text.replace(codeSpan, function (code) {
spans.push(code);
return '`span`';
});
text += '~0';
return text.replace(codeBlock, function (whole, code, nextChar) {
blocks.push(code);
return '\n\tblock' + nextChar;
})
.replace(/&(?!\w+;)/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/`span`/g, function () {
return spans.shift();
})
.replace(/\n\tblock/g, function () {
return blocks.shift();
})
.replace(/~0$/, '')
.replace(/^\n\n/, '')
.replace(/\n\n$/, '');
};
/**
* 过滤XSS攻击代码
*
* @param {string} html
* @return {string}
*/
exports.xss = function (html) {
return xss(html);
};