'use strict'; const _ = require('lodash'); let cdnDomains = require('../config/dns-prefetch'); function cdnReplace(cdn, imgUrl) { if (cdn === 'qcloud') { Object.keys(cdnDomains).forEach(key => { if (imgUrl.indexOf(key) >= 0) { imgUrl = imgUrl.replace(key, cdnDomains[key]); } }); } return imgUrl; } module.exports = { image2: function(imageUrl, opts) { let cdn = _.get(opts, 'data.root.cdn'); if (imageUrl && _.isString(imageUrl)) { let params = opts.hash || {}; let urls = imageUrl.split('?'); let query = urls[1] || ''; let uri = urls[0]; if (uri.indexOf('http:') === 0) { uri = uri.replace('http:', ''); } uri = cdnReplace(cdn, uri); if (query) { query = query.replace(/{width}/g, params.w).replace(/{height}/g, params.h).replace(/{mode}/g, (params.mode || 2)); if (query.indexOf('imageView2') === 0) { if (params.q && query.indexOf('/q/') > 0) { query = query.replace(/\/q\/\d+/g, '/q/' + params.q); } else if (params.q) { query += '/q/' + params.q; } } else if (query.indexOf('imageMogr2') === 0) { if (params.q && query.indexOf('/quality/') > 0) { query = query.replace(/\/quality\/\d+/g, '/quality/' + params.q); } else if (params.q) { query += '/quality/' + params.q; } } else if (query.indexOf('imageView/') === 0) { if (params.q && query.indexOf('/q/') > 0) { query = query.replace(/\/q\/\d+/g, '/q/' + params.q); } else if (params.q) { query += '/q/' + params.q; } if (params.mode) { query = query.replace(/imageView\/\d{1}\//, 'imageView/' + params.mode + '/'); } } } else { query = 'imageView2/2/interlace/1/q/' + (params.q || 75); } return uri + '?' + query; } else { return ''; } }, ifand: function() { let args = Array.prototype.slice.call(arguments); let opt = args[args.length - 1]; let isTrue = true; for (let i = 0; i < args.length - 1; i++) { if (!args[i]) { isTrue = false; break; } } if (isTrue) { return opt.fn(this); } else { return opt.inverse(this); } }, htmlEncode: function(str) { const re = /(\r\n)|["\'<>]/g; str = str || ''; return str.replace(re, function(s) { switch (s) { case '"': return '"'; case '\'': return '''; case '<': return '<'; case '>': return '>'; default: return s; } }); } };