webgen 0.3.3 → 0.3.4

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 (44) hide show
  1. data/ChangeLog +154 -0
  2. data/Rakefile +1 -1
  3. data/TODO +7 -4
  4. data/VERSION +1 -1
  5. data/doc/plugin/extension.rb +9 -1
  6. data/doc/src/about.page +2 -2
  7. data/doc/src/default.css +2 -2
  8. data/doc/src/default.template +4 -2
  9. data/doc/src/documentation/cli.page +1 -1
  10. data/doc/src/documentation/gettingstarted.page +4 -4
  11. data/doc/src/documentation/index.page +5 -5
  12. data/doc/src/documentation/meta_info_reference.page +21 -0
  13. data/doc/src/documentation/plugins/filehandler/directory.page +12 -0
  14. data/doc/src/documentation/plugins/filehandler/index.page +21 -5
  15. data/doc/src/documentation/plugins/filehandler/pagehandler.page +31 -3
  16. data/doc/src/documentation/plugins/index.page +2 -2
  17. data/doc/src/documentation/plugins/tags/index.page +7 -2
  18. data/doc/src/documentation/plugins/tags/multilang.fr.page +1 -1
  19. data/doc/src/download.page +1 -1
  20. data/doc/src/features.page +3 -2
  21. data/doc/src/generated_by_webgen.png +0 -0
  22. data/doc/src/index.page +18 -5
  23. data/doc/src/meta.info +8 -5
  24. data/install.rb +1 -1
  25. data/lib/{util → webgen}/composite.rb +1 -1
  26. data/lib/webgen/configuration.rb +2 -2
  27. data/lib/{util → webgen}/listener.rb +1 -1
  28. data/lib/webgen/node.rb +10 -10
  29. data/lib/webgen/plugin.rb +19 -12
  30. data/lib/webgen/plugins/filehandler/backing.rb +7 -4
  31. data/lib/webgen/plugins/filehandler/directory.rb +10 -9
  32. data/lib/webgen/plugins/filehandler/filecopy.rb +5 -6
  33. data/lib/webgen/plugins/filehandler/filehandler.rb +104 -89
  34. data/lib/webgen/plugins/filehandler/page.rb +45 -16
  35. data/lib/webgen/plugins/filehandler/picturegallery.rb +4 -3
  36. data/lib/webgen/plugins/filehandler/template.rb +4 -2
  37. data/lib/webgen/plugins/tags/langbar.rb +2 -2
  38. data/lib/webgen/plugins/tags/menu.rb +48 -35
  39. data/lib/webgen/plugins/tags/relocatable.rb +18 -6
  40. data/lib/webgen/plugins/tags/sitemap.rb +10 -9
  41. data/lib/webgen/plugins/tags/wikilink.rb +3 -1
  42. data/testsite/src/projects/00.index.de.page +1 -1
  43. data/testsite/src/projects/subproj/index.page +1 -1
  44. metadata +7 -5
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: picturegallery.rb 249 2005-04-13 19:23:51Z thomas $
4
+ # $Id: picturegallery.rb 274 2005-05-11 12:52:27Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -33,7 +33,7 @@ module FileHandlers
33
33
  add_param "picturesPerPage", 20, 'Number of picture per gallery page'
34
34
  add_param "picturePageInMenu", false, 'True if the picture pages should be in the menu'
35
35
  add_param "galleryPageInMenu", false, 'True if the gallery pages should be in the menu'
36
- add_param "galleryMenuOrder", 50, 'The <menuOrder> metainfo for the first gallery page. The second gallery page gets this value plus one, and so on.'
36
+ add_param "galleryOrderInfo", 50, 'The <orderInfo> metainfo for the first gallery page. The second gallery page gets this value plus one, and so on.'
37
37
  add_param "mainPageInMenu", true, 'True if the main page of the picture gallery should be in the menu'
38
38
  add_param "galleryPageTemplate", nil, 'The template for gallery pages. If nil or a not existing file is specified, the default template is used.'
39
39
  add_param "picturePageTemplate", nil, 'The template for picture pages. If nil or a not existing file is specified, the default template is used.'
@@ -123,7 +123,7 @@ module FileHandlers
123
123
  data['template'] ||= get_param( 'galleryPageTemplate' )
