timeoutx 0.2.0 → 0.3.0

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/History.txt CHANGED
@@ -1,22 +1,33 @@
1
+ == 0.3.0 2008-04-10
2
+
3
+ * Keita Yamaguchi
4
+ * Moved the repository to GitHub
5
+ * Removed lib/timeoutx/version.rb and created TimeoutX::VERSION
6
+ * Reduced gem including files
7
+
1
8
  == 0.2.0 2007-12-05
2
9
 
3
10
  * Keita Yamaguchi
4
- * registered rubyforge.org and made the gem.
5
- * fixed some bugs.
6
- * removed timeout function, please use Timeout.timeout.
11
+ * Registered rubyforge.org and made the gem.
12
+ * Fixed some bugs.
13
+ * Removed timeout function.
7
14
 
8
15
  == 0.1.2 2002-09-27
9
16
 
10
- * patch by GOTOU Yuuzou, suitable for timeout.rb of ruby 1.7.
11
- second argument of timeout() can specify exception type.
12
- * license was changed from LGPL to Ruby's.
17
+ * GOTOU Yuuzou
18
+ * suitable for timeout.rb of ruby 1.7.
19
+ second argument of timeout() can specify exception type.
20
+ * Keita Yamaguchi
21
+ * License was changed from LGPL to Ruby's.
13
22
 
14
23
 
15
24
  == 0.1.1 2002-08-27
16
25
 
17
- * fix typo by GOTOU Yuuzou, [webrickja:40].
26
+ * GOTOU Yuuzou
27
+ * Fixed typo [webrickja:40].
18
28
 
19
29
 
20
30
  == 0.1.0 2002-08-25
21
31
 
22
- * Initial release by Keita Yamaguchi.
32
+ * Keita Yamaguchi
33
+ * Initial release.
data/License.txt CHANGED
@@ -1,4 +1,4 @@
1
- Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
1
+ TimeoutX is copyrighted free software by Keita Yamaguchi <keita.yamaguchi@gmail.com>.
2
2
  You can redistribute it and/or modify it under either the terms of the GPL
3
3
  (see the file GPL), or the conditions below:
4
4
 
data/Manifest.txt CHANGED
@@ -5,14 +5,5 @@ README.txt
5
5
  Rakefile
6
6
  examples/benchmark.rb
7
7
  lib/timeoutx.rb
8
- lib/timeoutx/version.rb
9
- scripts/txt2html
10
- setup.rb
11
- spec/spec.opts
12
- spec/spec_helper.rb
13
8
  spec/timeoutx_spec.rb
14
- website/index.html
15
- website/index.txt
16
- website/javascripts/rounded_corners_lite.inc.js
17
- website/stylesheets/screen.css
18
- website/template.rhtml
9
+ setup.rb
data/README.txt CHANGED
@@ -1,7 +1,19 @@
1
- README for timeoutx
2
- ===================
3
- timeoutx provides lightweight timeout function.
4
- See http://timeoutx.rubyforge.org.
1
+ = TimeoutX
5
2
 
