| 1 | require 'rake' |
| 2 | require 'rake/packagetask' |
| 3 | require 'rbconfig' |
| 4 | |
| 5 | PUI_NAME = 'prototype-ui' |
| 6 | PUI_VERSION = 'trunk' |
| 7 | |
| 8 | PUI_DEPENDENCIES = { |
| 9 | :core => nil, |
| 10 | :window => [ :"util/iframe_shim.js", :"util/drag.js", :shadow ], |
| 11 | :carousel => nil, |
| 12 | :dock => nil, |
| 13 | :shadow => :util, |
| 14 | :util => nil, |
| 15 | :context_menu => [ :shadow, :"util/iframe_shim.js"], |
| 16 | :auto_complete => [ :shadow, :"util/iframe_shim.js"], |
| 17 | :calendar => :"util/date.js" |
| 18 | } |
| 19 | |
| 20 | PUI_COMPONENTS = PUI_DEPENDENCIES.keys |
| 21 | |
| 22 | PUI_ROOT = File.expand_path(File.dirname(__FILE__)) |
| 23 | PUI_SRC_DIR = File.join(PUI_ROOT, 'src') |
| 24 | PUI_DIST_DIR = File.join(PUI_ROOT, 'dist') |
| 25 | PUI_DIST_FILE = File.join(PUI_DIST_DIR, "#{PUI_NAME}.js") |
| 26 | PUI_DIST_FILE_PACKED = |
| 27 | File.join(PUI_DIST_DIR, "#{PUI_NAME}.packed.js") |
| 28 | |
| 29 | PUI_PKG_DIR = File.join(PUI_ROOT, 'pkg') |
| 30 | PUI_LIB_DIR = File.join(PUI_ROOT, 'lib') |
| 31 | PUI_DOC_DIR = File.join(PUI_ROOT, 'doc') |
| 32 | |
| 33 | $:.unshift File.join(PUI_ROOT, 'lib') |
| 34 | $:.unshift File.join(PUI_ROOT, 'lib', 'coderay', 'lib') |
| 35 | |
| 36 | def windows? |
| 37 | Config::CONFIG['host'].include?('mswin') |
| 38 | end |
| 39 | |
| 40 | NATURAL_DOCS = File.join(PUI_LIB_DIR, 'naturaldocs', "NaturalDocs") |
| 41 | NATURAL_DOCS << '.bat' if windows? |
| 42 | |
| 43 | task :default => [ :dist, :"dist:compress", :doc ] |
| 44 | |
| 45 | desc "Generates dist/prototype-ui.js with either all components or COMPONENTS" |
| 46 | task :dist do |
| 47 | require 'distrib' |
| 48 | components = ENV['COMPONENTS'] ? ENV['COMPONENTS'].split(',').collect { |c| c.strip } : PUI_COMPONENTS |
| 49 | |
| 50 | Distrib.new(*components).write |
| 51 | end |
| 52 | |
| 53 | namespace :dist do |
| 54 | desc "Generate dist/[component].js with each component and its dependencies" |
| 55 | task :each_component do |
| 56 | require 'distrib' |
| 57 | |
| 58 | PUI_COMPONENTS.each do |component| |
| 59 | Distrib.new(component).write(File.join(PUI_DIST_DIR, "#{component}.js")) |
| 60 | end |
| 61 | end |
| 62 | |
| 63 | desc "Preferred name for dist:each_component" |
| 64 | task :each => :each_component |
| 65 | |
| 66 | desc "Compress all JS in dist directory with PackR" |
| 67 | task :compress => [:dist, :each] do |
| 68 | require 'packr/packr' |
| 69 | FileUtils.rm_f Dir["#{PUI_DIST_DIR}/*.packed.js"] |
| 70 | |
| 71 | Dir["#{PUI_DIST_DIR}/*.js"].each do |file| |
| 72 | packed_file = file.gsub(".js", ".packed.js") |
| 73 | open(packed_file, 'w') do |packed| |
| 74 | packed << Packr.new.pack(File.read(file), :base62 => true, :shrink_vars => true) |
| 75 | end |
| 76 | end |
| 77 | end |
| 78 | end |
| 79 | |
| 80 | Rake::PackageTask.new(PUI_NAME, PUI_VERSION) do |package| |
| 81 | package.need_tar_gz = true |
| 82 | package.package_dir = PUI_PKG_DIR |
| 83 | package.package_files.include( |
| 84 | '[A-Z]*', |
| 85 | 'dist/*', |
| 86 | 'doc/**', |
| 87 | 'lib/**', |
| 88 | 'src/**', |
| 89 | 'test/**', |
| 90 | 'themes/**' |
| 91 | ) |
| 92 | end |
| 93 | |
| 94 | task :test => [ "dist:each_component", :test_units ] |
| 95 | |
| 96 | require 'test/lib/jstest' |
| 97 | |
| 98 | desc "Runs all the JavaScript unit tests and collects the results" |
| 99 | JavaScriptTestTask.new(:test_units) do |t| |
| 100 | testcases = ENV['TESTCASES'] |
| 101 | tests_to_run = ENV['TESTS'] && ENV['TESTS'].split(',') |
| 102 | browsers_to_test = ENV['BROWSERS'] && ENV['BROWSERS'].split(',') |
| 103 | |
| 104 | t.mount("/lib") |
| 105 | t.mount("/dist") |
| 106 | t.mount("/src") |
| 107 | t.mount("/test") |
| 108 | |
| 109 | Dir["test/unit/*_test.html"].sort.each do |test_file| |
| 110 | tests = testcases ? { :url => "/#{test_file}", :testcases => testcases } : "/#{test_file}" |
| 111 | test_filename = test_file[/.*\/(.+?)\.html/, 1] |
| 112 | t.run(tests) unless tests_to_run && !tests_to_run.include?(test_filename) |
| 113 | end |
| 114 | |
| 115 | %w( safari firefox ie konqueror opera ).each do |browser| |
| 116 | t.browser(browser.to_sym) unless browsers_to_test && !browsers_to_test.include?(browser) |
| 117 | end |
| 118 | end |
| 119 | |
| 120 | |
| 121 | desc "Create HTML documentation using NaturalDocs" |
| 122 | task :doc do |
| 123 | require 'rubygems' |
| 124 | require 'hpricot' |
| 125 | require 'coderay' |
| 126 | require 'cgi' |
| 127 | |
| 128 | def add_syntax_highlight(doc_files_dir) |
| 129 | Dir.glob(File.join(doc_files_dir, '**', '*.html')).each do |fn| |
| 130 | doc = Hpricot(File.read(fn)) |
| 131 | |
| 132 | doc.search('.CCode').each do |node| |
| 133 | source = CGI.unescapeHTML(node.innerHTML.gsub('<br />', "\n")) |
| 134 | node.innerHTML = CodeRay.scan(source, :javascript).html |
| 135 | end |
| 136 | |
| 137 | File.open(fn, 'w') { |f| f << doc } |
| 138 | end |
| 139 | end |
| 140 | |
| 141 | doc_dir = File.expand_path(ENV['PUI_DOC_DIR'] || PUI_DOC_DIR) |
| 142 | mkdir_p(doc_dir) |
| 143 | |
| 144 | chdir(doc_dir) do |
| 145 | `#{doc_dir}/config/set_version.sh` if File.exists?("#{doc_dir}/config/set_version.sh") |
| 146 | |
| 147 | src = File.directory?("#{doc_dir}/src") ? "#{doc_dir}/src" : PUI_SRC_DIR |
| 148 | `#{NATURAL_DOCS} -r -i #{src} -o HTML . -p #{doc_dir}/config -cs 'UTF-8' -s 'Default ../styles/prototype-ui ../styles/syntax'` |
| 149 | ## Update revision in doc |
| 150 | add_syntax_highlight(doc_dir) |
| 151 | end |
| 152 | end |
| 153 | |