jetty-rails 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Manifest.txt CHANGED
@@ -11,6 +11,7 @@ lib/jetty-6.1.9.jar
11
11
  lib/jetty-plus-6.1.9.jar
12
12
  lib/jetty-util-6.1.9.jar
13
13
  lib/jetty_rails.rb
14
+ lib/jetty_rails/handler/delegate_on_errors_handler.rb
14
15
  lib/jetty_rails/jars.rb
15
16
  lib/jetty_rails/runner.rb
16
17
  lib/jetty_rails/version.rb
@@ -29,8 +30,3 @@ tasks/deployment.rake
29
30
  tasks/environment.rake
30
31
  tasks/rspec.rake
31
32
  tasks/website.rake
32
- website/index.html
33
- website/index.txt
34
- website/javascripts/rounded_corners_lite.inc.js
35
- website/stylesheets/screen.css
36
- website/template.html.erb
data/bin/jetty_rails CHANGED
@@ -1,19 +1,83 @@
1
1
  #!/usr/bin/env jruby
2
+
3
+ # == Synopsis
4
+ #
5
+ # jetty_rails: jetty server for rails applications
6
+ #
7
+ # == Usage
8
+ #
9
+ # jetty_tails [OPTION] ... BASEDIR
10
+ #
11
+ # -h, --help:
12
+ # show help
13
+ #
14
+ # --context-path PATH, -u PATH:
15
+ # change the application context path (default: '/')
16
+ #
17
+ # --port PORT, -p PORT:
18
+ # change server port (default: 8080)
19
+ #
20
+ # --environment ENV, -e ENV:
21
+ # change rails environment (default: development)
22
+ #
23
+ # BASEDIR (optional): directory to be run (default: current).
2
24
  require "java"
3
25
  require "jetty_rails"
