TwP-webby 0.9.4 → 0.9.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/History.txt +21 -3
  2. data/Rakefile +11 -5
  3. data/examples/blog/content/css/blueprint/ie.css +26 -0
  4. data/examples/blog/content/css/blueprint/plugins/buttons/icons/cross.png +0 -0
  5. data/examples/blog/content/css/blueprint/plugins/buttons/icons/key.png +0 -0
  6. data/examples/blog/content/css/blueprint/plugins/buttons/icons/tick.png +0 -0
  7. data/examples/blog/content/css/blueprint/plugins/buttons/readme.txt +32 -0
  8. data/examples/blog/content/css/blueprint/plugins/buttons/screen.css +97 -0
  9. data/examples/blog/content/css/blueprint/plugins/fancy-type/readme.txt +14 -0
  10. data/examples/blog/content/css/blueprint/plugins/fancy-type/screen.css +71 -0
  11. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/doc.png +0 -0
  12. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/email.png +0 -0
  13. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/external.png +0 -0
  14. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/feed.png +0 -0
  15. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/im.png +0 -0
  16. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  17. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/visited.png +0 -0
  18. data/examples/blog/content/css/blueprint/plugins/link-icons/icons/xls.png +0 -0
  19. data/examples/blog/content/css/blueprint/plugins/link-icons/readme.txt +18 -0
  20. data/examples/blog/content/css/blueprint/plugins/link-icons/screen.css +40 -0
  21. data/examples/blog/content/css/blueprint/plugins/rtl/readme.txt +10 -0
  22. data/examples/blog/content/css/blueprint/plugins/rtl/screen.css +109 -0
  23. data/examples/blog/content/css/blueprint/print.css +30 -0
  24. data/examples/blog/content/css/blueprint/screen.css +251 -0
  25. data/examples/blog/content/css/blueprint/src/forms.css +49 -0
  26. data/examples/blog/content/css/blueprint/src/grid.css +212 -0
  27. data/examples/blog/content/css/blueprint/src/grid.png +0 -0
  28. data/examples/blog/content/css/blueprint/src/ie.css +59 -0
  29. data/examples/blog/content/css/blueprint/src/print.css +85 -0
  30. data/examples/blog/content/css/blueprint/src/reset.css +38 -0
  31. data/examples/blog/content/css/blueprint/src/typography.css +105 -0
  32. data/examples/blog/content/css/coderay.css +111 -0
  33. data/examples/blog/content/css/site.css +67 -0
  34. data/examples/blog/layouts/default.txt +61 -0
  35. data/examples/blog/tasks/blog.rake +1 -2
  36. data/examples/presentation/Sitefile +2 -2
  37. data/examples/tumblog/tasks/tumblog.rake +1 -2
  38. data/examples/webby/Sitefile +2 -2
  39. data/examples/webby/content/release-notes/rel-0-9-4/index.txt +33 -0
  40. data/examples/webby/content/sitemap.txt +2 -2
  41. data/examples/webby/content/user-manual/index.txt +3 -3
  42. data/lib/webby.rb +24 -101
  43. data/lib/webby/apps/generator.rb +2 -2
  44. data/lib/webby/apps/main.rb +32 -61
  45. data/lib/webby/config.rb +178 -0
  46. data/lib/webby/filters.rb +2 -0
  47. data/lib/webby/filters/haml.rb +13 -0
  48. data/lib/webby/filters/sass.rb +14 -0
  49. data/lib/webby/filters/slides.rb +2 -2
  50. data/lib/webby/filters/tidy.rb +5 -0
  51. data/lib/webby/helpers/coderay_helper.rb +27 -3
  52. data/lib/webby/helpers/graphviz_helper.rb +20 -3
  53. data/lib/webby/helpers/tex_img_helper.rb +25 -5
  54. data/lib/webby/helpers/ultraviolet_helper.rb +19 -5
  55. data/lib/webby/renderer.rb +9 -6
  56. data/lib/webby/resources.rb +2 -1
  57. data/lib/webby/resources/page.rb +4 -1
  58. data/lib/webby/tasks/create.rake +1 -4
  59. data/spec/data/site/tasks/tumblog.rake +5 -1
  60. data/spec/spec_helper.rb +1 -1
  61. data/spec/webby/apps/generator_spec.rb +36 -3
  62. data/spec/webby/apps/main_spec.rb +2 -1
  63. data/spec/webby/filters/basepath_spec.rb +2 -2
  64. data/spec/webby/helpers/capture_helper_spec.rb +1 -1
  65. data/spec/webby/resources/db_spec.rb +24 -24
  66. data/spec/webby/resources/layout_spec.rb +1 -1
  67. data/spec/webby/resources/page_spec.rb +8 -2
  68. data/spec/webby/resources/resource_spec.rb +1 -1
  69. data/spec/webby/resources_spec.rb +1 -1
  70. metadata +60 -23
  71. data/Manifest.txt +0 -233
