UNPKG

isv-page-json-to-xtpl

Version:

abs 将页面 json 转换成 html

84 lines (82 loc) 2.45 kB
//air 的渲染逻辑 var depMap = require('./dep-map'); var request = require('sync-request'); var debug = require('debug')('air'); var _ = require('lodash'); module.exports = { depMap: depMap, /** * air 的参数处理 * @param xtpl * @param data */ params: function *(xtpl, data) { var postForm = { bu: 'taobao', page: { "$page": { title: data.title || '', spm: [data.spmA || '', data.spmB || ''], keywords: data.keywords || '', description: data.description || '' }, "$data": { data: data.$data && data.$data.data || {}, attrs: data.$data && data.$data.attrs || {} }, "outputCharset": "utf8", "templates": { "index.xtpl": xtpl } } }; var modules = data.layout && data.layout.modules || data.modules; if (modules && modules.length) { //模块依赖表 postForm.page.seed = yield depMap(modules); postForm.page.seed.requireModsPre = true; } debug('airParams:\n', postForm); return postForm; }, /** * 使用 air 渲染 */ render: function*(renderUrl,postForm) { debug('air url:',renderUrl); var result = request('POST', renderUrl, { json: postForm }); var content = result.body.toString(); debug(content); if (result.statusCode === 200) { return { success: true, content: content }; } else { return { success: false, content: content }; } }, /** * 拼装 air 注入模块 assets 依赖的 require 语法 * @param modules * @param delCss */ requireCommand: function(modules,delCss){ //确定页面需要引入的入口文件 var requires = []; _.forEach(modules, function (mod) { var group = mod.group && (mod.group + '/') || ''; var version = mod.version && ('/' + mod.version) || ''; var modPath = group + mod.name + version; var modNameJs = modPath + '/index'; if (_.indexOf(requires, modNameJs) === -1) { requires.push(modNameJs); } if(!delCss){ var modNameCss = modPath + '/index.css'; if (_.indexOf(requires, modNameCss) === -1) { requires.push(modNameCss); } } }); debug('air require command param:',requires); //air 需要combo处理的入口文件 var command = requires.length && "{{require('" + requires.join(',') + "')}}" || ''; return command; } };