isv-page-json-to-xtpl
Version:
abs 将页面 json 转换成 html
84 lines (82 loc) • 2.45 kB
JavaScript
//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;
}
};