webby 0.8.2 → 0.8.3

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.
Files changed (123) hide show
  1. data/History.txt +20 -0
  2. data/Manifest.txt +46 -2
  3. data/Rakefile +4 -3
  4. data/bin/webby +1 -1
  5. data/data/Rakefile +0 -1
  6. data/data/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  7. data/data/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  8. data/data/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  9. data/data/content/s5/blank.gif +0 -0
  10. data/data/content/s5/bodybg.gif +0 -0
  11. data/data/content/s5/framing.css +23 -0
  12. data/data/content/s5/iepngfix.htc +42 -0
  13. data/data/content/s5/opera.css +7 -0
  14. data/data/content/s5/outline.css +15 -0
  15. data/data/content/s5/pretty.css +86 -0
  16. data/data/content/s5/print.css +1 -0
  17. data/data/content/s5/s5-core.css +9 -0
  18. data/data/content/s5/slides.css +3 -0
  19. data/data/content/s5/slides.js +553 -0
  20. data/data/lib/breadcrumbs.rb +0 -0
  21. data/data/tasks/blog.rake +71 -0
  22. data/data/tasks/build.rake +27 -0
  23. data/data/tasks/create.rake +19 -1
  24. data/data/tasks/deploy.rake +2 -2
  25. data/data/tasks/setup.rb +4 -1
  26. data/data/templates/atom_feed.erb +20 -13
  27. data/data/templates/page.erb +1 -1
  28. data/data/templates/presentation.erb +40 -0
  29. data/examples/presentation/Rakefile +14 -0
  30. data/examples/presentation/content/_sample_code.txt +10 -0
  31. data/examples/presentation/content/css/uv/twilight.css +137 -0
  32. data/examples/presentation/content/index.txt +63 -0
  33. data/examples/presentation/content/s5/blank.gif +0 -0
  34. data/examples/presentation/content/s5/bodybg.gif +0 -0
  35. data/examples/presentation/content/s5/framing.css +23 -0
  36. data/examples/presentation/content/s5/iepngfix.htc +42 -0
  37. data/examples/presentation/content/s5/opera.css +7 -0
  38. data/examples/presentation/content/s5/outline.css +15 -0
  39. data/examples/presentation/content/s5/pretty.css +86 -0
  40. data/examples/presentation/content/s5/print.css +1 -0
  41. data/examples/presentation/content/s5/s5-core.css +9 -0
  42. data/examples/presentation/content/s5/slides.css +3 -0
  43. data/examples/presentation/content/s5/slides.js +553 -0
  44. data/examples/presentation/layouts/presentation.rhtml +43 -0
  45. data/examples/presentation/tasks/blog.rake +71 -0
  46. data/examples/presentation/tasks/build.rake +27 -0
  47. data/examples/presentation/tasks/create.rake +22 -0
  48. data/examples/presentation/tasks/deploy.rake +22 -0
  49. data/examples/presentation/tasks/growl.rake +12 -0
  50. data/examples/presentation/tasks/heel.rake +28 -0
  51. data/examples/presentation/tasks/setup.rb +17 -0
  52. data/examples/presentation/tasks/validate.rake +19 -0
  53. data/examples/presentation/templates/_partial.erb +13 -0
  54. data/examples/presentation/templates/presentation.erb +40 -0
  55. data/examples/webby/Rakefile +3 -2
  56. data/examples/webby/content/css/blueprint/screen.css +1 -1
  57. data/examples/webby/content/css/coderay.css +0 -15
  58. data/examples/webby/content/css/site.css +18 -13
  59. data/examples/webby/content/css/uv/twilight.css +137 -0
  60. data/examples/webby/content/index.txt +6 -10
  61. data/examples/webby/content/manual/index.txt +83 -122
  62. data/examples/webby/content/reference/index.txt +161 -16
  63. data/examples/webby/content/script/jquery.js +1 -1
  64. data/examples/webby/content/tips_and_tricks/index.txt +1 -1
  65. data/examples/webby/content/tutorial/index.txt +1 -1
  66. data/examples/webby/layouts/default.rhtml +2 -7
  67. data/examples/webby/tasks/blog.rake +71 -0
  68. data/examples/webby/tasks/build.rake +27 -0
  69. data/examples/webby/tasks/create.rake +19 -1
  70. data/examples/webby/tasks/deploy.rake +2 -2
  71. data/examples/webby/tasks/setup.rb +4 -20
  72. data/examples/webby/templates/page.erb +1 -1
  73. data/lib/webby.rb +30 -5
  74. data/lib/webby/auto_builder.rb +0 -2
  75. data/lib/webby/builder.rb +51 -5
  76. data/lib/webby/filters.rb +3 -3
  77. data/lib/webby/filters/basepath.rb +7 -7
  78. data/lib/webby/filters/erb.rb +0 -2
  79. data/lib/webby/filters/haml.rb +0 -2
  80. data/lib/webby/filters/markdown.rb +0 -2
  81. data/lib/webby/filters/outline.rb +43 -2
  82. data/lib/webby/filters/sass.rb +0 -2
  83. data/lib/webby/filters/slides.rb +56 -0
  84. data/lib/webby/filters/textile.rb +0 -2
  85. data/lib/webby/filters/tidy.rb +0 -2
  86. data/lib/webby/helpers.rb +0 -2
  87. data/lib/webby/helpers/capture_helper.rb +141 -0
  88. data/lib/webby/helpers/coderay_helper.rb +5 -16
  89. data/lib/webby/helpers/graphviz_helper.rb +6 -18
  90. data/lib/webby/helpers/tag_helper.rb +0 -2
  91. data/lib/webby/helpers/tex_img_helper.rb +5 -16
  92. data/lib/webby/helpers/ultraviolet_helper.rb +11 -22
  93. data/lib/webby/helpers/url_helper.rb +2 -4
  94. data/lib/webby/link_validator.rb +0 -2
  95. data/lib/webby/main.rb +0 -2
  96. data/lib/webby/renderer.rb +163 -37
  97. data/lib/webby/resources.rb +0 -2
  98. data/lib/webby/resources/db.rb +37 -27
  99. data/lib/webby/resources/file.rb +0 -2
  100. data/lib/webby/resources/layout.rb +0 -2
  101. data/lib/webby/resources/page.rb +4 -9
  102. data/lib/webby/resources/partial.rb +1 -3
  103. data/lib/webby/resources/resource.rb +10 -2
  104. data/lib/webby/resources/static.rb +0 -2
  105. data/lib/webby/stelan/mktemp.rb +0 -2
  106. data/lib/webby/stelan/spawner.rb +0 -2
  107. data/lib/webby/utils.rb +0 -2
  108. data/spec/spec_helper.rb +1 -4
  109. data/spec/webby/helpers/capture_helper_spec.rb +56 -0
  110. data/spec/webby/resources/file_spec.rb +0 -1
  111. data/tasks/ann.rake +7 -4
  112. data/tasks/bones.rake +2 -2
  113. data/tasks/gem.rake +26 -14
  114. data/tasks/notes.rake +11 -5
  115. data/tasks/post_load.rake +4 -2
  116. data/tasks/rdoc.rake +4 -2
  117. data/tasks/rubyforge.rake +3 -3
  118. data/tasks/setup.rb +24 -9
  119. data/tasks/spec.rake +1 -1
  120. data/tasks/website.rake +1 -1
  121. metadata +51 -7
  122. data/lib/webby/webby_task.rb +0 -134
  123. data/tasks/svn.rake +0 -45
