Skip to content

Commit

Permalink
Refactor :compress task in Rakefile.
Browse files Browse the repository at this point in the history
This task is now run *before* other tasks.  So we first compress
the contents of template/ dir into template-min/ and from then on
use the template-min/ dir as our template.

To perform sencha build, I added build-js.html file that is like
template.html but contains only bare minumum of JavaScript links
that we need to build into one file.

The purpose of all this is to run the :compress before building
gem for release version of JSDuck.  For this reason we also don't
concatenate data.js with app.js, as the jsduck gem wants to generate
its own data.js.

The default value for --template option is now "template-min/",
only in development related tasks :sdk and :touch do we replace
it with "template/".
  • Loading branch information
nene committed Sep 6, 2011
1 parent 68f5bd0 commit 725b324
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 66 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
template/extjs
template/resources/css
template/resources/sass/.sass-cache
template-min/
sdk-vars.rb
122 changes: 65 additions & 57 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,6 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = "spec/**/*_spec.rb"
end

desc "Build gem locally"
task :build do
system "gem build jsduck.gemspec"
end

desc "Install gem locally"
task :install => :build do
system "gem install --user-install jsduck"
end

def load_sdk_vars
if File.exists?("sdk-vars.rb")
require "sdk-vars.rb"
Expand Down Expand Up @@ -64,6 +54,7 @@ task :sdk do
# to create symbolic links to template files instead of copying them over.
# Useful for development. Turn off for deployment.
"--template-links",
"--template", "template",
"#{SDK_DIR}/extjs/src",
"#{SDK_DIR}/platform/src",
"#{SDK_DIR}/platform/core/src",
Expand Down Expand Up @@ -215,7 +206,10 @@ end

desc "Run JSDuck on Sencha Touch"
task :touch do
run_on_touch("--template-links")
run_on_touch([
"--template-links",
"--template", "template"
])
end

desc "Base task for creating live Sencta Touch docs"
Expand All @@ -233,113 +227,127 @@ end
# Deletes those input CSS files and writes out concatenated CSS to
# resources/css/app.css
# Finally replaces the CSS section with <link> to that one CSS file.
def combine_css(html, base_dir, opts = :write)
def combine_css(html, dir, opts = :write)
css_section_re = /<!-- BEGIN CSS -->.*<!-- END CSS -->/m
css = []
css_section_re.match(html)[0].each_line do |line|
if line =~ /<link rel="stylesheet" href="(.*?)"/
file = $1
css << IO.read(base_dir + "/" + file)
system("rm", base_dir + "/" + file) if opts == :write
css << IO.read(dir + "/" + file)
system("rm", dir + "/" + file) if opts == :write
end
end

if opts == :write
fname = "#{OUT_DIR}/resources/css/app.css"
fname = "#{dir}/resources/css/app.css"
File.open(fname, 'w') {|f| f.write(css.join("\n")) }
yui_compress(fname)
end
html.sub(css_section_re, '<link rel="stylesheet" href="resources/css/app.css" type="text/css" />')
end

# Same thing for JavaScript, result is written to: app.js
def combine_js(html, base_dir)
def combine_js(html, dir)
js_section_re = /<!-- BEGIN JS -->.*<!-- END JS -->/m
js = []
js_section_re.match(html)[0].each_line do |line|
if line =~ /<script .* src="(.*)">/
file = $1
js << IO.read(base_dir + "/" + file)
js << IO.read(dir + "/" + file)
if file !~ /ext\.js/
system("rm", base_dir + "/" + file)
system("rm", dir + "/" + file)
end
elsif line =~ /<script .*>(.*)<\/script>/
js << $1
end
end

fname = "#{OUT_DIR}/app.js"
fname = "#{dir}/app.js"
File.open(fname, 'w') {|f| f.write(js.join("\n")) }
yui_compress(fname)
html.sub(js_section_re, '<script type="text/javascript" src="app.js"></script>')
end

# Use :export or :live_docs tasks instead of running this separately
desc "Compresses JavaScript and CSS files in output dir"
desc "Compress JavaScript and CSS files of JSDuck"
task :compress do
load_sdk_vars
# Detect if we are using index.html or template.html
index_html = File.exists?("#{OUT_DIR}/index.html") ? "#{OUT_DIR}/index.html" : "#{OUT_DIR}/template.html"