124
124
  data['inMenu'] ||= get_param( 'galleryPageInMenu' )
125
125
  data['number'] = i/picsPerPage + 1
126
- data['menuOrder'] = get_param( 'galleryMenuOrder' ) + data['number']
126
+ data['orderInfo'] = get_param( 'galleryOrderInfo' ) + data['number']
127
127
  data['title'] = gallery_title( data['number'] )
128
128
  data['srcName'] = gallery_file_name( data['title'] )
129
129
  data['imageList'] = create_picture_pages( images[i..(i + picsPerPage - 1)], parent )
@@ -172,6 +172,7 @@ module FileHandlers
172
172
 
173
173
  class PictureGalleryFileHandler
174
174
 
175
+ remove_method :get_thumbnail
175
176
  def get_thumbnail( imageData, parent )
176
177
  p_node = Webgen::Plugin['DirHandler'].recursive_create_path( File.dirname( imageData['imageFilename'] ), parent )
177
178
  node = Webgen::Plugin['ThumbnailWriter'].create_node( File.join( @path, imageData['imageFilename'] ), p_node )
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: template.rb 249 2005-04-13 19:23:51Z thomas $
4
+ # $Id: template.rb 275 2005-05-11 17:30:20Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -32,6 +32,8 @@ module FileHandlers
32
32
  add_param 'defaultTemplate', 'default.template', 'The default file name for the template file.'
33
33
  depends_on 'FileHandler'
34
34
 
35
+ used_meta_info 'template'
36
+
35
37
  def create_node( srcName, parent )
36
38
  node = Node.new( parent )
37
39
  node['title'] = 'Template'
@@ -68,7 +70,7 @@ module FileHandlers
68
70
  # Return the default template for +node+. If the template node is not found in the directory of
69
71
  # the node, the parent directories are searched.
70
72
  def get_default_template( node )
71
- node = node.parent until node.kind_of?( FileHandlers::DirHandler::DirNode )
73
+ node = node.parent until node['int:directory?']
72
74
  templateNode = node.find { |child| child['src'] == get_param( 'defaultTemplate' ) }
73
75
  if templateNode.nil?
74
76
  if node.parent.nil?
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: langbar.rb 256 2005-04-14 01:13:57Z thomas $
4
+ # $Id: langbar.rb 274 2005-05-11 12:52:27Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -39,7 +39,7 @@ module Tags
39
39
  end
40
40
 
41
41
  def process_tag( tag, node, refNode )
42
- output = node.parent.find_all {|a| a['page:name'] == node['page:name']}.sort {|a, b| a['lang'] <=> b['lang']}.collect do |n|
42
+ output = node.parent.find_all {|a| a['int:pagename'] == node['int:pagename']}.sort {|a, b| a['lang'] <=> b['lang']}.collect do |n|
43
43
  n['processor'].get_html_link( n, n, n['lang'] )
44
44
  end.join( get_param( 'separator' ) )
45
45
  return ( get_param( 'showSingleLang' ) || node.parent.children.length > 1 ? output : "" )
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: menu.rb 256 2005-04-14 01:13:57Z thomas $
4
+ # $Id: menu.rb 275 2005-05-11 17:30:20Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -30,7 +30,7 @@ module Tags
30
30
  # one page file.
31
31
  #
32
32
  # The order in which the menu items are listed can be controlled via the meta information
33
- # +menuOrder+. By default the menu items are sorted by the file names.
33
+ # +orderInfo+. By default the menu items are sorted by the file names.
34
34
  #
35
35
  # Tag parameters:
36
36
  # [<b>level</b>]
@@ -38,6 +38,39 @@ module Tags
38
38
  # also displays the menu files in the direct subdirectories and so on.
39
39
  class MenuTag < DefaultTag
40
40
 
