forked from jamietre/ImageMapster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rakefile
142 lines (121 loc) · 4.37 KB
/
rakefile
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
require 'rake'
require 'rake/packagetask'
MAPSTER_VERSION = "1.2.5b26"
MAPSTER_ROOT = File.expand_path(File.dirname(__FILE__))
MAPSTER_SRC = File.join(MAPSTER_ROOT, 'src')
MAPSTER_DIST = File.join(MAPSTER_ROOT, 'dist')
MAPSTER_PKG = File.join(MAPSTER_ROOT, 'pkg')
MAPSTER_COMPONENTS = [
'core',
'graphics',
'mapdata',
'areadata',
'areacorners',
'scale',
'tooltip'
]
task :default => [:clean, :concat, :dist]
desc "Clean the distribution directory."
task :clean do
rm_rf MAPSTER_DIST
mkdir MAPSTER_DIST
end
def normalize_whitespace(filename)
contents = File.readlines(filename)
contents.each { |line| line.sub!(/\s+$/, "") }
File.open(filename, "w") do |file|
file.write contents.join("\n").sub(/(\n+)?\Z/m, "\n")
end
end
desc "Strip trailing whitespace and ensure each file ends with a newline"
task :whitespace do
Dir["src/**/*"].each do |filename|
normalize_whitespace(filename) if File.file?(filename)
end
end
desc "Concatenate source files to build jquery.imagemapster.js"
task :concat, [:addons] => :whitespace do |task, args|
# colon-separated arguments such as `concat[foo:bar:-baz]` specify
# which components to add or exclude, depending on if it starts with "-"
add, exclude = args[:addons].to_s.split(':').partition {|c| c !~ /^-/ }
exclude.each {|c| c.sub!('-', '') }
files = (MAPSTER_COMPONENTS | add) - exclude
unless files == MAPSTER_COMPONENTS
puts "Building jquery.imagemapster.js by including: #{files.join(', ')}"
end
File.open(File.join(MAPSTER_DIST, 'jquery.imagemapster.js'), 'w') do |f|
f.puts files.map { |component|
File.read File.join(MAPSTER_SRC, "#{component}.js")
}
end
end
def google_compiler(src, target)
puts "Minifying #{src} with Google Closure Compiler..."
`java -jar vendor/google-compiler/compiler.jar --js #{src} --summary_detail_level 3 --js_output_file #{target}`
end
def yui_compressor(src, target)
puts "Minifying #{src} with YUI Compressor..."
`java -jar vendor/yuicompressor/yuicompressor-2.4.2.jar #{src} -o #{target}`
end
def uglifyjs(src, target)
begin
require 'uglifier'
rescue LoadError => e
if verbose
puts "\nYou'll need the 'uglifier' gem for minification. Just run:\n\n"
puts " $ gem install uglifier"
puts "\nand you should be all set.\n\n"
exit
end
return false
end
puts "Minifying #{src} with UglifyJS..."
File.open(target, "w"){|f| f.puts Uglifier.new.compile(File.read(src))}
end
def process_minified(src, target)
cp target, File.join(MAPSTER_DIST,'temp.js')
msize = File.size(File.join(MAPSTER_DIST,'temp.js'))
`gzip -9 #{File.join(MAPSER_DIST,'temp.js')}`
osize = File.size(src)
dsize = File.size(File.join(MAPSTER_DIST,'temp.js.gz'))
rm_rf File.join(MAPSTER_DIST,'temp.js.gz')
puts "Original version: %.3fk" % (osize/1024.0)
puts "Minified: %.3fk" % (msize/1024.0)
puts "Minified and gzipped: %.3fk, compression factor %.3f" % [dsize/1024.0, osize/dsize.to_f]
end
desc "Generates a minified version for distribution, using UglifyJS."
task :dist do
src, target = File.join(MAPSTER_DIST,'jquery.imagemapster.js'), File.join(MAPSTER_DIST,'jquery.imagemapster.min.js')
uglifyjs src, target
process_minified src, target
end
desc "Generates a minified version for distribution using the Google Closure compiler."
task :googledist do
src, target = File.join(MAPSTER_DIST,'jquery.imagemapster.js'), File.join(MAPSTER_DIST,'jquery.imagemapster.min.js')
google_compiler src, target
process_minified src, target
end
desc "Generates a minified version for distribution using the YUI compressor."
task :yuidist do
src, target = File.join(MAPSTER_DIST,'jquery.imagemapster.js'), File.join(MAPSTER_DIST,'jquery.imagemapster.min.js')
yui_compressor src, target
process_minified src, target
end
desc "Generate docco documentation from sources."
task :docs do
puts "Generating docs..."
puts "Note: to work, install node.js first, then install docco with 'sudo npm install docco -g'."
puts `docco src/*`
end
Rake::PackageTask.new('mapster', MAPSTER_VERSION) do |package|
package.need_tar_gz = true
package.need_zip = true
package.package_dir = MAPSTER_PKG
package.package_files.include(
'README.md',
'dist/**/*',
'src/**/*',
'test/**/*',
'examples/**/*'
)
end