webgen 0.3.4 → 0.3.5

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 (63) hide show
  1. data/ChangeLog +201 -0
  2. data/Rakefile +3 -2
  3. data/TODO +31 -4
  4. data/VERSION +1 -1
  5. data/data/webgen/example/config.yaml +2 -0
  6. data/data/webgen/example/src/default.css +84 -0
  7. data/data/webgen/example/src/default.template +32 -0
  8. data/data/webgen/example/src/index.page +8 -0
  9. data/{doc/src → data/webgen/images}/generated_by_webgen.png +0 -0
  10. data/data/webgen/images/valid-css.gif +0 -0
  11. data/data/webgen/images/valid-xhtml11.png +0 -0
  12. data/data/webgen/images/webgen_logo.png +0 -0
  13. data/doc/config.yaml +2 -0
  14. data/doc/plugin/extension.rb +8 -4
  15. data/doc/plugin/resources.rb +30 -0
  16. data/doc/src/default.css +251 -149
  17. data/doc/src/default.template +8 -8
  18. data/doc/src/documentation/gettingstarted.page +1 -1
  19. data/doc/src/documentation/index.page +6 -2
  20. data/doc/src/documentation/plugins/filehandler/backing.page +22 -9
  21. data/doc/src/documentation/plugins/filehandler/galleryhandler.page +1 -1
  22. data/doc/src/documentation/plugins/filehandler/index.page +9 -4
  23. data/doc/src/documentation/plugins/filehandler/pagehandler.page +33 -10
  24. data/doc/src/documentation/plugins/index.page +9 -1
  25. data/doc/src/documentation/plugins/menustyles/horizontal-dropdown.page +42 -0
  26. data/doc/src/documentation/plugins/menustyles/horizontal.page +21 -0
  27. data/doc/src/documentation/plugins/menustyles/index.page +12 -0
  28. data/doc/src/documentation/plugins/menustyles/partial.page +27 -0
  29. data/doc/src/documentation/plugins/menustyles/vertical-dropdown.page +23 -0
  30. data/doc/src/documentation/plugins/menustyles/vertical.page +32 -0
  31. data/doc/src/documentation/plugins/resourcemanager.page +30 -0
  32. data/doc/src/documentation/plugins/tags/index.page +2 -2
  33. data/doc/src/documentation/plugins/tags/langbar.page +4 -4
  34. data/doc/src/documentation/plugins/tags/menu.page +6 -17
  35. data/doc/src/documentation/plugins/tags/navbar.page +2 -1
  36. data/doc/src/documentation/plugins/tags/resource.page +22 -0
  37. data/doc/src/download.page +1 -1
  38. data/doc/src/features.page +32 -9
  39. data/doc/src/index.page +24 -10
  40. data/doc/src/meta.info +16 -6
  41. data/install.rb +1 -1
  42. data/lib/webgen/configuration.rb +24 -2
  43. data/lib/webgen/node.rb +29 -5
  44. data/lib/webgen/plugin.rb +1 -5
  45. data/lib/webgen/plugins/contenthandler/textile.rb +3 -3
  46. data/lib/webgen/plugins/filehandler/backing.rb +5 -4
  47. data/lib/webgen/plugins/filehandler/directory.rb +3 -3
  48. data/lib/webgen/plugins/filehandler/filehandler.rb +8 -4
  49. data/lib/webgen/plugins/filehandler/page.rb +33 -18
  50. data/lib/webgen/plugins/filehandler/picturegallery.rb +10 -8
  51. data/lib/webgen/plugins/menustyles/defaultmenustyle.rb +73 -0
  52. data/lib/webgen/plugins/menustyles/horizontal.rb +93 -0
  53. data/lib/webgen/plugins/menustyles/horizontal_dropdown.rb +113 -0
  54. data/lib/webgen/plugins/menustyles/partial.rb +95 -0
  55. data/lib/webgen/plugins/menustyles/vertical.rb +107 -0
  56. data/lib/webgen/plugins/menustyles/vertical_dropdown.rb +107 -0
  57. data/lib/webgen/plugins/resourcemanager.rb +264 -0
  58. data/lib/webgen/plugins/tags/langbar.rb +9 -5
  59. data/lib/webgen/plugins/tags/menu.rb +4 -66
  60. data/lib/webgen/plugins/treewalker.rb +7 -6
  61. data/lib/webgen/webgen.rb +72 -161
  62. metadata +37 -6
  63. data/doc/src/logo.png +0 -0
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: page.rb 277 2005-05-12 08:43:54Z thomas $
4
+ # $Id: page.rb 301 2005-06-14 10:25:49Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -43,7 +43,7 @@ module FileHandlers
43
43
  add_param 'outputNameStyle', [:name, ['.', :lang], '.html'], 'Defines how the output name should be built. The correct name will be used for ' \