41
+ class ::Node
42
+
43
+ # Retrieves the meta information +orderInfo+.
44
+ def order_info
45
+ # be optimistic and try metainfo field first
46
+ node = self
47
+ value = node['orderInfo'].to_s.to_i unless node['orderInfo'].nil?
48
+
49
+ # get index file for directory
50
+ if node['int:directory?']
51
+ node = node['indexFile']
52
+ value ||= node['orderInfo'].to_s.to_i unless node.nil? || node['orderInfo'].nil?
53
+ end
54
+
55
+ # find the first orderInfo entry in the page files if node is a page file
56
+ if !node.nil? && node['int:pagename']
57
+ node = node.parent.find {|child| child['int:pagename'] == node['int:pagename'] && child['orderInfo'].to_s.to_i != 0}
58
+ value ||= node['orderInfo'].to_s.to_i unless node.nil?
59
+ end
60
+
61
+ # fallback value
62
+ value ||= 0
63
+
64
+ value
65
+ end
66
+
67
+ SORT_PROC = Proc.new do |a,b|
68
+ aoi = a.order_info
69
+ boi = b.order_info
70
+ (aoi == boi ? a['title'] <=> b['title'] : aoi <=> boi)
71
+ end
72
+
73
+ end
41
74
 
42
75
  # Specialised node class for the menu.
43
76
  class MenuNode < Node
@@ -52,28 +85,11 @@ module Tags
52
85
  end
53
86
 
54
87
 
55
- # Sorts recursively all children of the node depending on their order value.
88
+ # Sorts recursively all children of the node depending on their order value. If two order
89
+ # values are equal, sort the items using their title.
56
90
  def sort!
57
- self.children.sort! {|a,b| get_order_value( a ) <=> get_order_value( b )}
58
- self.children.each {|child| child.sort! if child.kind_of?( MenuNode ) && child['node'].kind_of?( FileHandlers::DirHandler::DirNode )}
59
- end
60
-
61
-
62
- # Retrieves the order value for the specific node.
63
- def get_order_value( node )
64
- # be optimistic and try metainfo field first
65
- node = node['node'] if node.kind_of?( MenuNode )
66
- value = node['menuOrder'].to_s.to_i unless node['menuOrder'].nil?
67
-
68
- # find the first menuOrder entry in the page files
69
- node = node['indexFile'] if node.kind_of?( FileHandlers::DirHandler::DirNode )
70
- node = node.parent.find {|child| child['page:name'] == node['page:name'] && child['menuOrder'].to_s.to_i != 0} if !node.nil? && node['page:name']
71
- value ||= node['menuOrder'].to_s.to_i unless node.nil?
72
-
73
- # fallback value
74
- value ||= 0
75
-
76
- value
91
+ self.children.sort! {|a,b| SORT_PROC.call( a['node'], b['node'] ) }
92
+ self.children.each {|child| child.sort! if child['node']['int:directory?'] }
77
93
  end
78
94
 
79
95
  end
@@ -96,6 +112,8 @@ module Tags
96
112
  'True if only the current subtree should be shown in the menu. If set to false, ' \
97
113
  'each subtree will be shown.'
98
114
 
115
+ used_meta_info 'orderInfo', 'inMenu'
116
+
99
117
  def initialize
100
118
  super
101
119
  register_tag( 'menu' )
@@ -132,13 +150,8 @@ module Tags
132
150
 
133
151
  out = "<#{get_param( 'menuTag' )}>"
134
152
  node.each do |child|
135
- if child.kind_of?( MenuNode )
136
- menu = child['node'].kind_of?( FileHandlers::DirHandler::DirNode ) ? build_menu( srcNode, child, level + 1 ) : ''
137
- before, after = menu_entry( srcNode, child['node'] )
138
- else
139
- menu = ''
140
- before, after = menu_entry( srcNode, child )
141
- end
153
+ menu = child['node']['int:directory?'] ? build_menu( srcNode, child, level + 1 ) : ''
154
+ before, after = menu_entry( srcNode, child['node'] )
142
155
 
143
156
  out << before
144
157
  out << menu
@@ -151,15 +164,15 @@ module Tags
151
164
 
152
165
 
153
166
  def menu_entry( srcNode, node )
154
- langNode = node['processor'].get_page_node_for_lang( node, srcNode['lang'] )
155
- isDir = node.kind_of?( FileHandlers::DirHandler::DirNode )
167
+ langNode = node['processor'].get_node_for_lang( node, srcNode['lang'] )
168
+ isDir = node['int:directory?']
156
169
 
157
170
  styles = []
158
171
  styles << get_param( 'submenuClass' ) if isDir