# Clean up template-min/ left over from previous compress task
system("rm", "-rf", "template-min")
# Copy template/ files to template-min/
system("cp", "-r", "template", "template-min")
# Now do everything that follows in template-min/ dir
dir = "template-min"

# Create JSB3 file for Docs app
system("sencha", "create", "jsb", "-a", index_html, "-p", "#{OUT_DIR}/app.jsb3")
system("sencha", "create", "jsb", "-a", "#{dir}/build-js.html", "-p", "#{dir}/app.jsb3")
# Concatenate files listed in JSB3 file
system("sencha", "build", "-p", "#{OUT_DIR}/app.jsb3", "-d", OUT_DIR)
system("sencha", "build", "-p", "#{dir}/app.jsb3", "-d", dir)
# Remove intermediate build files
system("rm", "#{OUT_DIR}/app.jsb3")
system("rm", "#{OUT_DIR}/all-classes.js")
system("rm", "#{dir}/app.jsb3")
system("rm", "#{dir}/all-classes.js")
# Replace app.js with app-all.js
system("mv", "#{OUT_DIR}/app-all.js", "#{OUT_DIR}/app.js")
system("mv", "#{dir}/app-all.js", "#{dir}/app.js")
# Remove the entire app/ dir
system("rm", "-r", "#{OUT_DIR}/app")

# Optionally concatenate CSS in print-template.html file
print_template = "#{OUT_DIR}/print-template.html";
if File.exists?(print_template)
html = IO.read(print_template);
# Just modify HTML to link app.css, don't write files.
html = combine_css(html, OUT_DIR, :replace_html_only)
File.open(print_template, 'w') {|f| f.write(html) }
end

# Concatenate CSS and JS files referenced in index.html file
html = IO.read(index_html)
html = combine_css(html, OUT_DIR)
html = combine_js(html, OUT_DIR)
File.open(index_html, 'w') {|f| f.write(html) }
system("rm", "-r", "#{dir}/app")

# Concatenate CSS in print-template.html file
print_template = "#{dir}/print-template.html";
html = IO.read(print_template);
# Just modify HTML to link app.css, don't write files.
html = combine_css(html, dir, :replace_html_only)
File.open(print_template, 'w') {|f| f.write(html) }

# Concatenate CSS and JS files referenced in template.html file
template_html = "#{dir}/template.html"
html = IO.read(template_html)
html = combine_css(html, dir)
html = combine_js(html, dir)
File.open(template_html, 'w') {|f| f.write(html) }

# Clean up SASS files
# (But keep prettify lib, which is needed for source files)
system "rm -rf #{OUT_DIR}/resources/sass"
system "rm -rf #{OUT_DIR}/resources/codemirror"
system "rm -rf #{OUT_DIR}/resources/.sass-cache"
system "rm -rf #{dir}/resources/sass"
system "rm -rf #{dir}/resources/codemirror"
system "rm -rf #{dir}/resources/.sass-cache"

# Empty the extjs dir, leave only the main JS files, CSS and images
system "rm -rf #{OUT_DIR}/extjs"
system "mkdir -p #{OUT_DIR}/extjs/resources/css"
system "mkdir -p #{OUT_DIR}/extjs/resources/themes/images"
system "cp #{EXT_DIR}/ext-all.js #{OUT_DIR}/extjs"
system "cp #{EXT_DIR}/ext-all-debug.js #{OUT_DIR}/extjs"
system "cp #{EXT_DIR}/bootstrap.js #{OUT_DIR}/extjs"
system "rm -rf #{dir}/extjs"
system "mkdir #{dir}/extjs"
system "cp #{EXT_DIR}/ext-all.js #{dir}/extjs"
system "cp #{EXT_DIR}/ext-all-debug.js #{dir}/extjs"
system "cp #{EXT_DIR}/bootstrap.js #{dir}/extjs"
system "mkdir -p #{dir}/extjs/resources/css"
system "cp #{EXT_DIR}/resources/css/ext-all.css #{dir}/extjs/resources/css"
system "mkdir -p #{dir}/extjs/resources/themes/images"
system "cp -r #{EXT_DIR}/resources/themes/images/default #{dir}/extjs/resources/themes/images"
end