44
44
  'the :name part and the file language will be used for the :lang part. If <defaultLangInFilename> is true, the :lang part or the subarray in which '\
45
45
  'the :lang part was defined, will be omitted.'
46
- add_param 'validator', 'xmllint', 'The validator for checking HTML files on their validness. Set to "" or nil to prevent checking.'
46
+ add_param 'validator', nil, 'The validator for checking HTML files on their validness. Set to "" or nil to prevent checking.'
47
47
  add_param 'useERB', true, 'Specifies if the content blocks of the page file should be processed with ERB before they are formatted.'
48
48
 
49
49
  used_meta_info 'title', 'orderInfo', 'lang', 'blocks', 'useERB'
@@ -56,26 +56,39 @@ module FileHandlers
56
56
  create_node_internally( parse_data( data, srcName ), analyse_file_name( File.basename( srcName ) ), parent )
57
57
  end
58
58
 
59
- def write_node( node )
60
- templateNode = Webgen::Plugin['TemplateFileHandler'].get_template_for_node( node )
59
+ def render_node( node, with_template = true, block_name = 'content' )
60
+ unless node['int:content-formatted']
61
+ useERB = node['useERB'] || ( node['useERB'].nil? && get_param( 'useERB' ) )
62
+ node['blocks'].each do |blockdata|
63
+ begin
64
+ content = ( useERB ? ERB.new( blockdata['data'] ).result( binding ) : blockdata['data'] )
65
+ rescue Exception => e
66
+ logger.error { "ERB threw an error while processing an ERB template (<#{node.recursive_value('src')}>, block #{blockdata['name']}): #{e.message}" }
67
+ content = blockdata['data']
68
+ end
69
+ node[blockdata['name']] = Webgen::Plugin['DefaultContentHandler'].get_format( blockdata['format'] ).format_content( content )
70
+ end
71
+ node['int:content-formatted'] = true
72
+ end
61
73
 
62
- useERB = node['useERB'] || ( node['useERB'].nil? && get_param( 'useERB' ) )
63
- node['blocks'].each do |blockdata|
74
+ if with_template
75
+ templateNode = Webgen::Plugin['TemplateFileHandler'].get_template_for_node( node )
64
76
  begin
65
- content = ( useERB ? ERB.new( blockdata['data'] ).result( binding ) : blockdata['data'] )
77
+ outstring = ERB.new( templateNode['content'] ).result( binding )
66
78
  rescue Exception => e
67
- logger.error { "ERB threw an error while processing an ERB template (<#{node.recursive_value('src')}>, block #{blockdata['name']}): #{e.message}" }
68
- content = blockdata['data']
79
+ logger.error { "ERB threw an error while processing an ERB template (<#{templateNode.recursive_value('src')}>: #{e.message}" }
80
+ outstring = templateNode['content'].dup
69
81
  end
70
- node[blockdata['name']] = Webgen::Plugin['DefaultContentHandler'].get_format( blockdata['format'] ).format_content( content )
71
- end
72
- begin
73
- outstring = ERB.new( templateNode['content'] ).result( binding )
74
- rescue Exception => e
75
- logger.error { "ERB threw an error while processing an ERB template (<#{templateNode.recursive_value('src')}>: #{e.message}" }
76
- outstring = templateNode['content'].dup
82
+ else
83
+ templateNode = node
84
+ outstring = node[block_name].to_s.dup
77
85
  end
