@@ -17,74 +17,105 @@ var gulp = require('gulp'),
17
17
// picking up dependencies of the primary entry points and putting any
18
18
// limitations on directory structure for entry points.
19
19
var sources = {
20
- builds : [ 'js/detail.js' ] ,
21
- core : [
22
- 'js/readthedocs-doc-embed.js' ,
23
- 'js/autocomplete.js' ,
24
- 'js/projectimport.js' ,
25
- ] ,
26
- projects : [ 'js/tools.js' ] ,
27
- gold : [ 'js/gold.js' ] ,
28
- donate : [ 'js/donate.js' ]
20
+ builds : { 'js/detail.js' : { } } ,
21
+ core : {
22
+ 'js/readthedocs-doc-embed.js' : { expose : false } ,
23
+ 'js/autocomplete.js' : { } ,
24
+ 'js/projectimport.js' : { } ,
25
+ } ,
26
+ projects : { 'js/tools.js' : { } } ,
27
+ gold : { 'js/gold.js' : { } } ,
28
+ donate : { 'js/donate.js' : { } }
29
29
} ;
30
30
31
31
// Standalone application to create vendor bundles for. These can be imported
32
32
// with require in the browser or with Node during testing.
33
- var standalone = [ 'jquery' , 'knockout' ] ;
33
+ var standalone = {
34
+ 'jquery' : { standalone : 'jquery' } ,
35
+ 'knockout' : { } ,
36
+ 'jquery-migrate' : { standalone : 'jquery-migrate' } ,
37
+ 'jquery-ui' : { standalone : 'jquery-ui' } ,
38
+ 'underscore' : { standalone : '_' }
39
+ } ;
34
40
35
41
// Build application call, wraps building entry point files for a single
36
42
// application. This is called by build and dev tasks.
37
43
function build_app_sources ( application , minify ) {
38
44
// Normalize file glob lists
39
- var app_sources = sources [ application ] . map ( function ( n ) {
40
- return path . join ( pkg_config . name , application , 'static-src' , '**' , n )
41
- } ) ;
42
- var app_js_sources = app_sources . filter ( function ( elem , n , arr ) {
43
- return / \. j s $ / . test ( elem ) ;
44
- } ) ;
45
- var app_css_sources = app_sources . filter ( function ( elem , n , arr ) {
46
- return / \. l e s s $ / . test ( elem ) ;
45
+ var bundles = Object . keys ( sources [ application ] ) . map ( function ( n ) {
46
+ var bundle_path = path . join (
47
+ pkg_config . name , application , 'static-src' , '**' , n ) ,
48
+ bundle_config = sources [ application ] [ n ] || { } ,
49
+ bundle ;
50
+
51
+ if ( / \. j s $ / . test ( bundle_path ) ) {
52
+ // Javascript sources
53
+ bundle = gulp
54
+ . src ( bundle_path )
55
+ . pipe ( es . map ( function ( file , cb ) {
56
+ if ( typeof ( bundle_config . expose ) == 'undefined' ) {
57
+ var parts = [
58
+ application ,
59
+ path . basename ( file . path , '.js' )
60
+ ] ;
61
+ bundle_config . expose = parts . join ( '/' ) ;
62
+ }
63
+ else if ( bundle_config . expose === false ) {
64
+ bundle_config . expose = undefined ;
65
+ }
66
+ return browserify_stream (
67
+ file , bundle_config , cb
68
+ ) ;
69
+ } ) ) ;
70
+
71
+ if ( minify ) {
72
+ bundle = bundle
73
+ . pipe ( vinyl_buffer ( ) )
74
+ . pipe ( uglify ( ) )
75
+ . on ( 'error' , function ( ev ) {
76
+ gulp_util . beep ( ) ;
77
+ gulp_util . log ( 'Uglify error:' , ev . message ) ;
78
+ } ) ;
79
+ }
80
+ }
81
+ else if ( / \. l e s s $ / . test ( bundle_path ) ) {
82
+ // CSS sources
83
+ bundle = gulp . src ( bundle_path )
84
+ . pipe ( less ( { } ) )
85
+ . on ( 'error' , function ( ev ) {
86
+ gulp_util . beep ( ) ;
87
+ gulp_util . log ( 'LESS error:' , ev . message ) ;
88
+ } ) ;
89
+ }
90
+
91
+ return bundle ;
47
92
} ) ;
48
93
49
- // Javascript sources
50
- var app_js = gulp
51
- . src ( app_js_sources )
52
- . pipe ( es . map ( browserify_stream ) ) ;
53
-
54
- if ( minify ) {
55
- app_js = app_js
56
- . pipe ( vinyl_buffer ( ) )
57
- . pipe ( uglify ( ) )
58
- . on ( 'error' , function ( ev ) {
59
- gulp_util . beep ( ) ;
60
- gulp_util . log ( 'Uglify error:' , ev . message ) ;
61
- } ) ;
62
- }
63
-
64
- // CSS sources
65
- var app_css = gulp . src ( app_css_sources )
66
- . pipe ( less ( { } ) )
67
- . on ( 'error' , function ( ev ) {
68
- gulp_util . beep ( ) ;
69
- gulp_util . log ( 'LESS error:' , ev . message ) ;
70
- } ) ;
71
-
72
- return es . merge ( app_js , app_css )
94
+ return es . merge ( bundles )
73
95
. pipe ( gulp . dest ( path . join ( pkg_config . name , application , 'static' ) ) ) ;
74
96
}
75
97
76
98
// Browserify build
77
- function browserify_stream ( file , cb_output ) {
99
+ function browserify_stream ( file , config , cb_output ) {
78
100
bower_resolve . offline = true ;
79
101
bower_resolve . init ( function ( ) {
80
- var bundle_stream = browserify ( file . path )
102
+ var bundle_stream = browserify ( ) ;
81
103
82
- standalone . map ( function ( module ) {
104
+ Object . keys ( standalone ) . map ( function ( module ) {
83
105
bundle_stream = bundle_stream . external ( module ) ;
84
106
} ) ;
85
107
108
+ if ( typeof ( config . expose ) == 'undefined' ) {
109
+ bundle_stream . add ( file . path ) ;
110
+ }
111
+ else {
112
+ bundle_stream = bundle_stream . require (
113
+ file . path , { expose : config . expose }
114
+ ) ;
115
+ }
116
+
86
117
bundle_stream
87
- . transform ( 'debowerify' , { ignoreModules : standalone } )
118
+ . transform ( 'debowerify' , { ignoreModules : Object . keys ( standalone ) } )
88
119
. bundle ( )
89
120
. on ( 'error' , function ( ev ) {
90
121
gulp_util . beep ( ) ;
@@ -101,14 +132,40 @@ function browserify_stream (file, cb_output) {
101
132
function build_vendor_sources ( data , cb_output ) {
102
133
bower_resolve . offline = true ;
103
134
bower_resolve . init ( function ( ) {
104
- var standalone_modules = standalone . map ( function ( module ) {
105
- return browserify ( { standalone : module } )
135
+ var standalone_modules = Object . keys ( standalone ) . map ( function ( module ) {
136
+ var vendor_options = standalone [ module ] || { } ,
137
+ vendor_bundles = [ ] ;
138
+
139
+ // Bundle vendor libs for import via require()
140
+ vendor_bundles . push (
141
+ browserify ( )
106
142
. require ( bower_resolve ( module ) , { expose : module } )
107
143
. bundle ( )
108
144
. pipe ( vinyl_source ( module + '.js' ) )
109
145
. pipe ( vinyl_buffer ( ) )
110
146
. pipe ( uglify ( ) )
111
- . pipe ( gulp . dest ( path . join ( pkg_config . name , 'static' , 'vendor' ) ) ) ;
147
+ . pipe ( gulp . dest (
148
+ path . join ( pkg_config . name , 'static' , 'vendor' )
149
+ ) )
150
+ ) ;
151
+
152
+ // Bundle standalone for legacy use. These should only be used on
153
+ // old documentation that does not yet use the new bundles
154
+ if ( typeof ( vendor_options . standalone ) != 'undefined' ) {
155
+ vendor_bundles . push (
156
+ browserify ( { standalone : vendor_options . standalone } )
157
+ . require ( bower_resolve ( module ) )
158
+ . bundle ( )
159
+ . pipe ( vinyl_source ( module + '-standalone.js' ) )
160
+ . pipe ( vinyl_buffer ( ) )
161
+ . pipe ( uglify ( ) )
162
+ . pipe ( gulp . dest (
163
+ path . join ( pkg_config . name , 'static' , 'vendor' )
164
+ ) )
165
+ ) ;
166
+ }
167
+
168
+ return es . merge ( vendor_bundles ) ;
112
169
} ) ;
113
170
114
171
es
@@ -145,7 +202,7 @@ gulp.task('dev', function (done) {
145
202
. merge ( Object . keys ( sources ) . map ( function ( application ) {
146
203
var files = [
147
204
path . join ( pkg_config . name , application , 'static-src' , '**' , '*.js' ) ,
148
- path . join ( pkg_config . name , application , 'static-src' , '**' , '*.css ' )
205
+ path . join ( pkg_config . name , application , 'static-src' , '**' , '*.less ' )
149
206
] ;
150
207
return watch ( files , { verbose : true , name : 'dev' } , function ( ) {
151
208
build_app_sources ( application , false )
0 commit comments