webgen 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/ChangeLog +2172 -0
- data/README +16 -0
- data/Rakefile +283 -0
- data/TODO +133 -0
- data/VERSION +1 -0
- data/bin/webgen +5 -0
- data/doc/extension.config +55 -0
- data/doc/src/default.css +129 -0
- data/doc/src/default.template +45 -0
- data/doc/src/design.gallery +18 -0
- data/doc/src/designs/default.png +0 -0
- data/doc/src/designs/nostyle.png +0 -0
- data/doc/src/designs/old.png +0 -0
- data/doc/src/documentation/extloader.page +20 -0
- data/doc/src/documentation/filehandler/backing.page +16 -0
- data/doc/src/documentation/filehandler/copy.page +12 -0
- data/doc/src/documentation/filehandler/directory.page +15 -0
- data/doc/src/documentation/filehandler/index.page +13 -0
- data/doc/src/documentation/filehandler/page.page +122 -0
- data/doc/src/documentation/filehandler/picturegallery.page +25 -0
- data/doc/src/documentation/filehandler/template.page +21 -0
- data/doc/src/documentation/index.page +47 -0
- data/doc/src/documentation/tags/date.page +19 -0
- data/doc/src/documentation/tags/executecommand.page +19 -0
- data/doc/src/documentation/tags/includefile.page +15 -0
- data/doc/src/documentation/tags/index.page +39 -0
- data/doc/src/documentation/tags/lang.de.page +6 -0
- data/doc/src/documentation/tags/lang.page +27 -0
- data/doc/src/documentation/tags/menu.de.page +11 -0
- data/doc/src/documentation/tags/menu.page +30 -0
- data/doc/src/documentation/tags/meta.page +20 -0
- data/doc/src/documentation/tags/multilang.de.page +4 -0
- data/doc/src/documentation/tags/multilang.fr.page +4 -0
- data/doc/src/documentation/tags/multilang.page +4 -0
- data/doc/src/documentation/tags/navbar.page +19 -0
- data/doc/src/documentation/tags/relocatable.page +16 -0
- data/doc/src/documentation/tags/wikilink.page +18 -0
- data/doc/src/download.page +42 -0
- data/doc/src/features.page +14 -0
- data/doc/src/index.page +48 -0
- data/doc/src/logo.png +0 -0
- data/doc/src/meta.info +22 -0
- data/install.rb +19 -0
- data/lib/util/composite.rb +101 -0
- data/lib/util/listener.rb +105 -0
- data/lib/webgen/configuration.rb +216 -0
- data/lib/webgen/logging.rb +73 -0
- data/lib/webgen/node.rb +147 -0
- data/lib/webgen/plugins/extloader.rb +88 -0
- data/lib/webgen/plugins/filehandler/backing.rb +200 -0
- data/lib/webgen/plugins/filehandler/directory.rb +96 -0
- data/lib/webgen/plugins/filehandler/filecopy.rb +59 -0
- data/lib/webgen/plugins/filehandler/filehandler.rb +209 -0
- data/lib/webgen/plugins/filehandler/pagehandler/html.rb +43 -0
- data/lib/webgen/plugins/filehandler/pagehandler/markdown.rb +53 -0
- data/lib/webgen/plugins/filehandler/pagehandler/page.rb +205 -0
- data/lib/webgen/plugins/filehandler/pagehandler/rdoc.rb +50 -0
- data/lib/webgen/plugins/filehandler/pagehandler/textile.rb +52 -0
- data/lib/webgen/plugins/filehandler/picturegallery.rb +194 -0
- data/lib/webgen/plugins/filehandler/template.rb +98 -0
- data/lib/webgen/plugins/tags/date.rb +46 -0
- data/lib/webgen/plugins/tags/executecommand.rb +53 -0
- data/lib/webgen/plugins/tags/includefile.rb +60 -0
- data/lib/webgen/plugins/tags/lang.rb +50 -0
- data/lib/webgen/plugins/tags/menu.rb +198 -0
- data/lib/webgen/plugins/tags/meta.rb +54 -0
- data/lib/webgen/plugins/tags/navbar.rb +62 -0
- data/lib/webgen/plugins/tags/relocatable.rb +58 -0
- data/lib/webgen/plugins/tags/tags.rb +247 -0
- data/lib/webgen/plugins/tags/wikilink.rb +58 -0
- data/lib/webgen/plugins/treewalker.rb +81 -0
- data/lib/webgen/webgen.rb +155 -0
- data/setup.rb +1331 -0
- data/testsite/config.yaml +7 -0
- data/testsite/src/bluecloth.page +102 -0
- data/testsite/src/default.css +146 -0
- data/testsite/src/default.template +33 -0
- data/testsite/src/home.en.page +22 -0
- data/testsite/src/home.page +22 -0
- data/testsite/src/images/bghack.png +0 -0
- data/testsite/src/images/o.png +0 -0
- data/testsite/src/images/smagacor.png +0 -0
- data/testsite/src/images/tictactoe.png +0 -0
- data/testsite/src/images/x.png +0 -0
- data/testsite/src/index.page +21 -0
- data/testsite/src/meta.info +15 -0
- data/testsite/src/news.page +20 -0
- data/testsite/src/news_are_so-cool.de.page +19 -0
- data/testsite/src/noindex/noindex.page +20 -0
- data/testsite/src/pictures/index.page +20 -0
- data/testsite/src/projects.de.page +11 -0
- data/testsite/src/projects.es.page +11 -0
- data/testsite/src/projects.page +17 -0
- data/testsite/src/projects/00.index.de.page +10 -0
- data/testsite/src/projects/01.project2.page +20 -0
- data/testsite/src/projects/02.project1.page +20 -0
- data/testsite/src/projects/05.project3.page +22 -0
- data/testsite/src/projects/index.page +20 -0
- data/testsite/src/projects/subproj/index.page +22 -0
- data/testsite/src/projects/subproj/project3.page +21 -0
- data/testsite/src/rdoc.page +12 -0
- data/testsite/src/redcloth.page +106 -0
- data/testsite/src/test.gallery +5 -0
- metadata +155 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: includefile.rb 203 2005-02-21 18:42:04Z 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 'cgi'
|
24
|
+
require 'webgen/plugins/tags/tags'
|
25
|
+
|
26
|
+
module Tags
|
27
|
+
|
28
|
+
# Includes a file verbatim. All HTML special characters are escaped.
|
29
|
+
class IncludeFileTag < DefaultTag
|
30
|
+
|
31
|
+
summary "Includes a file verbatim"
|
32
|
+
depends_on 'Tags'
|
33
|
+
add_param 'filename', nil, 'The name of the file which should be included'
|
34
|
+
add_param 'processOutput', true, 'The file content will be processed if true'
|
35
|
+
add_param 'escapeHTML', true, 'Special HTML characters in the file content will be escaped if true'
|
36
|
+
set_mandatory 'filename', true
|
37
|
+
|
38
|
+
def initialize
|
39
|
+
super
|
40
|
+
register_tag( 'includeFile' )
|
41
|
+
end
|
42
|
+
|
43
|
+
def process_tag( tag, node, refNode )
|
44
|
+
@processOutput = get_param( 'processOutput' )
|
45
|
+
content = ''
|
46
|
+
begin
|
47
|
+
filename = refNode.parent.recursive_value( 'src' ) + get_param( 'filename' )
|
48
|
+
self.logger.debug { "File location: <#{filename}>" }
|
49
|
+
content = File.read( filename )
|
50
|
+
rescue
|
51
|
+
self.logger.error { "Given file <#{filename}> does not exist (tag specified in <#{refNode.recursive_value( 'src' )}>" }
|
52
|
+
end
|
53
|
+
content = CGI::escapeHTML( content ) if get_param( 'escapeHTML' )
|
54
|
+
|
55
|
+
content
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: lang.rb 203 2005-02-21 18:42:04Z 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/tags/tags'
|
24
|
+
|
25
|
+
module Tags
|
26
|
+
|
27
|
+
# Generates a list with all the languages for a page.
|
28
|
+
class LanguageTag < DefaultTag
|
29
|
+
|
30
|
+
summary 'Provides links to translations of the page'
|
31
|
+
add_param 'separator', ' | ', 'Separates the languages from each other.'
|
32
|
+
add_param 'showSingleLang', true, 'True if the language link should be shown '\
|
33
|
+
'although the page is only available in one language.'
|
34
|
+
depends_on 'Tags'
|
35
|
+
|
36
|
+
def initialize
|
37
|
+
super
|
38
|
+
register_tag( 'lang' )
|
39
|
+
end
|
40
|
+
|
41
|
+
def process_tag( tag, node, refNode )
|
42
|
+
output = node.parent.children.sort do |a, b| a['lang'] <=> b['lang'] end.collect do |n|
|
43
|
+
n['processor'].get_html_link( n, n, n['lang'] )
|
44
|
+
end.join( get_param( 'separator' ) )
|
45
|
+
return ( get_param( 'showSingleLang' ) || node.parent.children.length > 1 ? output : "" )
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: menu.rb 203 2005-02-21 18:42:04Z 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/node'
|
24
|
+
require 'webgen/plugins/tags/tags'
|
25
|
+
|
26
|
+
module Tags
|
27
|
+
|
28
|
+
# Generates a menu. All page files for which the meta information +inMenu+ is set are displayed.
|
29
|
+
# If you have one page in several languages, it is sufficient to add this meta information to only
|
30
|
+
# one page file.
|
31
|
+
#
|
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.
|
34
|
+
#
|
35
|
+
# Tag parameters:
|
36
|
+
# [<b>level</b>]
|
37
|
+
# The depth of the menu. A level of one only displays the top level menu files. A level of two
|
38
|
+
# also displays the menu files in the direct subdirectories and so on.
|
39
|
+
class MenuTag < DefaultTag
|
40
|
+
|
41
|
+
|
42
|
+
# Specialised node class for the menu.
|
43
|
+
class MenuNode < Node
|
44
|
+
|
45
|
+
def initialize( parent, node )
|
46
|
+
super( parent )
|
47
|
+
self.logger.info { "Creating menu node for <#{node.recursive_value( 'src', false )}>" }
|
48
|
+
self['title'] = 'Menu: '+ node['title']
|
49
|
+
self['isMenuNode'] = true
|
50
|
+
self['virtual'] = true
|
51
|
+
self['node'] = node
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Sorts recursively all children of the node depending on their order value.
|
56
|
+
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.find {|child| child['menuOrder'].to_s.to_i != 0} if node.kind_of?( FileHandlers::PageHandler::PageNode )
|
71
|
+
value ||= node['menuOrder'].to_s.to_i unless node.nil?
|
72
|
+
|
73
|
+
# fallback value
|
74
|
+
value ||= 0
|
75
|
+
|
76
|
+
value
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
summary 'Builds up a menu'
|
83
|
+
depends_on 'Tags'
|
84
|
+
|
85
|
+
add_param 'menuTag', 'ul', 'The tag used for menus.'
|
86
|
+
add_param 'itemTag', 'li', 'The tag used for menu items.'
|
87
|
+
add_param 'level', 1, \
|
88
|
+
'Specifies how many levels the menu should have by default, ie. how deep it is. ' \
|
89
|
+
'For example, if level = 3, then three levels are always shown at least.'
|
90
|
+
add_param 'subtreeLevel', 3, \
|
91
|
+
'Specifies how many levels should be shown for subtrees. The number specifies ' \
|
92
|
+
'the maximum depth the menu will have.'
|
93
|
+
add_param 'showCurrentSubtreeOnly', true, \
|
94
|
+
'True if only the current subtree should be shown in the menu. If set to false, ' \
|
95
|
+
'each subtree will be shown.'
|
96
|
+
|
97
|
+
def initialize
|
98
|
+
super
|
99
|
+
register_tag( 'menu' )
|
100
|
+
end
|
101
|
+
|
102
|
+
def process_tag( tag, node, refNode )
|
103
|
+
unless defined?( @menuTree )
|
104
|
+
@menuTree = create_menu_tree( Node.root( node ), nil )
|
105
|
+
unless @menuTree.nil?
|
106
|
+
Webgen::Plugin['TreeWalker'].execute( @menuTree, Webgen::Plugin['DebugTreePrinter'] )
|
107
|
+
@menuTree.sort!
|
108
|
+
Webgen::Plugin['TreeWalker'].execute( @menuTree, Webgen::Plugin['DebugTreePrinter'] )
|
109
|
+
end
|
110
|
+
end
|
111
|
+
build_menu( node, @menuTree, 1 )
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
#######
|
116
|
+
private
|
117
|
+
#######
|
118
|
+
|
119
|
+
|
120
|
+
def build_menu( srcNode, node, level )
|
121
|
+
if node.nil? \
|
122
|
+
|| level > get_param( 'subtreeLevel' ) \
|
123
|
+
|| ( level > get_param( 'level' ) \
|
124
|
+
&& ( node['node'].level > srcNode.level \
|
125
|
+
|| ( get_param( 'showCurrentSubtreeOnly' ) && !srcNode.in_subtree?( node['node'] ) )
|
126
|
+
)
|
127
|
+
)
|
128
|
+
return ''
|
129
|
+
end
|
130
|
+
|
131
|
+
out = "<#{get_param( 'menuTag' )}>"
|
132
|
+
node.each do |child|
|
133
|
+
if child.kind_of?( MenuNode )
|
134
|
+
menu = child['node'].kind_of?( FileHandlers::DirHandler::DirNode ) ? build_menu( srcNode, child, level + 1 ) : ''
|
135
|
+
before, after = menu_entry( srcNode, child['node'] )
|
136
|
+
else
|
137
|
+
menu = ''
|
138
|
+
before, after = menu_entry( srcNode, child )
|
139
|
+
end
|
140
|
+
|
141
|
+
out << before
|
142
|
+
out << menu
|
143
|
+
out << after
|
144
|
+
end
|
145
|
+
out << "</#{get_param( 'menuTag' )}>"
|
146
|
+
|
147
|
+
return out
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
def menu_entry( srcNode, node )
|
152
|
+
langNode = node['processor'].get_lang_node( node, srcNode['lang'] )
|
153
|
+
isDir = node.kind_of?( FileHandlers::DirHandler::DirNode )
|
154
|
+
|
155
|
+
styles = []
|
156
|
+
styles << 'webgen-submenu' if isDir
|
157
|
+
styles << 'webgen-menuitem-selected' if langNode.recursive_value( 'dest' ) == srcNode.recursive_value( 'dest' )
|
158
|
+
|
159
|
+
style = " class=\"#{styles.join(' ')}\"" if styles.length > 0
|
160
|
+
link = langNode['processor'].get_html_link( langNode, srcNode, ( isDir ? langNode['directoryName'] || node['directoryName'] : langNode['title'] ) )
|
161
|
+
|
162
|
+
itemTag = get_param( 'itemTag' )
|
163
|
+
if isDir
|
164
|
+
before = "<#{itemTag}#{style}>#{link}"
|
165
|
+
after = "</#{itemTag}>"
|
166
|
+
else
|
167
|
+
before = "<#{itemTag}#{style}>#{link}</#{itemTag}>"
|
168
|
+
after = ""
|
169
|
+
end
|
170
|
+
|
171
|
+
self.logger.debug { [before, after] }
|
172
|
+
return before, after
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
def create_menu_tree( node, parent )
|
177
|
+
menuNode = MenuNode.new( parent, node )
|
178
|
+
|
179
|
+
node.each do |child|
|
180
|
+
menu = create_menu_tree( child, menuNode )
|
181
|
+
menuNode.add_child( menu ) unless menu.nil?
|
182
|
+
end
|
183
|
+
|
184
|
+
return menuNode.has_children? ? menuNode : ( put_node_in_menu?( node ) ? node : nil )
|
185
|
+
end
|
186
|
+
|
187
|
+
|
188
|
+
def put_node_in_menu?( node )
|
189
|
+
inMenu = node['inMenu']
|
190
|
+
inMenu ||= node.parent && node.parent.kind_of?( FileHandlers::PageHandler::PageNode ) &&
|
191
|
+
node.parent.find do |child| child['inMenu'] end
|
192
|
+
inMenu &&= !node['virtual']
|
193
|
+
inMenu
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
|
198
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: meta.rb 203 2005-02-21 18:42:04Z 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/tags/tags'
|
24
|
+
|
25
|
+
module Tags
|
26
|
+
|
27
|
+
# This plugin registers itself as default plugin for tags. It substitutes tags with their
|
28
|
+
# respective values from the node meta data.
|
29
|
+
#
|
30
|
+
# This is very useful if you want to add new meta information to the page description files and
|
31
|
+
# simple copy the values to the output file.
|
32
|
+
class MetaTag < DefaultTag
|
33
|
+
|
34
|
+
summary "Replaces all tags without tag plugin with their respective values from the node meta data"
|
35
|
+
depends_on 'Tags'
|
36
|
+
|
37
|
+
def initialize
|
38
|
+
super
|
39
|
+
register_tag( :default )
|
40
|
+
end
|
41
|
+
|
42
|
+
def process_tag( tag, node, refNode )
|
43
|
+
output = ''
|
44
|
+
if node[tag]
|
45
|
+
output = node[tag]
|
46
|
+
else
|
47
|
+
self.logger.warn { "No value for tag '#{tag}' in <#{refNode.recursive_value( 'src' )}> found in <#{node.recursive_value( 'src' )}>" }
|
48
|
+
end
|
49
|
+
return output
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: navbar.rb 203 2005-02-21 18:42:04Z 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/tags/tags'
|
24
|
+
|
25
|
+
module Tags
|
26
|
+
|
27
|
+
# Generates a navigation bar. A navigation bar consists of all pages in the hierarchy of the
|
28
|
+
# current page.
|
29
|
+
#
|
30
|
+
# For example, assuming we have the following branch
|
31
|
+
# /directory1/directory2/currentFile
|
32
|
+
# this plugin will generate something like this:
|
33
|
+
# root / directory1 / directory2 / currentFile
|
34
|
+
# where each listed name is linked to the corresponding file.
|
35
|
+
class NavbarTag < DefaultTag
|
36
|
+
|
37
|
+
summary 'Shows the hierarchy of current page'
|
38
|
+
add_param 'separator', ' / ', 'Separates the hierachy entries from each other.'
|
39
|
+
depends_on 'Tags'
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
super
|
43
|
+
register_tag( 'navbar' )
|
44
|
+
end
|
45
|
+
|
46
|
+
def process_tag( tag, srcNode, refNode )
|
47
|
+
out = []
|
48
|
+
node = srcNode
|
49
|
+
|
50
|
+
until node.nil?
|
51
|
+
out.push( node['processor'].get_html_link( node, srcNode ) )
|
52
|
+
begin node = node.parent end while !node.nil? && node['virtual']
|
53
|
+
end
|
54
|
+
|
55
|
+
out = out.reverse.join( get_param( 'separator' ) )
|
56
|
+
self.logger.debug { "Navbar for #{srcNode.recursive_value( 'src' )}: #{out}" }
|
57
|
+
out
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# $Id: relocatable.rb 203 2005-02-21 18:42:04Z 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/tags/tags'
|
24
|
+
|
25
|
+
module Tags
|
26
|
+
|
27
|
+
# Changes the path of file. This is very useful for templates. For example, you normally include a
|
28
|
+
# stylesheet in a template. If you specify the filename of the stylesheet directly, the reference
|
29
|
+
# to the stylesheet in the output file of a page file that is not in the same directory as the template
|
30
|
+
# would be invalid.
|
31
|
+
#
|
32
|
+
# By using the +relocatable+ tag you ensure that the path stays valid.
|
33
|
+
#
|
34
|
+
# Tag parameter: the name of the file which should be relocated
|
35
|
+
class RelocatableTag < DefaultTag
|
36
|
+
|
37
|
+
summary 'Adds a relative path to the specified name if necessary'
|
38
|
+
depends_on 'Tags'
|
39
|
+
add_param 'item', nil, 'The item which should be relocatable'
|
40
|
+
set_mandatory 'item', true
|
41
|
+
|
42
|
+
def initialize
|
43
|
+
super
|
44
|
+
register_tag( 'relocatable' )
|
45
|
+
end
|
46
|
+
|
47
|
+
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['processor'].get_lang_node( destNode, node['lang'] ) ) )
|
51
|
+
else
|
52
|
+
return ''
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|