@@ -1,3 +1,23 @@
1
+ == 0.8.3 / 2008-06-02
2
+
3
+ * 2 major enhancements
4
+ - Added blogging support
5
+ - Added S5 slide presentation support
6
+ * 6 minor enhancements
7
+ - Changed the arguments to the DB#find method
8
+ - Added locals support for page templates
9
+ - Updated atom feed generation template
10
+ - Partials now support local variables when rendering
11
+ - Can guard rendering results from processing by subsequent filters
12
+ (useful when rendering partials or embedding other pages)
13
+ - Support for "content_for" style captures [M@ McCray]
14
+ * 5 bug fixes
15
+ - Fixed reference to an non-existent Error class
16
+ - Basepath filter now handles XML files properly
17
+ - Removed the "--delete" flag from the rsync options [Denis Defreyne]
18
+ - Fixed a nil cursor bug in the rendering filter stack
19
+ - Recursive find now works from the root content folder (bug 20281)
20
+
1
21
  == 0.8.2 / 2008-03-12
2
22
 
3
23
  * 2 bug fixes
@@ -29,8 +29,21 @@ data/content/css/blueprint/screen.css
29
29
  data/content/css/coderay.css
30
30
  data/content/css/site.css
31
31
  data/content/index.txt
32
+ data/content/s5/blank.gif
33
+ data/content/s5/bodybg.gif
34
+ data/content/s5/framing.css
35
+ data/content/s5/iepngfix.htc
36
+ data/content/s5/opera.css
37
+ data/content/s5/outline.css
38
+ data/content/s5/pretty.css
39
+ data/content/s5/print.css
40
+ data/content/s5/s5-core.css
41
+ data/content/s5/slides.css
42
+ data/content/s5/slides.js
32
43
  data/layouts/default.rhtml
33
44
  data/lib/breadcrumbs.rb
45
+ data/tasks/blog.rake
46
+ data/tasks/build.rake
34
47
  data/tasks/create.rake
35
48
  data/tasks/deploy.rake
36
49
  data/tasks/growl.rake
@@ -40,11 +53,39 @@ data/tasks/validate.rake
40
53
  data/templates/_partial.erb
41
54
  data/templates/atom_feed.erb
42
55
  data/templates/page.erb