@@ -0,0 +1,178 @@
1
+ # These are the main configuration options for Webby. Options for specific
2
+ # filters and helpers are defined in those files. Even a few of the rake
3
+ # tasks in the "examples" folder have their own configuration options
4
+ # defined.
5
+ #
6
+ # The nice thing about Loquacious configurations is that all these options
7
+ # can be defined where they are used, but the descriptions can be viewed by
8
+ # the user in one handy page.
9
+
10
+ Loquacious.configuration_for(:webby) {
11
+
12
+ desc 'The generated website will be output to this directory.'
13
+ output_dir 'output'
14
+
15
+ desc <<-__
16
+ The directory containg the main site content - pages, partials, css
17
+ stylesheets, etc.
18
+ __
19
+ content_dir 'content'
20
+
21
+ desc 'The directory containing the layout files.'
22
+ layout_dir 'layouts'
23
+
24
+ desc <<-__
25
+ The directory where page templtes can be found. These templates are used
26
+ by the 'webby create' command to define the boiler-plate for new pages
27
+ (things like the meta-data or standard text).
28
+ __
29
+ template_dir 'templates'
30
+
31
+ desc <<-__
32
+ This is an array of regular expression patterns that will exclude files
33
+ from webby processing. The patterns will be joined using the regular
34
+ expression OR operator '|'.
35
+ __
36
+ exclude %w{tmp$ bak$ ~$ CVS \.svn}
37
+
38
+ desc <<-__
39
+ A set of default meta-data values that are added to every page rendered
40
+ by webby. Specific values in the page override the default values
41
+ defined here. For example, you could define a default set of filters
42
+ |
43
+ | SITE.page_defaults = {
44
+ | 'layout' => 'default',
45
+ | 'filter' => ['erb', 'textile']
46
+ | }
47
+ |
48
+ Now, every page will be run through the ERB filter and then the
49
+ Textile filter. Specific pages can override the set of filters or omit
50
+ them altogether as needed.
51
+ __
52
+ page_defaults({
53
+ 'layout' => 'default'
54
+ })
55
+
56
+ desc <<-__
57
+ Defines the default page attribute that will be used by the
58
+ 'link_to_page' method to find other pages in the site. If this value
59
+ is set to :title, then the title found in the page meta-data is
60
+ searched for a match. If this value is set to :filename, then the
61
+ filenames of pages are search for a match.
62
+
63
+ This value can be overridden on a case by case basis when the
64
+ 'link_to_page' method is called.
65
+ __
66
+ find_by :title
67
+
68
+ desc <<-__
69
+ Using the 'webby create' task, new pages can either be created as a
70
+ normal page or as an index page in it's own directory. The latter
71
+ option allows your pages to have "nice" URLs:
72
+ |
73
+ | foo/bar/my-new-post.html <-- 'page'
74
+ | foo/bar/my-new-post/ <-- 'directory'
75
+ |
76
+ The two options supported by the 'create_mode' are either 'page'
77
+ or 'directory'.
78
+ __
79
+ create_mode 'page'
80
+
81
+ desc <<-__
82
+ When the 'webby create' task is used to create a new page in your site,
83
+ webby will automatically open your favorite editor. Use this option to
84
+ define which editor webby will start. Set this option to nil if you do
85
+ not want webby to launch an editor when you create new pages.
86
+
87
+ The default is taken from the environment as either 'WEBBY_EDITOR' or
88
+ 'EDITOR', whichever is defined.
89
+ __
90
+ editor ENV['WEBBY_EDITOR'] || ENV['EDITOR']
91
+
92
+ desc <<-__
93
+ This flag determines whether or not the internal web server is launched
94
+ when the autobuild loop is running. The default is to launch the web
95
+ server. Set to false to disable.
96
+ __
97
+ use_web_server true
98
+
99
+ desc <<-__
100
+ Defines the port number the internal web server will use when the
101
+ autobuild loop is running.
102
+ __
103
+ web_port 4331
104
+
105
+ desc <<-__
106
+ The username that will be used when publishing a site to the remote host.
107
+ Login to the remote host will take the form 'user@host' where both 'user'
108
+ and 'host' are configuration options.
109
+
110
+ The default is taken from the environment as either 'USER' or
111
+ 'USERNAME', whichever is defined.
112
+ __
113
+ user ENV['USER'] || ENV['USERNAME']
114
+
115
+ desc <<-__
116
+ The hostname that will be used when publishing a site to the remote host.
117
+ Login to the remote host will take the form 'user@host' where both 'user'
118
+ and 'host' are configuration options.
119
+ __
120
+ host 'example.com'
121
+
122
+ desc <<-__
123
+ The destination directory on the remote host where the site will
124
+ be published.
125
+ __
126
+ remote_dir '/dev/null'
127
+
128
+ desc <<-__
129
+ Arguments that will be passed to the rysnc command when deploying the
130
+ site to the remote host. This array of arguments will be joined together
131
+ by spaces.
132
+ __
133
+ rsync_args %w(-av)
134
+
135
+ desc <<-__
136
+ The list of URIs that will automatically pass validation when the webby
137
+ validate task is run.
138
+ __
139
+ valid_uris []
140
+
141
+ desc <<-__
142
+ The base URL of the site. This value is used by the 'basepath' filter to
143
+ replace leading slashes in URIs with this base value. The URIs to replace
144
+ are identified by the 'xpaths' option.
145
+ __
146
+ base nil
147
+
148
+ desc <<-__
149
+ The basepath filter is used to replace leading slashes in URIs with the
150
+ text from the 'base' option. Only those URIs identified by the XPaths
151
+ defined here will be altered. You can add to or remove XPaths from this
152
+ list depending on your needs.
153
+ __
154
+ xpaths %w{
155
+ /html/head//base[@href]
156
+ /html/head//link[@href]
157
+ //script[@src]
158
+ /html/body[@background]
159
+ /html/body//a[@href]
160
+ /html/body//object[@data]
161
+ /html/body//img[@src]
162
+ /html/body//area[@href]
163
+ /html/body//form[@action]
164
+ /html/body//input[@src]
165
+ }
166
+ # other possible XPaths to include for base path substitution
167
+ # /html/body//object[@usemap]
168
+ # /html/body//img[@usemap]
169
+ # /html/body//input[@usemap]
170
+
171
+ desc "The default directory where new blog posts will be created."
172
+ blog_dir 'blog'
173
+
174
+ desc "The default directory where new tumblog posts will be created."
175
+ tumblog_dir 'blog'
176
+ }
177
+
178
+ # EOF
data/lib/webby/filters.rb CHANGED
@@ -70,6 +70,8 @@ module Filters
70
70
  result = handler.call(*args)
