helpers.js 3.28 KB
/**
 * Handlebars helpers
 * bikai kai.bi@yoho.cn
 * 2016-05-10
 */
'use strict';
const querystring = require('querystring');
const _ = require('lodash');
const moment = require('moment');
const config = require('../config/common');

/**
 * 七牛图片路径处理
 * @param  {[tring]} url
 * @param  {[tring]} width
 * @param  {[tring]} height
 * @param  {[tring]} mode
 * @return {[tring]}
 */
exports.image = (url, width, height, mode) => {
    mode = _.isNumber(mode) ? mode : 2;
    url = url || '';
    return url.replace(/{width}/g, width).replace(/{height}/g, height).replace(/{mode}/g, mode);
};

/**
 * 站内地址格式化
 * @param  {[string]} uri 路径
 * @param  {[object]} qs 查询字符串
 * @param  {[string]} module 模块
 * @return {[string]}
 */
exports.url = (uri, qs, module) => {
    const subDomain = '.m.yohobuy.com';
    const subName = {
        default: config.siteUrl,
        guang: '//guang' + subDomain,
        list: '//list' + subDomain,
        search: '//search' + subDomain,
        huodong: '//huodong' + subDomain,
        activity: '//activity.yohobuy.com',
        index: config.siteUrl
    };
    let url;

    module = module || 'default';
    if (subName[module]) {
        url = subName[module];
    } else {
        url = '//' + module + subDomain; // 规则没匹配到就把模块当作子域名
    }

    url += uri;
    if (qs) {
        url += '?' + querystring.stringify(qs);
    }

    return url;
};


/**
 * 大写转小写处理
 * @param  {[string]} str 转换字符
 */
exports.lowerCase = (str) => {
    str = str || '';
    return str.toLowerCase();
};

/**
 * 小写转大写处理
 * @param  {[string]} str 转换字符
 */
exports.upperCase = (str) => {
    str = str || '';
    return str.toUpperCase();
};

/**
 * 时间格式化
 * @param format 格式化token @see{http://momentjs.cn/docs/#/displaying/format/}
 * @param date 日期或者数字
 * @return string
 *
 */
exports.dateFormat = (format, date) => {
    if (typeof format !== 'string' || typeof date === 'undefined') {
        return '';
    } else {
        if (date instanceof Date) {
            return moment(date).format(format);
        } else {
            let d = moment.unix(date);

            return moment(d).utc().format(format);
        }
    }
};

/**
 * 时间差格式化
 * @param {[string]} format 格式化字符串
 * @param {[number]} diff 相差值
 * @param {[string]} type diff时间类型 默认ms
 *
 *          Key                Shorthand
 *           years              y
 *           quarters           Q
 *           months             M
 *           weeks              w
 *           days               d
 *           hours              h
 *           minutes            m
 *           seconds            s
 *           milliseconds       ms
 *
 * @example
 *  let diff = 60 * 60 * 24 * (1.3) + 2;
 *
 *  let s = helpers.dateDiffFormat('{d}天{h}小时', diff, 's');
 *  >>> 1天7小时
 */
exports.dateDiffFormat = (format, diff, type) => {
    if (typeof format !== 'string' || typeof diff === 'undefined') {
        return '';
    } else {
        type = type || 'ms';
        let m = moment.duration(diff, type);

        format.match(/(\{.*?\})/g).forEach((s) => {
            format = format.replace(s, m.get(s.substring(1, s.length - 1)));
        });

        return format;
    }
};