aboutsummaryrefslogtreecommitdiffstats
path: root/Rakefile
diff options
context:
space:
mode:
Diffstat (limited to 'Rakefile')
-rw-r--r--Rakefile173
1 files changed, 137 insertions, 36 deletions
diff --git a/Rakefile b/Rakefile
index fc20dc01..bea458b2 100644
--- a/Rakefile
+++ b/Rakefile
@@ -38,36 +38,38 @@ GENERATED_FILES = [
'angular-debug.js',
'angular-minified.js',
'angular-minified.map',
+ 'angular-ie-compat.js',
'angular-scenario.js',
]
task :default => [:compile, :test]
+
+desc 'Clean Generated Files'
+task :clean do
+ FileUtils.rm(GENERATED_FILES, :force => true)
+end
+
+
desc 'Generate Externs'
task :compile_externs do
- out = File.new("externs.js", "w")
+ File.open('externs.js', 'w') do |out|
+ out.write("function jQuery(){};\n")
- out.write("function jQuery(){};\n")
- file = File.new("lib/jquery/jquery-1.4.2.js", "r")
- while (line = file.gets)
- if line =~ /^\s*(\w+)\s*:\s*function.*$/
- out.write("jQuery.#{$1}=function(){};\n")
+ File.open('lib/jquery/jquery-1.4.2.js', 'r') do |file|
+ while (line = file.gets)
+ if line =~ /^\s*(\w+)\s*:\s*function.*$/
+ out.write("jQuery.#{$1}=function(){};\n")
+ end
+ end
end
- end
- file.close
- out.write("jQuery.scope=function(){};\n")
- out.write("jQuery.controller=function(){};\n")
- out.close
-end
-
-desc 'Clean Generated Files'
-task :clean do
- GENERATED_FILES.each do |file|
- `rm #{file}`
+ out.write("jQuery.scope=function(){};\n")
+ out.write("jQuery.controller=function(){};\n")
end
end
+
desc 'Compile Scenario'
task :compile_scenario do
@@ -78,28 +80,89 @@ task :compile_scenario do
ANGULAR_SCENARIO,
'src/scenario/angular.suffix',
]
- css = %x(cat css/angular-scenario.css)
+
concat = 'cat ' + deps.flatten.join(' ')
- f = File.new("angular-scenario.js", 'w')
- f.write(%x{#{concat}})
- f.write('document.write(\'<style type="text/css">\n')
- f.write(css.gsub(/'/, "\\'").gsub(/\n/, "\\n"));
- f.write('\n</style>\');')
- f.close
+
+ File.open('angular-scenario.js', 'w') do |f|
+ f.write(%x{#{concat}})
+ f.write(gen_css('css/angular.css'))
+ f.write(gen_css('css/angular-scenario.css'))
+ end
+end
+
+
+
+
+
+desc 'Generate IE css js patch'
+task :generate_ie_compat do
+ css = File.open('css/angular.css', 'r') {|f| f.read }
+
+ # finds all css rules that contain backround images and extracts the rule name(s), content type of
+ # the image and base64 encoded image data
+ r = /\n([^\{\n]+)\s*\{[^\}]*background-image:\s*url\("data:([^;]+);base64,([^"]+)"\);[^\}]*\}/
+
+ images = css.scan(r)
+
+ # create a js file with multipart header containing the extracted images. the entire file *must*
+ # be CRLF (\r\n) delimited
+ File.open('angular-ie-compat.js', 'w') do |f|
+ f.write("/*\r\n" +
+ "Content-Type: multipart/related; boundary=\"_\"\r\n" +
+ "\r\n")
+ images.each_index do |idx|
+ f.write("--_\r\n" +
+ "Content-Location:img#{idx}\r\n" +
+ "Content-Transfer-Encoding:base64\r\n" +
+ "\r\n" +
+ images[idx][2] + "\r\n")
+ end
+
+ f.write("--_--\r\n" +
+ "*/\r\n")
+
+ # generate a css string containing *background-image rules for IE that point to the mime type
+ # images in the header
+ cssString = ''
+ images.each_index do |idx|
+ cssString += "#{images[idx][0]}{*background-image:url(\"mhtml:' + jsUri + '!img#{idx}\")}"
+ end
+
+ # generate a javascript closure that contains a function which will append the generated css
+ # string as a stylesheet to the current html document
+ jsString = "(function(){ \r\n" +
+ " var jsUri = document.location.href.replace(/\\/[^\/]+(#.*)?$/, '/') + " +
+ " document.getElementById('ng-ie-compat').src; \r\n" +
+ " var css = '#{cssString}' \r\n" +
+ " var s = document.createElement('style'); \r\n" +
+ " s.setAttribute('type', 'text/css'); \r\n" +
+ " if (s.styleSheet) { \r\n" +
+ " s.styleSheet.cssText = css; \r\n" +
+ " } else { \r\n" +
+ " s.appendChild(document.createTextNode(css)); \r\n" +
+ " } \r\n" +
+ " document.getElementsByTagName('head')[0].appendChild(s); \r\n" +
+ "})();\r\n"
+
+ f.write(jsString)
+ end
end
+
desc 'Compile JavaScript'
-task :compile => [:compile_externs, :compile_scenario] do
+task :compile => [:compile_externs, :compile_scenario, :generate_ie_compat] do
deps = [
'src/angular.prefix',
ANGULAR,
'src/angular.suffix',
]
- f = File.new("angular-debug.js", 'w')
- concat = 'cat ' + deps.flatten.join(' ')
- f.write(%x{#{concat}})
- f.close
+
+ File.open('angular-debug.js', 'w') do |f|
+ concat = 'cat ' + deps.flatten.join(' ')
+ f.write(%x{#{concat}})
+ f.write(gen_css('css/angular.css', true))
+ end
%x(java -jar lib/compiler-closure/compiler.jar \
--compilation_level SIMPLE_OPTIMIZATIONS \
@@ -109,6 +172,7 @@ task :compile => [:compile_externs, :compile_scenario] do
--js_output_file angular-minified.js)
end
+
desc 'Create angular distribution'
task :package => :compile do
date = Time.now.strftime('%y%m%d_%H%M')
@@ -117,44 +181,81 @@ task :package => :compile do
%x(cp test/angular-mocks.js ./)
- %x(tar -cf #{filename} \
+ %x(tar -czf #{filename} \
angular-debug.js \
angular-minified.js \
angular-scenario.js \
angular-mocks.js \
- css/angular.css \
- css/angular_images/ )
+ angular-ie-compat.js )
%x( rm angular-mocks.js)
puts "Package created: #{filename}"
end
+
namespace :server do
+
desc 'Run JsTestDriver Server'
task :start do
sh %x(java -jar lib/jstestdriver/JsTestDriver.jar --browser open --port 9876)
end
- desc "Run JavaScript tests against the server"
+ desc 'Run JavaScript tests against the server'
task :test do
sh %(java -jar lib/jstestdriver/JsTestDriver.jar --tests all)
end
+
end
-desc "Run JavaScript tests"
+
+desc 'Run JavaScript tests'
task :test do
sh %(java -jar lib/jstestdriver/JsTestDriver.jar --tests all --browser open --port 9876)
end
+
desc 'Lint'
task :lint do
out = %x(lib/jsl/jsl -conf lib/jsl/jsl.default.conf)
print out
end
+
desc 'push_angularjs'
-task :push_angularjs do
- Rake::Task['compile'].execute 0
+task :push_angularjs => :compile do
sh %(cat angularjs.ftp | ftp -N angularjs.netrc angularjs.org)
end
+
+
+
+###################
+# utility methods #
+###################
+
+
+##
+# generates css snippet from a given files and optionally applies simple minification rules
+#
+def gen_css(cssFile, minify = false)
+ css = ''
+ File.open(cssFile, 'r') do |f|
+ css = f.read
+ end
+
+ if minify
+ css.gsub! /\n/, ''
+ css.gsub! /\/\*.*?\*\//, ''
+ css.gsub! /:\s+/, ':'
+ css.gsub! /\s*\{\s*/, '{'
+ css.gsub! /\s*\}\s*/, '}'
+ css.gsub! /\s*\,\s*/, ','
+ css.gsub! /\s*\;\s*/, ';'
+ end
+
+ #escape for js
+ css.gsub! /'/, "\\'"
+ css.gsub! /\n/, "\\n"
+
+ return %Q{document.write('<style type="text/css">#{css}</style>');}
+end \ No newline at end of file