webgen 0.4.4 → 0.4.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 (219) hide show
  1. data/ChangeLog +46 -0
  2. data/VERSION +1 -1
  3. data/doc/src/default.template +4 -8
  4. data/doc/src/documentation/references/meta_info_reference.page +17 -0
  5. data/doc/src/news.page +15 -0
  6. data/doc/src/project.todo +9 -2
  7. data/lib/webgen/config.rb +1 -1
  8. data/lib/webgen/plugins/coreplugins/resourcemanager.rb +3 -3
  9. data/lib/webgen/plugins/filehandlers/filehandler.rb +15 -2
  10. data/lib/webgen/plugins/filehandlers/gallery.rb +12 -8
  11. data/lib/webgen/plugins/menustyles/default.rb +6 -1
  12. data/lib/webgen/plugins/tags/breadcrumbtrail.rb +1 -1
  13. data/lib/webgen/plugins/tags/langbar.rb +1 -1
  14. data/lib/webgen/plugins/tags/news.rb +2 -0
  15. data/lib/webgen/plugins/tags/sitemap.rb +1 -1
  16. data/lib/webgen/website.rb +3 -3
  17. metadata +2 -256
  18. data/doc/examples/website_styles/1024px/README +0 -9
  19. data/doc/examples/website_styles/1024px/config.yaml +0 -2
  20. data/doc/examples/website_styles/1024px/src/about.page +0 -12
  21. data/doc/examples/website_styles/1024px/src/default.css +0 -188
  22. data/doc/examples/website_styles/1024px/src/default.template +0 -62
  23. data/doc/examples/website_styles/1024px/src/download.page +0 -15
  24. data/doc/examples/website_styles/1024px/src/features.page +0 -8
  25. data/doc/examples/website_styles/1024px/src/images/background.gif +0 -0
  26. data/doc/examples/website_styles/1024px/src/index.page +0 -9
  27. data/doc/examples/website_styles/1024px/src/screenshots.page +0 -18
  28. data/doc/examples/website_styles/andreas00/README +0 -9
  29. data/doc/examples/website_styles/andreas00/config.yaml +0 -2
  30. data/doc/examples/website_styles/andreas00/src/about.page +0 -12
  31. data/doc/examples/website_styles/andreas00/src/default.css +0 -290
  32. data/doc/examples/website_styles/andreas00/src/default.template +0 -62
  33. data/doc/examples/website_styles/andreas00/src/download.page +0 -15
  34. data/doc/examples/website_styles/andreas00/src/features.page +0 -8
  35. data/doc/examples/website_styles/andreas00/src/images/bg.gif +0 -0
  36. data/doc/examples/website_styles/andreas00/src/images/front.jpg +0 -0
  37. data/doc/examples/website_styles/andreas00/src/images/menubg.gif +0 -0
  38. data/doc/examples/website_styles/andreas00/src/images/menubg2.gif +0 -0
  39. data/doc/examples/website_styles/andreas00/src/index.page +0 -9
  40. data/doc/examples/website_styles/andreas00/src/screenshots.page +0 -18
  41. data/doc/examples/website_styles/andreas01/README +0 -9
  42. data/doc/examples/website_styles/andreas01/config.yaml +0 -2
  43. data/doc/examples/website_styles/andreas01/src/about.page +0 -12
  44. data/doc/examples/website_styles/andreas01/src/default.css +0 -310
  45. data/doc/examples/website_styles/andreas01/src/default.template +0 -63
  46. data/doc/examples/website_styles/andreas01/src/download.page +0 -15
  47. data/doc/examples/website_styles/andreas01/src/features.page +0 -8
  48. data/doc/examples/website_styles/andreas01/src/images/bg.gif +0 -0
  49. data/doc/examples/website_styles/andreas01/src/images/front.jpg +0 -0
  50. data/doc/examples/website_styles/andreas01/src/index.page +0 -9
  51. data/doc/examples/website_styles/andreas01/src/print.css +0 -35
  52. data/doc/examples/website_styles/andreas01/src/screenshots.page +0 -18
  53. data/doc/examples/website_styles/andreas03/README +0 -9
  54. data/doc/examples/website_styles/andreas03/config.yaml +0 -2
  55. data/doc/examples/website_styles/andreas03/src/about.page +0 -12
  56. data/doc/examples/website_styles/andreas03/src/default.css +0 -223
  57. data/doc/examples/website_styles/andreas03/src/default.template +0 -60
  58. data/doc/examples/website_styles/andreas03/src/download.page +0 -15
  59. data/doc/examples/website_styles/andreas03/src/features.page +0 -8
  60. data/doc/examples/website_styles/andreas03/src/images/bodybg.png +0 -0
  61. data/doc/examples/website_styles/andreas03/src/images/contbg.png +0 -0
  62. data/doc/examples/website_styles/andreas03/src/images/footerbg.png +0 -0
  63. data/doc/examples/website_styles/andreas03/src/images/gradient1.png +0 -0
  64. data/doc/examples/website_styles/andreas03/src/images/gradient2.png +0 -0
  65. data/doc/examples/website_styles/andreas03/src/index.page +0 -9
  66. data/doc/examples/website_styles/andreas03/src/screenshots.page +0 -18
  67. data/doc/examples/website_styles/andreas04/README +0 -9
  68. data/doc/examples/website_styles/andreas04/config.yaml +0 -2
  69. data/doc/examples/website_styles/andreas04/src/about.page +0 -12
  70. data/doc/examples/website_styles/andreas04/src/default.css +0 -290
  71. data/doc/examples/website_styles/andreas04/src/default.template +0 -83
  72. data/doc/examples/website_styles/andreas04/src/download.page +0 -15
  73. data/doc/examples/website_styles/andreas04/src/features.page +0 -8
  74. data/doc/examples/website_styles/andreas04/src/images/blinkarrow.gif +0 -0
  75. data/doc/examples/website_styles/andreas04/src/images/bodybg.png +0 -0
  76. data/doc/examples/website_styles/andreas04/src/images/contentbg.png +0 -0
  77. data/doc/examples/website_styles/andreas04/src/images/entrybg.png +0 -0
  78. data/doc/examples/website_styles/andreas04/src/images/flash.gif +0 -0
  79. data/doc/examples/website_styles/andreas04/src/images/flash2.gif +0 -0
  80. data/doc/examples/website_styles/andreas04/src/images/globe.gif +0 -0
  81. data/doc/examples/website_styles/andreas04/src/images/globebottom.gif +0 -0
  82. data/doc/examples/website_styles/andreas04/src/images/linkarrow.gif +0 -0
  83. data/doc/examples/website_styles/andreas04/src/images/menuhover.png +0 -0
  84. data/doc/examples/website_styles/andreas04/src/index.page +0 -9
  85. data/doc/examples/website_styles/andreas04/src/screenshots.page +0 -18
  86. data/doc/examples/website_styles/andreas05/README +0 -9
  87. data/doc/examples/website_styles/andreas05/config.yaml +0 -2
  88. data/doc/examples/website_styles/andreas05/src/about.page +0 -12
  89. data/doc/examples/website_styles/andreas05/src/default.css +0 -33
  90. data/doc/examples/website_styles/andreas05/src/default.template +0 -42
  91. data/doc/examples/website_styles/andreas05/src/download.page +0 -15
  92. data/doc/examples/website_styles/andreas05/src/features.page +0 -8
  93. data/doc/examples/website_styles/andreas05/src/images/bodybg.gif +0 -0
  94. data/doc/examples/website_styles/andreas05/src/images/front.png +0 -0
  95. data/doc/examples/website_styles/andreas05/src/index.page +0 -9
  96. data/doc/examples/website_styles/andreas05/src/screenshots.page +0 -18
  97. data/doc/examples/website_styles/andreas06/README +0 -9
  98. data/doc/examples/website_styles/andreas06/config.yaml +0 -2
  99. data/doc/examples/website_styles/andreas06/src/about.page +0 -12
  100. data/doc/examples/website_styles/andreas06/src/default.css +0 -354
  101. data/doc/examples/website_styles/andreas06/src/default.template +0 -72
  102. data/doc/examples/website_styles/andreas06/src/download.page +0 -15
  103. data/doc/examples/website_styles/andreas06/src/features.page +0 -8
  104. data/doc/examples/website_styles/andreas06/src/images/bodybg.gif +0 -0
  105. data/doc/examples/website_styles/andreas06/src/images/boxbg.gif +0 -0
  106. data/doc/examples/website_styles/andreas06/src/images/greypx.gif +0 -0
  107. data/doc/examples/website_styles/andreas06/src/images/header.jpg +0 -0
  108. data/doc/examples/website_styles/andreas06/src/images/innerbg.gif +0 -0
  109. data/doc/examples/website_styles/andreas06/src/images/leaves.jpg +0 -0
  110. data/doc/examples/website_styles/andreas06/src/images/tabs.gif +0 -0
  111. data/doc/examples/website_styles/andreas06/src/index.page +0 -9
  112. data/doc/examples/website_styles/andreas06/src/screenshots.page +0 -18
  113. data/doc/examples/website_styles/andreas07/README +0 -9
  114. data/doc/examples/website_styles/andreas07/config.yaml +0 -2
  115. data/doc/examples/website_styles/andreas07/src/about.page +0 -12
  116. data/doc/examples/website_styles/andreas07/src/browserfix.css +0 -7
  117. data/doc/examples/website_styles/andreas07/src/default.css +0 -92
  118. data/doc/examples/website_styles/andreas07/src/default.template +0 -44
  119. data/doc/examples/website_styles/andreas07/src/download.page +0 -15
  120. data/doc/examples/website_styles/andreas07/src/features.page +0 -8
  121. data/doc/examples/website_styles/andreas07/src/images/bodybg.gif +0 -0
  122. data/doc/examples/website_styles/andreas07/src/images/sidebarbg.gif +0 -0
  123. data/doc/examples/website_styles/andreas07/src/index.page +0 -9
  124. data/doc/examples/website_styles/andreas07/src/screenshots.page +0 -18
  125. data/doc/examples/website_styles/andreas08/README +0 -9
  126. data/doc/examples/website_styles/andreas08/config.yaml +0 -2
  127. data/doc/examples/website_styles/andreas08/src/about.page +0 -12
  128. data/doc/examples/website_styles/andreas08/src/default.css +0 -224
  129. data/doc/examples/website_styles/andreas08/src/default.template +0 -53
  130. data/doc/examples/website_styles/andreas08/src/download.page +0 -15
  131. data/doc/examples/website_styles/andreas08/src/features.page +0 -8
  132. data/doc/examples/website_styles/andreas08/src/index.page +0 -9
  133. data/doc/examples/website_styles/andreas08/src/screenshots.page +0 -18
  134. data/doc/examples/website_styles/andreas09/README +0 -9
  135. data/doc/examples/website_styles/andreas09/config.yaml +0 -2
  136. data/doc/examples/website_styles/andreas09/src/about.page +0 -12
  137. data/doc/examples/website_styles/andreas09/src/default.css +0 -308
  138. data/doc/examples/website_styles/andreas09/src/default.template +0 -70
  139. data/doc/examples/website_styles/andreas09/src/download.page +0 -15
  140. data/doc/examples/website_styles/andreas09/src/features.page +0 -8
  141. data/doc/examples/website_styles/andreas09/src/images/bodybg-black.jpg +0 -0
  142. data/doc/examples/website_styles/andreas09/src/images/bodybg-green.jpg +0 -0
  143. data/doc/examples/website_styles/andreas09/src/images/bodybg-orange.jpg +0 -0
  144. data/doc/examples/website_styles/andreas09/src/images/bodybg-purple.jpg +0 -0
  145. data/doc/examples/website_styles/andreas09/src/images/bodybg-red.jpg +0 -0
  146. data/doc/examples/website_styles/andreas09/src/images/bodybg.jpg +0 -0
  147. data/doc/examples/website_styles/andreas09/src/images/footerbg.jpg +0 -0
  148. data/doc/examples/website_styles/andreas09/src/images/menuhover-black.jpg +0 -0
  149. data/doc/examples/website_styles/andreas09/src/images/menuhover-green.jpg +0 -0
  150. data/doc/examples/website_styles/andreas09/src/images/menuhover-orange.jpg +0 -0
  151. data/doc/examples/website_styles/andreas09/src/images/menuhover-purple.jpg +0 -0
  152. data/doc/examples/website_styles/andreas09/src/images/menuhover-red.jpg +0 -0
  153. data/doc/examples/website_styles/andreas09/src/images/menuhover.jpg +0 -0
  154. data/doc/examples/website_styles/andreas09/src/index.page +0 -9
  155. data/doc/examples/website_styles/andreas09/src/screenshots.page +0 -18
  156. data/doc/examples/website_styles/default/README +0 -9
  157. data/doc/examples/website_styles/default/config.yaml +0 -2
  158. data/doc/examples/website_styles/default/src/about.page +0 -12
  159. data/doc/examples/website_styles/default/src/default.css +0 -84
  160. data/doc/examples/website_styles/default/src/default.template +0 -38
  161. data/doc/examples/website_styles/default/src/download.page +0 -15
  162. data/doc/examples/website_styles/default/src/features.page +0 -8
  163. data/doc/examples/website_styles/default/src/index.page +0 -9
  164. data/doc/examples/website_styles/default/src/screenshots.page +0 -18
  165. data/doc/examples/website_templates/default/README +0 -8
  166. data/doc/examples/website_templates/default/config.yaml +0 -2
  167. data/doc/examples/website_templates/default/src/default.css +0 -84
  168. data/doc/examples/website_templates/default/src/default.template +0 -38
  169. data/doc/examples/website_templates/default/src/index.page +0 -8
  170. data/doc/examples/website_templates/personal_hp/README +0 -8
  171. data/doc/examples/website_templates/personal_hp/config.yaml +0 -2
  172. data/doc/examples/website_templates/personal_hp/src/about.page +0 -12
  173. data/doc/examples/website_templates/personal_hp/src/default.css +0 -84
  174. data/doc/examples/website_templates/personal_hp/src/default.template +0 -38
  175. data/doc/examples/website_templates/personal_hp/src/index.page +0 -9
  176. data/doc/examples/website_templates/personal_hp/src/links.page +0 -22
  177. data/doc/examples/website_templates/personal_hp/src/projects.page +0 -20
  178. data/doc/examples/website_templates/project/README +0 -9
  179. data/doc/examples/website_templates/project/config.yaml +0 -2
  180. data/doc/examples/website_templates/project/src/about.page +0 -12
  181. data/doc/examples/website_templates/project/src/default.css +0 -84
  182. data/doc/examples/website_templates/project/src/default.template +0 -38
  183. data/doc/examples/website_templates/project/src/download.page +0 -15
  184. data/doc/examples/website_templates/project/src/features.page +0 -8
  185. data/doc/examples/website_templates/project/src/index.page +0 -9
  186. data/doc/examples/website_templates/project/src/screenshots.page +0 -18
  187. data/doc/plugin/gallery/slides/collage.rb +0 -337
  188. data/doc/src/examples/gallery_styles/default/default.gallery +0 -78
  189. data/doc/src/examples/gallery_styles/default/gallery_gallery.template +0 -38
  190. data/doc/src/examples/gallery_styles/default/gallery_image.template +0 -30
  191. data/doc/src/examples/gallery_styles/default/gallery_main.template +0 -18
  192. data/doc/src/examples/gallery_styles/index.page +0 -22
  193. data/doc/src/examples/gallery_styles/slides/gallery_gallery.template +0 -62
  194. data/doc/src/examples/gallery_styles/slides/gallery_image.template +0 -53
  195. data/doc/src/examples/gallery_styles/slides/gallery_main.template +0 -32
  196. data/doc/src/examples/gallery_styles/slides/slides.gallery +0 -79
  197. data/doc/src/examples/sipttra_styles/default.page +0 -5
  198. data/doc/src/examples/sipttra_styles/default/css/sipttra.rcss +0 -71
  199. data/doc/src/examples/sipttra_styles/default/default.template +0 -16
  200. data/doc/src/examples/sipttra_styles/default/index.todo +0 -60
  201. data/doc/src/examples/sipttra_styles/default/js/sipttra.js +0 -7
  202. data/doc/src/examples/sipttra_styles/default/sipttra.template +0 -105
  203. data/doc/src/examples/sipttra_styles/index.page +0 -17
  204. data/doc/src/examples/website_styles/1024px.page +0 -5
  205. data/doc/src/examples/website_styles/andreas00.page +0 -5
  206. data/doc/src/examples/website_styles/andreas01.page +0 -5
  207. data/doc/src/examples/website_styles/andreas03.page +0 -5
  208. data/doc/src/examples/website_styles/andreas04.page +0 -5
  209. data/doc/src/examples/website_styles/andreas05.page +0 -5
  210. data/doc/src/examples/website_styles/andreas06.page +0 -5
  211. data/doc/src/examples/website_styles/andreas07.page +0 -5
  212. data/doc/src/examples/website_styles/andreas08.page +0 -5
  213. data/doc/src/examples/website_styles/andreas09.page +0 -5
  214. data/doc/src/examples/website_styles/default.page +0 -5
  215. data/doc/src/examples/website_styles/index.page +0 -76
  216. data/doc/src/examples/website_templates/default.page +0 -5
  217. data/doc/src/examples/website_templates/index.page +0 -24
  218. data/doc/src/examples/website_templates/personal_hp.page +0 -5
  219. data/doc/src/examples/website_templates/project.page +0 -5
