From 7059579c7499337c7946f3877ce77dd9a04ea22a Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Fri, 15 Oct 2010 21:38:41 -0700 Subject: inline all images into css * embedded images as data URIs * rake task to generate multipart js file with embeded images for IE * move images into a separate directory outside of src or css and keep them there for reference * clean up Rakefile and ruby code * .gitignore update * don't penalize IE 8+ with an extra request to the ie-compat.js file --- .gitignore | 2 +- Rakefile | 173 +++++++++++++++++++++++++++------- css/angular.css | 109 +-------------------- css/angular_images/arrow_ascend.png | Bin 3093 -> 0 bytes css/angular_images/arrow_descend.png | Bin 3076 -> 0 bytes css/angular_images/arrow_left.gif | Bin 102 -> 0 bytes css/angular_images/arrow_right.gif | Bin 102 -> 0 bytes css/angular_images/indicator-wait.png | Bin 1849 -> 0 bytes css/angular_images/loader-bar.gif | Bin 10819 -> 0 bytes images/css/arrow_left.gif | Bin 0 -> 102 bytes images/css/arrow_right.gif | Bin 0 -> 102 bytes images/css/indicator-wait.png | Bin 0 -> 1849 bytes images/logo/ng-logo.html | 24 +++++ images/logo/ng-logo.png | Bin 0 -> 7681 bytes logo/ng-logo.html | 24 ----- logo/ng-logo.png | Bin 7681 -> 0 bytes src/Angular.js | 19 ++-- src/Browser.js | 17 +++- src/angular-bootstrap.js | 12 +++ 19 files changed, 206 insertions(+), 174 deletions(-) delete mode 100644 css/angular_images/arrow_ascend.png delete mode 100644 css/angular_images/arrow_descend.png delete mode 100644 css/angular_images/arrow_left.gif delete mode 100644 css/angular_images/arrow_right.gif delete mode 100644 css/angular_images/indicator-wait.png delete mode 100644 css/angular_images/loader-bar.gif create mode 100644 images/css/arrow_left.gif create mode 100644 images/css/arrow_right.gif create mode 100644 images/css/indicator-wait.png create mode 100644 images/logo/ng-logo.html create mode 100644 images/logo/ng-logo.png delete mode 100644 logo/ng-logo.html delete mode 100644 logo/ng-logo.png diff --git a/.gitignore b/.gitignore index 7d148c85..89e7f0f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ angular-minified.map -externs.js angular.js angular-minified.js angular-debug.js +angular-ie-compat.js angular-scenario.js angularjs.netrc jstd.log 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(\'\');') - 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('');} +end \ No newline at end of file diff --git a/css/angular.css b/css/angular.css index 0fb10cdf..a293e8eb 100644 --- a/css/angular.css +++ b/css/angular.css @@ -1,32 +1,4 @@ @charset "UTF-8"; -/* CSS Document */ - -#ng-console { - border: thin solid black; - font-family: 'courier'; - font-size: x-small; -} - -#ng-console .ng-console-error { - color: red; -} - -#ng-console .ng-console-info { - color: blue; -} - -.ng-upload-widget object { - align:center; -} - -.ng-upload-widget a { - margin-right: .3em; -} - -.ng-upload-widget span { - color: #999999; - font-size: smaller; -} .ng-format-negative { color: red; @@ -42,29 +14,6 @@ border: 2px solid #FF0000; } -.ng-hidden { - display:none; -} - -/***************** - * DatePicker - *****************/ - -div.ui-widget { - font-size: 11px; - } - -/***************** - * OrderBy - *****************/ -.ng-ascend, -.ng-descend { - padding-right: 20px; - background-repeat: no-repeat; - background-position: right; -} -.ng-ascend { background-image: url(angular_images/arrow_ascend.png); } -.ng-descend { background-image: url(angular_images/arrow_descend.png); } /***************** * TIP @@ -83,7 +32,7 @@ div.ui-widget { } #ng-callout .ng-arrow-left{ - background-image: url(angular_images/arrow_left.gif); + background-image: url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrSLoc/AG8FeUUIN+sGebWAnbKSJodqqlsOxJtqYooU9vvk+vcJIcTkg+QAAA7"); background-repeat: no-repeat; background-position: left top; position: absolute; @@ -95,7 +44,7 @@ div.ui-widget { } #ng-callout .ng-arrow-right{ - background-image: url(angular_images/arrow_right.gif); + background-image: url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrCLTcoM29yN6k9socs91e5X3EyJloipYrO4ohTMqA0Fn2XVNswJe+H+SXAAA7"); background-repeat: no-repeat; background-position: left top; position: absolute; @@ -117,7 +66,6 @@ div.ui-widget { color:#333333; } - #ng-callout .ng-title{ background-color: #CCCCCC; text-align: left; @@ -128,62 +76,11 @@ div.ui-widget { } -#ng-spacer { - height: 1.2em; -} - -#ng-loading { - position: fixed; - bottom: 0; - height: 1.2em; - width: 100%; - text-align: center; -} - -/***************** - * Login - *****************/ - -#ng-login { - z-index: 2000; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - padding-top: 100px; -} - -#ng-login .ng-login-container { - width: 500px; - height: 380px; - margin: auto; - border-top: 5px solid #FFF; - border-left: 5px solid #DDD; - border-right: 5px solid #777; - border-bottom: 5px solid #555; - padding: 0 3px 3px 0; -} - -#ng-login .ng-login-container iframe { - width: 100%; - height: 100%; - border: 2px solid black; -} - - /***************** * indicators *****************/ -.ng-indicator-wait { - display: inline-block; - height: 16px; - width: 16px; - background-image: url("angular_images/indicator-wait.png"); -} - .ng-input-indicator-wait { - background-image: url("angular_images/indicator-wait.png"); + background-image: url("data:image/png;base64,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"); background-position: right; background-repeat: no-repeat; } diff --git a/css/angular_images/arrow_ascend.png b/css/angular_images/arrow_ascend.png deleted file mode 100644 index dd27b92b..00000000 Binary files a/css/angular_images/arrow_ascend.png and /dev/null differ diff --git a/css/angular_images/arrow_descend.png b/css/angular_images/arrow_descend.png deleted file mode 100644 index ec1cb5df..00000000 Binary files a/css/angular_images/arrow_descend.png and /dev/null differ diff --git a/css/angular_images/arrow_left.gif b/css/angular_images/arrow_left.gif deleted file mode 100644 index 4c9e5c66..00000000 Binary files a/css/angular_images/arrow_left.gif and /dev/null differ diff --git a/css/angular_images/arrow_right.gif b/css/angular_images/arrow_right.gif deleted file mode 100644 index 3252c359..00000000 Binary files a/css/angular_images/arrow_right.gif and /dev/null differ diff --git a/css/angular_images/indicator-wait.png b/css/angular_images/indicator-wait.png deleted file mode 100644 index 5b33f7e5..00000000 Binary files a/css/angular_images/indicator-wait.png and /dev/null differ diff --git a/css/angular_images/loader-bar.gif b/css/angular_images/loader-bar.gif deleted file mode 100644 index 47adbf03..00000000 Binary files a/css/angular_images/loader-bar.gif and /dev/null differ diff --git a/images/css/arrow_left.gif b/images/css/arrow_left.gif new file mode 100644 index 00000000..4c9e5c66 Binary files /dev/null and b/images/css/arrow_left.gif differ diff --git a/images/css/arrow_right.gif b/images/css/arrow_right.gif new file mode 100644 index 00000000..3252c359 Binary files /dev/null and b/images/css/arrow_right.gif differ diff --git a/images/css/indicator-wait.png b/images/css/indicator-wait.png new file mode 100644 index 00000000..5b33f7e5 Binary files /dev/null and b/images/css/indicator-wait.png differ diff --git a/images/logo/ng-logo.html b/images/logo/ng-logo.html new file mode 100644 index 00000000..06c67cf9 --- /dev/null +++ b/images/logo/ng-logo.html @@ -0,0 +1,24 @@ + + + + + + + +