6
- Copyright (c) 2002-2007 Keita Yamaguchi
7
- Mail: keita.yamaguchi@gmail.com
3
+ Author:: Keita Yamaguchi(山口 慶太) <keita.yamaguchi@gmail.com>
4
+ Copyright:: © Keita Yamaguchi, 2007ー2008. All rights reserved.
5
+ License:: Ruby License
6
+
7
+ TimeoutX provides lightweight timeout function. TimeoutX.timeout is about 10 times faster than standard Timeout.timeout.
8
+
9
+ == Usage
10
+
11
+ See {the documentation}[http://github.com/keita/timeoutx/wikis].
12
+
13
+ == Links
14
+
15
+ * TimeoutX
16
+ * {RubyForge}[http://timeoutx.rubyforge.org/]
17
+ * {GitHub}[http://github.com/keita/timeoutx/tree/master]
18
+ * author's blog(written in Japanese)
19
+ * {¬¬日常日記}[http://d.hatena.ne.jp/keita_yamaguchi/]
data/Rakefile CHANGED
@@ -1,138 +1,20 @@
1
1
  require 'rubygems'
2
- require 'rake'
3
- require 'rake/clean'
4
- require 'rake/testtask'
5
- require 'rake/packagetask'
6
- require 'rake/gempackagetask'
7
- require 'rake/rdoctask'
8
- require 'rake/contrib/rubyforgepublisher'
9
- require 'fileutils'
10
- require 'hoe'
11
- begin
12
- require 'spec/rake/spectask'
13
- rescue LoadError
14
- puts 'To use rspec for testing you must install rspec gem:'
15
- puts '$ sudo gem install rspec'
16
- exit
17
- end
18
-
19
- include FileUtils
20
- require File.join(File.dirname(__FILE__), 'lib', 'timeoutx', 'version')
21
-
22
- AUTHOR = 'Keita Yamaguchi' # can also be an array of Authors
23
- EMAIL = "keita.yamaguchi@gmail.com"
24
- DESCRIPTION = "timeoutx provides lightweight timeout function."
25
- GEM_NAME = 'timeoutx' # what ppl will type to install your gem
26
-
27
- @config_file = "~/.rubyforge/user-config.yml"
28
- @config = nil
29
- def rubyforge_username
30
- unless @config
31
- begin
32
- @config = YAML.load(File.read(File.expand_path(@config_file)))
33
- rescue
34
- puts <<-EOS
35
- ERROR: No rubyforge config file found: #{@config_file}"
36
- Run 'rubyforge setup' to prepare your env for access to Rubyforge
37
- - See http://newgem.rubyforge.org/rubyforge.html for more details
38
- EOS
39
- exit
40
- end
41
- end
42
- @rubyforge_username ||= @config["username"]
43
- end
44
-
45
- RUBYFORGE_PROJECT = 'timeoutx' # The unix name for your project
46
- HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
47
- DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
48
-
49
- NAME = "timeoutx"
50
- REV = nil
51
- # UNCOMMENT IF REQUIRED:
52
- # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
53
- VERS = TimeoutX::VERSION::STRING + (REV ? ".#{REV}" : "")
54
- CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
55
- RDOC_OPTS = ['--quiet', '--title', 'timeoutx documentation',
56
- "--opname", "index.html",
57
- "--line-numbers",
58
- "--main", "README",
59
- "--inline-source"]
60
-
61
- class Hoe
62
- def extra_deps
63
- @extra_deps.reject { |x| Array(x).first == 'hoe' }
64
- end
65
- end
66
-
67
- # Generate all the Rake tasks
68
- # Run 'rake -T' to see list of generated tasks (from gem root directory)
69
- hoe = Hoe.new(GEM_NAME, VERS) do |p|
70
- p.author = AUTHOR
71
- p.description = DESCRIPTION
72
- p.email = EMAIL
73
- p.summary = DESCRIPTION
74
- p.url = HOMEPATH
75
- p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
76
- p.test_globs = ["test/**/test_*.rb"]
77
- p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
78
-
79
- # == Optional
80
- p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
81
- #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
82
- #p.spec_extras = {} # A hash of extra values to set in the gemspec.
83
- end
84
-
85
- CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
86
- PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
87
- hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
88
-
89
- desc 'Generate website files'
90
- task :website_generate do
91
- Dir['website/**/*.txt'].each do |txt|
92
- sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
93
- end
94
- end
95
-
96
- desc 'Upload website files to rubyforge'
97
- task :website_upload do
98
- host = "#{rubyforge_username}@rubyforge.org"
99
- remote_dir = "/var/www/gforge-projects/#{PATH}/"
100
- local_dir = 'website'
101
- sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
102
- end
2
+ require 'rtask'
103
3
 
104
- desc 'Generate and upload website files'
105
- task :website => [:website_generate, :website_upload, :publish_docs]
4
+ #
5
+ # RTask
6
+ #
106
7
 
107
- desc 'Release the website and new gem version'
108
- task :deploy => [:check_version, :website, :release] do
109
- puts "Remember to create SVN tag:"
110
- puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
111
- "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
112
- puts "Suggested comment:"
113
- puts "Tagging release #{CHANGES}"
114
- end
8
+ RTask.new
115
9
 
116
- desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
117
- task :local_deploy => [:website_generate, :install_gem]
10
+ #
11
+ # bacon
12
+ #
118
13
 
119
- task :check_version do
120
- unless ENV['VERSION']
121
- puts 'Must pass a VERSION=x.y.z release version'
122
- exit
123
- end
124
- unless ENV['VERSION'] == VERS
125
- puts "Please update your version.rb to match the release version, currently #{VERS}"
126
- exit
127
- end
128
- end
129
-
130
- desc "Run the specs under spec/models"
131
- Spec::Rake::SpecTask.new do |t|
132
- t.spec_opts = ['--options', "spec/spec.opts"]
133
- t.spec_files = FileList['spec/*_spec.rb']
14
+ desc "Run the specs"
15
+ task :spec do
16
+ sh "bacon spec/timeoutx_spec.rb"
134
17
  end
135
18
 
136
19
  desc "Default task is to run specs"
137
20
  task :default => :spec
138
-
data/lib/timeoutx.rb CHANGED
@@ -1,6 +1,16 @@
1
1
  require 'singleton'
2
2
 
3
3
  class TimeoutX
4
+ module Version #:nodoc:
5
+ MAJOR = 0
6
+ MINOR = 3
7
+ TINY = 0
8
+
9
+ STRING = [MAJOR, MINOR, TINY].join('.')
10
+ end
11
+
12
+ VERSION = Version::STRING
13
+
4
14
  include Singleton
5
15
 
6
16
  attr_accessor :interval
@@ -56,7 +66,7 @@ class TimeoutX
56
66
  # Replaces Timeout.timeout into TimeoutX.timeout.
57
67
  def self.replace_timeout
58
68
  require "timeout"
59
- def Timeout.timeout(sec, exception=Timeout::Error)
69
+ def Timeout.timeout(sec, exception=Timeout::Error) #:nodoc:
60
70
  TimeoutX.timeout(sec, exception)
61
71
  end
62
72
  end
@@ -64,5 +74,3 @@ class TimeoutX
64
74
  # Raised by TimeoutX#timeout when the block times out.
65
75
  class Error < Interrupt; end
66
76
  end
67
-
68
- require 'timeoutx/version'
@@ -1,21 +1,17 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
- $LOAD_PATH << File.join(File.dirname(__FILE__), "..", "lib")
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
2
  require "timeoutx"
3
+ require "bacon"
4
4
 
5
- describe "timeout" do
5
+ describe "TimeoutX" do
6
6
  it "should be timeout" do
7
7
  Proc.new do
8
- 1.upto(100000) do
9
- TimeoutX.timeout(0.1){sleep 0.09}
10
- end
11
- end.should raise_error(TimeoutX::Error)
8
+ TimeoutX.timeout(0.1){sleep 1}
9
+ end.should.raise(TimeoutX::Error)
12
10
  end
13
11
 
14
12
  it "should not be timeout" do
15
13
  Proc.new do
16
- 1.upto(100000) do
17
- TimeoutX.timeout(0.09){sleep 0.1}
18
- end
19
- end.should_not raise_error(TimeoutX::Error)
14
+ TimeoutX.timeout(1){sleep 0.1}
15
+ end.should.not.raise(TimeoutX::Error)
20
16
  end
21
17
  end
metadata CHANGED
@@ -1,33 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: timeoutx
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.0
7
- date: 2007-12-06 00:00:00 +09:00
8
- summary: timeoutx provides lightweight timeout function.
9
- require_paths:
10
- - lib
11
- email: keita.yamaguchi@gmail.com
12
- homepage: http://timeoutx.rubyforge.org
13
- rubyforge_project: timeoutx
14
- description: timeoutx provides lightweight timeout function.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.3.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Keita Yamaguchi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-10 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: keita.yamaguchi@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
31
24
  files:
32
25
  - History.txt
33
26
  - License.txt
@@ -36,33 +29,33 @@ files:
36
29
  - Rakefile
37
30
  - examples/benchmark.rb
38
31
  - lib/timeoutx.rb
39
- - lib/timeoutx/version.rb
40
- - scripts/txt2html
41
- - setup.rb
42
- - spec/spec.opts
43
- - spec/spec_helper.rb
44
32
  - spec/timeoutx_spec.rb
45
- - website/index.html
46
- - website/index.txt
47
- - website/javascripts/rounded_corners_lite.inc.js
48
- - website/stylesheets/screen.css
49
- - website/template.rhtml
50
- test_files: []
51
-
52
- rdoc_options:
53
- - --main
54
- - README.txt
55
- extra_rdoc_files:
56
- - History.txt
57
- - License.txt
58
- - Manifest.txt
59
- - README.txt
60
- - website/index.txt
61
- executables: []
62
-
63
- extensions: []
33
+ - setup.rb
34
+ has_rdoc: true
35
+ homepage: http://rubyforge.org/projects/timeoutx/
36
+ post_install_message:
37
+ rdoc_options: []
64
38
 
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
65
53
  requirements: []
66
54
 
67
- dependencies: []
55
+ rubyforge_project: timeoutx
56
+ rubygems_version: 1.1.0
57
+ signing_key:
58
+ specification_version: 2
59
+ summary: TimeoutX provides a lightweight timeout function.
60
+ test_files: []
68
61
 
@@ -1,9 +0,0 @@
1
- class TimeoutX #:nodoc:
2
- module VERSION #:nodoc:
3
- MAJOR = 0
4
- MINOR = 2
5
- TINY = 0
6
-
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
- end
9
- end
data/scripts/txt2html DELETED
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'redcloth'
5
- require 'syntax/convertors/html'
6
- require 'erb'
7
- require File.dirname(__FILE__) + '/../lib/timeoutx/version.rb'
8
-
9
- version = TimeoutX::VERSION::STRING
10
- download = 'http://rubyforge.org/projects/timeoutx'
11
-
12
- class Fixnum
13
- def ordinal
14
- # teens
15
- return 'th' if (10..19).include?(self % 100)
16
- # others
17
- case self % 10
18
- when 1: return 'st'
19
- when 2: return 'nd'
20
- when 3: return 'rd'
21
- else return 'th'
22
- end
23
- end
24
- end
25
-
26
- class Time
27
- def pretty
28
- return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
29
- end
30
- end
31
-
32
- def convert_syntax(syntax, source)
33
- return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
34
- end
35
-
36
- if ARGV.length >= 1
37
- src, template = ARGV
38
- template ||= File.dirname(__FILE__) + '/../website/template.rhtml'
39
-
40
- else
41
- puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
42
- exit!
43
- end
44
-
45
- template = ERB.new(File.open(template).read)
46
-
47
- title = nil
48
- body = nil
49
- File.open(src) do |fsrc|
50
- title_text = fsrc.readline
51
- body_text = fsrc.read
52
- syntax_items = []
53
- body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</>!m){
54
- ident = syntax_items.length
55
- element, syntax, source = $1, $2, $3
56
- syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
57
- "syntax-temp-#{ident}"
58
- }
59
- title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
60
- body = RedCloth.new(body_text).to_html
61
- body.gsub!(%r!(?:<pre><code>)?syntax-temp-(d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
62
- end
63
- stat = File.stat(src)
64
- created = stat.ctime
65
- modified = stat.mtime
66
-
67
- $stdout << template.result(binding)
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --colour
data/spec/spec_helper.rb DELETED
@@ -1 +0,0 @@
1
- require 'spec'
data/website/index.html DELETED
@@ -1,147 +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
- TimeoutX
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>TimeoutX</h1>
34
- <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/timeoutx"; return false'>
35
- <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/timeoutx" class="numbers">0.2.0</a>
37
- </div>
38
- <h2>What</h2>
39
-
40
- <p>TimeoutX provides lightweight timeout function. TimeoutX.timeout is about 10
41
- times faster than standard Timeout.timeout.</p>
42
-
43
-
44
- <h2>Why TimeouX is faster than standard timeout</h2>
45
-
46
- <p>Because TimeoutX keeps one thread for timeout countdown loop. Timeout.timeout
47
- creates a new Thread object when timeout function is called, for example, 10,000
48
- threads are created if you call it 10,000 times. TimeoutX library is useful if
49
- you need to call timeout function many times in short period.</p>
50
-
51
-
52
- <h2>Installing</h2>
53
-
54
- <pre syntax="ruby">sudo gem install timeoutx</pre>
55
- <h2>API Document</h2>
56
-
57
- <p><a href="http://timeoutx.rubyforge.org/rdoc/">http://timeoutx.rubyforge.org/rdoc/</a></p>
58
-
59
-
60
- <h2>Demonstration of usage</h2>
61
-
62
- <pre><code>
63
- require "timeoutx"
64
-
65
- TimeoutX.timeout(1){ ... }
66
-
67
- </code></pre>
68
- <p>replace Timeout.timeout into TimeoutX.timeout:</p>
69
-
70
-
71
- <pre><code>
72
- require "timeoutx"
73
- TimeoutX.replace_timeout
74
-
75
- Timeout.timeout(1){ ... }
76
-
77
- </code></pre>
78
- <h2>Benchmark</h2>
79
-
80
- <p>Sample benchmark results (2007/12/05) by examples/benchmark.rb :</p>
81
-
82
-
83
- <pre syntax="ruby"><code>
84
- n = 100000
85
- Benchmark.bmbm(10) do |x|
86
- x.report("Timeout") { 1.upto(n) do ; Timeout.timeout(1){true}; end }
87
- x.report("TimeoutX") { 1.upto(n) do ; TimeoutX.timeout(1){true}; end }
88
- end
89
-
90
- </code></pre>
91
- <h3>ruby 1.8.6</h3>
92
-
93
- <pre syntax="ruby"><code>
94
- Rehearsal ---------------------------------------------
95
- Timeout 5.960000 0.460000 6.420000 ( 6.521520)
96
- TimeoutX 0.780000 0.050000 0.830000 ( 0.851778)
97
- ------------------------------------ total: 7.250000sec
98
-
99
- user system total real
100
- Timeout 5.650000 0.790000 6.440000 ( 6.516992)
101
- TimeoutX 0.760000 0.080000 0.840000 ( 0.863438)
102
-
103
- </code></pre>
104
- <h3>ruby 1.9.0</h3>
105
-
106
- <pre syntax="ruby"><code>
107
- Rehearsal ---------------------------------------------
108
- Timeout 12.140000 2.760000 14.900000 ( 15.333607)
109
- TimeoutX 0.490000 0.010000 0.500000 ( 0.518974)
110
- ----------------------------------- total: 15.400000sec
111
-
112
- user system total real
113
- Timeout 11.210000 2.390000 13.600000 ( 14.337455)
114
- TimeoutX 0.490000 0.010000 0.500000 ( 0.512449)
115
-
116
- </code></pre>
117
- <h2>Forum</h2>
118
-
119
- <p><a href="http://groups.google.com/group/timeoutx">http://groups.google.com/group/timeoutx</a></p>
120
-
121
-
122
- <h2>How to submit patches</h2>
123
-
124
- <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>
125
-
126
-
127
- <p>The trunk repository is <code>svn://rubyforge.org/var/svn/timeoutx/trunk</code> for anonymous access.</p>
128
-
129
-
130
- <h2>License</h2>
131
-
132
- <p>This code is free to use under the terms of the Ruby License.</p>
133
-
134
-
135
- <h2>Contact</h2>
136
-
137
- <p>Comments are welcome. Send an email to <a href="mailto:keita.yamaguchi@gmail.com">Keita Yamaguchi</a>.</p>
138
- <p class="coda">
139
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 6th December 2007<br>
140
- Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
141
- </p>
142
- </div>
143
-
144
- <!-- insert site tracking codes here, like Google Urchin -->
145
-
146
- </body>
147
- </html>
data/website/index.txt DELETED
@@ -1,100 +0,0 @@
1
- h1. TimeoutX
2
-
3
- h2. What
4
-
5
- TimeoutX provides lightweight timeout function. TimeoutX.timeout is about 10
6
- times faster than standard Timeout.timeout.
7
-
8
- h2. Why TimeouX is faster than standard timeout
9
-
10
- Because TimeoutX keeps one thread for timeout countdown loop. Timeout.timeout
11
- creates a new Thread object when timeout function is called, for example, 10,000
12
- threads are created if you call it 10,000 times. TimeoutX library is useful if
13
- you need to call timeout function many times in short period.
14
-
15
- h2. Installing
16
-
17
- <pre syntax="ruby">sudo gem install timeoutx</pre>
18
-
19
- h2. API Document
20
-
21
- http://timeoutx.rubyforge.org/rdoc/
22
-
23
- h2. Demonstration of usage
24
-
25
- <pre><code>
26
- require "timeoutx"
27
-
28
- TimeoutX.timeout(1){ ... }
29
-
30
- </code></pre>
31
-
32
- replace Timeout.timeout into TimeoutX.timeout:
33
-
34
- <pre><code>
35
- require "timeoutx"
36
- TimeoutX.replace_timeout
37
-
38
- Timeout.timeout(1){ ... }
39
-
40
- </code></pre>
41
-
42
-
43
- h2. Benchmark
44
-
45
- Sample benchmark results (2007/12/05) by examples/benchmark.rb :
46
-
47
- <pre syntax="ruby"><code>
48
- n = 100000
49
- Benchmark.bmbm(10) do |x|
50
- x.report("Timeout") { 1.upto(n) do ; Timeout.timeout(1){true}; end }
51
- x.report("TimeoutX") { 1.upto(n) do ; TimeoutX.timeout(1){true}; end }
52
- end
53
-
54
- </code></pre>
55
-
56
- h3. ruby 1.8.6
57
-
58
- <pre syntax="ruby"><code>
59
- Rehearsal ---------------------------------------------
60
- Timeout 5.960000 0.460000 6.420000 ( 6.521520)
61
- TimeoutX 0.780000 0.050000 0.830000 ( 0.851778)
62
- ------------------------------------ total: 7.250000sec
63
-
64
- user system total real
65
- Timeout 5.650000 0.790000 6.440000 ( 6.516992)
66
- TimeoutX 0.760000 0.080000 0.840000 ( 0.863438)
67
-
68
- </code></pre>
69
-
70
- h3. ruby 1.9.0
71
-
72
- <pre syntax="ruby"><code>
73
- Rehearsal ---------------------------------------------
74
- Timeout 12.140000 2.760000 14.900000 ( 15.333607)
75
- TimeoutX 0.490000 0.010000 0.500000 ( 0.518974)
76
- ----------------------------------- total: 15.400000sec
77
-
78
- user system total real
79
- Timeout 11.210000 2.390000 13.600000 ( 14.337455)
80
- TimeoutX 0.490000 0.010000 0.500000 ( 0.512449)
81
-
82
- </code></pre>
83
-
84
- h2. Forum
85
-
86
- "http://groups.google.com/group/timeoutx":http://groups.google.com/group/timeoutx
87
-
88
- h2. How to submit patches
89
-
90
- 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.
91
-
92
- The trunk repository is <code>svn://rubyforge.org/var/svn/timeoutx/trunk</code> for anonymous access.
93
-
94
- h2. License
95
-
96
- This code is free to use under the terms of the Ruby License.
97
-
98
- h2. Contact
99
-
100
- Comments are welcome. Send an email to "Keita Yamaguchi":mailto:keita.yamaguchi@gmail.com.
@@ -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="mailto:drnicwilliams@gmail.com">Dr Nic</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>