56
+ data/templates/presentation.erb
57
+ examples/presentation/Rakefile
58
+ examples/presentation/content/_sample_code.txt
59
+ examples/presentation/content/css/uv/twilight.css
60
+ examples/presentation/content/index.txt
61
+ examples/presentation/content/s5/blank.gif
62
+ examples/presentation/content/s5/bodybg.gif
63
+ examples/presentation/content/s5/framing.css
64
+ examples/presentation/content/s5/iepngfix.htc
65
+ examples/presentation/content/s5/opera.css
66
+ examples/presentation/content/s5/outline.css
67
+ examples/presentation/content/s5/pretty.css
68
+ examples/presentation/content/s5/print.css
69
+ examples/presentation/content/s5/s5-core.css
70
+ examples/presentation/content/s5/slides.css
71
+ examples/presentation/content/s5/slides.js
72
+ examples/presentation/layouts/presentation.rhtml
73
+ examples/presentation/tasks/blog.rake
74
+ examples/presentation/tasks/build.rake
75
+ examples/presentation/tasks/create.rake
76
+ examples/presentation/tasks/deploy.rake
77
+ examples/presentation/tasks/growl.rake
78
+ examples/presentation/tasks/heel.rake
79
+ examples/presentation/tasks/setup.rb
80
+ examples/presentation/tasks/validate.rake
81
+ examples/presentation/templates/_partial.erb
82
+ examples/presentation/templates/presentation.erb
43
83
  examples/webby/Rakefile
44
84
  examples/webby/content/css/blueprint/print.css
45
85
  examples/webby/content/css/blueprint/screen.css
46
86
  examples/webby/content/css/coderay.css
47
87
  examples/webby/content/css/site.css
88
+ examples/webby/content/css/uv/twilight.css
48
89
  examples/webby/content/index.txt
49
90
  examples/webby/content/manual/index.txt
50
91
  examples/webby/content/reference/index.txt
@@ -54,6 +95,8 @@ examples/webby/content/script/jquery.js
54
95
  examples/webby/content/tips_and_tricks/index.txt
55
96
  examples/webby/content/tutorial/index.txt
56
97
  examples/webby/layouts/default.rhtml
98
+ examples/webby/tasks/blog.rake
99
+ examples/webby/tasks/build.rake
57
100
  examples/webby/tasks/create.rake
58
101
  examples/webby/tasks/deploy.rake
59
102
  examples/webby/tasks/growl.rake
@@ -71,9 +114,11 @@ lib/webby/filters/haml.rb
71
114
  lib/webby/filters/markdown.rb
72
115
  lib/webby/filters/outline.rb
73
116
  lib/webby/filters/sass.rb
117
+ lib/webby/filters/slides.rb
74
118
  lib/webby/filters/textile.rb
75
119
  lib/webby/filters/tidy.rb
76
120
  lib/webby/helpers.rb
121
+ lib/webby/helpers/capture_helper.rb
77
122
  lib/webby/helpers/coderay_helper.rb
78
123
  lib/webby/helpers/graphviz_helper.rb
79
124
  lib/webby/helpers/tag_helper.rb
@@ -95,9 +140,9 @@ lib/webby/stelan/mktemp.rb
95
140
  lib/webby/stelan/paginator.rb
96
141
  lib/webby/stelan/spawner.rb
97
142
  lib/webby/utils.rb
98
- lib/webby/webby_task.rb
99
143
  spec/spec.opts
100
144
  spec/spec_helper.rb
145
+ spec/webby/helpers/capture_helper_spec.rb
101
146
  spec/webby/resources/file_spec.rb
102
147
  tasks/ann.rake
103
148
  tasks/bones.rake
@@ -109,5 +154,4 @@ tasks/rdoc.rake
109
154
  tasks/rubyforge.rake
110
155
  tasks/setup.rb
111
156
  tasks/spec.rake
112
- tasks/svn.rake
113
157
  tasks/website.rake
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
- # $Id: Rakefile 202 2008-03-12 16:41:30Z tim_pease $
1
+ # $Id$
2
2
 
3
3
  load 'tasks/setup.rb'
4
4
 
5
5
  ensure_in_path 'lib'
6
6
  require 'webby'
7
7
 
8
- task :default => 'spec:run'
8
+ task :default => 'spec:specdoc'
9
9
 
10
10
  PROJ.name = 'webby'
11
11
  PROJ.summary = 'static website creation and management'
@@ -15,8 +15,9 @@ PROJ.url = 'http://webby.rubyforge.org/'
15
15
  PROJ.description = paragraphs_of('README.txt', 3).join("\n\n")
16
16
  PROJ.rubyforge.name = 'webby'
17
17
  PROJ.version = Webby::VERSION
18
- PROJ.release_name = 'Little Bugger'
18
+ PROJ.release_name = 'Teetering Toddler'
19
19
 
20
+ PROJ.ruby_opts = %w[-W0]
20
21
  PROJ.exclude << %w(^examples/[^/]+/output ^tasks/archive ^tags$)
21
22
 
22
23
  PROJ.rdoc.dir = 'doc/rdoc'
data/bin/webby CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require File.expand_path(
4
- File.join(File.dirname(__FILE__), '..', 'lib', 'webby'))
4
+ File.join(File.dirname(__FILE__), %w[.. lib webby]))
5
5
  ::Webby::Main.run ARGV
6
6
 
7
7
  # EOF
@@ -1,4 +1,3 @@
1
- # $Id$
2
1
 
3
2
  load 'tasks/setup.rb'
4
3
 