71
71
  @processed += 1
72
72
  result
73
+ rescue StandardError => err
74
+ raise ::Webby::Error, "#{filter} filter error: #{err.message.inspect}"
73
75
  end
74
76
 
75
77
  end # class Cursor
@@ -2,8 +2,21 @@
2
2
  # Render text via the Haml library
3
3
  if try_require('haml', 'haml')
4
4
 
5
+ Loquacious.configuration_for(:webby) {
6
+ desc <<-__
7
+ A hash of options that will be passed to the Haml::Engine when procesing
8
+ content through the 'haml' filter. See the Haml rdoc documentation for
9
+ the list of available options.
10
+
11
+ Note: webby will set the :filename to the current page being rendered.
12
+ __
13
+ haml_options Hash.new
14
+ }
15
+
5
16
  Webby::Filters.register :haml do |input, cursor|
6
17
  opts = ::Webby.site.haml_options.merge(cursor.page.haml_options || {})
18
+ opts = opts.symbolize_keys
19
+ opts.merge!(:filename => cursor.page.destination)
7
20
  b = cursor.renderer.get_binding
8
21
  Haml::Engine.new(input, opts).to_html(b)
9
22
  end
@@ -2,8 +2,22 @@
2
2
  # Render text via the Sass library (part of Haml)
