@@ -2,13 +2,15 @@ module.exports = function(grunt)
2
2
{
3
3
'use strict' ;
4
4
5
- var path = require ( 'path' ) ;
6
- var util = require ( 'util' ) ;
7
- var request = require ( 'request' ) ;
8
- var cheerio = require ( 'cheerio' ) ;
9
- var yaml = require ( 'js-yaml' ) ;
10
- var slug = require ( 'slug' ) ;
11
- var wrap = require ( 'word-wrap' ) ;
5
+ var path = require ( 'path' ) ;
6
+ var util = require ( 'util' ) ;
7
+ var execFile = require ( 'child_process' ) . execFileSync ;
8
+ var request = require ( 'request' ) ;
9
+ var cheerio = require ( 'cheerio' ) ;
10
+ var phantom = require ( 'phantomjs-prebuilt' ) . path ;
11
+ var yaml = require ( 'js-yaml' ) ;
12
+ var slug = require ( 'slug' ) ;
13
+ var wrap = require ( 'word-wrap' ) ;
12
14
13
15
require ( 'array.prototype.find' ) ;
14
16
require ( './lib/to-title-case' ) ;
@@ -23,6 +25,7 @@ module.exports = function(grunt)
23
25
this . requiresConfig ( [ this . name , 'config' , 'files' , 'input' ] ) ;
24
26
this . requiresConfig ( [ this . name , 'config' , 'files' , 'meta' ] ) ;
25
27
this . requiresConfig ( [ this . name , 'config' , 'files' , 'readme' ] ) ;
28
+ this . requiresConfig ( [ this . name , 'config' , 'files' , 'mirror' ] ) ;
26
29
27
30
var config = grunt . config ( [ this . name , 'config' ] ) ;
28
31
@@ -75,6 +78,7 @@ module.exports = function(grunt)
75
78
{
76
79
meta : path . join ( solutionDir , config . files . meta ) ,
77
80
readme : path . join ( solutionDir , config . files . readme ) ,
81
+ mirror : path . join ( solutionDir , config . files . mirror ) ,
78
82
input : path . join ( solutionDir , config . files . input ) ,
79
83
solutions : path . join ( solutionDir , 'solutions' )
80
84
} ;
@@ -153,6 +157,38 @@ module.exports = function(grunt)
153
157
grunt . log . ok ( 'Created ' + config . files . readme + ' in: ' + solutionDir ) ;
154
158
} ) ( ) ;
155
159
160
+ // Mirror problem statement.
161
+ ( function ( )
162
+ {
163
+ if ( ! grunt . option ( 'overwrite' ) && grunt . file . isFile ( paths . mirror ) )
164
+ {
165
+ grunt . log . writeln ( 'Skipped ' + config . files . mirror +
166
+ ' -- already exists in: ' + solutionDir ) ;
167
+
168
+ return ;
169
+ }
170
+
171
+ try
172
+ {
173
+ var job =
174
+ [
175
+ './tools/mirror-problem-statement/rasterize.js' ,
176
+ util . format ( config . problemUrlFormatAlt , problemId ) ,
177
+ path . resolve ( paths . mirror )
178
+ ] ;
179
+
180
+ execFile ( phantom , job ) ;
181
+
182
+ grunt . log . ok ( 'Created ' + config . files . mirror + ' in: ' + solutionDir ) ;
183
+ }
184
+
185
+ catch ( error )
186
+ {
187
+ grunt . fatal ( 'Failed to mirror problem statement; ' +
188
+ 'rasterizer return code -> ' + error . status ) ;
189
+ }
190
+ } ) ( ) ;
191
+
156
192
// Make solution templates.
157
193
function makeSolutionTemplates ( problemHasInput )
158
194
{
0 commit comments