desc "Copy over SDK examples"
task :copy_sdk_examples do
system "mkdir #{OUT_DIR}/extjs/builds"
system "cp #{EXT_DIR}/builds/ext-core.js #{OUT_DIR}/extjs/builds/ext-core.js"
system "cp #{EXT_DIR}/resources/css/ext-all.css #{OUT_DIR}/extjs/resources/css"
system "cp #{EXT_DIR}/release-notes.html #{OUT_DIR}/extjs"
system "cp -r #{EXT_DIR}/examples #{OUT_DIR}/extjs"
system "cp -r #{EXT_DIR}/welcome #{OUT_DIR}/extjs"
system "cp -r #{EXT_DIR}/resources/themes/images/default #{OUT_DIR}/extjs/resources/themes/images"
end

desc "Build gem locally"
task :build_gem do
system "gem build jsduck.gemspec"
end

desc "Run JSDuck on ExtJS SDK to create release version of docs app"
task :export => [:base_export_sdk, :compress, :copy_sdk_examples]
task :export => [:compress, :base_export_sdk, :copy_sdk_examples]

desc "Run JSDuck on ExtJS SDK to create live docs app"
task :live_sdk => [:base_live_sdk, :compress, :copy_sdk_examples]
task :live_sdk => [:compress, :base_live_sdk, :copy_sdk_examples]

desc "Run JSDuck on Sencha Touch to create live docs app"
task :live_touch => [:base_live_touch, :compress]
task :live_touch => [:compress, :base_live_touch]

desc "Create gemfile for release"
task :build => [:compress, :build_gem]

task :default => :spec
9 changes: 2 additions & 7 deletions jsduck.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,10 @@ Gem::Specification.new do |s|
s.rubyforge_project = s.name

s.files = `git ls-files`.split("\n").find_all do |file|
file !~ /spec.rb$/ && file !~ /benchmark/ && file !~ /resources\/sass/
file !~ /spec.rb$/ && file !~ /benchmark/ && file !~ /template\//
end
# Add files not in git
s.files += ['template/extjs/ext-all.js']
s.files += ['template/extjs/resources/themes/images/default/tree/arrows.gif']
s.files += ['template/extjs/resources/themes/images/default/grid/loading.gif']
s.files += ['template/extjs/resources/themes/images/default/form/text-bg.gif']
s.files += ['template/extjs/resources/themes/images/default/form/checkbox.gif']
s.files += Dir['template/resources/css/*.css']
s.files += Dir['template-min/**/*']

s.executables = ["jsduck"]

Expand Down
2 changes: 1 addition & 1 deletion lib/jsduck/options.rb
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def initialize

# Debugging
@processes = nil
@template_dir = File.dirname(File.dirname(File.dirname(__FILE__))) + "/template"
@template_dir = File.dirname(File.dirname(File.dirname(__FILE__))) + "/template-min"
@template_links = false
@extjs_path = "extjs/ext-all.js"
@local_storage_db = "docs"
Expand Down
25 changes: 25 additions & 0 deletions template/build-js.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<!--
This file loads only the mandatory JavaScript.
It is feeded into `sencha create jsb` command to create a
concatenated+compressed version of the Docs app JavaScript.
-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript">Docs = {localStorageDb: "docs"};</script>
<script type="text/javascript" src="extjs/ext.js"></script>
<!-- BEGIN JS -->
<script type="text/javascript" src="resources/codemirror/codemirror.js"></script>
<script type="text/javascript" src="resources/codemirror/javascript.js"></script>
<script type="text/javascript" src="resources/prettify/prettify.js"></script>
<script type="text/javascript" src="app.js"></script>
<!-- END JS -->
<script type="text/javascript" src="data.js"></script>

</head>
<body>

</body>
</html>
2 changes: 1 addition & 1 deletion template/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<script type="text/javascript" src="resources/codemirror/javascript.js"></script>
<script type="text/javascript" src="resources/prettify/prettify.js"></script>
<script type="text/javascript" src="app.js"></script>
<script type="text/javascript" src="data.js"></script>
<!-- END JS -->
<script type="text/javascript" src="data.js"></script>

{head_html}

Expand Down

0 comments on commit 725b324

Please sign in to comment.