1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | var fs = require('fs');
|
10 | var jade = require('jade');
|
11 | var LangUtils = require('@themost/common/utils').LangUtils;
|
12 | var ArgumentError = require('@themost/common/utils').ArgumentError;
|
13 | var HttpViewEngine = require('../types').HttpViewEngine;
|
14 | var _ = require('lodash');
|
15 | var PostExecuteResultArgs = require('./../handlers/directive').PostExecuteResultArgs;
|
16 | var DirectiveEngine = require('./../handlers/directive').DirectiveEngine;
|
17 | var HttpViewContext = require('./../mvc').HttpViewContext;
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | function postRender(result, data, callback) {
|
26 | var directiveHandler = new DirectiveEngine();
|
27 | var viewContext = new HttpViewContext(this.context);
|
28 | viewContext.body = result;
|
29 | viewContext.data = data;
|
30 | var args = _.assign(new PostExecuteResultArgs(), {
|
31 | "context": this.context,
|
32 | "target": viewContext
|
33 | });
|
34 | directiveHandler.postExecuteResult(args, function(err) {
|
35 | if (err) {
|
36 | return callback(err);
|
37 | }
|
38 | return callback(null, viewContext.body);
|
39 | });
|
40 | }
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | function JadeEngine(context) {
|
48 | JadeEngine.super_.bind(this)(context);
|
49 | }
|
50 | LangUtils.inherits(JadeEngine,HttpViewEngine);
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | JadeEngine.prototype.render = function(file, data, callback) {
|
57 | callback = callback || function () {};
|
58 | try {
|
59 | var self = this;
|
60 | if (typeof file !== 'string') {
|
61 | return callback(new ArgumentError("Jade template URI must be a string."));
|
62 | }
|
63 | fs.readFile(file, 'utf8', function(err, source) {
|
64 | if (err) {
|
65 | return callback(err);
|
66 | }
|
67 |
|
68 | try {
|
69 | const fn = jade.compile(source, {
|
70 | filename: file,
|
71 | pretty: true
|
72 | });
|
73 | var html = { };
|
74 | Object.defineProperty(html, 'context', {
|
75 | get: function() {
|
76 | return self.context;
|
77 | },
|
78 | enumerable:false, configurable:false
|
79 | });
|
80 | const result = fn({
|
81 | html:html,
|
82 | model:data
|
83 | });
|
84 | return postRender.bind(self)(result, data, function(err, finalResult) {
|
85 | if (err) {
|
86 | return callback(err);
|
87 | }
|
88 | return callback(null, finalResult);
|
89 | });
|
90 | }
|
91 | catch (err) {
|
92 | return callback(err);
|
93 | }
|
94 | });
|
95 | } catch (err) {
|
96 | return callback(err);
|
97 | }
|
98 | };
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 | JadeEngine.createInstance = function(context) {
|
105 | return new JadeEngine(context);
|
106 | };
|
107 |
|
108 | if (typeof exports !== 'undefined') {
|
109 | module.exports.JadeEngine = JadeEngine;
|
110 | |
111 |
|
112 |
|
113 |
|
114 | module.exports.createInstance = function(context) {
|
115 | return JadeEngine.createInstance(context);
|
116 | };
|
117 | } |
\ | No newline at end of file |