78
- outstring = Webgen::Plugin['Tags'].substitute_tags( outstring, node, templateNode )
86
+
87
+ Webgen::Plugin['Tags'].substitute_tags( outstring, node, templateNode )
88
+ end
89
+
90
+ def write_node( node )
91
+ outstring = render_node( node )
79
92
 
80
93
  File.open( node.recursive_value( 'dest' ), File::CREAT|File::TRUNC|File::RDWR ) do |file|
81
94
  file.write( outstring )
@@ -125,7 +138,8 @@ module FileHandlers
125
138
  def create_node_internally( data, analysed, parent )
126
139
  lang = data['lang'] || analysed.lang
127
140
 
128
- pagename = create_output_name( analysed, data['outputNameStyle'] || get_param( 'outputNameStyle' ), true )
141
+ pagename = analysed.name + '.page'
142
+ localizedPagename = analysed.name + '.' + lang + '.page'
129
143
 
130
144
  if node = parent.find {|node| node['int:pagename'] == pagename && node['lang'] == lang }
131
145
  logger.warn do
@@ -141,6 +155,7 @@ module FileHandlers
141
155
  node['src'] = analysed.srcName
142
156
  node['dest'] = create_output_name( analysed, node['outputNameStyle'] || get_param( 'outputNameStyle' ) )
143
157
  node['int:pagename'] = pagename
158
+ node['int:local-pagename'] = localizedPagename
144
159
  node['processor'] = self
145
160
  end
146
161
 
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: picturegallery.rb 274 2005-05-11 12:52:27Z thomas $
4
+ # $Id: picturegallery.rb 303 2005-06-24 13:44:14Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -154,6 +154,7 @@ module FileHandlers
154
154
  imageData['imageFilename'] = image
155
155
  imageData['srcName'] = File.basename( image ).tr( ' .', '_' ) + '.html'
156
156
  imageData['thumbnail'] ||= get_thumbnail( imageData, parent )
157
+ imageData['thumbnailSize'] ||= @filedata['thumbnailSize']
157
158
 
158
159
  imageList << imageData
159
160
  end
@@ -175,7 +176,7 @@ module FileHandlers
175
176
  remove_method :get_thumbnail
176
177
  def get_thumbnail( imageData, parent )
177
178
  p_node = Webgen::Plugin['DirHandler'].recursive_create_path( File.dirname( imageData['imageFilename'] ), parent )
178
- node = Webgen::Plugin['ThumbnailWriter'].create_node( File.join( @path, imageData['imageFilename'] ), p_node )
179
+ node = Webgen::Plugin['ThumbnailWriter'].create_node( File.join( @path, imageData['imageFilename'] ), p_node, imageData['thumbnailSize'] )
179
180
  p_node.add_child( node )
180
181
 
181
182
  File.dirname( imageData['imageFilename'] ) + '/' + node['dest']
@@ -188,19 +189,20 @@ module FileHandlers
188
189
  summary "Writes out thumbnails with RMagick"
189
190
  add_param "thumbnailSize", "100x100", "The size of the thumbnails"
190
191
 
191
- def create_node( file, parent )
192
+ def create_node( file, parent, thumbnailSize = nil )
192
193
  node = Node.new( parent )
193
194
  node['title'] = node['src'] = node['dest'] = 'tn_' + File.basename( file )
194
- node['tn:imageFile'] = file
195
+ node['int:thumbnailFile'] = file
196
+ node['int:thumbnailSize'] = thumbnailSize
195
197
  node['processor'] = self
196
198
  node
197
199
  end
198
200
 
199
201
  def write_node( node )
200
- if Webgen::Plugin['FileHandler'].file_modified?( node['tn:imageFile'], node.recursive_value( 'dest' ) )
201
- self.logger.info {"Creating thumbnail <#{node.recursive_value('dest')}> from <#{node['tn:imageFile']}>"}
202
- image = Magick::ImageList.new( node['tn:imageFile'] )
203
- image.change_geometry( get_param( 'thumbnailSize' ) ) {|c,r,i| i.resize!( c, r )}
202
+ if Webgen::Plugin['FileHandler'].file_modified?( node['int:thumbnailFile'], node.recursive_value( 'dest' ) )
203
+ self.logger.info {"Creating thumbnail <#{node.recursive_value('dest')}> from <#{node['int:thumbnailFile']}>"}
204
+ image = Magick::ImageList.new( node['int:thumbnailFile'] )
205
+ image.change_geometry( node['int:thumbnailSize'] || get_param( 'thumbnailSize' ) ) {|c,r,i| i.resize!( c, r )}
204
206
  image.write( node.recursive_value( 'dest' ) )
