@@ -57,21 +57,25 @@ var promisify = function promisify(object) {
5757/**
5858 * Recursion to generate readme
5959 * @param object object
60+ * @param string language
6061 * @param int deep
6162 * @return string
6263 */
63- var buildReadme = function buildReadme ( object , deep ) {
64+ var buildReadme = function buildReadme ( object , language , deep ) {
6465 var deeper = deep + 1 ;
6566 var deepString = "\t" . repeat ( deep ) + "- " ;
6667 var ret = [ ] ;
68+ var lang = typeof object . languages == "undefined" ? object . name : object . languages [ language ] ;
69+ lang = lang || object . name ;
70+
6771 ret . push ( ( function ( deepString , name , url , github ) {
6872 var haveUrl = ! ! url ;
6973 var haveGitHub = ! ! github ;
70- return deepString + ( haveUrl ? "[" : "" ) + object . name + ( haveUrl ? "](" + url + ")" : "" ) + ( haveGitHub ? " [\[GitHub\]](" + github + ")" : "" ) ;
71- } ) ( deepString , object . name , object . url , object . github ) ) ;
74+ return deepString + ( haveUrl ? "[" : "" ) + name + ( haveUrl ? "](" + url + ")" : "" ) + ( haveGitHub ? " [\[GitHub\]](" + github + ")" : "" ) ;
75+ } ) ( deepString , lang , object . url , object . github ) ) ;
7276 if ( object . children ) {
7377 object . children . map ( function ( value , index ) {
74- ret . push ( buildReadme ( value , deeper ) ) ;
78+ ret . push ( buildReadme ( value , language , deeper ) ) ;
7579 } ) ;
7680 }
7781 return ret . join ( "\n" ) ;
@@ -86,7 +90,7 @@ var actions = {
8690 */
8791 updatestargazers : function updatestargazers ( ) {
8892 return new Promise ( function ( resolve , reject ) {
89- var originalData = JSON . parse ( fs . readFileSync ( './ux/WebFrontEndStack' + config . locale + ' .json', "utf-8" ) ) ; // Require will lock the file.
93+ var originalData = JSON . parse ( fs . readFileSync ( './ux/WebFrontEndStack.json' , "utf-8" ) ) ; // Require will lock the file.
9094 var getGitHubApi = function ( github ) {
9195 var githubArray = github . split ( "/" ) ;
9296 // I want a sprintf T_T
@@ -139,7 +143,7 @@ var actions = {
139143 q . push ( { // For some reason, the ``drain`` will not be called.
140144 noRequest : true
141145 } , function ( ) {
142- fs . writeFileAsync ( './ux/WebFrontEndStack' + config . locale + ' .json', JSON . stringify ( originalData ) , "utf-8" ) . then ( function ( ) {
146+ fs . writeFileAsync ( './ux/WebFrontEndStack.json' , JSON . stringify ( originalData ) , "utf-8" ) . then ( function ( ) {
143147 resolve ( ) ;
144148 } ) ;
145149 } ) ;
@@ -151,57 +155,76 @@ var actions = {
151155 * @return Promise<any>
152156 */
153157 phantomjs : function phantomjs ( ) {
158+ var json = require ( './ux/WebFrontEndStack.json' ) ;
154159 var phantom = require ( 'phantom' ) ;
155- var ph ;
156- var page ;
157160 promisify ( phantom ) ;
158161 // What the fucking API
159- return phantom . createAsync ( ) . then ( function ( phantom ) {
160- ph = phantom ;
161- promisify ( ph ) ;
162- console . log ( "Created Phantomjs" ) ;
163- return ph . createPageAsync ( ) ;
164- } ) . then ( function ( pg ) {
165- page = pg ;
166- promisify ( pg ) ;
167- return page . setAsync ( 'viewportSize' , {
168- width : pageWidth ,
169- height : pageHeight
162+ var resolver = Promise . defer ( ) ;
163+ var buildByLanguage = function ( language ) {
164+ var displayLanguage = language == "" ? "en" : language ;
165+ var ph ;
166+ var page ;
167+ return phantom . createAsync ( ) . then ( function ( phantom ) {
168+ ph = phantom ;
169+ promisify ( ph ) ;
170+ console . log ( "Created Phantomjs for " + displayLanguage ) ;
171+ return ph . createPageAsync ( ) ;
172+ } ) . then ( function ( pg ) {
173+ page = pg ;
174+ promisify ( pg ) ;
175+ return page . setAsync ( 'viewportSize' , {
176+ width : pageWidth ,
177+ height : pageHeight
178+ } ) ;
179+ } ) . then ( function ( ) {
180+ console . log ( "Set viewportSize" ) ;
181+ console . log ( "Opening " + httpServer + "?locale=" + language + " for " + displayLanguage ) ;
182+ return page . openAsync ( httpServer + "?locale=" + language ) ;
183+ } ) . then ( function ( status ) {
184+ console . log ( "Rendered HTML, the image will be saved after 2 seconds." ) ;
185+ if ( status == "success" ) {
186+ return Promise . delay ( 2000 ) ;
187+ } else {
188+ throw status ;
189+ }
190+ } ) . then ( function ( ) {
191+ return page . renderAsync ( path . join ( __dirname , 'Web Front End Stack' + ( language == "" ? "" : "." ) + language + '.png' ) ) ;
192+ } ) . then ( function ( ) {
193+ console . log ( "The image(" + displayLanguage + ") saved successfully!" ) ;
194+ page . close ( ) ;
195+ ph . exit ( ) ;
170196 } ) ;
171- } ) . then ( function ( ) {
172- console . log ( "Set viewportSize" ) ;
173- return page . openAsync ( httpServer ) ;
174- } ) . then ( function ( status ) {
175- console . log ( "Rendered HTML, the image will be saved after 2 seconds." ) ;
176- if ( status == "success" ) {
177- return Promise . delay ( 2000 ) ;
178- } else {
179- return reject ( status ) ;
180- }
181- } ) . then ( function ( ) {
182- return page . renderAsync ( path . join ( __dirname , 'Web Front End Stack' + config . locale + '.png' ) ) ;
183- } ) . then ( function ( ) {
184- console . log ( "The image saved successfully!" ) ;
185- page . close ( ) ;
186- ph . exit ( ) ;
187- } ) ;
197+ } ;
198+ resolver . promise . then ( buildByLanguage ( "" ) ) ;
199+ for ( var item in json . languages ) {
200+ resolver . promise . then ( buildByLanguage ( item ) ) ;
201+ }
202+ return resolver . promise ;
188203 } ,
189204
190205 /**
191206 * To rebuild the README.md
192207 * @return Promise<any>
193208 */
194209 readme : function readme ( ) {
195- var json = require ( './ux/WebFrontEndStack' + config . locale + '.json' ) ;
196- return Promise . resolve ( ) . then ( function ( ) {
197- return fs . readFileAsync ( './README' + config . locale + '.md' , "utf-8" ) ;
198- } ) . then ( function ( fileContent ) {
199- var ret = buildReadme ( json , 0 ) ;
200- fileContent = fileContent . replace ( / < \! - - B U I L D _ S T A R T - - > [ \d \D ] + ?< \! - - B U I L D _ E N D - - > / , "{%BuildStart%}" )
201- return fs . writeFileAsync ( './README' + config . locale + '.md' , fileContent . replace ( "{%BuildStart%}" , "<!--BUILD_START-->\n\n" + ret + "\n\n<!--BUILD_END-->" , "utf-8" ) ) ;
202- } ) . then ( function ( ) {
203- console . log ( 'Readme built successfully!' ) ;
204- } )
210+ var json = require ( './ux/WebFrontEndStack.json' ) ;
211+ var resolver = Promise . defer ( ) ;
212+ var buildByLanguage = function ( language ) {
213+ return Promise . resolve ( ) . then ( function ( ) {
214+ return fs . readFileAsync ( './README' + ( language == "" ? "" : "." ) + language + '.md' , "utf-8" ) ;
215+ } ) . then ( function ( fileContent ) {
216+ var ret = buildReadme ( json , language , 0 ) ;
217+ fileContent = fileContent . replace ( / < \! - - B U I L D _ S T A R T - - > [ \d \D ] + ?< \! - - B U I L D _ E N D - - > / , "{%BuildStart%}" )
218+ return fs . writeFileAsync ( './README' + ( language == "" ? "" : "." ) + language + '.md' , fileContent . replace ( "{%BuildStart%}" , "<!--BUILD_START-->\n\n" + ret + "\n\n<!--BUILD_END-->" , "utf-8" ) ) ;
219+ } ) . then ( function ( ) {
220+ console . log ( 'Readme' + ( language == "" ? "" : ":" ) + language + ' built successfully!' ) ;
221+ } )
222+ } ;
223+ resolver . promise . then ( buildByLanguage ( "" ) ) ;
224+ for ( var item in json . languages ) {
225+ resolver . promise . then ( buildByLanguage ( item ) ) ;
226+ }
227+ return resolver . promise ;
205228 } ,
206229 /**
207230 * To start an express server
@@ -214,10 +237,10 @@ var actions = {
214237 . set ( 'view engine' , 'html' )
215238 . use ( express . static ( path . join ( __dirname , '/ux' ) ) )
216239 . use ( '/' , function ( req , res ) {
217- res . redirect ( '/WebFrontEndStack.htm?locale=' + config . rawLocale ) ;
240+ res . redirect ( '/WebFrontEndStack.htm?locale=' + req . query . locale ) ;
218241 } )
219242 . listen ( config . port , function ( ) {
220- console . info ( 'Express started on: http://127.0.0.1:' + config . port + '?locale=' + config . rawLocale ) ;
243+ console . info ( 'Express started on: http://127.0.0.1:' + config . port ) ;
221244 resolver ( app ) ;
222245 } ) ;
223246 } ) ;
@@ -239,6 +262,7 @@ process.argv.forEach(function(val) {
239262
240263var promise = Promise . all ( queue ) ;
241264if ( queue . length > 1 ) { // for somebody who only want to start the server.
265+ console . log ( "You can press Ctrl+C to exit if tasks finished." )
242266 promise . then ( function ( ) {
243267 console . log ( "OK!" ) ;
244268 process . exit ( 0 ) ;
0 commit comments