159
172
  styles << get_param( 'selectedMenuitemClass' ) if langNode.recursive_value( 'dest' ) == srcNode.recursive_value( 'dest' )
160
173
 
161
174
  style = " class=\"#{styles.join(' ')}\"" if styles.length > 0
162
- link = langNode['processor'].get_html_link( langNode, srcNode, ( isDir ? langNode['directoryName'] || node['directoryName'] : langNode['title'] ) )
175
+ link = node['processor'].get_html_link( node, srcNode )
163
176
 
164
177
  before = "<#{get_param( 'itemTag' )}#{style}>#{link}"
165
178
  after = "</#{get_param( 'itemTag' )}>"
@@ -173,12 +186,12 @@ module Tags
173
186
  menuNode = MenuNode.new( parent, node )
174
187
 
175
188
  node.each do |child|
176
- next if menuNode.find {|n| n['page:name'] == child['page:name'] && !n['page:name'].nil? }
189
+ next if menuNode.find {|n| n['node']['int:pagename'] == child['int:pagename'] && !n['node']['int:pagename'].nil? }
177
190
  menu = create_menu_tree( child, menuNode )
178
191
  menuNode.add_child( menu ) unless menu.nil?
179
192
  end
180
193
 
181
- return menuNode.has_children? ? menuNode : ( node['inMenu'] && !node['virtual'] ? node : nil )
194
+ return menuNode.has_children? ? menuNode : ( node['inMenu'] && !node['virtual'] ? menuNode : nil )
182
195
  end
183
196
 
184
197
  end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: relocatable.rb 256 2005-04-14 01:13:57Z thomas $
4
+ # $Id: relocatable.rb 273 2005-05-11 10:07:38Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -21,6 +21,7 @@
21
21
  #
22
22
 
23
23
  require 'webgen/plugins/tags/tags'
24
+ require 'uri'
24
25
 
25
26
  module Tags
26
27
 
@@ -45,12 +46,23 @@ module Tags
45
46
  end
46
47
 
47
48
  def process_tag( tag, node, refNode )
48
- unless get_param( 'item' ).nil?
49
- destNode = refNode.node_for_string( get_param( 'item' ) )
50
- return ( destNode.nil? ? '' : node.relpath_to_node( destNode['page:name'] ? destNode['processor'].get_page_node_for_lang( destNode, node['lang'] ) : destNode ) )
51
- else
52
- return ''
49
+ uri_string = get_param( 'item' )
50
+ result = ''
51
+ unless uri_string.nil?
52
+ begin
53
+ uri = URI.parse( uri_string )
54
+ if uri.absolute?
55
+ result = uri_string
56
+ else
57
+ destNode = refNode.node_for_string( uri.path )
58
+ qf = (uri.query.nil? ? '' : '?'+ uri.query ) + (uri.fragment.nil? ? '' : '#' + uri.fragment)
59
+ result = ( destNode.nil? ? '' : node.relpath_to_node( destNode['processor'].get_node_for_lang( destNode, node['lang'] ) ) + qf )
60
+ end
61
+ rescue URI::InvalidURIError => e
62
+ logger.error { "Error while parsing URI for relocatable tag: #{e.message}" }
63
+ end
53
64
  end
65
+ return result
54
66
  end
55
67
 
56
68
  end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: sitemap.rb 256 2005-04-14 01:13:57Z thomas $
4
+ # $Id: sitemap.rb 275 2005-05-11 17:30:20Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -32,6 +32,8 @@ module Tags
32
32
  add_param 'itemTag', 'li', 'The tag used for pages.'
33
33
  depends_on 'Tags'
34
34
 
35
+ used_meta_info 'orderInfo'
36
+
35
37
  def initialize
36
38
  super
37
39
  register_tag( 'sitemap' )
@@ -47,18 +49,17 @@ module Tags
47
49
  #######
48
50
 
49
51
  def output_node( node, srcNode )
50
- return '' if not node.find {|c| c.kind_of?( FileHandlers::DirHandler::DirNode ) || c.kind_of?( FileHandlers::PageHandler::PageNode ) }
52
+ return '' if not node.find {|c| c['int:directory?'] || c['int:pagename'] }
51
53
 
