@@ -8,21 +8,50 @@ var Swig = require('swig').Swig;
88var loader = require ( './lib/loader.js' ) ;
99var debuglog = require ( 'debuglog' ) ( 'yog-swig' ) ;
1010var 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
2424var 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支持
108109Swig . 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