webgen 0.4.4 → 0.4.5

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