Binary file
@@ -0,0 +1,23 @@
1
+ /* The following styles size, place, and layer the slide components.
2
+ Edit these if you want to change the overall slide layout.
3
+ The commented lines can be uncommented (and modified, if necessary)
4
+ to help you with the rearrangement process. */
5
+
6
+ /* target = 1024x768 */
7
+
8
+ div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
9
+ div#header {top: 0; height: 3em; z-index: 1;}
10
+ div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
11
+ .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
12
+ div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
13
+ div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
14
+ margin: 0;}
15
+ #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
16
+ html>body #currentSlide {position: fixed;}
17
+
18
+ /*
19
+ div#header {background: #FCC;}
20
+ div#footer {background: #CCF;}
21
+ div#controls {background: #BBD;}
22
+ div#currentSlide {background: #FFC;}
23
+ */
@@ -0,0 +1,42 @@
1
+ <public:component>
2
+ <public:attach event="onpropertychange" onevent="doFix()" />
3
+
4
+ <script>
5
+
6
+ // IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
7
+ // Free usage permitted as long as this notice remains intact.
8
+
9
+ // This must be a path to a blank image. That's all the configuration you need here.
10
+ var blankImg = 'ui/default/blank.gif';
11
+
12
+ var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
13
+
14
+ function filt(s, m) {
15
+ if (filters[f]) {
16
+ filters[f].enabled = s ? true : false;
17
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
18
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
19
+ }
20
+
21
+ function doFix() {
22
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
23
+ (event && !/(background|src)/.test(event.propertyName))) return;
24
+
25
+ if (tagName == 'IMG') {
26
+ if ((/\.png$/i).test(src)) {
27
+ filt(src, 'image'); // was 'scale'
28
+ src = blankImg;
29
+ } else if (src.indexOf(blankImg) < 0) filt();
30
+ } else if (style.backgroundImage) {
31
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
32
+ var s = RegExp.$1;
33
+ style.backgroundImage = '';
34
+ filt(s, 'crop');
35
+ } else filt();
36
+ }
37
+ }
38
+
39
+ doFix();
40
+
41
+ </script>
42
+ </public:component>
@@ -0,0 +1,7 @@
1
+ /* DO NOT CHANGE THESE unless you really want to break Opera Show */
2
+ .slide {
3
+ visibility: visible !important;
4
+ position: static !important;
5
+ page-break-before: always;
6
+ }
7
+ #slide0 {page-break-before: avoid;}
@@ -0,0 +1,15 @@
1
+ /* don't change this unless you want the layout stuff to show up in the outline view! */
2
+
3
+ .layout div, #footer *, #controlForm * {display: none;}
4
+ #footer, #controls, #controlForm, #navLinks, #toggle {
5
+ display: block; visibility: visible; margin: 0; padding: 0;}
6
+ #toggle {float: right; padding: 0.5em;}
7
+ html>body #toggle {position: fixed; top: 0; right: 0;}
8
+
9
+ /* making the outline look pretty-ish */
10
+
11
+ #slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
12
+ #slide0 h1 {padding-top: 1.5em;}
13
+ .slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
14
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
15
+ #toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
@@ -0,0 +1,86 @@
1
+ /* Following are the presentation styles -- edit away! */
2
+
3
+ body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
4
+ :link, :visited {text-decoration: none; color: #00C;}
5
+ #controls :active {color: #88A !important;}
6
+ #controls :focus {outline: 1px dotted #227;}
7
+ h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
8
+ ul, pre {margin: 0; line-height: 1em;}
9
+ html, body {margin: 0; padding: 0;}
10
+
11
+ blockquote, q {font-style: italic;}
12
+ blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
13
+ blockquote p {margin: 0;}
14
+ blockquote i {font-style: normal;}
15
+ blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
16
+ blockquote b i {font-style: italic;}
17
+
18
+ kbd {font-weight: bold; font-size: 1em;}
19
+ sup {font-size: smaller; line-height: 1px;}
20
+
21
+ .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
22
+ .slide code.bad, code del {color: red;}
23
+ .slide code.old {color: silver;}
24
+ .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
25
+ .slide pre code {display: block;}
26
+ .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
27
+ .slide li {margin-top: 0.75em; margin-right: 0;}
28
+ .slide ul ul {line-height: 1;}
29
+ .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
30
+ .slide img.leader {display: block; margin: 0 auto;}
31
+
32
+ div#header, div#footer {background: #005; color: #AAB;
33
+ font-family: Verdana, Helvetica, sans-serif;}
34
+ div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
35
+ line-height: 1px;}
36
+ div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
37
+ #footer h1, #footer h2 {display: block; padding: 0 1em;}
38
+ #footer h2 {font-style: italic;}
39
+
40
+ div.long {font-size: 0.75em;}
41
+ .slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
42
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
43
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
44
+ color: #DDE; background: #005;}
45
+ .slide h3 {font-size: 130%;}
46
+ h1 abbr {font-variant: small-caps;}
47
+
48
+ div#controls {position: absolute; left: 50%; bottom: 0;
49
+ width: 50%;
50
+ text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
51
+ html>body div#controls {position: fixed; padding: 0 0 1em 0;
52
+ top: auto;}
53
+ div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
54
+ margin: 0; padding: 0;}
55
+ #controls #navLinks a {padding: 0; margin: 0 0.5em;
56
+ background: #005; border: none; color: #779;
57
+ cursor: pointer;}
58
+ #controls #navList {height: 1em;}
59
+ #controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
60
+
61
+ #currentSlide {text-align: center; font-size: 0.5em; color: #449;}
62
+
63
+ #slide0 {padding-top: 3.5em; font-size: 90%;}
64
+ #slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
65
+ font: bold 2em Helvetica, sans-serif; white-space: normal;
66
+ color: #000; background: transparent;}
67
+ #slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}
68
+ #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
69
+ #slide0 h4 {margin-top: 0; font-size: 1em;}
70
+
71
+ ul.urls {list-style: none; display: inline; margin: 0;}
72
+ .urls li {display: inline; margin: 0;}
73
+ .note {display: none;}
74
+ .external {border-bottom: 1px dotted gray;}
75
+ html>body .external {border-bottom: none;}
76
+ .external:after {content: " \274F"; font-size: smaller; color: #77B;}
77
+
78
+ .incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
79
+ img.incremental {visibility: hidden;}
80
+ .slide .current {color: #B02;}
81
+
82
+
83
+ /* diagnostics
84
+
85
+ li:after {content: " [" attr(class) "]"; color: #F88;}
86
+ */
@@ -0,0 +1 @@
1
+ /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
@@ -0,0 +1,9 @@
1
+ /* Do not edit or override these styles! The system will likely break if you do. */
2
+
3
+ div#header, div#footer, div#controls, .slide {position: absolute;}
4
+ html>body div#header, html>body div#footer,
5
+ html>body div#controls, html>body .slide {position: fixed;}
6
+ .handout {display: none;}
7
+ .layout {display: block;}
8
+ .slide, .hideme, .incremental {visibility: hidden;}
9
+ #slide0 {visibility: visible;}
@@ -0,0 +1,3 @@
1
+ @import url(s5-core.css); /* required to make the slide show run at all */
2
+ @import url(framing.css); /* sets basic placement and size of slide components */
3
+ @import url(pretty.css); /* stuff that makes the slides look better than blah */
@@ -0,0 +1,553 @@
1
+ // S5 v1.1 slides.js -- released into the Public Domain
2
+ //
3
+ // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
4
+ // about all the wonderful and talented contributors to this code!
5
+
6
+ var undef;
7
+ var slideCSS = '';
8
+ var snum = 0;
9
+ var smax = 1;
10
+ var incpos = 0;
11
+ var number = undef;
12
+ var s5mode = true;
13
+ var defaultView = 'slideshow';
14
+ var controlVis = 'visible';
15
+
16
+ var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
17
+ var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
18
+ var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
19
+
20
+ function hasClass(object, className) {
21
+ if (!object.className) return false;
22
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
23
+ }
24
+
25
+ function hasValue(object, value) {
26
+ if (!object) return false;
27
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
28
+ }
29
+
30
+ function removeClass(object,className) {
31
+ if (!object) return;
32
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
33
+ }
34
+
35
+ function addClass(object,className) {
36
+ if (!object || hasClass(object, className)) return;
37
+ if (object.className) {
38
+ object.className += ' '+className;
39
+ } else {
40
+ object.className = className;
41
+ }
42
+ }
43
+
44
+ function GetElementsWithClassName(elementName,className) {
45
+ var allElements = document.getElementsByTagName(elementName);
46
+ var elemColl = new Array();
47
+ for (var i = 0; i< allElements.length; i++) {
48
+ if (hasClass(allElements[i], className)) {
49
+ elemColl[elemColl.length] = allElements[i];
50
+ }
51
+ }
52
+ return elemColl;
53
+ }
54
+
55
+ function isParentOrSelf(element, id) {
56
+ if (element == null || element.nodeName=='BODY') return false;
57
+ else if (element.id == id) return true;
58
+ else return isParentOrSelf(element.parentNode, id);
59
+ }
60
+
61
+ function nodeValue(node) {
62
+ var result = "";
63
+ if (node.nodeType == 1) {
64
+ var children = node.childNodes;
65
+ for (var i = 0; i < children.length; ++i) {
66
+ result += nodeValue(children[i]);
67
+ }
68
+ }
69
+ else if (node.nodeType == 3) {
70
+ result = node.nodeValue;
71
+ }
72
+ return(result);
73
+ }
74
+
75
+ function slideLabel() {
76
+ var slideColl = GetElementsWithClassName('*','slide');
77
+ var list = document.getElementById('jumplist');
78
+ smax = slideColl.length;
79
+ for (var n = 0; n < smax; n++) {
80
+ var obj = slideColl[n];
81
+
82
+ var did = 'slide' + n.toString();
83
+ obj.setAttribute('id',did);
84
+ if (isOp) continue;
85
+
86
+ var otext = '';
87
+ var menu = obj.firstChild;
88
+ if (!menu) continue; // to cope with empty slides
89
+ while (menu && menu.nodeType == 3) {
90
+ menu = menu.nextSibling;
91
+ }
92
+ if (!menu) continue; // to cope with slides with only text nodes
93
+
94
+ var menunodes = menu.childNodes;
95
+ for (var o = 0; o < menunodes.length; o++) {
96
+ otext += nodeValue(menunodes[o]);
97
+ }
98
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
99
+ }
100
+ }
101
+
102
+ function currentSlide() {
103
+ var cs;
104
+ if (document.getElementById) {
105
+ cs = document.getElementById('currentSlide');
106
+ } else {
107
+ cs = document.currentSlide;
108
+ }
109
+ cs.innerHTML = '<span id="csHere">' + snum + '<\/span> ' +
110
+ '<span id="csSep">\/<\/span> ' +
111
+ '<span id="csTotal">' + (smax-1) + '<\/span>';
112
+ if (snum == 0) {
113
+ cs.style.visibility = 'hidden';
114
+ } else {
115
+ cs.style.visibility = 'visible';
116
+ }
117
+ }
118
+
119
+ function go(step) {
120
+ if (document.getElementById('slideProj').disabled || step == 0) return;
121
+ var jl = document.getElementById('jumplist');
122
+ var cid = 'slide' + snum;
123
+ var ce = document.getElementById(cid);
124
+ if (incrementals[snum].length > 0) {
125
+ for (var i = 0; i < incrementals[snum].length; i++) {
126
+ removeClass(incrementals[snum][i], 'current');
127
+ removeClass(incrementals[snum][i], 'incremental');
128
+ }
129
+ }
130
+ if (step != 'j') {
131
+ snum += step;
132
+ lmax = smax - 1;
133
+ if (snum > lmax) snum = lmax;
134
+ if (snum < 0) snum = 0;
135
+ } else
136
+ snum = parseInt(jl.value);
137
+ var nid = 'slide' + snum;
138
+ var ne = document.getElementById(nid);
139
+ if (!ne) {
140
+ ne = document.getElementById('slide0');
141
+ snum = 0;
142
+ }
143
+ if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;}
144
+ if (incrementals[snum].length > 0 && incpos == 0) {
145
+ for (var i = 0; i < incrementals[snum].length; i++) {
146
+ if (hasClass(incrementals[snum][i], 'current'))
147
+ incpos = i + 1;
148
+ else
149
+ addClass(incrementals[snum][i], 'incremental');
150
+ }
151
+ }
152
+ if (incrementals[snum].length > 0 && incpos > 0)
153
+ addClass(incrementals[snum][incpos - 1], 'current');
154
+ ce.style.visibility = 'hidden';
155
+ ne.style.visibility = 'visible';
156
+ jl.selectedIndex = snum;
157
+ currentSlide();
158
+ number = 0;
159
+ }
160
+
161
+ function goTo(target) {
162
+ if (target >= smax || target == snum) return;
163
+ go(target - snum);
164
+ }
165
+
166
+ function subgo(step) {
167
+ if (step > 0) {
168
+ removeClass(incrementals[snum][incpos - 1],'current');
169
+ removeClass(incrementals[snum][incpos], 'incremental');
170
+ addClass(incrementals[snum][incpos],'current');
171
+ incpos++;
172
+ } else {
173
+ incpos--;
174
+ removeClass(incrementals[snum][incpos],'current');
175
+ addClass(incrementals[snum][incpos], 'incremental');
176
+ addClass(incrementals[snum][incpos - 1],'current');
177
+ }
178
+ }
179
+
180
+ function toggle() {
181
+ var slideColl = GetElementsWithClassName('*','slide');
182
+ var slides = document.getElementById('slideProj');
183
+ var outline = document.getElementById('outlineStyle');
184
+ if (!slides.disabled) {
185
+ slides.disabled = true;
186
+ outline.disabled = false;
187
+ s5mode = false;
188
+ fontSize('1em');
189
+ for (var n = 0; n < smax; n++) {
190
+ var slide = slideColl[n];
191
+ slide.style.visibility = 'visible';
192
+ }
193
+ } else {
194
+ slides.disabled = false;
195
+ outline.disabled = true;
196
+ s5mode = true;
197
+ fontScale();
198
+ for (var n = 0; n < smax; n++) {
199
+ var slide = slideColl[n];
200
+ slide.style.visibility = 'hidden';
201
+ }
202
+ slideColl[snum].style.visibility = 'visible';
203
+ }
204
+ }
205
+
206
+ function showHide(action) {
207
+ var obj = GetElementsWithClassName('*','hideme')[0];
208
+ switch (action) {
209
+ case 's': obj.style.visibility = 'visible'; break;
210
+ case 'h': obj.style.visibility = 'hidden'; break;
211
+ case 'k':
212
+ if (obj.style.visibility != 'visible') {
213
+ obj.style.visibility = 'visible';
214
+ } else {
215
+ obj.style.visibility = 'hidden';
216
+ }
217
+ break;
218
+ }
219
+ }
220
+
221
+ // 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/)
222
+ function keys(key) {
223
+ if (!key) {
224
+ key = event;
225
+ key.which = key.keyCode;
226
+ }
227
+ if (key.which == 84) {
228
+ toggle();
229
+ return;
230
+ }
231
+ if (s5mode) {
232
+ switch (key.which) {
233
+ case 10: // return
234
+ case 13: // enter
235
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
236
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
237
+ if(number != undef) {
238
+ goTo(number);
239
+ break;
240
+ }
241
+ case 32: // spacebar
242
+ case 34: // page down
243
+ case 39: // rightkey
244
+ case 40: // downkey
245
+ if(number != undef) {
246
+ go(number);
247
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
248
+ go(1);
249
+ } else {
250
+ subgo(1);
251
+ }
252
+ break;
253
+ case 33: // page up
254
+ case 37: // leftkey
255
+ case 38: // upkey
256
+ if(number != undef) {
257
+ go(-1 * number);
258
+ } else if (!incrementals[snum] || incpos <= 0) {
259
+ go(-1);
260
+ } else {
261
+ subgo(-1);
262
+ }
263
+ break;
264
+ case 36: // home
265
+ goTo(0);
266
+ break;
267
+ case 35: // end
268
+ goTo(smax-1);
269
+ break;
270
+ case 67: // c
271
+ showHide('k');
272
+ break;
273
+ }
274
+ if (key.which < 48 || key.which > 57) {
275
+ number = undef;
276
+ } else {
277
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
278
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
279
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
280
+ }
281
+ }
282
+ return false;
283
+ }
284
+
285
+ function clicker(e) {
286
+ number = undef;
287
+ var target;
288
+ if (window.event) {
289
+ target = window.event.srcElement;
290
+ e = window.event;
291
+ } else target = e.target;
292
+ if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
293
+ if (!e.which || e.which == 1) {
294
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
295
+ go(1);
296
+ } else {
297
+ subgo(1);
298
+ }
299
+ }
300
+ }
301
+
302
+ function findSlide(hash) {
303
+ var target = null;
304
+ var slides = GetElementsWithClassName('*','slide');
305
+ for (var i = 0; i < slides.length; i++) {
306
+ var targetSlide = slides[i];
307
+ if ( (targetSlide.name && targetSlide.name == hash)
308
+ || (targetSlide.id && targetSlide.id == hash) ) {
309
+ target = targetSlide;
310
+ break;
311
+ }
312
+ }
313
+ while(target != null && target.nodeName != 'BODY') {
314
+ if (hasClass(target, 'slide')) {
315
+ return parseInt(target.id.slice(5));
316
+ }
317
+ target = target.parentNode;
318
+ }
319
+ return null;
320
+ }
321
+
322
+ function slideJump() {
323
+ if (window.location.hash == null) return;
324
+ var sregex = /^#slide(\d+)$/;
325
+ var matches = sregex.exec(window.location.hash);
326
+ var dest = null;
327
+ if (matches != null) {
328
+ dest = parseInt(matches[1]);
329
+ } else {
330
+ dest = findSlide(window.location.hash.slice(1));
331
+ }
332
+ if (dest != null)
333
+ go(dest - snum);
334
+ }
335
+
336
+ function fixLinks() {
337
+ var thisUri = window.location.href;
338
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
339
+ var aelements = document.getElementsByTagName('A');
340
+ for (var i = 0; i < aelements.length; i++) {
341
+ var a = aelements[i].href;
342
+ var slideID = a.match('\#slide[0-9]{1,2}');
343
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
344
+ var dest = findSlide(slideID[0].slice(1));
345
+ if (dest != null) {
346
+ if (aelements[i].addEventListener) {
347
+ aelements[i].addEventListener("click", new Function("e",
348
+ "if (document.getElementById('slideProj').disabled) return;" +
349
+ "go("+dest+" - snum); " +
350
+ "if (e.preventDefault) e.preventDefault();"), true);
351
+ } else if (aelements[i].attachEvent) {
352
+ aelements[i].attachEvent("onclick", new Function("",
353
+ "if (document.getElementById('slideProj').disabled) return;" +
354
+ "go("+dest+" - snum); " +
355
+ "event.returnValue = false;"));
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+
362
+ function externalLinks() {
363
+ if (!document.getElementsByTagName) return;
364
+ var anchors = document.getElementsByTagName('a');
365
+ for (var i=0; i<anchors.length; i++) {
366
+ var anchor = anchors[i];
367
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
368
+ anchor.target = '_blank';
369
+ addClass(anchor,'external');
370
+ }
371
+ }
372
+ }
373
+
374
+ function createControls() {
375
+ var controlsDiv = document.getElementById("controls");
376
+ if (!controlsDiv) return;
377
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
378
+ var hideDiv, hideList = '';
379
+ if (controlVis == 'hidden') {
380
+ hideDiv = hider;
381
+ } else {
382
+ hideList = hider;
383
+ }
384
+ controlsDiv.innerHTML = '<form action="#" id="controlForm"' + hideDiv + '>' +
385
+ '<div id="navLinks">' +
386
+ '<a accesskey="t" id="toggle" href="javascript:toggle();">&#216;<\/a>' +
387
+ '<a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;<\/a>' +
388
+ '<a accesskey="x" id="next" href="javascript:go(1);">&raquo;<\/a>' +
389
+ '<div id="navList"' + hideList + '><select id="jumplist" onchange="go(\'j\');"><\/select><\/div>' +
390
+ '<\/div><\/form>';
391
+ if (controlVis == 'hidden') {
392
+ var hidden = document.getElementById('navLinks');
393
+ } else {
394
+ var hidden = document.getElementById('jumplist');
395
+ }
396
+ addClass(hidden,'hideme');
397
+ }
398
+
399
+ function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
400
+ if (!s5mode) return false;
401
+ var vScale = 22; // both yield 32 (after rounding) at 1024x768
402
+ var hScale = 32; // perhaps should auto-calculate based on theme's declared value?
403
+ if (window.innerHeight) {
404
+ var vSize = window.innerHeight;
405
+ var hSize = window.innerWidth;
406
+ } else if (document.documentElement.clientHeight) {
407
+ var vSize = document.documentElement.clientHeight;
408
+ var hSize = document.documentElement.clientWidth;
409
+ } else if (document.body.clientHeight) {
410
+ var vSize = document.body.clientHeight;
411
+ var hSize = document.body.clientWidth;
412
+ } else {
413
+ var vSize = 700; // assuming 1024x768, minus chrome and such
414
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
415
+ }
416
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
417
+ fontSize(newSize + 'px');
418
+ if (isGe) { // hack to counter incremental reflow bugs
419
+ var obj = document.getElementsByTagName('body')[0];
420
+ obj.style.display = 'none';
421
+ obj.style.display = 'block';
422
+ }
423
+ }
424
+
425
+ function fontSize(value) {
426
+ if (!(s5ss = document.getElementById('s5ss'))) {
427
+ if (!isIE) {
428
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
429
+ s5ss.setAttribute('media','screen, projection');
430
+ s5ss.setAttribute('id','s5ss');
431
+ } else {
432
+ document.createStyleSheet();
433
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
434
+ }
435
+ }
436
+ if (!isIE) {
437
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
438
+ s5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));
439
+ } else {
440
+ document.s5ss.addRule('body','font-size: ' + value + ' !important;');
441
+ }
442
+ }
443
+
444
+ function notOperaFix() {
445
+ slideCSS = document.getElementById('slideProj').href;
446
+ var slides = document.getElementById('slideProj');
447
+ var outline = document.getElementById('outlineStyle');
448
+ slides.setAttribute('media','screen');
449
+ outline.disabled = true;
450
+ if (isGe) {
451
+ slides.setAttribute('href','null'); // Gecko fix
452
+ slides.setAttribute('href',slideCSS); // Gecko fix
453
+ }
454
+ if (isIE && document.styleSheets && document.styleSheets[0]) {
455
+ document.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)');
456
+ document.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)');
457
+ document.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)');
458
+ }
459
+ }
460
+
461
+ function getIncrementals(obj) {
462
+ var incrementals = new Array();
463
+ if (!obj)
464
+ return incrementals;
465
+ var children = obj.childNodes;
466
+ for (var i = 0; i < children.length; i++) {
467
+ var child = children[i];
468
+ if (hasClass(child, 'incremental')) {
469
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
470
+ removeClass(child, 'incremental');
471
+ for (var j = 0; j < child.childNodes.length; j++) {
472
+ if (child.childNodes[j].nodeType == 1) {
473
+ addClass(child.childNodes[j], 'incremental');
474
+ }
475
+ }
476
+ } else {
477
+ incrementals[incrementals.length] = child;
478
+ removeClass(child,'incremental');
479
+ }
480
+ }
481
+ if (hasClass(child, 'show-first')) {
482
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
483
+ removeClass(child, 'show-first');
484
+ if (child.childNodes[isGe].nodeType == 1) {
485
+ removeClass(child.childNodes[isGe], 'incremental');
486
+ }
487
+ } else {
488
+ incrementals[incrementals.length] = child;
489
+ }
490
+ }
491
+ incrementals = incrementals.concat(getIncrementals(child));
492
+ }
493
+ return incrementals;
494
+ }
495
+
496
+ function createIncrementals() {
497
+ var incrementals = new Array();
498
+ for (var i = 0; i < smax; i++) {
499
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
500
+ }
501
+ return incrementals;
502
+ }
503
+
504
+ function defaultCheck() {
505
+ var allMetas = document.getElementsByTagName('meta');
506
+ for (var i = 0; i< allMetas.length; i++) {
507
+ if (allMetas[i].name == 'defaultView') {
508
+ defaultView = allMetas[i].content;
509
+ }
510
+ if (allMetas[i].name == 'controlVis') {
511
+ controlVis = allMetas[i].content;
512
+ }
513
+ }
514
+ }
515
+
516
+ // Key trap fix, new function body for trap()
517
+ function trap(e) {
518
+ if (!e) {
519
+ e = event;
520
+ e.which = e.keyCode;
521
+ }
522
+ try {
523
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
524
+ }
525
+ catch(e) {
526
+ modifierKey = false;
527
+ }
528
+ return modifierKey || e.which == 0;
529
+ }
530
+
531
+ function startup() {
532
+ defaultCheck();
533
+ if (!isOp)
534
+ createControls();
535
+ slideLabel();
536
+ fixLinks();
537
+ externalLinks();
538
+ fontScale();
539
+ if (!isOp) {
540
+ notOperaFix();
541
+ incrementals = createIncrementals();
542
+ slideJump();
543
+ if (defaultView == 'outline') {
544
+ toggle();
545
+ }
546
+ document.onkeyup = keys;
547
+ document.onkeypress = trap;
548
+ document.onclick = clicker;
549
+ }
550
+ }
551
+
552
+ window.onload = startup;
553
+ window.onresize = function(){setTimeout('fontScale()', 50);}