<ng/>

+ + diff --git a/images/logo/ng-logo.png b/images/logo/ng-logo.png new file mode 100644 index 00000000..05f2e518 Binary files /dev/null and b/images/logo/ng-logo.png differ diff --git a/logo/ng-logo.html b/logo/ng-logo.html deleted file mode 100644 index 06c67cf9..00000000 --- a/logo/ng-logo.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - -

<ng/>

- - diff --git a/logo/ng-logo.png b/logo/ng-logo.png deleted file mode 100644 index 05f2e518..00000000 Binary files a/logo/ng-logo.png and /dev/null differ diff --git a/src/Angular.js b/src/Angular.js index 79557c2c..8cacb9e4 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -32,7 +32,8 @@ var _undefined = undefined, PRIORITY = {'FIRST': PRIORITY_FIRST, 'LAST': PRIORITY_LAST, 'WATCH':PRIORITY_WATCH}, jQuery = window['jQuery'] || window['$'], // weirdness to make IE happy _ = window['_'], - msie = !!/(msie) ([\w.]+)/.exec(lowercase(navigator.userAgent)), + /** holds major version number for IE or NaN for real browsers */ + msie = parseInt((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1], 10), jqLite = jQuery || jqLiteWrap, slice = Array.prototype.slice, push = Array.prototype.push, @@ -408,25 +409,31 @@ function toKeyValue(obj) { function angularInit(config){ if (config.autobind) { // TODO default to the source of angular.js - var scope = compile(window.document, _null, {'$config':config}); + var scope = compile(window.document, _null, {'$config':config}), + $browser = scope.$inject('$browser'); + if (config.css) - scope.$inject('$browser').addCss(config.base_url + config.css); + $browser.addCss(config.base_url + config.css); + else if(msie<8) + $browser.addJs(config.base_url + config.ie_compat, config.ie_compat_id); + scope.$init(); } } function angularJsConfig(document, config) { - var filename = /^(.*)\/angular(-([^\/]*))?.js(\?[^#]*)?(#(.*))?$/, + var filename = /^(.*)angular(-([^\/]*))?.js(\?[^#]*)?(#(.*))?$/, scripts = document.getElementsByTagName("script"), match; config = extend({ base_url: '', - css: '../css/angular.css' + ie_compat: 'angular-ie-compat.js', + ie_compat_id: 'ng-ie-compat' }, config); for(var j = 0; j < scripts.length; j++) { match = (scripts[j].src || "").match(filename); if (match) { - config.base_url = match[1] + '/'; + config.base_url = match[1]; extend(config, parseKeyValue(match[6])); eachAttribute(jqLite(scripts[j]), function(value, name){ if (/^ng:/.exec(name)) { diff --git a/src/Browser.js b/src/Browser.js index aa80ef47..dcdc0a73 100644 --- a/src/Browser.js +++ b/src/Browser.js @@ -188,11 +188,26 @@ function Browser(location, document, head, XHR, $log) { }; - self.addCss = function(url) { + /** + * Adds a stylesheet tag to the head. + */ + self.addCss = function(/**string*/url) { var link = jqLite(rawDocument.createElement('link')); link.attr('rel', 'stylesheet'); link.attr('type', 'text/css'); link.attr('href', url); head.append(link); }; + + + /** + * Adds a script tag to the head. + */ + self.addJs = function(/**string*/url, /**string*/dom_id) { + var script = jqLite(rawDocument.createElement('script')); + script.attr('type', 'text/javascript'); + script.attr('src', url); + if (dom_id) script.attr('id', dom_id); + head.append(script); + }; } diff --git a/src/angular-bootstrap.js b/src/angular-bootstrap.js index 4c95e8b0..416acbde 100644 --- a/src/angular-bootstrap.js +++ b/src/angular-bootstrap.js @@ -37,6 +37,13 @@ document.write(''); } + function addCss(file) { + document.write(''); + } + + addCss("/angular.css"); + addScript("/Angular.js"); addScript("/JSON.js"); addScript("/Compiler.js"); @@ -58,10 +65,15 @@ addScript("/markups.js"); addScript("/widgets.js"); + window.onload = function(){ try { if (previousOnLoad) previousOnLoad(); } catch(e) {} + + //angular-ie-compat.js needs to be pregenerated for development with IE<8 + if (msie<8) addScript('../angular-ie-compat.js'); + angularInit(angularJsConfig(document)); }; -- cgit v1.2.3