26
+ require 'rdoc/usage'
27
+ require 'getoptlong'
28
+
29
+ # fix to work with rubygems (use current file instead of main)
30
+ def RDoc.usage_no_exit(*args)
31
+ comment = File.open(__FILE__) do |file|
32
+ find_comment(file)
33
+ end
34
+
35
+ comment = comment.gsub(/^\s*#/, '')
36
+
37
+ markup = SM::SimpleMarkup.new
38
+ flow_convertor = SM::ToFlow.new
39
+
40
+ flow = markup.convert(comment, flow_convertor)
41
+
42
+ format = "plain"
4
43
 
5
- def print_usage
6
- puts 'jruby -S jetty_rails <basedir> <context-path> <environment>'
44
+ unless args.empty?
45
+ flow = extract_sections(flow, args)
46
+ end
47
+
48
+ options = RI::Options.instance
49
+ if args = ENV["RI"]
50
+ options.parse(args.split)
51
+ end
52
+ formatter = options.formatter.new(options, "")
53
+ formatter.display_flow(flow)
7
54
  end
8
55
 
9
- if ARGV[0] == '--help'
10
- print_usage
11
- else
12
- config = {}
13
- config[:base] = ARGV[0] || Dir.pwd
14
- config[:context_path] = ARGV[1] unless ARGV[1].nil?
15
- config[:environment] = ARGV[2] unless ARGV[2].nil?
16
-
17
- runner = JettyRails::Runner.new(config)
18
- runner.start
56
+ opts = GetoptLong.new(
57
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
58
+ [ '--context-path', '-u', GetoptLong::REQUIRED_ARGUMENT ],
59
+ [ '--port', '-p', GetoptLong::REQUIRED_ARGUMENT ],
60
+ [ '--environment', '-e', GetoptLong::REQUIRED_ARGUMENT ]
61
+ )
62
+
63
+ config = {
64
+ :base => Dir.pwd
65
+ }
66
+
67
+ opts.each do |opt, arg|
68
+ case opt
69
+ when '--help'
70
+ RDoc::usage
71
+ when '--context-path'
72
+ config[:context_path] = arg
73
+ when '--port'
74
+ config[:port] = arg.to_i
75
+ when '--environment'
76
+ config[:environment] = arg
77
+ end
19
78
  end
79
+
80
+ config[:base] = ARGV.shift unless ARGV.empty?
81
+
82
+ runner = JettyRails::Runner.new(config)
83
+ runner.start
data/config/hoe.rb CHANGED
@@ -63,8 +63,11 @@ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
63
63
  # p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
64
64
  #p.extra_deps = EXTRA_DEPENDENCIES
65
65
 
66
- #p.spec_extras = {} # A hash of extra values to set in the gemspec.
67
- end
66
+ # A hash of extra values to set in the gemspec.
67
+ p.spec_extras = {
68
+ # :platform => "java"
69
+ }
70
+ end
68
71
 
69
72
  CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
70
73
  PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
data/lib/jetty_rails.rb CHANGED
@@ -6,6 +6,7 @@ require "rubygems"
6
6
  require "activesupport"
7
7
  require "jetty_rails/jars"
8
8
  require "jetty_rails/runner"
9
+ require "jetty_rails/handler/delegate_on_errors_handler"
9
10
 
10
11
  module JettyRails
11
12
  JETTY_RAILS_HOME = File.dirname(__FILE__) + "/.." unless defined?(JETTY_RAILS_HOME)
@@ -0,0 +1,29 @@
1
+ module JettyRails
2
+ module Handler
3
+
4
+ class DelegateOnErrorsResponse
5
+ include Java::JavaxServletHttp::HttpServletResponse
6
+
7
+ def initialize(original, request)
8
+ @original = original
9
+ @request = request
10
+ end
11
+
12
+ def sendError(status_code)
13
+ @request.handled = false
14
+ end
15
+
16
+ def method_missing(method, *args, &blk)
17
+ @original.send(method, *args, &blk)
18
+ end
19
+ end
20
+
21
+ class DelegateOnErrorsHandler < Jetty::Handler::HandlerWrapper
22
+ def handle(target, request, response, dispatch)
23
+ decorated_response = DelegateOnErrorsResponse.new(response, request)
24
+ self.handler.handle(target, request, decorated_response, dispatch)
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -9,14 +9,17 @@ module JettyRails
9
9
 
10
10
  @@defaults = {
11
11
  :environment => 'development',
12
- :context_path => '/'
12
+ :context_path => '/',
13
+ :port => 8080
13
14
  }
14
15
 
15
16
  def initialize(config = {})
16
17
  @config = config.symbolize_keys!.reverse_merge!(@@defaults)
18
+ add_root_method_to @config[:context_path]
19
+
17
20
  raise 'Basedir to be run must be provided' unless config[:base]
18
21
 
19
- @server = Jetty::Server.new 8080
22
+ @server = Jetty::Server.new(config[:port])
20
23
 
21
24
  add_public_dir_to server
22
25
  install_rack_on server
@@ -28,18 +31,23 @@ module JettyRails
28
31
  end
29
32
 
30
33
  private
31
- def rack_filter
32
- Jetty::FilterHolder.new(Rack::RackFilter.new)
33
- end
34
-
35
34
  def add_public_dir_to(server)
36
35
  @resources = Jetty::Handler::ResourceHandler.new
37
36
  @resources.resource_base = config[:base] + '/public'
38
- server.add_handler(@resources)
37
+ context_capable = add_context_capability_to @resources
38
+ delegate_on_error = JettyRails::Handler::DelegateOnErrorsHandler.new
39
+ delegate_on_error.handler = context_capable
40
+ server.add_handler(delegate_on_error)
41
+ end
42
+
43
+ def add_context_capability_to(handler)
44
+ return handler if config[:context_path].root?
45
+ context_handler = Jetty::Handler::ContextHandler.new(config[:context_path])
46
+ context_handler.handler = @resources
47
+ context_handler
39
48
  end
40
49
 
41
50
  def install_rack_on(server)
42
- #TODO root context should be configurable
43
51
  @app_context = Jetty::Handler::WebAppContext.new("/", config[:context_path])
44
52
  @app_context.class_loader = JRuby.runtime.jruby_class_loader
45
53
  @app_context.resource_base = config[:base]
@@ -56,5 +64,18 @@ module JettyRails
56
64
  @app_context.add_filter(rack_filter, "/*", Jetty::Context::DEFAULT)
57
65
  server.add_handler(@app_context)
58
66
  end
67
+
68
+ def rack_filter
69
+ Jetty::FilterHolder.new(Rack::RackFilter.new)
70
+ end
71
+
72
+ def add_root_method_to(target)
73
+ (class << target; self; end).class_eval do
74
+ def root?
75
+ self == '/'
76
+ end
77
+ end
78
+ end
79
+
59
80
  end
60
81
  end
@@ -1,7 +1,7 @@
1
1
  module JettyRails #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
 
6
6
  STRING = [MAJOR, MINOR].join('.')
7
7
  end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe JettyRails::Handler::DelegateOnErrorsHandler do
4
+ it "should decorate the original HttpServletResponse" do
5
+ original = mock("original handler", :null_object => true)
6
+ original.should_receive(:handle).once do |target, request, response, dispatch|
7
+ response.should be_kind_of(JettyRails::Handler::DelegateOnErrorsResponse)
8
+ end
9
+ delegator = JettyRails::Handler::DelegateOnErrorsHandler.new
10
+ delegator.handler = original
11
+ delegator.handle('/any/target', mock("request"), mock("response"), 0)
12
+ end
13
+ end
14
+
15
+ describe JettyRails::Handler::DelegateOnErrorsResponse do
16
+ it "should delegate all method calls to wrapped response" do
17
+ response = mock('original response')
18
+ response.should_receive(:getContentType).once.and_return('text/html; charset=UTF-8')
19
+ wrapper = JettyRails::Handler::DelegateOnErrorsResponse.new response, mock('request')
20
+ wrapper.getContentType.should eql('text/html; charset=UTF-8')
21
+ end
22
+
23
+ it "should set request to not handled state on error" do
24
+ request = mock('request')
25
+ request.should_receive(:handled=).once.with(false)
26
+ wrapper = JettyRails::Handler::DelegateOnErrorsResponse.new mock('response'), request
27
+ wrapper.sendError(403)
28
+ end
29
+ end
@@ -25,6 +25,13 @@ describe JettyRails::Runner, "with no extra configuration" do
25
25
  runner.app_context.context_path.should eql('/')
26
26
  end
27
27
 
28
+ it "should set server default port to 8080" do
29
+ runner = JettyRails::Runner.new :base => Dir.pwd
30
+ runner.config.should have_key(:port)
31
+ runner.config[:port].should eql(8080)
32
+ runner.app_context.context_path.should eql('/')
33
+ end
34
+
28
35
  it "should set rails root" do
29
36
  runner = JettyRails::Runner.new :base => Dir.pwd
30
37
  runner.app_context.init_params['rails.root'].should eql('/')
@@ -34,6 +41,47 @@ describe JettyRails::Runner, "with no extra configuration" do
34
41
  runner = JettyRails::Runner.new :base => Dir.pwd
35
42
  runner.app_context.init_params['public.root'].should eql('/public')
36
43
  end
44
+
45
+ it "should set gem path" do
46
+ runner = JettyRails::Runner.new :base => Dir.pwd
47
+ runner.app_context.init_params['gem.path'].should eql('tmp/war/WEB-INF/gems')
48
+ end
49
+
50
+ it "should install RailsServletContextListener" do
51
+ runner = JettyRails::Runner.new :base => Dir.pwd
52
+ listeners = runner.app_context.event_listeners
53
+ listeners.size.should eql(1)
54
+ listeners[0].should be_kind_of(Rack::RailsServletContextListener)
55
+ end
56
+
57
+ it "should install RackFilter" do
58
+ context = mock("web application context", :null_object => true)
59
+ server = Jetty::Server.new
60
+ context.stub!(:getServer).and_return(server)
61
+ Jetty::Handler::WebAppContext.should_receive(:new).and_return(context)
62
+ context.should_receive(:add_filter).once do |filter_holder, url_pattern, dispatches|
63
+ filter_holder.filter.should be_kind_of(Rack::RackFilter)
64
+ url_pattern.should eql('/*')
65
+ dispatches.should eql(Jetty::Context::DEFAULT)
66
+ end
67
+ runner = JettyRails::Runner.new :base => Dir.pwd
68
+ end
69
+
70
+ it "should have handlers for static and dynamic content" do
71
+ runner = JettyRails::Runner.new :base => Dir.pwd
72
+ runner.server.handlers.size.should eql(2)
73
+ resource_handlers = runner.server.getChildHandlersByClass(Jetty::Handler::ResourceHandler)
74
+ resource_handlers.size.should eql(1)
75
+ webapp_handlers = runner.server.getChildHandlersByClass(Jetty::Handler::WebAppContext)
76
+ webapp_handlers.size.should eql(1)
77
+ end
78
+
79
+ it "should delegate to rails handler if requested dir has no welcome file" do
80
+ runner = JettyRails::Runner.new :base => Dir.pwd
81
+ delegate_handler = runner.server.handlers[0]
82
+ delegate_handler.should be_kind_of(JettyRails::Handler::DelegateOnErrorsHandler)
83
+ end
84
+
37
85
  end
38
86
 
39
87
  describe JettyRails::Runner, "with custom configuration" do
@@ -52,4 +100,16 @@ describe JettyRails::Runner, "with custom configuration" do
52
100
  runner.app_context.context_path.should eql('/myapp')
53
101
  end
54
102
 
103
+ it "should allow to override the server port" do
104
+ runner = JettyRails::Runner.new :base => Dir.pwd, :port => 8585
105
+ runner.config.should have_key(:port)
106
+ runner.config[:port].should eql(8585)
107
+ runner.server.connectors[0].port.should eql(8585)
108
+ end
109
+
110
+ it "should handle custom context paths for static and dynamic content" do
111
+ runner = JettyRails::Runner.new :base => Dir.pwd, :context_path => "/myapp"
112
+ context_handlers = runner.server.getChildHandlersByClass(Jetty::Handler::ContextHandler)
113
+ context_handlers.size.should eql(2) # one for static, one for dynamic
114
+ end
55
115
  end
@@ -13,6 +13,33 @@ describe "binary executable with no command line arguments" do
13
13
  load File.dirname(__FILE__) + '/../bin/jetty_rails'
14
14
  end
15
15
 
16
+ it "should not set the context path by default" do
17
+ runner = mock("runner", :null_object => true)
18
+ JettyRails::Runner.should_receive(:new) do |config|
19
+ config.should_not have_key(:context_path)
20
+ runner
21
+ end
22
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
23
+ end
24
+
25
+ it "should not set the environment by default" do
26
+ runner = mock("runner", :null_object => true)
27
+ JettyRails::Runner.should_receive(:new) do |config|
28
+ config.should_not have_key(:environment)
29
+ runner
30
+ end
31
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
32
+ end
33
+
34
+ it "should not set the port by default" do
35
+ runner = mock("runner", :null_object => true)
36
+ JettyRails::Runner.should_receive(:new) do |config|
37
+ config.should_not have_key(:port)
38
+ runner
39
+ end
40
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
41
+ end
42
+
16
43
  end
17
44
 
18
45
  describe "binary executable with command line arguments" do
@@ -28,4 +55,76 @@ describe "binary executable with command line arguments" do
28
55
  load File.dirname(__FILE__) + '/../bin/jetty_rails'
29
56
  end
30
57
 
58
+ it "should take --context-path command line option as context path" do
59
+ ARGV[0] = '--context-path'
60
+ ARGV[1] = '/myapp'
61
+ runner = mock("runner", :null_object => true)
62
+ JettyRails::Runner.should_receive(:new) do |config|
63
+ config.should have_key(:context_path)
64
+ config[:context_path].should eql('/myapp')
65
+ runner
66
+ end
67
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
68
+ end
69
+
70
+ it "should take -u command line option as context path" do
71
+ ARGV[0] = '-u'
72
+ ARGV[1] = '/myapp'
73
+ runner = mock("runner", :null_object => true)
74
+ JettyRails::Runner.should_receive(:new) do |config|
75
+ config.should have_key(:context_path)
76
+ config[:context_path].should eql('/myapp')
77
+ runner
78
+ end
79
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
80
+ end
81
+
82
+ it "should take --environment command line option as custom environment" do
83
+ ARGV[0] = '--environment'
84
+ ARGV[1] = 'production'
85
+ runner = mock("runner", :null_object => true)
86
+ JettyRails::Runner.should_receive(:new) do |config|
87
+ config.should have_key(:environment)
88
+ config[:environment].should eql('production')
89
+ runner
90
+ end
91
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
92
+ end
93
+
94
+ it "should take -e command line option as custom environment" do
95
+ ARGV[0] = '-e'
96
+ ARGV[1] = 'production'
97
+ runner = mock("runner", :null_object => true)
98
+ JettyRails::Runner.should_receive(:new) do |config|
99
+ config.should have_key(:environment)
100
+ config[:environment].should eql('production')
101
+ runner
102
+ end
103
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
104
+ end
105
+
106
+ it "should take --port command line option as custom server port" do
107
+ ARGV[0] = '--port'
108
+ ARGV[1] = '80'
109
+ runner = mock("runner", :null_object => true)
110
+ JettyRails::Runner.should_receive(:new) do |config|
111
+ config.should have_key(:port)
112
+ config[:port].should eql(80)
113
+ runner
114
+ end
115
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
116
+ end
117
+
118
+ it "should take -p command line option as custom server port" do
119
+ ARGV[0] = '-p'
120
+ ARGV[1] = '80'
121
+ runner = mock("runner", :null_object => true)
122
+ JettyRails::Runner.should_receive(:new) do |config|
123
+ config.should have_key(:port)
124
+ config[:port].should eql(80)
125
+ runner
126
+ end
127
+ load File.dirname(__FILE__) + '/../bin/jetty_rails'
128
+ end
129
+
31
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jetty-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ version: "0.2"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Kung
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-04 00:00:00 -03:00
12
+ date: 2008-05-06 00:00:00 -03:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -26,7 +26,6 @@ extra_rdoc_files:
26
26
  - Manifest.txt
27
27
  - PostInstall.txt
28
28
  - README.txt
29
- - website/index.txt
30
29
  files:
31
30
  - History.txt
32
31
  - License.txt
@@ -41,6 +40,7 @@ files:
41
40
  - lib/jetty-plus-6.1.9.jar
42
41
  - lib/jetty-util-6.1.9.jar
43
42
  - lib/jetty_rails.rb
43
+ - lib/jetty_rails/handler/delegate_on_errors_handler.rb
44
44
  - lib/jetty_rails/jars.rb
45
45
  - lib/jetty_rails/runner.rb
46
46
  - lib/jetty_rails/version.rb
@@ -59,11 +59,6 @@ files:
59
59
  - tasks/environment.rake
60
60
  - tasks/rspec.rake
61
61
  - tasks/website.rake
62
- - website/index.html
63
- - website/index.txt
64
- - website/javascripts/rounded_corners_lite.inc.js
65
- - website/stylesheets/screen.css
66
- - website/template.html.erb
67
62
  has_rdoc: true
68
63
  homepage: http://jetty-rails.rubyforge.org
69
64
  post_install_message: |
@@ -95,5 +90,6 @@ signing_key:
95
90
  specification_version: 2
96
91
  summary: description of gem
97
92
  test_files:
93
+ - spec/jetty_rails/handler/delegate_on_errors_handler_spec.rb
98
94
  - spec/jetty_rails/runner_spec.rb
99
95
  - spec/jetty_rails_spec.rb
data/website/index.html DELETED
@@ -1,130 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
- <title>
8
- jetty rails
9
- </title>
10
- <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
- <style>
12
-
13
- </style>
14
- <script type="text/javascript">
15
- window.onload = function() {
16
- settings = {
17
- tl: { radius: 10 },
18
- tr: { radius: 10 },
19
- bl: { radius: 10 },
20
- br: { radius: 10 },
21
- antiAlias: true,
22
- autoPad: true,
23
- validTags: ["div"]
24
- }
25
- var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
- versionBox.applyCornersToAll();
27
- }
28
- </script>
29
- </head>
30
- <body>
31
- <div id="main">
32
-
33
- <h1>jetty rails</h1>
34
- <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/jetty-rails"; return false'>
35
- <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/jetty-rails" class="numbers">0.1</a>
37
- </div>
38
- <h1>&#x2192; &#8216;jetty-rails&#8217;</h1>
39
-
40
-
41
- <h2>What</h2>
42
-
43
-
44
- <h2>Installing</h2>
45
-
46
-
47
- <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">jetty</span><span class="punct">-</span><span class="ident">rails</span></pre></p>
48
-
49
-
50
- <h2>The basics</h2>
51
-
52
-
53
- <h2>Demonstration of usage</h2>
54
-
55
-
56
- <h2>Forum</h2>
57
-
58
-
59
- <p><a href="http://groups.google.com/group/jetty-rails">http://groups.google.com/group/jetty-rails</a></p>
60
-
61
-
62
- <p><span class="caps">TODO</span> &#8211; create Google Group &#8211; jetty-rails</p>
63
-
64
-
65
- <h2>How to submit patches</h2>
66
-
67
-
68
- <p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
69
-
70
-
71
- <p><span class="caps">TODO</span> &#8211; pick <span class="caps">SVN</span> or Git instructions</p>
72
-
73
-
74
- <p>The trunk repository is <code>svn://rubyforge.org/var/svn/jetty-rails/trunk</code> for anonymous access.</p>
75
-
76
-
77
- <p><span class="caps">OOOORRRR</span></p>
78
-
79
-
80
- <p>You can fetch the source from either:</p>
81
-
82
-
83
- <ul>
84
- <li>rubyforge: <a href="http://rubyforge.org/scm/?group_id=6141">http://rubyforge.org/scm/?group_id=6141</a></li>
85
- </ul>
86
-
87
-
88
- <pre>git clone git://rubyforge.org/jetty-rails.git</pre>
89
-
90
- <ul>
91
- <li>github: <a href="http://github.com/fabiokung/jetty-rails/tree/master">http://github.com/fabiokung/jetty-rails/tree/master</a></li>
92
- </ul>
93
-
94
-
95
- <pre>git clone git://github.com/fabiokung/jetty-rails.git</pre>
96
-
97
- <ul>
98
- <li>gitorious: <a href="git://gitorious.org/jetty-rails/mainline.git">git://gitorious.org/jetty-rails/mainline.git</a></li>
99
- </ul>
100
-
101
-
102
- <pre>git clone git://gitorious.org/jetty-rails/mainline.git</pre>
103
-
104
- <h3>Build and test instructions</h3>
105
-
106
-
107
- <pre>cd jetty-rails
108
- rake test
109
- rake install_gem</pre>
110
-
111
- <h2>License</h2>
112
-
113
-
114
- <p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
115
-
116
-
117
- <h2>Contact</h2>
118
-
119
-
120
- <p>Comments are welcome. Send an email to <a href="mailto:fabio.kung@gmail.com">Fabio Kung</a> via the <a href="http://groups.google.com/group/jetty-rails">forum</a></p>
121
- <p class="coda">
122
- <a href="fabio.kung@gmail.com">Fabio Kung</a>, 24th April 2008<br>
123
- Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
124
- </p>
125
- </div>
126
-
127
- <!-- insert site tracking codes here, like Google Urchin -->
128
-
129
- </body>
130
- </html>
data/website/index.txt DELETED
@@ -1,81 +0,0 @@
1
- h1. jetty rails
2
-
3
- h1. &#x2192; 'jetty-rails'
4
-
5
-
6
- h2. What
7
-
8
-
9
- h2. Installing
10
-
11
- <pre syntax="ruby">sudo gem install jetty-rails</pre>
12
-
13
- h2. The basics
14
-
15
-
16
- h2. Demonstration of usage
17
-
18
-
19
-
20
- h2. Forum
21
-
22
- "http://groups.google.com/group/jetty-rails":http://groups.google.com/group/jetty-rails
23
-
24
- TODO - create Google Group - jetty-rails
25
-
26
- h2. How to submit patches
27
-
28
- Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
29
-
30
- TODO - pick SVN or Git instructions
31
-
32
- The trunk repository is <code>svn://rubyforge.org/var/svn/jetty-rails/trunk</code> for anonymous access.
33
-
34
- OOOORRRR
35
-
36
- You can fetch the source from either:
37
-
38
- <% if rubyforge_project_id %>
39
-
40
- * rubyforge: "http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>":http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>
41
-
42
- <pre>git clone git://rubyforge.org/jetty-rails.git</pre>
43
-
44
- <% else %>
45
-
46
- * rubyforge: MISSING IN ACTION
47
-
48
- TODO - You can not created a RubyForge project, OR have not run <code>rubyforge config</code>
49
- yet to refresh your local rubyforge data with this projects' id information.
50
-
51
- When you do this, this message will magically disappear!
52
-
53
- Or you can hack website/index.txt and make it all go away!!
54
-
55
- <% end %>
56
-
57
- * github: "http://github.com/fabiokung/jetty-rails/tree/master":http://github.com/fabiokung/jetty-rails/tree/master
58
-
59
- <pre>git clone git://github.com/fabiokung/jetty-rails.git</pre>
60
-
61
-
62
-
63
- * gitorious: "git://gitorious.org/jetty-rails/mainline.git":git://gitorious.org/jetty-rails/mainline.git
64
-
65
- <pre>git clone git://gitorious.org/jetty-rails/mainline.git</pre>
66
-
67
- h3. Build and test instructions
68
-
69
- <pre>cd jetty-rails
70
- rake test
71
- rake install_gem</pre>
72
-
73
-
74
- h2. License
75
-
76
- This code is free to use under the terms of the MIT license.
77
-
78
- h2. Contact
79
-
80
- Comments are welcome. Send an email to "Fabio Kung":mailto:fabio.kung@gmail.com via the "forum":http://groups.google.com/group/jetty-rails
81
-
@@ -1,285 +0,0 @@
1
-
2
- /****************************************************************
3
- * *
4
- * curvyCorners *
5
- * ------------ *
6
- * *
7
- * This script generates rounded corners for your divs. *
8
- * *
9
- * Version 1.2.9 *
10
- * Copyright (c) 2006 Cameron Cooke *
11
- * By: Cameron Cooke and Tim Hutchison. *
12
- * *
13
- * *
14
- * Website: http://www.curvycorners.net *
15
- * Email: info@totalinfinity.com *
16
- * Forum: http://www.curvycorners.net/forum/ *
17
- * *
18
- * *
19
- * This library is free software; you can redistribute *
20
- * it and/or modify it under the terms of the GNU *
21
- * Lesser General Public License as published by the *
22
- * Free Software Foundation; either version 2.1 of the *
23
- * License, or (at your option) any later version. *
24
- * *
25
- * This library is distributed in the hope that it will *
26
- * be useful, but WITHOUT ANY WARRANTY; without even the *
27
- * implied warranty of MERCHANTABILITY or FITNESS FOR A *
28
- * PARTICULAR PURPOSE. See the GNU Lesser General Public *
29
- * License for more details. *
30
- * *
31
- * You should have received a copy of the GNU Lesser *
32
- * General Public License along with this library; *
33
- * Inc., 59 Temple Place, Suite 330, Boston, *
34
- * MA 02111-1307 USA *
35
- * *
36
- ****************************************************************/
37
-
38
- var isIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1; var isMoz = document.implementation && document.implementation.createDocument; var isSafari = ((navigator.userAgent.toLowerCase().indexOf('safari')!=-1)&&(navigator.userAgent.toLowerCase().indexOf('mac')!=-1))?true:false; function curvyCorners()
39
- { if(typeof(arguments[0]) != "object") throw newCurvyError("First parameter of curvyCorners() must be an object."); if(typeof(arguments[1]) != "object" && typeof(arguments[1]) != "string") throw newCurvyError("Second parameter of curvyCorners() must be an object or a class name."); if(typeof(arguments[1]) == "string")
40
- { var startIndex = 0; var boxCol = getElementsByClass(arguments[1]);}
41
- else
42
- { var startIndex = 1; var boxCol = arguments;}
43
- var curvyCornersCol = new Array(); if(arguments[0].validTags)
44
- var validElements = arguments[0].validTags; else
45
- var validElements = ["div"]; for(var i = startIndex, j = boxCol.length; i < j; i++)
46
- { var currentTag = boxCol[i].tagName.toLowerCase(); if(inArray(validElements, currentTag) !== false)
47
- { curvyCornersCol[curvyCornersCol.length] = new curvyObject(arguments[0], boxCol[i]);}
48
- }
49
- this.objects = curvyCornersCol; this.applyCornersToAll = function()
50
- { for(var x = 0, k = this.objects.length; x < k; x++)
51
- { this.objects[x].applyCorners();}
52
- }
53
- }
54
- function curvyObject()
55
- { this.box = arguments[1]; this.settings = arguments[0]; this.topContainer = null; this.bottomContainer = null; this.masterCorners = new Array(); this.contentDIV = null; var boxHeight = get_style(this.box, "height", "height"); var boxWidth = get_style(this.box, "width", "width"); var borderWidth = get_style(this.box, "borderTopWidth", "border-top-width"); var borderColour = get_style(this.box, "borderTopColor", "border-top-color"); var boxColour = get_style(this.box, "backgroundColor", "background-color"); var backgroundImage = get_style(this.box, "backgroundImage", "background-image"); var boxPosition = get_style(this.box, "position", "position"); var boxPadding = get_style(this.box, "paddingTop", "padding-top"); this.boxHeight = parseInt(((boxHeight != "" && boxHeight != "auto" && boxHeight.indexOf("%") == -1)? boxHeight.substring(0, boxHeight.indexOf("px")) : this.box.scrollHeight)); this.boxWidth = parseInt(((boxWidth != "" && boxWidth != "auto" && boxWidth.indexOf("%") == -1)? boxWidth.substring(0, boxWidth.indexOf("px")) : this.box.scrollWidth)); this.borderWidth = parseInt(((borderWidth != "" && borderWidth.indexOf("px") !== -1)? borderWidth.slice(0, borderWidth.indexOf("px")) : 0)); this.boxColour = format_colour(boxColour); this.boxPadding = parseInt(((boxPadding != "" && boxPadding.indexOf("px") !== -1)? boxPadding.slice(0, boxPadding.indexOf("px")) : 0)); this.borderColour = format_colour(borderColour); this.borderString = this.borderWidth + "px" + " solid " + this.borderColour; this.backgroundImage = ((backgroundImage != "none")? backgroundImage : ""); this.boxContent = this.box.innerHTML; if(boxPosition != "absolute") this.box.style.position = "relative"; this.box.style.padding = "0px"; if(isIE && boxWidth == "auto" && boxHeight == "auto") this.box.style.width = "100%"; if(this.settings.autoPad == true && this.boxPadding > 0)
56
- this.box.innerHTML = ""; this.applyCorners = function()
57
- { for(var t = 0; t < 2; t++)
58
- { switch(t)
59
- { case 0:
60
- if(this.settings.tl || this.settings.tr)
61
- { var newMainContainer = document.createElement("DIV"); newMainContainer.style.width = "100%"; newMainContainer.style.fontSize = "1px"; newMainContainer.style.overflow = "hidden"; newMainContainer.style.position = "absolute"; newMainContainer.style.paddingLeft = this.borderWidth + "px"; newMainContainer.style.paddingRight = this.borderWidth + "px"; var topMaxRadius = Math.max(this.settings.tl ? this.settings.tl.radius : 0, this.settings.tr ? this.settings.tr.radius : 0); newMainContainer.style.height = topMaxRadius + "px"; newMainContainer.style.top = 0 - topMaxRadius + "px"; newMainContainer.style.left = 0 - this.borderWidth + "px"; this.topContainer = this.box.appendChild(newMainContainer);}
62
- break; case 1:
63
- if(this.settings.bl || this.settings.br)
64
- { var newMainContainer = document.createElement("DIV"); newMainContainer.style.width = "100%"; newMainContainer.style.fontSize = "1px"; newMainContainer.style.overflow = "hidden"; newMainContainer.style.position = "absolute"; newMainContainer.style.paddingLeft = this.borderWidth + "px"; newMainContainer.style.paddingRight = this.borderWidth + "px"; var botMaxRadius = Math.max(this.settings.bl ? this.settings.bl.radius : 0, this.settings.br ? this.settings.br.radius : 0); newMainContainer.style.height = botMaxRadius + "px"; newMainContainer.style.bottom = 0 - botMaxRadius + "px"; newMainContainer.style.left = 0 - this.borderWidth + "px"; this.bottomContainer = this.box.appendChild(newMainContainer);}
65
- break;}
66
- }
67
- if(this.topContainer) this.box.style.borderTopWidth = "0px"; if(this.bottomContainer) this.box.style.borderBottomWidth = "0px"; var corners = ["tr", "tl", "br", "bl"]; for(var i in corners)
68
- { if(i > -1 < 4)
69
- { var cc = corners[i]; if(!this.settings[cc])
70
- { if(((cc == "tr" || cc == "tl") && this.topContainer != null) || ((cc == "br" || cc == "bl") && this.bottomContainer != null))
71
- { var newCorner = document.createElement("DIV"); newCorner.style.position = "relative"; newCorner.style.fontSize = "1px"; newCorner.style.overflow = "hidden"; if(this.backgroundImage == "")
72
- newCorner.style.backgroundColor = this.boxColour; else
73
- newCorner.style.backgroundImage = this.backgroundImage; switch(cc)
74
- { case "tl":
75
- newCorner.style.height = topMaxRadius - this.borderWidth + "px"; newCorner.style.marginRight = this.settings.tr.radius - (this.borderWidth*2) + "px"; newCorner.style.borderLeft = this.borderString; newCorner.style.borderTop = this.borderString; newCorner.style.left = -this.borderWidth + "px"; break; case "tr":
76
- newCorner.style.height = topMaxRadius - this.borderWidth + "px"; newCorner.style.marginLeft = this.settings.tl.radius - (this.borderWidth*2) + "px"; newCorner.style.borderRight = this.borderString; newCorner.style.borderTop = this.borderString; newCorner.style.backgroundPosition = "-" + (topMaxRadius + this.borderWidth) + "px 0px"; newCorner.style.left = this.borderWidth + "px"; break; case "bl":
77
- newCorner.style.height = botMaxRadius - this.borderWidth + "px"; newCorner.style.marginRight = this.settings.br.radius - (this.borderWidth*2) + "px"; newCorner.style.borderLeft = this.borderString; newCorner.style.borderBottom = this.borderString; newCorner.style.left = -this.borderWidth + "px"; newCorner.style.backgroundPosition = "-" + (this.borderWidth) + "px -" + (this.boxHeight + (botMaxRadius + this.borderWidth)) + "px"; break; case "br":
78
- newCorner.style.height = botMaxRadius - this.borderWidth + "px"; newCorner.style.marginLeft = this.settings.bl.radius - (this.borderWidth*2) + "px"; newCorner.style.borderRight = this.borderString; newCorner.style.borderBottom = this.borderString; newCorner.style.left = this.borderWidth + "px"
79
- newCorner.style.backgroundPosition = "-" + (botMaxRadius + this.borderWidth) + "px -" + (this.boxHeight + (botMaxRadius + this.borderWidth)) + "px"; break;}
80
- }
81
- }
82
- else
83
- { if(this.masterCorners[this.settings[cc].radius])
84
- { var newCorner = this.masterCorners[this.settings[cc].radius].cloneNode(true);}
85
- else
86
- { var newCorner = document.createElement("DIV"); newCorner.style.height = this.settings[cc].radius + "px"; newCorner.style.width = this.settings[cc].radius + "px"; newCorner.style.position = "absolute"; newCorner.style.fontSize = "1px"; newCorner.style.overflow = "hidden"; var borderRadius = parseInt(this.settings[cc].radius - this.borderWidth); for(var intx = 0, j = this.settings[cc].radius; intx < j; intx++)
87
- { if((intx +1) >= borderRadius)
88
- var y1 = -1; else
89
- var y1 = (Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow((intx+1), 2))) - 1); if(borderRadius != j)
90
- { if((intx) >= borderRadius)
91
- var y2 = -1; else
92
- var y2 = Math.ceil(Math.sqrt(Math.pow(borderRadius,2) - Math.pow(intx, 2))); if((intx+1) >= j)
93
- var y3 = -1; else
94
- var y3 = (Math.floor(Math.sqrt(Math.pow(j ,2) - Math.pow((intx+1), 2))) - 1);}
95
- if((intx) >= j)
96
- var y4 = -1; else
97
- var y4 = Math.ceil(Math.sqrt(Math.pow(j ,2) - Math.pow(intx, 2))); if(y1 > -1) this.drawPixel(intx, 0, this.boxColour, 100, (y1+1), newCorner, -1, this.settings[cc].radius); if(borderRadius != j)
98
- { for(var inty = (y1 + 1); inty < y2; inty++)
99
- { if(this.settings.antiAlias)
100
- { if(this.backgroundImage != "")
101
- { var borderFract = (pixelFraction(intx, inty, borderRadius) * 100); if(borderFract < 30)
102
- { this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, 0, this.settings[cc].radius);}
103
- else
104
- { this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, -1, this.settings[cc].radius);}
105
- }
106
- else
107
- { var pixelcolour = BlendColour(this.boxColour, this.borderColour, pixelFraction(intx, inty, borderRadius)); this.drawPixel(intx, inty, pixelcolour, 100, 1, newCorner, 0, this.settings[cc].radius, cc);}
108
- }
109
- }
110
- if(this.settings.antiAlias)
111
- { if(y3 >= y2)
112
- { if (y2 == -1) y2 = 0; this.drawPixel(intx, y2, this.borderColour, 100, (y3 - y2 + 1), newCorner, 0, 0);}
113
- }
114
- else
115
- { if(y3 >= y1)
116
- { this.drawPixel(intx, (y1 + 1), this.borderColour, 100, (y3 - y1), newCorner, 0, 0);}
117
- }
118
- var outsideColour = this.borderColour;}
119
- else
120
- { var outsideColour = this.boxColour; var y3 = y1;}
121
- if(this.settings.antiAlias)
122
- { for(var inty = (y3 + 1); inty < y4; inty++)
123
- { this.drawPixel(intx, inty, outsideColour, (pixelFraction(intx, inty , j) * 100), 1, newCorner, ((this.borderWidth > 0)? 0 : -1), this.settings[cc].radius);}
124
- }
125
- }
126
- this.masterCorners[this.settings[cc].radius] = newCorner.cloneNode(true);}
127
- if(cc != "br")
128
- { for(var t = 0, k = newCorner.childNodes.length; t < k; t++)
129
- { var pixelBar = newCorner.childNodes[t]; var pixelBarTop = parseInt(pixelBar.style.top.substring(0, pixelBar.style.top.indexOf("px"))); var pixelBarLeft = parseInt(pixelBar.style.left.substring(0, pixelBar.style.left.indexOf("px"))); var pixelBarHeight = parseInt(pixelBar.style.height.substring(0, pixelBar.style.height.indexOf("px"))); if(cc == "tl" || cc == "bl"){ pixelBar.style.left = this.settings[cc].radius -pixelBarLeft -1 + "px";}
130
- if(cc == "tr" || cc == "tl"){ pixelBar.style.top = this.settings[cc].radius -pixelBarHeight -pixelBarTop + "px";}
131
- switch(cc)
132
- { case "tr":
133
- pixelBar.style.backgroundPosition = "-" + Math.abs((this.boxWidth - this.settings[cc].radius + this.borderWidth) + pixelBarLeft) + "px -" + Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth) + "px"; break; case "tl":
134
- pixelBar.style.backgroundPosition = "-" + Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) + "px -" + Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth) + "px"; break; case "bl":
135
- pixelBar.style.backgroundPosition = "-" + Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) + "px -" + Math.abs((this.boxHeight + this.settings[cc].radius + pixelBarTop) -this.borderWidth) + "px"; break;}
136
- }
137
- }
138
- }
139
- if(newCorner)
140
- { switch(cc)
141
- { case "tl":
142
- if(newCorner.style.position == "absolute") newCorner.style.top = "0px"; if(newCorner.style.position == "absolute") newCorner.style.left = "0px"; if(this.topContainer) this.topContainer.appendChild(newCorner); break; case "tr":
143
- if(newCorner.style.position == "absolute") newCorner.style.top = "0px"; if(newCorner.style.position == "absolute") newCorner.style.right = "0px"; if(this.topContainer) this.topContainer.appendChild(newCorner); break; case "bl":
144
- if(newCorner.style.position == "absolute") newCorner.style.bottom = "0px"; if(newCorner.style.position == "absolute") newCorner.style.left = "0px"; if(this.bottomContainer) this.bottomContainer.appendChild(newCorner); break; case "br":
145
- if(newCorner.style.position == "absolute") newCorner.style.bottom = "0px"; if(newCorner.style.position == "absolute") newCorner.style.right = "0px"; if(this.bottomContainer) this.bottomContainer.appendChild(newCorner); break;}
146
- }
147
- }
148
- }
149
- var radiusDiff = new Array(); radiusDiff["t"] = Math.abs(this.settings.tl.radius - this.settings.tr.radius)
150
- radiusDiff["b"] = Math.abs(this.settings.bl.radius - this.settings.br.radius); for(z in radiusDiff)
151
- { if(z == "t" || z == "b")
152
- { if(radiusDiff[z])
153
- { var smallerCornerType = ((this.settings[z + "l"].radius < this.settings[z + "r"].radius)? z +"l" : z +"r"); var newFiller = document.createElement("DIV"); newFiller.style.height = radiusDiff[z] + "px"; newFiller.style.width = this.settings[smallerCornerType].radius+ "px"
154
- newFiller.style.position = "absolute"; newFiller.style.fontSize = "1px"; newFiller.style.overflow = "hidden"; newFiller.style.backgroundColor = this.boxColour; switch(smallerCornerType)
155
- { case "tl":
156
- newFiller.style.bottom = "0px"; newFiller.style.left = "0px"; newFiller.style.borderLeft = this.borderString; this.topContainer.appendChild(newFiller); break; case "tr":
157
- newFiller.style.bottom = "0px"; newFiller.style.right = "0px"; newFiller.style.borderRight = this.borderString; this.topContainer.appendChild(newFiller); break; case "bl":
158
- newFiller.style.top = "0px"; newFiller.style.left = "0px"; newFiller.style.borderLeft = this.borderString; this.bottomContainer.appendChild(newFiller); break; case "br":
159
- newFiller.style.top = "0px"; newFiller.style.right = "0px"; newFiller.style.borderRight = this.borderString; this.bottomContainer.appendChild(newFiller); break;}
160
- }
161
- var newFillerBar = document.createElement("DIV"); newFillerBar.style.position = "relative"; newFillerBar.style.fontSize = "1px"; newFillerBar.style.overflow = "hidden"; newFillerBar.style.backgroundColor = this.boxColour; newFillerBar.style.backgroundImage = this.backgroundImage; switch(z)
162
- { case "t":
163
- if(this.topContainer)
164
- { if(this.settings.tl.radius && this.settings.tr.radius)
165
- { newFillerBar.style.height = topMaxRadius - this.borderWidth + "px"; newFillerBar.style.marginLeft = this.settings.tl.radius - this.borderWidth + "px"; newFillerBar.style.marginRight = this.settings.tr.radius - this.borderWidth + "px"; newFillerBar.style.borderTop = this.borderString; if(this.backgroundImage != "")
166
- newFillerBar.style.backgroundPosition = "-" + (topMaxRadius + this.borderWidth) + "px 0px"; this.topContainer.appendChild(newFillerBar);}
167
- this.box.style.backgroundPosition = "0px -" + (topMaxRadius - this.borderWidth) + "px";}
168
- break; case "b":
169
- if(this.bottomContainer)
170
- { if(this.settings.bl.radius && this.settings.br.radius)
171
- { newFillerBar.style.height = botMaxRadius - this.borderWidth + "px"; newFillerBar.style.marginLeft = this.settings.bl.radius - this.borderWidth + "px"; newFillerBar.style.marginRight = this.settings.br.radius - this.borderWidth + "px"; newFillerBar.style.borderBottom = this.borderString; if(this.backgroundImage != "")
172
- newFillerBar.style.backgroundPosition = "-" + (botMaxRadius + this.borderWidth) + "px -" + (this.boxHeight + (topMaxRadius + this.borderWidth)) + "px"; this.bottomContainer.appendChild(newFillerBar);}
173
- }
174
- break;}
175
- }
176
- }
177
- if(this.settings.autoPad == true && this.boxPadding > 0)
178
- { var contentContainer = document.createElement("DIV"); contentContainer.style.position = "relative"; contentContainer.innerHTML = this.boxContent; contentContainer.className = "autoPadDiv"; var topPadding = Math.abs(topMaxRadius - this.boxPadding); var botPadding = Math.abs(botMaxRadius - this.boxPadding); if(topMaxRadius < this.boxPadding)
179
- contentContainer.style.paddingTop = topPadding + "px"; if(botMaxRadius < this.boxPadding)
180
- contentContainer.style.paddingBottom = botMaxRadius + "px"; contentContainer.style.paddingLeft = this.boxPadding + "px"; contentContainer.style.paddingRight = this.boxPadding + "px"; this.contentDIV = this.box.appendChild(contentContainer);}
181
- }
182
- this.drawPixel = function(intx, inty, colour, transAmount, height, newCorner, image, cornerRadius)
183
- { var pixel = document.createElement("DIV"); pixel.style.height = height + "px"; pixel.style.width = "1px"; pixel.style.position = "absolute"; pixel.style.fontSize = "1px"; pixel.style.overflow = "hidden"; var topMaxRadius = Math.max(this.settings["tr"].radius, this.settings["tl"].radius); if(image == -1 && this.backgroundImage != "")
184
- { pixel.style.backgroundImage = this.backgroundImage; pixel.style.backgroundPosition = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + topMaxRadius + inty) -this.borderWidth) + "px";}
185
- else
186
- { pixel.style.backgroundColor = colour;}
187
- if (transAmount != 100)
188
- setOpacity(pixel, transAmount); pixel.style.top = inty + "px"; pixel.style.left = intx + "px"; newCorner.appendChild(pixel);}
189
- }
190
- function insertAfter(parent, node, referenceNode)
191
- { parent.insertBefore(node, referenceNode.nextSibling);}
192
- function BlendColour(Col1, Col2, Col1Fraction)
193
- { var red1 = parseInt(Col1.substr(1,2),16); var green1 = parseInt(Col1.substr(3,2),16); var blue1 = parseInt(Col1.substr(5,2),16); var red2 = parseInt(Col2.substr(1,2),16); var green2 = parseInt(Col2.substr(3,2),16); var blue2 = parseInt(Col2.substr(5,2),16); if(Col1Fraction > 1 || Col1Fraction < 0) Col1Fraction = 1; var endRed = Math.round((red1 * Col1Fraction) + (red2 * (1 - Col1Fraction))); if(endRed > 255) endRed = 255; if(endRed < 0) endRed = 0; var endGreen = Math.round((green1 * Col1Fraction) + (green2 * (1 - Col1Fraction))); if(endGreen > 255) endGreen = 255; if(endGreen < 0) endGreen = 0; var endBlue = Math.round((blue1 * Col1Fraction) + (blue2 * (1 - Col1Fraction))); if(endBlue > 255) endBlue = 255; if(endBlue < 0) endBlue = 0; return "#" + IntToHex(endRed)+ IntToHex(endGreen)+ IntToHex(endBlue);}
194
- function IntToHex(strNum)
195
- { base = strNum / 16; rem = strNum % 16; base = base - (rem / 16); baseS = MakeHex(base); remS = MakeHex(rem); return baseS + '' + remS;}
196
- function MakeHex(x)
197
- { if((x >= 0) && (x <= 9))
198
- { return x;}
199
- else
200
- { switch(x)
201
- { case 10: return "A"; case 11: return "B"; case 12: return "C"; case 13: return "D"; case 14: return "E"; case 15: return "F";}
202
- }
203
- }
204
- function pixelFraction(x, y, r)
205
- { var pixelfraction = 0; var xvalues = new Array(1); var yvalues = new Array(1); var point = 0; var whatsides = ""; var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x,2))); if ((intersect >= y) && (intersect < (y+1)))
206
- { whatsides = "Left"; xvalues[point] = 0; yvalues[point] = intersect - y; point = point + 1;}
207
- var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y+1,2))); if ((intersect >= x) && (intersect < (x+1)))
208
- { whatsides = whatsides + "Top"; xvalues[point] = intersect - x; yvalues[point] = 1; point = point + 1;}
209
- var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x+1,2))); if ((intersect >= y) && (intersect < (y+1)))
210
- { whatsides = whatsides + "Right"; xvalues[point] = 1; yvalues[point] = intersect - y; point = point + 1;}
211
- var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y,2))); if ((intersect >= x) && (intersect < (x+1)))
212
- { whatsides = whatsides + "Bottom"; xvalues[point] = intersect - x; yvalues[point] = 0;}
213
- switch (whatsides)
214
- { case "LeftRight":
215
- pixelfraction = Math.min(yvalues[0],yvalues[1]) + ((Math.max(yvalues[0],yvalues[1]) - Math.min(yvalues[0],yvalues[1]))/2); break; case "TopRight":
216
- pixelfraction = 1-(((1-xvalues[0])*(1-yvalues[1]))/2); break; case "TopBottom":
217
- pixelfraction = Math.min(xvalues[0],xvalues[1]) + ((Math.max(xvalues[0],xvalues[1]) - Math.min(xvalues[0],xvalues[1]))/2); break; case "LeftBottom":
218
- pixelfraction = (yvalues[0]*xvalues[1])/2; break; default:
219
- pixelfraction = 1;}
220
- return pixelfraction;}
221
- function rgb2Hex(rgbColour)
222
- { try{ var rgbArray = rgb2Array(rgbColour); var red = parseInt(rgbArray[0]); var green = parseInt(rgbArray[1]); var blue = parseInt(rgbArray[2]); var hexColour = "#" + IntToHex(red) + IntToHex(green) + IntToHex(blue);}
223
- catch(e){ alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");}
224
- return hexColour;}
225
- function rgb2Array(rgbColour)
226
- { var rgbValues = rgbColour.substring(4, rgbColour.indexOf(")")); var rgbArray = rgbValues.split(", "); return rgbArray;}
227
- function setOpacity(obj, opacity)
228
- { opacity = (opacity == 100)?99.999:opacity; if(isSafari && obj.tagName != "IFRAME")
229
- { var rgbArray = rgb2Array(obj.style.backgroundColor); var red = parseInt(rgbArray[0]); var green = parseInt(rgbArray[1]); var blue = parseInt(rgbArray[2]); obj.style.backgroundColor = "rgba(" + red + ", " + green + ", " + blue + ", " + opacity/100 + ")";}
230
- else if(typeof(obj.style.opacity) != "undefined")
231
- { obj.style.opacity = opacity/100;}
232
- else if(typeof(obj.style.MozOpacity) != "undefined")
233
- { obj.style.MozOpacity = opacity/100;}
234
- else if(typeof(obj.style.filter) != "undefined")
235
- { obj.style.filter = "alpha(opacity:" + opacity + ")";}
236
- else if(typeof(obj.style.KHTMLOpacity) != "undefined")
237
- { obj.style.KHTMLOpacity = opacity/100;}
238
- }
239
- function inArray(array, value)
240
- { for(var i = 0; i < array.length; i++){ if (array[i] === value) return i;}
241
- return false;}
242
- function inArrayKey(array, value)
243
- { for(key in array){ if(key === value) return true;}
244
- return false;}
245
- function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true;}
246
- else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r;}
247
- else { elm['on' + evType] = fn;}
248
- }
249
- function removeEvent(obj, evType, fn, useCapture){ if (obj.removeEventListener){ obj.removeEventListener(evType, fn, useCapture); return true;} else if (obj.detachEvent){ var r = obj.detachEvent("on"+evType, fn); return r;} else { alert("Handler could not be removed");}
250
- }
251
- function format_colour(colour)
252
- { var returnColour = "#ffffff"; if(colour != "" && colour != "transparent")
253
- { if(colour.substr(0, 3) == "rgb")
254
- { returnColour = rgb2Hex(colour);}
255
- else if(colour.length == 4)
256
- { returnColour = "#" + colour.substring(1, 2) + colour.substring(1, 2) + colour.substring(2, 3) + colour.substring(2, 3) + colour.substring(3, 4) + colour.substring(3, 4);}
257
- else
258
- { returnColour = colour;}
259
- }
260
- return returnColour;}
261
- function get_style(obj, property, propertyNS)
262
- { try
263
- { if(obj.currentStyle)
264
- { var returnVal = eval("obj.currentStyle." + property);}
265
- else
266
- { if(isSafari && obj.style.display == "none")
267
- { obj.style.display = ""; var wasHidden = true;}
268
- var returnVal = document.defaultView.getComputedStyle(obj, '').getPropertyValue(propertyNS); if(isSafari && wasHidden)
269
- { obj.style.display = "none";}
270
- }
271
- }
272
- catch(e)
273
- { }
274
- return returnVal;}
275
- function getElementsByClass(searchClass, node, tag)
276
- { var classElements = new Array(); if(node == null)
277
- node = document; if(tag == null)
278
- tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)"); for (i = 0, j = 0; i < elsLen; i++)
279
- { if(pattern.test(els[i].className))
280
- { classElements[j] = els[i]; j++;}
281
- }
282
- return classElements;}
283
- function newCurvyError(errorMessage)
284
- { return new Error("curvyCorners Error:\n" + errorMessage)
285
- }
@@ -1,138 +0,0 @@
1
- body {
2
- background-color: #E1D1F1;
3
- font-family: "Georgia", sans-serif;
4
- font-size: 16px;
5
- line-height: 1.6em;
6
- padding: 1.6em 0 0 0;
7
- color: #333;
8
- }
9
- h1, h2, h3, h4, h5, h6 {
10
- color: #444;
11
- }
12
- h1 {
13
- font-family: sans-serif;
14
- font-weight: normal;
15
- font-size: 4em;
16
- line-height: 0.8em;
17
- letter-spacing: -0.1ex;
18
- margin: 5px;
19
- }
20
- li {
21
- padding: 0;
22
- margin: 0;
23
- list-style-type: square;
24
- }
25
- a {
26
- color: #5E5AFF;
27
- background-color: #DAC;
28
- font-weight: normal;
29
- text-decoration: underline;
30
- }
31
- blockquote {
32
- font-size: 90%;
33
- font-style: italic;
34
- border-left: 1px solid #111;
35
- padding-left: 1em;
36
- }
37
- .caps {
38
- font-size: 80%;
39
- }
40
-
41
- #main {
42
- width: 45em;
43
- padding: 0;
44
- margin: 0 auto;
45
- }
46
- .coda {
47
- text-align: right;
48
- color: #77f;
49
- font-size: smaller;
50
- }
51
-
52
- table {
53
- font-size: 90%;
54
- line-height: 1.4em;
55
- color: #ff8;
56
- background-color: #111;
57
- padding: 2px 10px 2px 10px;
58
- border-style: dashed;
59
- }
60
-
61
- th {
62
- color: #fff;
63
- }
64
-
65
- td {
66
- padding: 2px 10px 2px 10px;
67
- }
68
-
69
- .success {
70
- color: #0CC52B;
71
- }
72
-
73
- .failed {
74
- color: #E90A1B;
75
- }
76
-
77
- .unknown {
78
- color: #995000;
79
- }
80
- pre, code {
81
- font-family: monospace;
82
- font-size: 90%;
83
- line-height: 1.4em;
84
- color: #ff8;
85
- background-color: #111;
86
- padding: 2px 10px 2px 10px;
87
- }
88
- .comment { color: #aaa; font-style: italic; }
89
- .keyword { color: #eff; font-weight: bold; }
90
- .punct { color: #eee; font-weight: bold; }
91
- .symbol { color: #0bb; }
92
- .string { color: #6b4; }
93
- .ident { color: #ff8; }
94
- .constant { color: #66f; }
95
- .regex { color: #ec6; }
96
- .number { color: #F99; }
97
- .expr { color: #227; }
98
-
99
- #version {
100
- float: right;
101
- text-align: right;
102
- font-family: sans-serif;
103
- font-weight: normal;
104
- background-color: #B3ABFF;
105
- color: #141331;
106
- padding: 15px 20px 10px 20px;
107
- margin: 0 auto;
108
- margin-top: 15px;
109
- border: 3px solid #141331;
110
- }
111
-
112
- #version .numbers {
113
- display: block;
114
- font-size: 4em;
115
- line-height: 0.8em;
116
- letter-spacing: -0.1ex;
117
- margin-bottom: 15px;
118
- }
119
-
120
- #version p {
121
- text-decoration: none;
122
- color: #141331;
123
- background-color: #B3ABFF;
124
- margin: 0;
125
- padding: 0;
126
- }
127
-
128
- #version a {
129
- text-decoration: none;
130
- color: #141331;
131
- background-color: #B3ABFF;
132
- }
133
-
134
- .clickable {
135
- cursor: pointer;
136
- cursor: hand;
137
- }
138
-
@@ -1,48 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
- <title>
8
- <%= title %>
9
- </title>
10
- <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
- <style>
12
-
13
- </style>
14
- <script type="text/javascript">
15
- window.onload = function() {
16
- settings = {
17
- tl: { radius: 10 },
18
- tr: { radius: 10 },
19
- bl: { radius: 10 },
20
- br: { radius: 10 },
21
- antiAlias: true,
22
- autoPad: true,
23
- validTags: ["div"]
24
- }
25
- var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
- versionBox.applyCornersToAll();
27
- }
28
- </script>
29
- </head>
30
- <body>
31
- <div id="main">
32
-
33
- <h1><%= title %></h1>
34
- <div id="version" class="clickable" onclick='document.location = "<%= download %>"; return false'>
35
- <p>Get Version</p>
36
- <a href="<%= download %>" class="numbers"><%= version %></a>
37
- </div>
38
- <%= body %>
39
- <p class="coda">
40
- <a href="fabio.kung@gmail.com">Fabio Kung</a>, <%= modified.pretty %><br>
41
- Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
42
- </p>
43
- </div>
44
-
45
- <!-- insert site tracking codes here, like Google Urchin -->
46
-
47
- </body>
48
- </html>