webgen 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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: