-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJakefile.js
128 lines (110 loc) · 3.46 KB
/
Jakefile.js
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
// required:
// npm install jake
// npm install uglify-js@1
// npm install csso
// nodejs env check
if (!process.env.NODE_PATH) {
console.log('$NODE_PATH is undefined!');
console.log('Run: export NODE_PATH="__NODEJS_MODULES__"');
console.log('Example: export NODE_PATH="/usr/lib/node_modules" or "/usr/local/lib/node_modules"');
console.log('Or: export NODE_PATH="npm root"');
process.exit(1);
}
// namespaces
var fs = require('fs'),
ugp = require('uglify-js').parser,
ugu = require('uglify-js').uglify,
csso = require('csso');
// defaults
var files = {
'jquery.fenster.full.js': [
'src/jquery.fenster.js',
'src/jquery.fenster-helper.js',
'src/jquery.fenster-helper-template-table.js',
'jqEbony/jquery.ebony.js'
],
'jquery.fenster.full.css': [
'src/jquery.fenster.css',
'jqEbony/fix-ie.css',
'jqEbony/fix-ipad.css'
]
};
function getComment () {
var version = '1.3.1',
date = new Date(),
buildDate = date.getFullYear() + '-' +
(date.getMonth() >= 9 ? '' : '0') + (date.getMonth() + 1) + '-' +
(date.getDate() >= 10 ? '' : '0') + date.getDate();
return '/**\n' +
' * jqFenster - Lightweight Modal Framework\n' +
' * Version: ' + version + ' (' + buildDate + ')\n' +
' * https://github.com/kkamkou/jqFenster\n' +
' */\n';
}
// tasks
desc('Help')
task('default', function () { console.log("Run `jake --tasks`\n"); });
desc('build jqFenster')
task({
'build': ['production/jquery.fenster.css', 'production/jquery.fenster.js']},
function(){
console.log('jqFenster build complete');
}
);
desc('build jquery.fenster.full.css')
file(
{'production/jquery.fenster.full.css': files['jquery.fenster.full.css']},
function(){
console.log('creating ' + this.name);
var data = '';
for (f in this.prereqs) {
file = this.prereqs[f];
console.log('\t' + file);
data += '\n/* File: ' + file + ' */\n';
data += fs.readFileSync(file);
}
fs.writeFileSync(this.name, getComment() + data);
}
);
// Css
desc('optimize jquery.fenster.full.css');
file(
{'production/jquery.fenster.css': ['production/jquery.fenster.full.css']},
function () {
console.log('optimizing jquery.fenster.css');
var css_optimized = csso.minify(fs.readFileSync('production/jquery.fenster.full.css').toString())
fs.writeFileSync(this.name, getComment() + css_optimized);
}
);
desc('build jquery.fenster.full.js')
file(
{'production/jquery.fenster.full.js': files['jquery.fenster.full.js']},
function () {
console.log('building jquery.fenster.full.js');
var strict = new RegExp('"use strict"\;?\n?'),
jqFensterSet = files['jquery.fenster.full.js'];
var data = '';
for (f in jqFensterSet) {
file = jqFensterSet[f];
console.log('\t' + file);
data += '\n\n/*\n * File: ' + file + '\n */\n\n';
data += fs.readFileSync(file);
data = data.replace(strict, '');
}
data = '(function($) {\n' + data + '\n})(jQuery);'; // add closure
fs.writeFileSync(this.name, getComment() + data);
}
);
// Js
desc('uglify jquery.fenster.js');
file(
{'production/jquery.fenster.js': ['production/jquery.fenster.full.js']},
function () {
console.log('uglify jquery.fenster.js');
var ast = ugp.parse(fs.readFileSync('production/jquery.fenster.full.js').toString());
ast = ugu.ast_mangle(ast);
ast = ugu.ast_squeeze(ast);
var result = ugu.split_lines(ugu.gen_code(ast), 1024 * 8);
fs.writeFileSync(this.name, getComment() + result);
}
);