54
+ processed_pagenodes = []
52
55
  out = "<#{get_param( 'levelTag' )}>"
53
- node.each do |child|
54
- next unless child.kind_of?( FileHandlers::DirHandler::DirNode ) || child.kind_of?( FileHandlers::PageHandler::PageNode )
56
+ node.sort( &Node::SORT_PROC ).each do |child|
57
+ next unless (child['int:directory?'] || child['int:pagename']) && !processed_pagenodes.include?( child['int:pagename'] )
58
+ processed_pagenodes << child['int:pagename'] if child['int:pagename']
55
59
 
56
- isDir = child.kind_of?( FileHandlers::DirHandler::DirNode )
60
+ isDir = child['int:directory?']
57
61
  subout = output_node( child, srcNode )
58
- if subout != '' || !isDir
59
- langNode = child['processor'].get_page_node_for_lang( child, srcNode['lang'] )
60
- link = langNode['processor'].get_html_link( langNode, srcNode, ( isDir ? langNode['directoryName'] || child['directoryName'] : langNode['title'] ) )
61
- end
62
+ link = child['processor'].get_html_link( child, srcNode ) if subout != '' || !isDir
62
63
 
63
64
  out += "<#{get_param( 'itemTag' )}>#{link}" if !isDir || subout != ''
64
65
  out += subout if isDir
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: wikilink.rb 252 2005-04-13 20:21:12Z thomas $
4
+ # $Id: wikilink.rb 275 2005-05-11 17:30:20Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -35,6 +35,8 @@ module Tags
35
35
  add_param 'invalidChars', ' &;', 'The characters which are invalid as wiki URLs.'
36
36
  add_param 'replacementChar', '_', 'The character(s) which should be used instead of the invalid characters.'
37
37
 
38
+ used_meta_info 'title'
39
+
38
40
  def initialize
39
41
  super
40
42
  register_tag( 'wikilink' )
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Projekte Seite
3
3
  inMenu: true
4
- menuOrder: 3
4
+ orderInfo: 3
5
5
  directoryName: Projekte
6
6
  blocks:
7
7
  - {name: content, format: html}
@@ -2,7 +2,7 @@
2
2
  title: Project index
3
3
  directoryName: Projects
4
4
  inMenu: true
5
- menuOrder: 4
5
+ orderInfo: 4
6
6
  blocks:
7
7
  - {name: content, format: html}
8
8
  ---
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.6
3
3
  specification_version: 1
4
4
  name: webgen
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.3
7
- date: 2005-04-21
6
+ version: 0.3.4
7
+ date: 2005-05-12
8
8
  summary: Webgen is a templated based static website generator.
9
9
  require_paths:
10
10
  - lib
@@ -36,11 +36,11 @@ files:
36
36
  - VERSION
37
37
  - install.rb
38
38
  - bin/webgen
39
- - lib/util/composite.rb
40
- - lib/util/listener.rb
39
+ - lib/webgen/composite.rb
41
40
  - lib/webgen/configuration.rb
42
41
  - lib/webgen/node.rb
43
42
  - lib/webgen/logging.rb
43
+ - lib/webgen/listener.rb
44
44
  - lib/webgen/plugin.rb
45
45
  - lib/webgen/webgen.rb
46
46
  - lib/webgen/plugins/treewalker.rb
@@ -114,12 +114,14 @@ files:
114
114
  - doc/src/design.gallery
115
115
  - doc/src/default.template
116
116
  - doc/src/meta.info
117
+ - doc/src/generated_by_webgen.png
117
118
  - doc/src/logo.png
118
119
  - doc/src/designs/curdesign.png
119
120
  - doc/src/designs/nostyle.png
120
121
  - doc/src/designs/old.png
121
122
  - doc/src/documentation/gettingstarted.page
122
123
  - doc/src/documentation/index.page
124
+ - doc/src/documentation/meta_info_reference.page
123
125
  - doc/src/documentation/cli.page
124
126
  - doc/src/documentation/plugins
125
127
  - doc/src/documentation/plugins/tags
@@ -185,5 +187,5 @@ dependencies:
185
187
  -
186
188
  - ">="
187
189
  - !ruby/object:Gem::Version
188
- version: 1.0.1
190
+ version: 1.0.2
189
191
  version: