summaryrefslogtreecommitdiffstats
path: root/gulpfile.js
blob: 23efdd0ceab27fc6f44eb182716799ea803bf26d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
var gulp   	= require('gulp')
var concat 	= require('gulp-concat')
var header 	= require('gulp-header')
var rename 	= require('gulp-rename')
var rimraf 	= require('gulp-rimraf')
var size   	= require('gulp-size')
var uglify 	= require('gulp-uglify')
var wrapper	= require('gulp-wrapper')
var request = require('request')
var fs 			= require('fs')

var pkg    	= require('./package.json')

var headerLong = ['/*!',
 '* <%= pkg.name %> - <%= pkg.description %>',
 '* @version <%= pkg.version %>',
 '* <%= pkg.homepage %>',
 '*',
 '* @copyright <%= pkg.author %>',
 '* @license <%= pkg.license %>',
 '*',
 '* BUILT: <%= pkg.buildDate %>',
 '*/',
 ''].join('\n')

var headerShort = '/*! <%= pkg.name %> v<%= pkg.version %> <%= pkg.license %>*/'

// all files in the right order (currently we don't use any dependency management system)
var parts = [
	'src/svg.js'
, 'src/inventor.js'
, 'src/adopter.js'
, 'src/regex.js'
, 'src/utilities.js'
, 'src/default.js'
, 'src/color.js'
, 'src/array.js'
, 'src/pointarray.js'
, 'src/patharray.js'
, 'src/number.js'
, 'src/viewbox.js'
, 'src/element.js'
, 'src/boxes.js'
, 'src/matrix.js'
, 'src/attr.js'
, 'src/transform.js'
, 'src/style.js'
, 'src/parent.js'
, 'src/container.js'
, 'src/transporter.js'
, 'src/fx.js'
, 'src/relative.js'
, 'src/event.js'
, 'src/defs.js'
, 'src/group.js'
, 'src/arrange.js'
, 'src/mask.js'
, 'src/clip.js'
, 'src/gradient.js'
, 'src/pattern.js'
, 'src/doc.js'
, 'src/spof.js'
, 'src/shape.js'
, 'src/symbol.js'
, 'src/use.js'
, 'src/rect.js'
, 'src/ellipse.js'
, 'src/line.js'
, 'src/poly.js'
, 'src/pointed.js'
, 'src/path.js'
, 'src/image.js'
, 'src/text.js'
, 'src/textpath.js'
, 'src/nested.js'
, 'src/hyperlink.js'
, 'src/marker.js'
, 'src/sugar.js'
, 'src/set.js'
, 'src/data.js'
, 'src/memory.js'
, 'src/selector.js'
, 'src/loader.js'
, 'src/helpers.js'
, 'src/polyfill.js'
]

gulp.task('clean', function() {
	return gulp.src('dist/*', { read: false }) // faster
		.pipe(rimraf())
})

/**
 * compile everything in /src to one file in the order defined in the MODULES constant
 * embed it in an immediate function call‏
 * uglify this file and call it svg.min.js
 * add the license information to the header plus the build time stamp‏
 */
gulp.task('unify', ['clean'], function() {
	pkg.buildDate = Date()
	gulp.src(parts)
		.pipe(concat('svg.js', { newLine: '\n' }))
		//wrap the whole thing in an immediate function call
		.pipe(wrapper({ header:';(function() {\n', footer: '\n}).call(this);' }))
		.pipe(header(headerLong, { pkg: pkg }))
		.pipe(size({ showFiles: true, title: 'Full' }))
		.pipe(gulp.dest('dist'))
})

/**
 ‎* gzip the file and get it's size to display in the terminal‏
 * add the license info
 * show the gzipped file size
 */
gulp.task('minify', ['unify'], function() {
	// Fugly timeout hack
	setTimeout(function() {
		gulp.src('dist/svg.js')
			.pipe(uglify())
			.pipe(rename({ suffix:'.min' }))
			.pipe(size({ showFiles: true, title: 'Minified' }))
			.pipe(header(headerShort, { pkg: pkg }))
			.pipe(size({ showFiles: true, gzip: true, title: 'Gzipped' }))
			.pipe(gulp.dest('dist'))
	}, 1000)
})

/**
 ‎* rebuild documentation using documentup
 */

gulp.task('docs', function() {
	fs.readFile('README.md', 'utf8', function (err, data) {
		request.post(
			'http://documentup.com/compiled'
		, { form: { content: data, name: 'SVG.js', theme: 'v1' } }
		, function (error, response, body) {
				// Replace stylesheet
				body = body.replace('//documentup.com/stylesheets/themes/v1.css', 'svgjs.css')

				// Write file
				fs.writeFile('docs/index.html', body, function(err) {})
			}
		)
	})
})

gulp.task('default', ['clean', 'unify', 'minify'], function() {})