3
3
  if try_require('sass', 'haml')
4
4
 
5
+ Loquacious.configuration_for(:webby) {
6
+ desc <<-__
7
+ A hash of options that will be passed to the Sass::Engine when procesing
8
+ content through the 'sass' filter. See the Sass rdoc documentation for
9
+ the list of available options (par of the haml gem).
10
+
11
+ Note: webby will set the :filename to the current page being rendered.
12
+ __
13
+ sass_options Hash.new
14
+ }
15
+
5
16
  Webby::Filters.register :sass do |input, cursor|
6
17
  opts = ::Webby.site.sass_options.merge(cursor.page.sass_options || {})
18
+ opts = opts.symbolize_keys
19
+ opts.merge!(:filename => cursor.page.destination)
20
+ opts[:style] = opts[:style].to_sym if opts.include? :style
7
21
  Sass::Engine.new(input, opts).render
8
22
  end
9
23
 
@@ -35,9 +35,9 @@ class Slides
35
35
  def filter
36
36
  result = []
37
37
 
38
- @str.split(%r/\<h1\>/i).each do |slide|
38
+ @str.split(%r/\<h1/i).each do |slide|
39
39
  next if slide.strip.empty?
40
- result << START_SLIDE << '<h1>' << slide << END_SLIDE
40
+ result << START_SLIDE << '<h1' << slide << END_SLIDE
41
41
  end
42
42
 
43
43
  result.join
@@ -1,6 +1,11 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
3
 
4
+ Loquacious.configuration_for(:webby) {
5
+ desc "Options passed to the 'tidy' program when the tidy filter is used"
6
+ tidy_options '-indent -wrap 80'
7
+ }
8
+
4
9
  module Webby
5
10
  module Filters
6
11
 
@@ -1,6 +1,30 @@
1
1
  if try_require 'coderay'
2
2
  require 'enumerator'
3
3
 
4
+ Loquacious.configuration_for(:webby) {
5
+ desc <<-__
6
+ Options for CodeRay syntax highlighting. See the CodeRay home page
7
+ (http://coderay.rubychan.de/) for more information about the available
8
+ options.
9
+ __
10
+ coderay {
11
+ desc 'The language being highlighted (given as a symbol).'
12
+ lang :ruby
13
+
14
+ desc 'Include line numbers in :table, :inline, :list or nil (no line numbers).'
15
+ line_numbers nil
16
+
17
+ desc 'Where to start line number counting.'
18
+ line_number_start 1
19
+
20
+ desc 'Make every N-th number appear bold.'
21
+ bold_every 10
22
+
23
+ desc 'Tabs will be converted into this number of space characters.'
24
+ tab_width 8
25
+ }
26
+ }
27
+
4
28
  module Webby::Helpers
5
29
  module CodeRayHelper
6
30
 
@@ -35,7 +59,7 @@ module CodeRayHelper
35
59
  return if text.empty?
36
60
 
37
61
  defaults = ::Webby.site.coderay
38
- lang = opts.getopt(:lang, defaults[:lang]).to_sym
62
+ lang = opts.getopt(:lang, defaults.lang).to_sym
39
63
 
40
64
  cr_opts = {}
41
65
  %w(line_numbers to_sym
@@ -49,9 +73,9 @@ module CodeRayHelper
49
73
  end
50
74
 
51
75
  #cr.swap(CodeRay.scan(text, lang).html(opts).div)
52
- out = '<div class="CodeRay"><pre>'
76
+ out = %Q{<div class="CodeRay">\n<pre>}
53
77
  out << ::CodeRay.scan(text, lang).html(cr_opts)
54
- out << '</pre></div>'
78
+ out << %Q{</pre>\n</div>}
55
79
 
56
80
  # put some guards around the output (specifically for textile)
57
81
  out = _guard(out)
@@ -1,6 +1,23 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
3
 
4
+ Loquacious.configuration_for(:webby) {
5
+ desc 'Options for graphviz processing.'
6
+ graphviz {
7
+ desc 'The path in the output folder where images are stored.'
8
+ path nil
9
+
10
+ desc <<-__
11
+ The graphviz command used to render the images.
12
+ (dot, neato, twopi, circo, fdp)
13
+ __
14
+ cmd 'dot'
15
+
16
+ desc 'The type of output image to generate (png, jpg, gif).'
17
+ type 'png'
18
+ }
19
+ }
20
+
4
21
  module Webby::Helpers
5
22
  module GraphvizHelper
6
23
 
@@ -71,9 +88,9 @@ module GraphvizHelper
71
88
  err.close
72
89
 
73
90
  defaults = ::Webby.site.graphviz
74
- path = opts.getopt(:path, defaults[:path])
75
- cmd = opts.getopt(:cmd, defaults[:cmd])
76
- type = opts.getopt(:type, defaults[:type])
91
+ path = opts.getopt(:path, defaults.path)
92
+ cmd = opts.getopt(:cmd, defaults.cmd)
93
+ type = opts.getopt(:type, defaults.type)
77
94
 
78
95
  # pull the name of the graph|digraph out of the DOT script
79
96
  name = text.match(%r/\A\s*(?:strict\s+)?(?:di)?graph\s+([A-Za-z_][A-Za-z0-9_]*)\s+\{/o)[1]
@@ -1,6 +1,26 @@
1
1
  require Webby.libpath(*%w[webby stelan mktemp])
2
2
  require 'fileutils'
3
3
 
4
+ Loquacious.configuration_for(:webby) {
5
+ desc "Options for processing TeX math formula into images."
6
+ tex2img {
7
+ desc 'Where generated images will be stored.'
8
+ path nil
9
+
10
+ desc 'The type of image to generate (png, jpeg, gif).'
11
+ type 'png'
12
+
13
+ desc 'The background color of the image (color name, TeX color spec, or #aabbcc)'
14
+ bg 'white'
15
+
16
+ desc 'The foreground color of the image (color name, TeX color spec, or #aabbcc)'
17
+ fg 'black'
18
+
19
+ desc 'The desired resolution in dpi (HxV)'
20
+ resolution '150x150'
21
+ }
22
+ }
23
+
4
24
  module Webby::Helpers
5
25
  module TexImgHelper
6
26
 
@@ -45,11 +65,11 @@ module TexImgHelper
45
65
  return if text.empty?
46
66
 
47
67
  defaults = ::Webby.site.tex2img
48
- path = opts.getopt(:path, defaults[:path])
49
- type = opts.getopt(:type, defaults[:type])
50
- bg = opts.getopt(:bg, defaults[:bg])
51
- fg = opts.getopt(:fg, defaults[:fg])
52
- res = opts.getopt(:resolution, defaults[:resolution])
68
+ path = opts.getopt(:path, defaults.path)
69
+ type = opts.getopt(:type, defaults.type)
70
+ bg = opts.getopt(:bg, defaults.bg)
71
+ fg = opts.getopt(:fg, defaults.fg)
72
+ res = opts.getopt(:resolution, defaults.resolution)
53
73
 
54
74
  # fix color escaping
55
75
  fg = fg =~ %r/^[a-zA-Z]+$/ ? fg : "\"#{fg}\""
@@ -3,6 +3,20 @@
3
3
 
4
4
  if try_require 'uv'
5
5
 
6
+ Loquacious.configuration_for(:webby) {
7
+ desc "Options for UltraViolet syntax highlighting."
8
+ uv {
9
+ desc 'The language to highlight (ruby, c, html, ...).'
10
+ lang 'ruby'
11
+
12
+ desc 'Display line numbers (true, false).'
13
+ line_numbers false
14
+
15
+ desc 'See the UltraViolet documentation for a list of available themes.'
16
+ theme 'mac_classic'
17
+ }
18
+ }
19
+
6
20
  module Webby::Helpers
7
21
  module UltraVioletHelper
8
22
 
@@ -39,13 +53,13 @@ module UltraVioletHelper
39
53
  return if text.empty?
40
54
 
41
55
  defaults = ::Webby.site.uv
42
- lang = opts.getopt(:lang, defaults[:lang])
43
- line_numbers = opts.getopt(:line_numbers, defaults[:line_numbers])
44
- theme = opts.getopt(:theme, defaults[:theme])
56
+ lang = opts.getopt(:lang, defaults.lang)
57
+ line_numbers = opts.getopt(:line_numbers, defaults.line_numbers)
58
+ theme = opts.getopt(:theme, defaults.theme)
45
59
 
46
- out = '<div class="UltraViolet">'
60
+ out = %Q{<div class="UltraViolet">\n}
47
61
  out << Uv.parse(text, "xhtml", lang, line_numbers, theme)
48
- out << '</div>'
62
+ out << %Q{\n</div>}
49
63
 
50
64
  # put some guards around the output (specifically for textile)
51
65
  out = _guard(out)
@@ -36,12 +36,15 @@ class Renderer
36
36
  renderer = self.new(page)
37
37
 
38
38
  loop {
39
- FileUtils.mkdir_p ::File.dirname(page.destination)
39
+ dest = page.destination
40
+ FileUtils.mkdir_p ::File.dirname(dest)
40
41
  journal.create_or_update(page)
41
42
 
42
- ::File.open(page.destination, 'w') do |fd|
43
- fd.write(renderer._layout_page)
43
+ text = renderer._layout_page
44
+ unless text.nil?
45
+ ::File.open(dest, 'w') {|fd| fd.write(text)}
44
46
  end
47
+
45
48
  break unless renderer._next_page
46
49
  }
47
50
  end
@@ -234,10 +237,10 @@ class Renderer
234
237
  rescue ::Webby::Error => err
235
238
  logger.error "while rendering page '#{@page.path}'"
236
239
  logger.error err.message
237
- rescue => err
240
+ return nil
241
+ rescue Exception => err
238
242
  logger.error "while rendering page '#{@page.path}'"
239
243
  logger.fatal err
240
- exit 1
241
244
  ensure
242
245
  @content = nil
243
246
  @@stack.clear
@@ -336,7 +339,7 @@ class Renderer
336
339
  # the partial. If a full path is given, then the partial is searched for
337
340
  # in that directory.
338
341
  #
339
- # Raies a Webby::Error if the partial could not be found.
342
+ # Raises a Webby::Error if the partial could not be found.
340
343
  #
341
344
  def _find_partial( part )
342
345
  case part