Skip to content

Commit 07e528b

Browse files
committed
Merge pull request #5 from fex-team/support-sync-with-spider
Support sync with spider
2 parents 474ac0b + dd29454 commit 07e528b

File tree

1 file changed

+52
-44
lines changed

1 file changed

+52
-44
lines changed

index.js

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,50 @@ var Swig = require('swig').Swig;
88
var loader = require('./lib/loader.js');
99
var debuglog = require('debuglog')('yog-swig');
1010
var tags = [
11-
"script",
12-
"style",
13-
"html",
14-
"body",
15-
"require",
16-
"uri",
17-
"widget",
18-
"head",
19-
"feature",
20-
"featureelse",
21-
"spage"
11+
'script',
12+
'style',
13+
'html',
14+
'body',
15+
'require',
16+
'uri',
17+
'widget',
18+
'head',
19+
'feature',
20+
'featureelse',
21+
'spage'
2222
];
2323

2424
var swigInstance;
2525

26+
var EngineStream = function (swig, view, locals) {
27+
this.swig = swig;
28+
this.view = view;
29+
this.locals = locals;
30+
this.reading = false;
31+
Readable.call(this);
32+
};
33+
34+
util.inherits(EngineStream, Readable);
35+
36+
EngineStream.prototype._read = function () {
37+
var self = this;
38+
// var state = self._readableState;
39+
if (this.reading) {
40+
return;
41+
}
42+
this.reading = true;
43+
debuglog('start render [%s]', this.view);
44+
this.swig.renderFile(this.view, this.locals, function (error, output) {
45+
if (error) {
46+
debuglog('render [%s] failed', self.view);
47+
return self.emit('error', error);
48+
}
49+
debuglog('render [%s] succ', self.view);
50+
self.push(output);
51+
self.push(null);
52+
});
53+
};
54+
2655
/**
2756
* Opitions 说明
2857
* - `views` 模板根目录
@@ -75,34 +104,6 @@ SwigWrap.prototype.makeStream = function (view, locals) {
75104
return new EngineStream(this.swig, view, locals);
76105
};
77106

78-
var EngineStream = function (swig, view, locals) {
79-
this.swig = swig;
80-
this.view = view;
81-
this.locals = locals;
82-
this.reading = false;
83-
Readable.call(this);
84-
};
85-
86-
util.inherits(EngineStream, Readable);
87-
88-
EngineStream.prototype._read = function () {
89-
var self = this;
90-
var state = self._readableState;
91-
if (this.reading) {
92-
return;
93-
}
94-
this.reading = true;
95-
debuglog('start render [%s]', this.view);
96-
this.swig.renderFile(this.view, this.locals, function (error, output) {
97-
if (error) {
98-
debuglog('render [%s] failed', self.view);
99-
return self.emit('error', error);
100-
}
101-
debuglog('render [%s] succ', self.view);
102-
self.push(output);
103-
self.push(null);
104-
});
105-
};
106107

107108
// 扩展swig内置函数,用于提供bigpipe支持
108109
Swig.prototype._w = Swig.prototype._widget = function (layer, id, attr, options) {
@@ -116,8 +117,7 @@ Swig.prototype._w = Swig.prototype._widget = function (layer, id, attr, options)
116117

117118
return function (locals) {
118119
var container = attr['container'] || attr['for'];
119-
120-
layer.addPagelet({
120+
var pageletOptions = {
121121
container: container,
122122
model: attr.model,
123123
id: attr.id,
@@ -126,14 +126,22 @@ Swig.prototype._w = Swig.prototype._widget = function (layer, id, attr, options)
126126
locals: locals,
127127
view: pathname,
128128
viewId: id,
129-
130129
compiled: function (locals) {
131130
var fn = self.compileFile(pathname, options);
132131
locals._yog.load(id);
133132
return fn.apply(this, arguments);
134133
}
135-
});
134+
};
136135

137-
return container ? '' : '<div id="' + attr.id + '"></div>';
136+
if (layer.bigpipe.isSpiderMode) {
137+
var syncPagelet = new layer.bigpipe.Pagelet(pageletOptions);
138+
syncPagelet.start(layer.bigpipe.pageletData[attr.id], true);
139+
return container ? syncPagelet.html : '<div id="' + attr.id + '"> ' + syncPagelet.html + '</div>';
140+
}
141+
else {
142+
container = attr['container'] || attr['for'];
143+
layer.addPagelet(pageletOptions);
144+
return container ? '' : '<div id="' + attr.id + '"></div>';
145+
}
138146
};
139147
};

0 commit comments

Comments
 (0)