205
207
  end
206
208
  end
@@ -0,0 +1,73 @@
1
+ #
2
+ #--
3
+ #
4
+ # $Id: defaultmenustyle.rb 293 2005-06-11 08:37:51Z thomas $
5
+ #
6
+ # webgen: template based static website generator
7
+ # Copyright (C) 2004 Thomas Leitner
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify it under the terms of the GNU
10
+ # General Public License as published by the Free Software Foundation; either version 2 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
14
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License along with this program; if not,
18
+ # write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ #
20
+ #++
21
+ #
22
+
23
+
24
+ module MenuStyles
25
+
26
+ class DefaultMenuStyle < Webgen::Plugin
27
+
28
+ summary "Base class for all menu styles"
29
+
30
+ define_handler 'menu_style'
31
+
32
+ add_param 'divClass', '', 'Additional CSS class for the div-tag surrounding the menu'
33
+ add_param 'submenuClass', 'webgen-menu-submenu', 'Specifies the class of a submenu.'
34
+ add_param 'submenuInHierarchyClass', 'webgen-menu-submenu-inhierarchy', 'Specifies the class of the submenus which are ' \
35
+ 'in the hierarchy of the selected menu item.'
36
+ add_param 'selectedMenuitemClass', 'webgen-menu-item-selected', 'Specifies the class of the selected menu item.'
37
+
38
+ def build_menu( srcNode, menuTree, options )
39
+ @options = options
40
+ internal_build_menu( srcNode, menuTree )
41
+ end
42
+
43
+ def internal_build_menu( srcNode, menuTree )
44
+ ""
45
+ end
46
+
47
+ def get_param( name )
48
+ ( !@options.nil? && @options.kind_of?( Hash ) && @options.has_key?( name ) ? @options[name] : super )
49
+ end
50
+
51
+ #########
52
+ protected
53
+ #########
54
+
55
+ def menu_item_details( srcNode, node )
56
+ langNode = node['processor'].get_node_for_lang( node, srcNode['lang'] )
57
+ isDir = node['int:directory?']
58
+
59
+ styles = []
60
+ styles << get_param( 'submenuClass' ) if isDir
61
+ styles << get_param( 'submenuInHierarchyClass' ) if isDir && srcNode.in_subtree?( node )
62
+ styles << get_param( 'selectedMenuitemClass' ) if langNode.recursive_value( 'dest' ) == srcNode.recursive_value( 'dest' )
63
+
64
+ style = "class=\"#{styles.join(' ')}\"" if styles.length > 0
65
+ link = node['processor'].get_html_link( node, srcNode )
66
+
67
+ self.logger.debug { [style, link] }
68
+ return style, link
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,93 @@
1
+ #
2
+ #--
3
+ #
4
+ # $Id: horizontal.rb 293 2005-06-11 08:37:51Z thomas $
5
+ #
6
+ # webgen: template based static website generator
7
+ # Copyright (C) 2004 Thomas Leitner
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify it under the terms of the GNU
10
+ # General Public License as published by the Free Software Foundation; either version 2 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
14
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License along with this program; if not,
18
+ # write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ #
20
+ #++
21
+ #
22
+
23
+ require 'webgen/plugins/menustyles/defaultmenustyle'
24
+
25
+ module MenuStyles
26
+
27
+ class HorizontalMenuStyle < MenuStyles::DefaultMenuStyle
28
+
29
+ summary "Builds a horizontal menu"
30
+
31
+ register_menu_style 'horizontal'
32
+
33
+ CSS = "
34
+ /* START Webgen horizontal menu style */
35
+ .webgen-menu-horiz {
36
+ text-align: center;
37
+ }
38
+
39
+ .webgen-menu-horiz ul {
40
+ display: block;
41
+ margin: 0px;
42
+ padding-bottom: 3px;
43
+ margin-bottom: 3px;
44
+ }
45
+
46
+ .webgen-menu-horiz li {
47
+ display: inline;
48
+ padding: 0px 5px;
49
+ }
50
+
51
+ .webgen-menu-horiz .webgen-menu-submenu-inhierarchy {
52
+ font-weight: bold;
53
+ }
54
+
55
+ .webgen-menu-horiz .webgen-menu-item-selected {
56
+ font-weight: bold;
57
+ }
58
+ /* STOP Webgen horizontal menu style */
59
+ "
60
+
61
+ def internal_build_menu( srcNode, menuTree )
62
+ unless defined?( @css_added )
63
+ Webgen::Plugin['ResourceManager'].append_data( 'webgen-css', CSS )
64
+ @css_added = true
65
+ end
66
+ "<div class=\"webgen-menu-horiz #{get_param('divClass')}\">#{submenu( srcNode, menuTree, 1 )}</div>"
67
+ end
68
+
69
+ #######
70
+ private
71
+ #######
72
+
73
+ def submenu( srcNode, node, level )
74
+ if node.nil? || node['node'].level > srcNode.level || !srcNode.in_subtree?( node['node'] )
75
+ return ''
76
+ end
77
+
78
+ submenu = ''
79
+ out = "<ul>"
80
+ node.each do |child|
81
+ submenu << (child['node']['int:directory?'] ? submenu( srcNode, child, level + 1 ) : '')
82
+ style, link = menu_item_details( srcNode, child['node'] )
83
+ out << "<li #{style}>#{link}</li>"
84
+ end
85
+ out << "</ul>"
86
+ out << submenu
87
+
88
+ return out
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,113 @@
1
+ #
2
+ #--
3
+ #
4
+ # $Id: horizontal_dropdown.rb 300 2005-06-14 10:04:17Z thomas $
5
+ #
6
+ # webgen: template based static website generator
7
+ # Copyright (C) 2004 Thomas Leitner
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify it under the terms of the GNU
10
+ # General Public License as published by the Free Software Foundation; either version 2 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
14
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License along with this program; if not,
18
+ # write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ #
20
+ #++
21
+ #
22
+
23
+ require 'webgen/plugins/menustyles/defaultmenustyle'
24
+
25
+ module MenuStyles
26
+
27
+ class HorizontalDropdownMenuStyle < MenuStyles::DefaultMenuStyle
28
+
29
+ summary "Builds a horizontal menu with CSS drop down submenus"
30
+
31
+ register_menu_style 'horizontal-dropdown'
32
+
33
+ CSS = "
34
+ /* START Webgen horizontal dropdown menu style */
35
+ .webgen-menu-horiz-dd ul {
36
+ list-style-type: none;
37
+ margin: 0;
38
+ padding: 0;
39
+ float: left;
40
+ }
41
+
42
+ .webgen-menu-horiz-dd ul ul {
43
+ width: 15em;
44
+ border: 1px solid black;
45
+ position: absolute;
46
+ z-index: 500;
47
+ }
48
+
49
+
50
+ .webgen-menu-horiz-dd a {
51
+ display: block;
52
+ margin: 0px;
53
+ padding: 3px 3px;
54
+ background-color: white;
55
+ }
56
+
57
+ .webgen-menu-horiz-dd li {
58
+ position: relative;
59
+ }
60
+
61
+ .webgen-menu-horiz-dd ul ul ul {
62
+ position: absolute;
63
+ top: 0;
64
+ left: 100%;
65
+ }
66
+
67
+ .webgen-menu-horiz-dd ul ul {
68
+ display: none;
69
+ }
70
+
71
+ .webgen-menu-horiz-dd ul li:hover > ul > ul {
72
+ display: none;
73
+ }
74
+
75
+ .webgen-menu-horiz-dd ul li:hover > ul {
76
+ display: block;
77
+ }
78
+ /* STOP Webgen horizontal dropdown menu style */
79
+ "
80
+
81
+ def internal_build_menu( srcNode, menuTree )
82
+ unless defined?( @css_added )
83
+ Webgen::Plugin['ResourceManager'].append_data( 'webgen-css', CSS )
84
+ @css_added = true
85
+ end
86
+ "<div class=\"webgen-menu-horiz-dd #{get_param('divClass')}\">#{submenu( srcNode, menuTree, 1 )}</div>"
87
+ end
88
+
89
+ #######
90
+ private
91
+ #######
92
+
93
+ def submenu( srcNode, node, level )
94
+ out = ''
95
+ out = "<ul>" if level > 1
96
+ node.each do |child|
97
+ menu = child['node']['int:directory?'] ? submenu( srcNode, child, level + 1 ) : ''
98
+ style, link = menu_item_details( srcNode, child['node'] )
99
+
100
+ out << "<ul>" if level == 1
101
+ out << "<li #{style}>#{link}"
102
+ out << menu
103
+ out << "</li>"
104
+ out << "</ul>" if level == 1
105
+ end
106
+ out << "</ul>" if level > 1
107
+
108
+ return out
109
+ end
110
+
111
+ end
112
+
113
+ end
@@ -0,0 +1,95 @@
1
+ #
2
+ #--
3
+ #
4
+ # $Id: partial.rb 293 2005-06-11 08:37:51Z thomas $
5
+ #
6
+ # webgen: template based static website generator
7
+ # Copyright (C) 2004 Thomas Leitner
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify it under the terms of the GNU
10
+ # General Public License as published by the Free Software Foundation; either version 2 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
14
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License along with this program; if not,
18
+ # write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ #
20
+ #++
21
+ #
22
+
23
+ require 'webgen/plugins/menustyles/defaultmenustyle'
24
+
25
+ module MenuStyles
26
+
27
+ class PartialMenuStyle < MenuStyles::DefaultMenuStyle
28
+
29
+ summary "Builds a partial menu"
30
+ description "Creates a menu that only shows the menu levels under the current page"
31
+
32
+ register_menu_style 'partial'
33
+
34
+ add_param 'subtreeLevel', 1, \
35
+ 'Specifies how many levels should be shown. The number specifies ' \
36
+ 'the maximum depth the menu will have.'
37
+ add_param 'dropdown', false, 'Specifies if the menu should be a drop-down menu'
38
+
39
+ CSS = "
40
+ /* START Webgen partial menu style */
41
+ .webgen-menu-partial-dropdown > ul {
42
+ display: none;
43
+ }
44
+
45
+ .webgen-menu-partial-dropdown:hover > ul {
46
+ display: block;
47
+ }
48
+ /* STOP Webgen partial menu style */
49
+ "
50
+
51
+ def internal_build_menu( srcNode, menuTree )
52
+ unless defined?( @css_added )
53
+ Webgen::Plugin['ResourceManager'].append_data( 'webgen-css', CSS )
54
+ @css_added = true
55
+ end
56
+ styles = ['webgen-menu-partial',
57
+ (get_param( 'dropdown' ) ? 'webgen-menu-partial-dropdown' : ''),
58
+ get_param( 'divClass' )]
59
+
60
+ "<div class=\"#{styles.join(' ')}\">#{submenu( srcNode, menuTree, 1 )}</div>"
61
+ end
62
+
63
+ #######
64
+ private
65
+ #######
66
+
67
+ def submenu( srcNode, node, level )
68
+ if node.nil? || level - srcNode.level >= get_param( 'subtreeLevel' ) || \
69
+ (level >= srcNode.level && !node['node'].in_subtree?( srcNode ))
70
+ return ''
71
+ end
72
+
73
+ out = ''
74
+ if get_param( 'dropdown' ) && level == srcNode.level
75
+ style, link = menu_item_details( srcNode, node['node'] )
76
+ out << "#{link}"
77
+ end
78
+
79
+ out << "<ul>" if level >= srcNode.level
80
+ node.each do |child|
81
+ menu = child['node']['int:directory?'] ? submenu( srcNode, child, level + 1 ) : ''
82
+ style, link = menu_item_details( srcNode, child['node'] )
83
+
84
+ out << "<li #{style}>#{link}" if level >= srcNode.level
85
+ out << menu
86
+ out << "</li>" if level >= srcNode.level
87
+ end
88
+ out << "</ul>" if level >= srcNode.level
89
+
90
+ return out
91
+ end
92
+
93
+ end
94
+
95
+ end