@@ -1,18 +0,0 @@
1
- ---
2
- title: Screenshots
3
- inMenu: true
4
- orderInfo: 40
5
- ---
6
- h2. Screenshots
7
-
8
- h3. Main View
9
-
10
- Image of Main View
11
-
12
- Description of image
13
-
14
- h3. Next image
15
-
16
- Image
17
-
18
- bla bla bla
@@ -1,337 +0,0 @@
1
- require 'rubygems'
2
- require 'RMagick'
3
-
4
- REF = self
5
-
6
- module Collage
7
-
8
- include REF
9
-
10
- class Layouter < Webgen::Plugin
11
-
12
- infos( :name => 'GalleryLayouter/slides',
13
- :author => Webgen::AUTHOR,
14
- :summary => 'Handles additional tasks for the gallery layout \'slides\''
15
- )
16
-
17
- depends_on 'Core/ResourceManager'
18
-
19
- def initialize( plugin_manager )
20
- super
21
- @plugin_manager['Core/ResourceManager'].append_data( 'webgen-css', '
22
- .thumb {
23
- display:block;
24
- }
25
- ')
26
- end
27
-
28
- def handle_gallery( ginfo, parent )
29
- # Create collage node
30
- collage_writer = @plugin_manager['File/CollageWriter']
31
- file_handler = @plugin_manager['Core/FileHandler']
32
- node = file_handler.create_node( collage_name( ginfo ), parent, collage_writer ) do |fn, parent, h, mi|
33
- h.create_node( fn, parent, mi, {:parent => parent, :ginfo => ginfo} )
34
- end
35
- ginfo[:collage_node] = node
36
-
37
- # Create collage thumbnail node
38
- collage_thumb_writer = @plugin_manager['File/CollageThumbWriter']
39
- node = file_handler.create_node( collage_thumb_name( ginfo ), parent, collage_thumb_writer ) do |fn, parent, h, mi|
40
- h.create_node( fn, parent, mi, {:parent => parent, :ginfo => ginfo} )
41
- end
42
- ginfo[:collage_thumb_node] = node
43
-
44
- # Create background slide
45
- slide_writer = @plugin_manager['File/SlideWriter']
46
- node = file_handler.create_node( slide_name( ginfo ), parent, slide_writer ) do |fn, parent, h, mi|
47
- h.create_node( fn, parent, mi, {:parent => parent, :ginfo => ginfo} )
48
- end
49
- ginfo[:slide_node] = node
50
-
51
- slide_url = ginfo[:slide_node].to_url
52
- css_url = slide_url + ( '/' + @plugin_manager['Core/ResourceManager'].get_resource( 'webgen-css' ).output_path )
53
-
54
- @plugin_manager['Core/ResourceManager'].append_data( 'webgen-css', "
55
- .thumb-#{collage_title(ginfo)} {
56
- background: url(\"#{slide_url.route_from(css_url)}\") 0 0 no-repeat;
57
- width: #{ginfo[:slide_node].slide_size[0]}px;
58
- height: #{ginfo[:slide_node].slide_size[0]}px;
59
- }
60
- .thumb-#{collage_title(ginfo)} img {
61
- padding: #{ginfo[:slide_node].slide_border_width}px;
62
- }
63
- .thumb-#{collage_title(ginfo)} img:hover {
64
- border: 1px solid black;
65
- }
66
- ")
67
- end
68
-
69
- #######
70
- private
71
- #######
72
-
73
- def collage_title( ginfo )
74
- ginfo['title'].tr( ' ', '_' )
75
- end
76
-
77
- def collage_name( ginfo )
78
- collage_title( ginfo ) + '_collage.jpg'
79
- end
80
-
81
- def collage_thumb_name( ginfo )
82
- collage_title( ginfo ) + '_collage_tn.jpg'
83
- end
84
-
85
- def slide_name( ginfo )
86
- collage_title( ginfo ) + '_slide.png'
87
- end
88
-
89
- end
90
-
91
-
92
- class SlideWriter < FileHandlers::DefaultHandler
93
-
94
- include Magick
95
-
96
- infos( :name => 'File/SlideWriter',
97
- :author => Webgen::AUTHOR,
98
- :summary => 'Generates a slide background for image thumbnails' )
99
-
100
- param 'borderWidth', 10, 'The width of the slide border'
101
- param 'color', '#ffffff', 'The color of the slide'
102
-
103
- def create_node( path, parent, meta_info, data )
104
- node = Node.new( parent, File.basename( path ) )
105
- node.meta_info.update( meta_info )
106
- node.node_info[:data] = data
107
- node.node_info[:processor] = self
108
-
109
- node
110
- end
111
-
112
- def slide_size( node )
113
- (node.node_info[:data][:ginfo]['thumbnailSize'] || param( 'thumbnailSize', 'File/ThumbnailWriter' )).split('x').collect{ |s| s.to_i + slide_border_width( node )*2 }
114
- end
115
-
116
- def slide_color( node )
117
- node.node_info[:data][:ginfo]['slideColor'] || param( 'color' )
118
- end
119
-
120
- def slide_border_width( node )
121
- node.node_info[:data][:ginfo]['slideBorderWidth'] || param( 'borderWidth' )
122
- end
123
-
124
- def create_slide( node )
125
- return if node.node_info[:slide]
126
-
127
- ginfo = node.node_info[:data][:ginfo]
128
-
129
- width, height = node.slide_size
130
- border_width = node.slide_border_width
131
-
132
- slide = Image.new( width, height ) { self.background_color = 'transparent' }
133
-
134
- gc = Magick::Draw.new
135
- gc.fill_opacity(0)
136
- gc.stroke( node.slide_color )
137
- gc.stroke_width( border_width )
138
- gc.roundrectangle( border_width/2, border_width/2, width-border_width/2, height-border_width/2, 5, 5)
139
- gc.draw(slide)
140
-
141
- node.node_info[:slide] = slide
142
- end
143
-
144
- def write_node( node )
145
- return if File.exists?( node.full_path ) #TODO always create? what settings to check?
146
- create_slide( node )
147
- node.node_info[:slide].write( node.full_path )
148
- end
149
-
150
- end
151
-
152
-
153
- # Most of the code in create_slide, backandforth and creat_collage is from Corban Brook from
154
- # his tutorial
155
- # http://schf.uc.org/articles/2006/10/18/render-greatlooking-collages-with-ruby-and-rmagick
156
- # and has slightly been adapted for use in this gallery style.
157
- class CollageWriter < FileHandlers::DefaultHandler
158
-
159
- include Magick
160
-
161
- infos( :name => 'File/CollageWriter',
162
- :author => Webgen::AUTHOR,
163
- :summary => 'Generates a pretty collage for the main gallery page' )
164
-
165
- param 'size', '700x300', 'The size of the generated collage'
166
- param 'color', '#CCCCCC', 'The background color of the collage'
167
-
168
- def create_node( path, parent, meta_info, data )
169
- node = Node.new( parent, File.basename( path ) )
170
- node.meta_info.update( meta_info )
171
- node.node_info[:data] = data
172
- node.node_info[:processor] = self
173
- node
174
- end
175
-
176
- def collage_size( node )
177
- (node.node_info[:data][:ginfo]['collageSize'] || param( 'size' )).split('x').collect{ |s| s.to_i}
178
- end
179
-
180
- def collage_color( node )
181
- node.node_info[:data][:ginfo]['collageColor'] || param( 'color' )
182
- end
183
-
184
- def create_collage( node )
185
- return if node.node_info[:collage]
186
- parent = node.node_info[:data][:parent]
187
- ginfo = node.node_info[:data][:ginfo]
188
-
189
- ginfo[:slide_node].create_slide
190
-
191
- width, height = node.collage_size
192
- slide_border_width = ginfo[:slide_node].slide_border_width
193
- slide_width, slide_height = ginfo[:slide_node].slide_size
194
-
195
- # create background
196
- create_collage_background( node )
197
- collage = node.node_info[:collage_background]
198
-
199
- # fetch four random images
200
- images = []
201
- (1..4).each do
202
- gal_number = rand(ginfo.galleries.length)
203
- pic_number = rand(ginfo.galleries[gal_number].images.length)
204
- redo if images.include?( [gal_number, pic_number] )
205
- images << [gal_number, pic_number]
206
- end
207
-
208
- # create main image
209
- base_image = images.shift
210
- base_image = ginfo.galleries[base_image[0]].images[base_image[1]]
211
- base_image_file = File.join( parent.node_info[:src], base_image.filename )
212
- photo = Image.read( base_image_file ).first
213
- photo.crop_resized!( width - slide_border_width*2, height*2/3 - slide_border_width )
214
- collage.composite!( photo, slide_border_width, slide_border_width, OverCompositeOp )
215
-
216
- # Arrange the other three images
217
- (images.size-1).downto(0) do |i|
218
- image = ginfo.galleries[i[0]].images[i[1]]
219
- image_file = File.join( parent.node_info[:src], image.filename )
220
- slide = create_slide( ginfo, image_file, slide_width, slide_height, slide_border_width )
221
- collage.composite!( slide, width/2 - slide_width*3/2 + i * slide_width*2/3 + rand(15),
222
- height*2/3 - slide_height*2/3 + rand(15), OverCompositeOp)
223
- end
224
-
225
- node.node_info[:collage] = collage
226
- end
227
-
228
- def write_node( node )
229
- return if File.exists?( node.full_path ) #TODO always create? what settings to check?
230
- return if node.node_info[:data][:ginfo].galleries.length == 1
231
- create_collage( node )
232
- node.node_info[:collage].write( node.full_path )
233
- end
234
-
235
- #######
236
- private
237
- #######
238
-
239
- def create_collage_background( node )
240
- return if node.node_info[:collage_background]
241
-
242
- ginfo = node.node_info[:data][:ginfo]
243
- width, height = node.collage_size
244
- color = node.collage_color
245
- slide_color = ginfo[:slide_node].slide_color
246
- slide_border_width = ginfo[:slide_node].slide_border_width
247
-
248
- temp = Image.new( width, height ) { self.background_color = color }
249
- pic = Image.new( width, height) { self.background_color = 'transparent' }
250
-
251
- gc = Draw.new
252
- gc.fill( color )
253
- gc.stroke( slide_color )
254
- gc.stroke_width( slide_border_width )
255
- gc.rectangle( slide_border_width/2, slide_border_width/2, width-slide_border_width/2-3, height*2/3 )
256
- gc.draw(pic)
257
-
258
- shadow = pic.shadow( 0, 0, 0.1, '20%' )
259
- temp.composite!( shadow, 3, 3, OverCompositeOp )
260
- temp.composite!( pic, 0, 0, OverCompositeOp )
261
-
262
- node.node_info[:collage_background] = temp
263
- end
264
-
265
- def backandforth(degree)
266
- polarity = rand(2) * -1
267
- (polarity < 0 ? rand(degree) * polarity : rand(degree) )
268
- end
269
-
270
- def create_slide( ginfo, filename, s_width, s_height, s_border_width )
271
- slide = ginfo[:slide_node].node_info[:slide].clone
272
- slide_background = Image.new( slide.columns, slide.rows ) { self.background_color = 'transparent' }
273
- photo = Image.read( filename ).first
274
-
275
- i_width = s_width - s_border_width*2
276
- i_height = s_height - s_border_width*2
277
-
278
- # create a grey scale gradient fill for our mask
279
- mask_fill = GradientFill.new( 0, 0, 0, i_height, '#FFFFFF', '#AAAAAA' )
280
- mask = Image.new( i_width, i_height, mask_fill )
281
- # create thumbnail sized square image of photo
282
- photo.crop_resized!( i_width, i_height )
283
-
284
- # apply alpha mask to slide
285
- photo.matte = true
286
- mask.matte = false
287
- photo.composite!( mask, 0, 0, CopyOpacityCompositeOp )
288
-
289
- # composite photo and slide on transparent background
290
- slide_background.composite!( photo, s_border_width, s_border_width, OverCompositeOp)
291
- slide_background.composite!( slide, 0, 0, OverCompositeOp)
292
-
293
- # rotate slide a little bit
294
- slide_background.rotate!( backandforth(40) )
295
-
296
- # create workspace to apply shadow
297
- workspace = Image.new( slide_background.columns+5, slide_background.rows+5 ) { self.background_color = 'transparent' }
298
- shadow = slide_background.shadow( 0, 0, 0.1, '20%' )
299
- workspace.composite!( shadow, 3, 3, OverCompositeOp )
300
- workspace.composite!( slide_background, NorthWestGravity, OverCompositeOp )
301
-
302
- return workspace
303
- end
304
-
305
- end
306
-
307
-
308
- class CollageThumbWriter < FileHandlers::DefaultHandler
309
-
310
- include Magick
311
-
312
- infos( :name => 'File/CollageThumbWriter',
313
- :author => Webgen::AUTHOR,
314
- :summary => 'Generates a thumbnail of a collage image' )
315
-
316
- def create_node( path, parent, meta_info, data )
317
- node = Node.new( parent, File.basename( path ) )
318
- node.meta_info.update( meta_info )
319
- node.node_info[:data] = data
320
- node.node_info[:processor] = self
321
- node
322
- end
323
-
324
- def write_node( node )
325
- return if File.exists?( node.full_path ) #TODO always create? what settings to check?
326
- return if node.node_info[:data][:ginfo].galleries.length == 1
327
- ginfo = node.node_info[:data][:ginfo]
328
- ginfo[:collage_node].create_collage
329
- collage = ginfo[:collage_node].node_info[:collage]
330
- collage.change_geometry( ginfo[:slide_node].slide_size.collect {|s| s*2}.join('x') ) {|c,r,i| i.resize!( c, r )}
331
- collage.write( node.full_path )
332
- end
333
-
334
- end
335
-
336
-
337
- end
@@ -1,78 +0,0 @@
1
- title: index
2
- images: ../../images/*
3
- imagesPerPage: 8
4
- mainPageMetaInfo:
5
- inMenu: true
6
-
7
- ---
8
- ../../images/image01.jpg:
9
- title: Chinese Garden
10
- description: This picture show the Chinese Garden located in the outskirts of Vienna (Austria).
11
-
12
- ../../images/image02.jpg:
13
- title: Goldenes Dach
14
- description: This is the landmark of Innsbruck (Tyrol, Austria), called the 'Goldene Dach' (golden roof).
15
-
16
- ../../images/image03.jpg:
17
- title: Mountains in Innsbruck
18
- description: A view from the <a href='http://www.nordpark.com'>NordPark</a> in Innsbruck.
19
-
20
- ../../images/image04.jpg:
21
- title: Kristallwelten 1
22
- description: The entry to the 'Kristallwelten' of <a href='http://www.swarovski.com'>Swarovski</a> in Innsbruck.
23
-
24
- ../../images/image05.jpg:
25
- title: Kristallwelten 2
26
- description: On the roof of the building.
27
-
28
- ../../images/image06.jpg:
29
- title: Kristallwelten 3
30
- description: Some crystals.
31
-
32
- ../../images/image07.jpg:
33
- title: Minimundus 1
34
- description: A french castle
35
-
36
- ../../images/image08.jpg:
37
- title: Minimundus 2
38
- description: A small copy of the <a href=''>Sagrada Familia</a> of Barcelona.
39
-
40
- ../../images/image09.jpg:
41
- title: Minimundus 3
42
- description: The Stephansdom in Vienna.
43
-
44
- ../../images/image10.jpg:
45
- title: Minimundus 4
46
- description: Overview of Minimundus, a place with smaller versions of famous buildings.
47
-
48
- ../../images/image11.jpg:
49
- title: Velden
50
- description: Photo from Velden, Wörtersee, Carinthia, Austria
51
-
52
- ../../images/image12.jpg:
53
- title: Stockholm 1
54
- description: A 300-year-old ship, the Wasa, located in the Wasamuseet in Stockholm.
55
-
56
- ../../images/image13.jpg:
57
- title: Stockholm 2
58
- description: A fort near Stockholm.
59
-
60
- ../../images/image14.jpg:
61
- title: Stockholm 3
62
- description: Overview of Gamla Stan (old town centre of Stockholm)
63
-
64
- ../../images/image15.jpg:
65
- title: Stockholm 4
66
- description: View from a bridge in the direction of Gamla Stan
67
-
68
- ../../images/image16.jpg:
69
- title: Zakynthos 1
70
- description: An isle that looks like a turtle
71
-
72
- ../../images/image17.jpg:
73
- title: Zakynthos 2
74
- description: The oldest olive tree of Zakynthos.
75
-
76
- ../../images/image18.jpg:
77
- title: Zakynthos 3
78
- description: The Navagio ship wreck, very famous Greek tourist destination.
@@ -1,38 +0,0 @@
1
- --- content, html
2
- <div class="webgen-gallery webgen-gallery-gallery">
3
- <% ginfo = node.node_info[:ginfo] %>
4
- <table width="100%">
5
- <tr>
6
- <td style="width: 33%" align="left">
7
- <% if ginfo.prev_gallery %>
8
- <a href="{relocatable: <%= ginfo.prev_gallery.pagename %>}">&lt;&lt;&nbsp;<%= ginfo.prev_gallery.thumbnail('style'=>'vertical-align: middle', 'class'=>'webgen-gallery-thumbnail') %></a>
9
- <% end %>
10
- </td>
11
- <td style="width: 34%" align="center">
12
- <% if ginfo.mainpage %>
13
- <a href="{relocatable: <%= ginfo.mainpage.pagename %>}">^^&nbsp;<%= ginfo.mainpage.title %>&nbsp;^^</a>
14
- <% end %>
15
- </td>
16
- <td style="width: 33%" align="right">
17
- <% if ginfo.next_gallery %>
18
- <a href="{relocatable: <%= ginfo.next_gallery.pagename %>}"><%= ginfo.next_gallery.thumbnail('style'=>'vertical-align: middle', 'class'=>'webgen-gallery-thumbnail') %>&nbsp;&gt;&gt;</a>
19
- <% end %>
20
- </td>
21
- </tr>
22
- </table>
23
-
24
- <table width="100%" border="1">
25
- <% 0.step( ginfo.cur_gallery.images.length - 1, 5 ) do |row_index| %>
26
- <tr>
27
- <% row_index.upto( [row_index + 4, ginfo.cur_gallery.images.length - 1].min ) do |col_index|%>
28
- <td align="center">
29
- <a href="{relocatable: <%= ginfo.cur_gallery.images[col_index].pagename %>}">
30
- <%= ginfo.cur_gallery.images[col_index].thumbnail('class'=>'webgen-gallery-thumbnail') %><br />
31
- <%= ginfo.cur_gallery.images[col_index].title %>
32
- </a>
33
- </td>
34
- <% end %>
35
- </tr>
36
- <% end %>
37
- </table>
38
- </div>