webgen 0.3.8 → 0.4.0

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 (618) hide show
  1. data/ChangeLog +2565 -14
  2. data/README +4 -6
  3. data/Rakefile +207 -89
  4. data/TODO +175 -17
  5. data/VERSION +1 -1
  6. data/bin/webgen +1 -2
  7. data/data/webgen/gallery-creator/default.png +0 -0
  8. data/data/webgen/gallery_styles/default/README +6 -0
  9. data/data/webgen/gallery_styles/default/gallery_gallery.template +38 -0
  10. data/data/webgen/gallery_styles/default/gallery_image.template +30 -0
  11. data/data/webgen/gallery_styles/default/gallery_main.template +18 -0
  12. data/data/webgen/gallery_styles/slides/README +18 -0
  13. data/data/webgen/gallery_styles/slides/collage.rb +334 -0
  14. data/data/webgen/gallery_styles/slides/gallery_gallery.template +62 -0
  15. data/data/webgen/gallery_styles/slides/gallery_image.template +53 -0
  16. data/data/webgen/gallery_styles/slides/gallery_main.template +32 -0
  17. data/data/webgen/resources/images/generated_by_webgen.png +0 -0
  18. data/data/webgen/resources/images/webgen_logo.png +0 -0
  19. data/data/webgen/website_styles/1024px/README +10 -0
  20. data/data/webgen/website_styles/1024px/default.css +188 -0
  21. data/data/webgen/website_styles/1024px/default.template +62 -0
  22. data/data/webgen/website_styles/1024px/images/background.gif +0 -0
  23. data/data/webgen/website_styles/andreas00/README +10 -0
  24. data/data/webgen/website_styles/andreas00/default.css +290 -0
  25. data/data/webgen/website_styles/andreas00/default.template +62 -0
  26. data/data/webgen/website_styles/andreas00/images/bg.gif +0 -0
  27. data/data/webgen/website_styles/andreas00/images/front.jpg +0 -0
  28. data/data/webgen/website_styles/andreas00/images/menubg.gif +0 -0
  29. data/data/webgen/website_styles/andreas00/images/menubg2.gif +0 -0
  30. data/data/webgen/website_styles/andreas01/README +11 -0
  31. data/data/webgen/website_styles/andreas01/default.css +310 -0
  32. data/data/webgen/website_styles/andreas01/default.template +63 -0
  33. data/data/webgen/website_styles/andreas01/images/bg.gif +0 -0
  34. data/data/webgen/website_styles/andreas01/images/front.jpg +0 -0
  35. data/data/webgen/website_styles/andreas01/print.css +35 -0
  36. data/data/webgen/website_styles/andreas03/README +11 -0
  37. data/data/webgen/website_styles/andreas03/default.css +223 -0
  38. data/data/webgen/website_styles/andreas03/default.template +60 -0
  39. data/data/webgen/website_styles/andreas03/images/bodybg.png +0 -0
  40. data/data/webgen/website_styles/andreas03/images/contbg.png +0 -0
  41. data/data/webgen/website_styles/andreas03/images/footerbg.png +0 -0
  42. data/data/webgen/website_styles/andreas03/images/gradient1.png +0 -0
  43. data/data/webgen/website_styles/andreas03/images/gradient2.png +0 -0
  44. data/data/webgen/website_styles/andreas04/README +12 -0
  45. data/data/webgen/website_styles/andreas04/default.css +290 -0
  46. data/data/webgen/website_styles/andreas04/default.template +83 -0
  47. data/data/webgen/website_styles/andreas04/images/blinkarrow.gif +0 -0
  48. data/data/webgen/website_styles/andreas04/images/bodybg.png +0 -0
  49. data/data/webgen/website_styles/andreas04/images/contentbg.png +0 -0
  50. data/data/webgen/website_styles/andreas04/images/entrybg.png +0 -0
  51. data/data/webgen/website_styles/andreas04/images/flash.gif +0 -0
  52. data/data/webgen/website_styles/andreas04/images/flash2.gif +0 -0
  53. data/data/webgen/website_styles/andreas04/images/globe.gif +0 -0
  54. data/data/webgen/website_styles/andreas04/images/globebottom.gif +0 -0
  55. data/data/webgen/website_styles/andreas04/images/linkarrow.gif +0 -0
  56. data/data/webgen/website_styles/andreas04/images/menuhover.png +0 -0
  57. data/data/webgen/website_styles/andreas05/README +11 -0
  58. data/data/webgen/website_styles/andreas05/default.css +33 -0
  59. data/data/webgen/website_styles/andreas05/default.template +42 -0
  60. data/data/webgen/website_styles/andreas05/images/bodybg.gif +0 -0
  61. data/data/webgen/website_styles/andreas05/images/front.png +0 -0
  62. data/data/webgen/website_styles/andreas06/README +11 -0
  63. data/data/webgen/website_styles/andreas06/default.css +353 -0
  64. data/data/webgen/website_styles/andreas06/default.template +72 -0
  65. data/data/webgen/website_styles/andreas06/images/bodybg.gif +0 -0
  66. data/data/webgen/website_styles/andreas06/images/boxbg.gif +0 -0
  67. data/data/webgen/website_styles/andreas06/images/greypx.gif +0 -0
  68. data/data/webgen/website_styles/andreas06/images/header.jpg +0 -0
  69. data/data/webgen/website_styles/andreas06/images/innerbg.gif +0 -0
  70. data/data/webgen/website_styles/andreas06/images/leaves.jpg +0 -0
  71. data/data/webgen/website_styles/andreas06/images/tabs.gif +0 -0
  72. data/data/webgen/website_styles/andreas07/README +12 -0
  73. data/data/webgen/website_styles/andreas07/browserfix.css +7 -0
  74. data/data/webgen/website_styles/andreas07/default.css +92 -0
  75. data/data/webgen/website_styles/andreas07/default.template +44 -0
  76. data/data/webgen/website_styles/andreas07/images/bodybg.gif +0 -0
  77. data/data/webgen/website_styles/andreas07/images/sidebarbg.gif +0 -0
  78. data/data/webgen/website_styles/andreas08/README +11 -0
  79. data/data/webgen/website_styles/andreas08/default.css +224 -0
  80. data/data/webgen/website_styles/andreas08/default.template +53 -0
  81. data/data/webgen/website_styles/andreas09/README +11 -0
  82. data/data/webgen/website_styles/andreas09/default.css +308 -0
  83. data/data/webgen/website_styles/andreas09/default.template +70 -0
  84. data/data/webgen/website_styles/andreas09/images/bodybg-black.jpg +0 -0
  85. data/data/webgen/website_styles/andreas09/images/bodybg-green.jpg +0 -0
  86. data/data/webgen/website_styles/andreas09/images/bodybg-orange.jpg +0 -0
  87. data/data/webgen/website_styles/andreas09/images/bodybg-purple.jpg +0 -0
  88. data/data/webgen/website_styles/andreas09/images/bodybg-red.jpg +0 -0
  89. data/data/webgen/website_styles/andreas09/images/bodybg.jpg +0 -0
  90. data/data/webgen/website_styles/andreas09/images/footerbg.jpg +0 -0
  91. data/data/webgen/website_styles/andreas09/images/menuhover-black.jpg +0 -0
  92. data/data/webgen/website_styles/andreas09/images/menuhover-green.jpg +0 -0
  93. data/data/webgen/website_styles/andreas09/images/menuhover-orange.jpg +0 -0
  94. data/data/webgen/website_styles/andreas09/images/menuhover-purple.jpg +0 -0
  95. data/data/webgen/website_styles/andreas09/images/menuhover-red.jpg +0 -0
  96. data/data/webgen/website_styles/andreas09/images/menuhover.jpg +0 -0
  97. data/data/webgen/website_styles/default/README +6 -0
  98. data/data/webgen/website_styles/default/default.css +1 -1
  99. data/data/webgen/website_styles/default/default.template +9 -3
  100. data/data/webgen/website_styles/plain/README +12 -0
  101. data/data/webgen/website_styles/plain/default.css +244 -0
  102. data/data/webgen/website_styles/plain/default.template +63 -0
  103. data/data/webgen/website_styles/plain/images/a_hover.jpg +0 -0
  104. data/data/webgen/website_styles/plain/images/desc.jpg +0 -0
  105. data/data/webgen/website_styles/plain/images/li.gif +0 -0
  106. data/data/webgen/website_styles/plain/images/mainbar.jpg +0 -0
  107. data/data/webgen/website_styles/plain/images/menu.jpg +0 -0
  108. data/data/webgen/website_styles/plain/images/submenua.gif +0 -0
  109. data/data/webgen/website_styles/plain/images/submenua_hover.jpg +0 -0
  110. data/data/webgen/website_templates/default/README +7 -5
  111. data/data/webgen/website_templates/personal_hp/README +7 -5
  112. data/data/webgen/website_templates/project/README +8 -6
  113. data/doc/config.yaml +2 -2
  114. data/doc/examples/website_styles/1024px/README +9 -0
  115. data/doc/examples/website_styles/1024px/config.yaml +2 -0
  116. data/doc/examples/website_styles/1024px/src/about.page +12 -0
  117. data/doc/examples/website_styles/1024px/src/default.css +188 -0
  118. data/doc/examples/website_styles/1024px/src/default.template +62 -0
  119. data/doc/examples/website_styles/1024px/src/download.page +15 -0
  120. data/doc/examples/website_styles/1024px/src/features.page +8 -0
  121. data/doc/examples/website_styles/1024px/src/images/background.gif +0 -0
  122. data/doc/examples/website_styles/1024px/src/index.page +9 -0
  123. data/doc/examples/website_styles/1024px/src/screenshots.page +18 -0
  124. data/doc/examples/website_styles/andreas00/README +9 -0
  125. data/doc/examples/website_styles/andreas00/config.yaml +2 -0
  126. data/doc/examples/website_styles/andreas00/src/about.page +12 -0
  127. data/doc/examples/website_styles/andreas00/src/default.css +290 -0
  128. data/doc/examples/website_styles/andreas00/src/default.template +62 -0
  129. data/doc/examples/website_styles/andreas00/src/download.page +15 -0
  130. data/doc/examples/website_styles/andreas00/src/features.page +8 -0
  131. data/doc/examples/website_styles/andreas00/src/images/bg.gif +0 -0
  132. data/doc/examples/website_styles/andreas00/src/images/front.jpg +0 -0
  133. data/doc/examples/website_styles/andreas00/src/images/menubg.gif +0 -0
  134. data/doc/examples/website_styles/andreas00/src/images/menubg2.gif +0 -0
  135. data/doc/examples/website_styles/andreas00/src/index.page +9 -0
  136. data/doc/examples/website_styles/andreas00/src/screenshots.page +18 -0
  137. data/doc/examples/website_styles/andreas01/README +9 -0
  138. data/doc/examples/website_styles/andreas01/config.yaml +2 -0
  139. data/doc/examples/website_styles/andreas01/src/about.page +12 -0
  140. data/doc/examples/website_styles/andreas01/src/default.css +310 -0
  141. data/doc/examples/website_styles/andreas01/src/default.template +63 -0
  142. data/doc/examples/website_styles/andreas01/src/download.page +15 -0
  143. data/doc/examples/website_styles/andreas01/src/features.page +8 -0
  144. data/doc/examples/website_styles/andreas01/src/images/bg.gif +0 -0
  145. data/doc/examples/website_styles/andreas01/src/images/front.jpg +0 -0
  146. data/doc/examples/website_styles/andreas01/src/index.page +9 -0
  147. data/doc/examples/website_styles/andreas01/src/print.css +35 -0
  148. data/doc/examples/website_styles/andreas01/src/screenshots.page +18 -0
  149. data/doc/examples/website_styles/andreas03/README +9 -0
  150. data/doc/examples/website_styles/andreas03/config.yaml +2 -0
  151. data/doc/examples/website_styles/andreas03/src/about.page +12 -0
  152. data/doc/examples/website_styles/andreas03/src/default.css +223 -0
  153. data/doc/examples/website_styles/andreas03/src/default.template +60 -0
  154. data/doc/examples/website_styles/andreas03/src/download.page +15 -0
  155. data/doc/examples/website_styles/andreas03/src/features.page +8 -0
  156. data/doc/examples/website_styles/andreas03/src/images/bodybg.png +0 -0
  157. data/doc/examples/website_styles/andreas03/src/images/contbg.png +0 -0
  158. data/doc/examples/website_styles/andreas03/src/images/footerbg.png +0 -0
  159. data/doc/examples/website_styles/andreas03/src/images/gradient1.png +0 -0
  160. data/doc/examples/website_styles/andreas03/src/images/gradient2.png +0 -0
  161. data/doc/examples/website_styles/andreas03/src/index.page +9 -0
  162. data/doc/examples/website_styles/andreas03/src/screenshots.page +18 -0
  163. data/doc/examples/website_styles/andreas04/README +9 -0
  164. data/doc/examples/website_styles/andreas04/config.yaml +2 -0
  165. data/doc/examples/website_styles/andreas04/src/about.page +12 -0
  166. data/doc/examples/website_styles/andreas04/src/default.css +290 -0
  167. data/doc/examples/website_styles/andreas04/src/default.template +83 -0
  168. data/doc/examples/website_styles/andreas04/src/download.page +15 -0
  169. data/doc/examples/website_styles/andreas04/src/features.page +8 -0
  170. data/doc/examples/website_styles/andreas04/src/images/blinkarrow.gif +0 -0
  171. data/doc/examples/website_styles/andreas04/src/images/bodybg.png +0 -0
  172. data/doc/examples/website_styles/andreas04/src/images/contentbg.png +0 -0
  173. data/doc/examples/website_styles/andreas04/src/images/entrybg.png +0 -0
  174. data/doc/examples/website_styles/andreas04/src/images/flash.gif +0 -0
  175. data/doc/examples/website_styles/andreas04/src/images/flash2.gif +0 -0
  176. data/doc/examples/website_styles/andreas04/src/images/globe.gif +0 -0
  177. data/doc/examples/website_styles/andreas04/src/images/globebottom.gif +0 -0
  178. data/doc/examples/website_styles/andreas04/src/images/linkarrow.gif +0 -0
  179. data/doc/examples/website_styles/andreas04/src/images/menuhover.png +0 -0
  180. data/doc/examples/website_styles/andreas04/src/index.page +9 -0
  181. data/doc/examples/website_styles/andreas04/src/screenshots.page +18 -0
  182. data/doc/examples/website_styles/andreas05/README +9 -0
  183. data/doc/examples/website_styles/andreas05/config.yaml +2 -0
  184. data/doc/examples/website_styles/andreas05/src/about.page +12 -0
  185. data/doc/examples/website_styles/andreas05/src/default.css +33 -0
  186. data/doc/examples/website_styles/andreas05/src/default.template +42 -0
  187. data/doc/examples/website_styles/andreas05/src/download.page +15 -0
  188. data/doc/examples/website_styles/andreas05/src/features.page +8 -0
  189. data/doc/examples/website_styles/andreas05/src/images/bodybg.gif +0 -0
  190. data/doc/examples/website_styles/andreas05/src/images/front.png +0 -0
  191. data/doc/examples/website_styles/andreas05/src/index.page +9 -0
  192. data/doc/examples/website_styles/andreas05/src/screenshots.page +18 -0
  193. data/doc/examples/website_styles/andreas06/README +9 -0
  194. data/doc/examples/website_styles/andreas06/config.yaml +2 -0
  195. data/doc/examples/website_styles/andreas06/src/about.page +12 -0
  196. data/doc/examples/website_styles/andreas06/src/default.css +353 -0
  197. data/doc/examples/website_styles/andreas06/src/default.template +72 -0
  198. data/doc/examples/website_styles/andreas06/src/download.page +15 -0
  199. data/doc/examples/website_styles/andreas06/src/features.page +8 -0
  200. data/doc/examples/website_styles/andreas06/src/images/bodybg.gif +0 -0
  201. data/doc/examples/website_styles/andreas06/src/images/boxbg.gif +0 -0
  202. data/doc/examples/website_styles/andreas06/src/images/greypx.gif +0 -0
  203. data/doc/examples/website_styles/andreas06/src/images/header.jpg +0 -0
  204. data/doc/examples/website_styles/andreas06/src/images/innerbg.gif +0 -0
  205. data/doc/examples/website_styles/andreas06/src/images/leaves.jpg +0 -0
  206. data/doc/examples/website_styles/andreas06/src/images/tabs.gif +0 -0
  207. data/doc/examples/website_styles/andreas06/src/index.page +9 -0
  208. data/doc/examples/website_styles/andreas06/src/screenshots.page +18 -0
  209. data/doc/examples/website_styles/andreas07/README +9 -0
  210. data/doc/examples/website_styles/andreas07/config.yaml +2 -0
  211. data/doc/examples/website_styles/andreas07/src/about.page +12 -0
  212. data/doc/examples/website_styles/andreas07/src/browserfix.css +7 -0
  213. data/doc/examples/website_styles/andreas07/src/default.css +92 -0
  214. data/doc/examples/website_styles/andreas07/src/default.template +44 -0
  215. data/doc/examples/website_styles/andreas07/src/download.page +15 -0
  216. data/doc/examples/website_styles/andreas07/src/features.page +8 -0
  217. data/doc/examples/website_styles/andreas07/src/images/bodybg.gif +0 -0
  218. data/doc/examples/website_styles/andreas07/src/images/sidebarbg.gif +0 -0
  219. data/doc/examples/website_styles/andreas07/src/index.page +9 -0
  220. data/doc/examples/website_styles/andreas07/src/screenshots.page +18 -0
  221. data/doc/examples/website_styles/andreas08/README +9 -0
  222. data/doc/examples/website_styles/andreas08/config.yaml +2 -0
  223. data/doc/examples/website_styles/andreas08/src/about.page +12 -0
  224. data/doc/examples/website_styles/andreas08/src/default.css +224 -0
  225. data/doc/examples/website_styles/andreas08/src/default.template +53 -0
  226. data/doc/examples/website_styles/andreas08/src/download.page +15 -0
  227. data/doc/examples/website_styles/andreas08/src/features.page +8 -0
  228. data/doc/examples/website_styles/andreas08/src/index.page +9 -0
  229. data/doc/examples/website_styles/andreas08/src/screenshots.page +18 -0
  230. data/doc/examples/website_styles/andreas09/README +9 -0
  231. data/doc/examples/website_styles/andreas09/config.yaml +2 -0
  232. data/doc/examples/website_styles/andreas09/src/about.page +12 -0
  233. data/doc/examples/website_styles/andreas09/src/default.css +308 -0
  234. data/doc/examples/website_styles/andreas09/src/default.template +70 -0
  235. data/doc/examples/website_styles/andreas09/src/download.page +15 -0
  236. data/doc/examples/website_styles/andreas09/src/features.page +8 -0
  237. data/doc/examples/website_styles/andreas09/src/images/bodybg-black.jpg +0 -0
  238. data/doc/examples/website_styles/andreas09/src/images/bodybg-green.jpg +0 -0
  239. data/doc/examples/website_styles/andreas09/src/images/bodybg-orange.jpg +0 -0
  240. data/doc/examples/website_styles/andreas09/src/images/bodybg-purple.jpg +0 -0
  241. data/doc/examples/website_styles/andreas09/src/images/bodybg-red.jpg +0 -0
  242. data/doc/examples/website_styles/andreas09/src/images/bodybg.jpg +0 -0
  243. data/doc/examples/website_styles/andreas09/src/images/footerbg.jpg +0 -0
  244. data/doc/examples/website_styles/andreas09/src/images/menuhover-black.jpg +0 -0
  245. data/doc/examples/website_styles/andreas09/src/images/menuhover-green.jpg +0 -0
  246. data/doc/examples/website_styles/andreas09/src/images/menuhover-orange.jpg +0 -0
  247. data/doc/examples/website_styles/andreas09/src/images/menuhover-purple.jpg +0 -0
  248. data/doc/examples/website_styles/andreas09/src/images/menuhover-red.jpg +0 -0
  249. data/doc/examples/website_styles/andreas09/src/images/menuhover.jpg +0 -0
  250. data/doc/examples/website_styles/andreas09/src/index.page +9 -0
  251. data/doc/examples/website_styles/andreas09/src/screenshots.page +18 -0
  252. data/doc/examples/website_styles/default/README +9 -0
  253. data/doc/examples/website_styles/default/config.yaml +2 -0
  254. data/doc/examples/website_styles/default/src/about.page +12 -0
  255. data/doc/examples/website_styles/default/src/default.css +84 -0
  256. data/doc/examples/website_styles/default/src/default.template +38 -0
  257. data/doc/examples/website_styles/default/src/download.page +15 -0
  258. data/doc/examples/website_styles/default/src/features.page +8 -0
  259. data/doc/examples/website_styles/default/src/index.page +9 -0
  260. data/doc/examples/website_styles/default/src/screenshots.page +18 -0
  261. data/doc/examples/website_styles/plain/README +9 -0
  262. data/doc/examples/website_styles/plain/config.yaml +2 -0
  263. data/doc/examples/website_styles/plain/src/about.page +12 -0
  264. data/doc/examples/website_styles/plain/src/default.css +244 -0
  265. data/doc/examples/website_styles/plain/src/default.template +63 -0
  266. data/doc/examples/website_styles/plain/src/download.page +15 -0
  267. data/doc/examples/website_styles/plain/src/features.page +8 -0
  268. data/doc/examples/website_styles/plain/src/images/a_hover.jpg +0 -0
  269. data/doc/examples/website_styles/plain/src/images/desc.jpg +0 -0
  270. data/doc/examples/website_styles/plain/src/images/li.gif +0 -0
  271. data/doc/examples/website_styles/plain/src/images/mainbar.jpg +0 -0
  272. data/doc/examples/website_styles/plain/src/images/menu.jpg +0 -0
  273. data/doc/examples/website_styles/plain/src/images/submenua.gif +0 -0
  274. data/doc/examples/website_styles/plain/src/images/submenua_hover.jpg +0 -0
  275. data/doc/examples/website_styles/plain/src/index.page +9 -0
  276. data/doc/examples/website_styles/plain/src/screenshots.page +18 -0
  277. data/doc/examples/website_templates/default/README +8 -0
  278. data/doc/examples/website_templates/default/config.yaml +2 -0
  279. data/doc/examples/website_templates/default/src/default.css +84 -0
  280. data/doc/examples/website_templates/default/src/default.template +38 -0
  281. data/doc/examples/website_templates/default/src/index.page +8 -0
  282. data/doc/examples/website_templates/personal_hp/README +8 -0
  283. data/doc/examples/website_templates/personal_hp/config.yaml +2 -0
  284. data/doc/examples/website_templates/personal_hp/src/about.page +12 -0
  285. data/doc/examples/website_templates/personal_hp/src/default.css +84 -0
  286. data/doc/examples/website_templates/personal_hp/src/default.template +38 -0
  287. data/doc/examples/website_templates/personal_hp/src/index.page +9 -0
  288. data/doc/examples/website_templates/personal_hp/src/links.page +22 -0
  289. data/doc/examples/website_templates/personal_hp/src/projects.page +20 -0
  290. data/doc/examples/website_templates/project/README +9 -0
  291. data/doc/examples/website_templates/project/config.yaml +2 -0
  292. data/doc/examples/website_templates/project/src/about.page +12 -0
  293. data/doc/examples/website_templates/project/src/default.css +84 -0
  294. data/doc/examples/website_templates/project/src/default.template +38 -0
  295. data/doc/examples/website_templates/project/src/download.page +15 -0
  296. data/doc/examples/website_templates/project/src/features.page +8 -0
  297. data/doc/examples/website_templates/project/src/index.page +9 -0
  298. data/doc/examples/website_templates/project/src/screenshots.page +18 -0
  299. data/doc/metainfo.yaml +85 -0
  300. data/doc/plugin/emoticon.rb +19 -21
  301. data/doc/plugin/extension.rb +134 -55
  302. data/doc/plugin/gallery/slides/collage.rb +334 -0
  303. data/doc/plugin/listpluginparameters.rb +24 -26
  304. data/doc/plugin/resources.rb +20 -22
  305. data/doc/src/default.css +333 -154
  306. data/doc/src/default.template +92 -39
  307. data/doc/src/documentation/extending_webgen.page +1 -2
  308. data/doc/src/documentation/gettingstarted.page +161 -44
  309. data/doc/src/documentation/index.page +15 -28
  310. data/doc/src/documentation/plugins/contentconverter/default.page +15 -0
  311. data/doc/src/documentation/plugins/contentconverter/html.page +10 -0
  312. data/doc/src/documentation/plugins/contentconverter/markdown.page +21 -0
  313. data/doc/src/documentation/plugins/contentconverter/rdoc.page +11 -0
  314. data/doc/src/documentation/plugins/contentconverter/textile.page +21 -0
  315. data/doc/src/documentation/plugins/contentconverter/xmlbuilder.page +61 -0
  316. data/doc/src/documentation/plugins/core/configuration.page +11 -0
  317. data/doc/src/documentation/plugins/core/filehandler.page +214 -0
  318. data/doc/src/documentation/plugins/core/index.page +11 -0
  319. data/doc/src/documentation/plugins/core/resourcemanager.page +46 -0
  320. data/doc/src/documentation/plugins/core/tagprocessor.page +17 -0
  321. data/doc/src/documentation/plugins/file/copyhandler.page +26 -0
  322. data/doc/src/documentation/plugins/file/defaulthandler.page +15 -0
  323. data/doc/src/documentation/plugins/file/directoryhandler.page +37 -0
  324. data/doc/src/documentation/plugins/file/galleryhandler.page +181 -0
  325. data/doc/src/documentation/plugins/file/pagehandler.page +154 -0
  326. data/doc/src/documentation/plugins/file/templatehandler.page +34 -0
  327. data/doc/src/documentation/plugins/file/thumbnailwriter.page +39 -0
  328. data/doc/src/documentation/plugins/htmlvalidator/default.page +12 -0
  329. data/doc/src/documentation/plugins/htmlvalidator/xmllint.page +12 -0
  330. data/doc/src/documentation/plugins/index.page +32 -11
  331. data/doc/src/documentation/plugins/menustyle/default.page +19 -0
  332. data/doc/src/documentation/plugins/menustyle/horizontal.page +32 -0
  333. data/doc/src/documentation/plugins/{menustyles → menustyle}/horizontaldropdown.page +25 -19
  334. data/doc/src/documentation/plugins/menustyle/section.page +34 -0
  335. data/doc/src/documentation/plugins/menustyle/vertical.page +48 -0
  336. data/doc/src/documentation/plugins/menustyle/verticaldropdown.page +29 -0
  337. data/doc/src/documentation/plugins/misc/index.page +9 -0
  338. data/doc/src/documentation/plugins/{miscplugins → misc}/smileyreplacer.page +15 -14
  339. data/doc/src/documentation/plugins/misc/syntaxhighlighter.page +26 -0
  340. data/doc/src/documentation/plugins/tag/block.page +29 -0
  341. data/doc/src/documentation/plugins/tag/breadcrumbtrail.page +29 -0
  342. data/doc/src/documentation/plugins/tag/date.page +34 -0
  343. data/doc/src/documentation/plugins/tag/default.page +27 -0
  344. data/doc/src/documentation/plugins/tag/download.page +60 -0
  345. data/doc/src/documentation/plugins/tag/executecommand.page +29 -0
  346. data/doc/src/documentation/plugins/tag/includefile.page +30 -0
  347. data/doc/src/documentation/plugins/{tags → tag}/langbar.de.page +1 -1
  348. data/doc/src/documentation/plugins/tag/langbar.fr.page +6 -0
  349. data/doc/src/documentation/plugins/tag/langbar.page +41 -0
  350. data/doc/src/documentation/plugins/tag/menu.page +78 -0
  351. data/doc/src/documentation/plugins/{tags → tag}/meta.page +8 -7
  352. data/doc/src/documentation/plugins/tag/relocatable.page +46 -0
  353. data/doc/src/documentation/plugins/tag/resource.page +35 -0
  354. data/doc/src/documentation/plugins/tag/sitemap.page +35 -0
  355. data/doc/src/documentation/plugins/tag/wikilink.page +33 -0
  356. data/doc/src/documentation/references/index.page +0 -1
  357. data/doc/src/documentation/references/meta_info_reference.page +90 -13
  358. data/doc/src/documentation/references/parameter_reference.page +0 -1
  359. data/doc/src/documentation/references/webpage_format.page +249 -0
  360. data/doc/src/download.page +50 -21
  361. data/doc/src/examples/gallery_styles/default/default.gallery +78 -0
  362. data/doc/src/examples/gallery_styles/default/gallery_gallery.template +38 -0
  363. data/doc/src/examples/gallery_styles/default/gallery_image.template +30 -0
  364. data/doc/src/examples/gallery_styles/default/gallery_main.template +18 -0
  365. data/doc/src/examples/gallery_styles/index.page +22 -0
  366. data/doc/src/examples/gallery_styles/slides/gallery_gallery.template +62 -0
  367. data/doc/src/examples/gallery_styles/slides/gallery_image.template +53 -0
  368. data/doc/src/examples/gallery_styles/slides/gallery_main.template +32 -0
  369. data/doc/src/examples/gallery_styles/slides/slides.gallery +79 -0
  370. data/doc/src/examples/images/image01.jpg +0 -0
  371. data/doc/src/examples/images/image02.jpg +0 -0
  372. data/doc/src/examples/images/image03.jpg +0 -0
  373. data/doc/src/examples/images/image04.jpg +0 -0
  374. data/doc/src/examples/images/image05.jpg +0 -0
  375. data/doc/src/examples/images/image06.jpg +0 -0
  376. data/doc/src/examples/images/image07.jpg +0 -0
  377. data/doc/src/examples/images/image08.jpg +0 -0
  378. data/doc/src/examples/images/image09.jpg +0 -0
  379. data/doc/src/examples/images/image10.jpg +0 -0
  380. data/doc/src/examples/images/image11.jpg +0 -0
  381. data/doc/src/examples/images/image12.jpg +0 -0
  382. data/doc/src/examples/images/image13.jpg +0 -0
  383. data/doc/src/examples/images/image14.jpg +0 -0
  384. data/doc/src/examples/images/image15.jpg +0 -0
  385. data/doc/src/examples/images/image16.jpg +0 -0
  386. data/doc/src/examples/images/image17.jpg +0 -0
  387. data/doc/src/examples/images/image18.jpg +0 -0
  388. data/doc/src/examples/index.page +18 -0
  389. data/doc/src/examples/website_styles/1024px.page +5 -0
  390. data/doc/src/examples/website_styles/andreas00.page +5 -0
  391. data/doc/src/examples/website_styles/andreas01.page +5 -0
  392. data/doc/src/examples/website_styles/andreas03.page +5 -0
  393. data/doc/src/examples/website_styles/andreas04.page +5 -0
  394. data/doc/src/examples/website_styles/andreas05.page +5 -0
  395. data/doc/src/examples/website_styles/andreas06.page +5 -0
  396. data/doc/src/examples/website_styles/andreas07.page +5 -0
  397. data/doc/src/examples/website_styles/andreas08.page +5 -0
  398. data/doc/src/examples/website_styles/andreas09.page +5 -0
  399. data/doc/src/examples/website_styles/default.page +5 -0
  400. data/doc/src/examples/website_styles/index.page +71 -0
  401. data/doc/src/examples/website_styles/plain.page +5 -0
  402. data/doc/src/examples/website_templates/default.page +5 -0
  403. data/doc/src/examples/website_templates/index.page +24 -0
  404. data/doc/src/examples/website_templates/personal_hp.page +5 -0
  405. data/doc/src/examples/website_templates/project.page +5 -0
  406. data/doc/src/features.page +16 -14
  407. data/doc/src/images/bodybg.jpg +0 -0
  408. data/doc/src/images/footerbg.jpg +0 -0
  409. data/doc/src/images/menuhover.jpg +0 -0
  410. data/doc/src/images/node_diagram.svg +7132 -0
  411. data/doc/src/images/thumb_example.jpg +0 -0
  412. data/doc/src/images/thumb_example_cropped.jpg +0 -0
  413. data/doc/src/images/thumb_example_normal.jpg +0 -0
  414. data/doc/src/index.page +14 -102
  415. data/doc/src/news.page +154 -0
  416. data/doc/src/plugin.template +10 -0
  417. data/lib/webgen/cli.rb +427 -0
  418. data/lib/webgen/composite.rb +11 -11
  419. data/lib/webgen/config.rb +52 -0
  420. data/lib/webgen/content.rb +172 -0
  421. data/lib/webgen/extcommand.rb +23 -0
  422. data/lib/webgen/languages.rb +110 -0
  423. data/lib/webgen/listener.rb +1 -1
  424. data/lib/webgen/node.rb +196 -124
  425. data/lib/webgen/plugin.rb +480 -144
  426. data/lib/webgen/plugins/{contenthandlers → contentconverters}/default.rb +10 -9
  427. data/lib/webgen/plugins/{contenthandlers → contentconverters}/html.rb +11 -8
  428. data/lib/webgen/plugins/contentconverters/markdown.rb +54 -0
  429. data/lib/webgen/plugins/{contenthandlers → contentconverters}/rdoc.rb +16 -12
  430. data/lib/webgen/plugins/{contenthandlers → contentconverters}/textile.rb +18 -13
  431. data/lib/webgen/plugins/contentconverters/xmlbuilder.rb +58 -0
  432. data/lib/webgen/plugins/coreplugins/configuration.rb +11 -102
  433. data/lib/webgen/plugins/coreplugins/resourcemanager.rb +95 -74
  434. data/lib/webgen/plugins/filehandlers/copy.rb +41 -19
  435. data/lib/webgen/plugins/filehandlers/directory.rb +52 -50
  436. data/lib/webgen/plugins/filehandlers/filehandler.rb +370 -123
  437. data/lib/webgen/plugins/filehandlers/gallery.rb +368 -117
  438. data/lib/webgen/plugins/filehandlers/page.rb +160 -146
  439. data/lib/webgen/plugins/filehandlers/template.rb +65 -52
  440. data/lib/webgen/plugins/htmlvalidators/default.rb +9 -7
  441. data/lib/webgen/plugins/htmlvalidators/xmllint.rb +17 -33
  442. data/lib/webgen/plugins/menustyles/default.rb +27 -25
  443. data/lib/webgen/plugins/menustyles/horizontal.rb +22 -41
  444. data/lib/webgen/plugins/menustyles/horizontal_dropdown.rb +25 -39
  445. data/lib/webgen/plugins/menustyles/section.rb +68 -0
  446. data/lib/webgen/plugins/menustyles/vertical.rb +36 -56
  447. data/lib/webgen/plugins/menustyles/vertical_dropdown.rb +24 -32
  448. data/lib/webgen/plugins/miscplugins/smileyreplacer.rb +20 -17
  449. data/lib/webgen/plugins/miscplugins/syntax_highlighter.rb +72 -0
  450. data/lib/webgen/plugins/miscplugins/treewalker.rb +9 -36
  451. data/lib/webgen/plugins/tags/block.rb +65 -0
  452. data/lib/webgen/plugins/tags/breadcrumbtrail.rb +15 -11
  453. data/lib/webgen/plugins/tags/date.rb +11 -7
  454. data/lib/webgen/plugins/tags/download.rb +38 -38
  455. data/lib/webgen/plugins/tags/executecommand.rb +30 -15
  456. data/lib/webgen/plugins/tags/includefile.rb +26 -13
  457. data/lib/webgen/plugins/tags/langbar.rb +23 -18
  458. data/lib/webgen/plugins/tags/menu.rb +49 -70
  459. data/lib/webgen/plugins/tags/meta.rb +12 -9
  460. data/lib/webgen/plugins/tags/relocatable.rb +41 -13
  461. data/lib/webgen/plugins/tags/sitemap.rb +32 -28
  462. data/lib/webgen/plugins/tags/tag_processor.rb +279 -0
  463. data/lib/webgen/plugins/tags/wikilink.rb +25 -20
  464. data/lib/webgen/test.rb +202 -0
  465. data/lib/webgen/website.rb +310 -0
  466. data/test/fixtures/sample_site/src/chained.template +3 -0
  467. data/test/fixtures/sample_site/src/default.template +3 -0
  468. data/test/fixtures/sample_site/src/dir1/dir11/file111.de.page +3 -0
  469. data/test/fixtures/sample_site/src/dir1/dir11/file111.page +3 -0
  470. data/test/fixtures/sample_site/src/dir1/dir11/index.page +3 -0
  471. data/test/fixtures/sample_site/src/dir1/file11.page +3 -0
  472. data/test/fixtures/sample_site/src/dir2/file21.page +3 -0
  473. data/test/fixtures/sample_site/src/embedded.rhtml +1 -0
  474. data/test/fixtures/sample_site/src/file1.page +8 -0
  475. data/test/fixtures/sample_site/src/file2.de.page +6 -0
  476. data/test/fixtures/sample_site/src/index.de.page +4 -0
  477. data/test/fixtures/sample_site/src/index.en.page +1 -0
  478. data/test/fixtures/sample_site/src/invalid.template +3 -0
  479. data/test/fixtures/sample_site/src/test.jpg +1 -0
  480. data/test/fixtures/sample_site/src/test.template +3 -0
  481. data/test/fixtures/tc_content/blocks.yaml +40 -0
  482. data/test/fixtures/tc_content/correct.yaml +65 -0
  483. data/test/fixtures/tc_content/incorrect.yaml +42 -0
  484. data/test/fixtures/tc_filehandler_filehandler/backing/metainfo.yaml +9 -0
  485. data/test/fixtures/tc_filehandler_filehandler/backing_empty/metainfo.yaml +6 -0
  486. data/test/fixtures/tc_filehandler_filehandler/sample_plugin.rb +49 -0
  487. data/test/fixtures/tc_filehandler_filehandler/unmodified +0 -0
  488. data/test/fixtures/tc_filehandler_gallery/test.gallery +2 -0
  489. data/test/fixtures/tc_filehandler_gallery/test1.gallery +2 -0
  490. data/test/fixtures/tc_filehandler_gallery/test1.jpg +0 -0
  491. data/test/fixtures/tc_filehandler_gallery/test2.jpg +0 -0
  492. data/test/fixtures/tc_filehandler_gallery/test3.jpg +0 -0
  493. data/test/fixtures/tc_filehandler_gallery/test4.jpg +0 -0
  494. data/test/fixtures/tc_filehandler_page/testdata.yaml +10 -0
  495. data/test/fixtures/tc_menustyles_default/menustyle.rb +7 -0
  496. data/test/fixtures/tc_node/nodes.yaml +64 -0
  497. data/test/fixtures/tc_plugin/handlerplugin.rb +15 -0
  498. data/test/fixtures/tc_plugin/plugin1.rb +33 -0
  499. data/test/fixtures/tc_plugin/plugin2.rb +8 -0
  500. data/test/fixtures/tc_tags_includefile/testfile +1 -0
  501. data/test/fixtures/tc_tags_tag_processor/test_file1 +1 -0
  502. data/test/fixtures/tc_tags_tag_processor/testtag.rb +17 -0
  503. data/test/fixtures/tc_website/correct.yaml +6 -0
  504. data/test/fixtures/tc_website/incorrect_structure.yaml +2 -0
  505. data/test/fixtures/tc_website/incorrect_yaml.yaml +5 -0
  506. data/test/fixtures/tc_website/meta_info_test.yaml +10 -0
  507. data/test/fixtures/tc_website/testdir/README +1 -0
  508. data/test/fixtures/tc_website/testdir/falsedir/README +1 -0
  509. data/test/runtests.rb +2 -0
  510. data/test/unittests/tc_composite.rb +82 -0
  511. data/test/unittests/tc_config.rb +18 -0
  512. data/test/unittests/tc_content.rb +88 -0
  513. data/test/unittests/tc_contentconverters_default.rb +13 -0
  514. data/test/unittests/tc_contentconverters_html.rb +16 -0
  515. data/test/unittests/tc_contentconverters_markdown.rb +22 -0
  516. data/test/unittests/tc_contentconverters_rdoc.rb +16 -0
  517. data/test/unittests/tc_contentconverters_textile.rb +22 -0
  518. data/test/unittests/tc_contentconverters_xmlbuilder.rb +22 -0
  519. data/test/unittests/tc_filehandler_copy.rb +65 -0
  520. data/test/unittests/tc_filehandler_directory.rb +134 -0
  521. data/test/unittests/tc_filehandler_filehandler.rb +294 -0
  522. data/test/unittests/tc_filehandler_gallery.rb +165 -0
  523. data/test/unittests/tc_filehandler_page.rb +183 -0
  524. data/test/unittests/tc_filehandler_template.rb +60 -0
  525. data/test/unittests/tc_htmlvalidators_default.rb +12 -0
  526. data/test/unittests/tc_htmlvalidators_xmllint.rb +19 -0
  527. data/test/unittests/tc_languages.rb +57 -0
  528. data/test/unittests/tc_listener.rb +72 -0
  529. data/test/unittests/tc_menustyles_default.rb +51 -0
  530. data/test/unittests/tc_menustyles_horizontal.rb +18 -0
  531. data/test/unittests/tc_menustyles_horizontal_dropdown.rb +18 -0
  532. data/test/unittests/tc_menustyles_section.rb +59 -0
  533. data/test/unittests/tc_menustyles_vertical.rb +79 -0
  534. data/test/unittests/tc_menustyles_vertical_dropdown.rb +18 -0
  535. data/test/unittests/tc_node.rb +202 -0
  536. data/test/unittests/tc_plugin.rb +214 -0
  537. data/test/unittests/tc_resourcemanager.rb +42 -0
  538. data/test/unittests/tc_smileyreplacer.rb +25 -0
  539. data/test/unittests/tc_syntax_highlighter.rb +30 -0
  540. data/test/unittests/tc_tags_block.rb +27 -0
  541. data/test/unittests/tc_tags_breadcrumbtrail.rb +22 -0
  542. data/test/unittests/tc_tags_date.rb +15 -0
  543. data/test/unittests/tc_tags_download.rb +32 -0
  544. data/test/unittests/tc_tags_executecommand.rb +37 -0
  545. data/test/unittests/tc_tags_includefile.rb +53 -0
  546. data/test/unittests/tc_tags_langbar.rb +42 -0
  547. data/test/unittests/tc_tags_menu.rb +50 -0
  548. data/test/unittests/tc_tags_meta.rb +19 -0
  549. data/test/unittests/tc_tags_relocatable.rb +66 -0
  550. data/test/unittests/tc_tags_sitemap.rb +33 -0
  551. data/test/unittests/tc_tags_tag_processor.rb +107 -0
  552. data/test/unittests/tc_tags_wikilink.rb +22 -0
  553. data/test/unittests/tc_treewalker.rb +44 -0
  554. data/test/unittests/tc_website.rb +188 -0
  555. metadata +829 -312
  556. data/bin/webgen-gallery-editor +0 -654
  557. data/bin/webgen-gui +0 -10
  558. data/data/webgen/website_templates/default/config.yaml +0 -2
  559. data/doc/plugin/clidesc.rb +0 -46
  560. data/doc/plugin/source.rb +0 -21
  561. data/doc/src/about.page +0 -22
  562. data/doc/src/documentation/cli.page +0 -12
  563. data/doc/src/documentation/plugins/contenthandlers/html.page +0 -11
  564. data/doc/src/documentation/plugins/contenthandlers/index.page +0 -7
  565. data/doc/src/documentation/plugins/contenthandlers/markdown.page +0 -11
  566. data/doc/src/documentation/plugins/contenthandlers/rdoc.page +0 -11
  567. data/doc/src/documentation/plugins/contenthandlers/textile.page +0 -11
  568. data/doc/src/documentation/plugins/coreplugins/configuration.page +0 -12
  569. data/doc/src/documentation/plugins/coreplugins/index.page +0 -7
  570. data/doc/src/documentation/plugins/coreplugins/logging.page +0 -13
  571. data/doc/src/documentation/plugins/coreplugins/resourcemanager.page +0 -34
  572. data/doc/src/documentation/plugins/filehandlers/backing.page +0 -46
  573. data/doc/src/documentation/plugins/filehandlers/copy.page +0 -12
  574. data/doc/src/documentation/plugins/filehandlers/directoryhandler.page +0 -35
  575. data/doc/src/documentation/plugins/filehandlers/gallery.page +0 -86
  576. data/doc/src/documentation/plugins/filehandlers/index.page +0 -34
  577. data/doc/src/documentation/plugins/filehandlers/page.page +0 -170
  578. data/doc/src/documentation/plugins/filehandlers/template.page +0 -21
  579. data/doc/src/documentation/plugins/gallerylayouters/index.page +0 -18
  580. data/doc/src/documentation/plugins/htmlvalidators/index.page +0 -6
  581. data/doc/src/documentation/plugins/htmlvalidators/xmllint.page +0 -14
  582. data/doc/src/documentation/plugins/menustyles/horizontal.page +0 -21
  583. data/doc/src/documentation/plugins/menustyles/index.page +0 -12
  584. data/doc/src/documentation/plugins/menustyles/partial.page +0 -27
  585. data/doc/src/documentation/plugins/menustyles/vertical.page +0 -32
  586. data/doc/src/documentation/plugins/menustyles/verticaldropdown.page +0 -23
  587. data/doc/src/documentation/plugins/miscplugins/index.page +0 -7
  588. data/doc/src/documentation/plugins/tags/breadcrumbtrail.page +0 -20
  589. data/doc/src/documentation/plugins/tags/date.page +0 -19
  590. data/doc/src/documentation/plugins/tags/download.page +0 -23
  591. data/doc/src/documentation/plugins/tags/executecommand.page +0 -18
  592. data/doc/src/documentation/plugins/tags/includefile.page +0 -15
  593. data/doc/src/documentation/plugins/tags/index.page +0 -44
  594. data/doc/src/documentation/plugins/tags/langbar.page +0 -27
  595. data/doc/src/documentation/plugins/tags/menu.de.page +0 -12
  596. data/doc/src/documentation/plugins/tags/menu.page +0 -19
  597. data/doc/src/documentation/plugins/tags/multilang.de.page +0 -4
  598. data/doc/src/documentation/plugins/tags/multilang.fr.page +0 -4
  599. data/doc/src/documentation/plugins/tags/multilang.page +0 -4
  600. data/doc/src/documentation/plugins/tags/relocatable.page +0 -16
  601. data/doc/src/documentation/plugins/tags/resource.page +0 -22
  602. data/doc/src/documentation/plugins/tags/sitemap.page +0 -17
  603. data/doc/src/documentation/plugins/tags/wikilink.page +0 -18
  604. data/doc/src/documentation/webgen_gallery_editor.page +0 -82
  605. data/doc/src/images/screenshots/wge-image.png +0 -0
  606. data/doc/src/images/screenshots/wge-layout-preview.png +0 -0
  607. data/doc/src/images/screenshots/wge-main-disabled.png +0 -0
  608. data/doc/src/images/screenshots/wge-main.png +0 -0
  609. data/doc/src/meta.info +0 -30
  610. data/doc/src/screenshots.gallery +0 -33
  611. data/install.rb +0 -19
  612. data/lib/webgen.rb +0 -277
  613. data/lib/webgen/plugins/contenthandlers/markdown.rb +0 -50
  614. data/lib/webgen/plugins/coreplugins/logging.rb +0 -101
  615. data/lib/webgen/plugins/filehandlers/backing.rb +0 -159
  616. data/lib/webgen/plugins/gallerylayouters/default.rb +0 -152
  617. data/lib/webgen/plugins/menustyles/partial.rb +0 -95
  618. data/lib/webgen/plugins/tags/tags.rb +0 -254
@@ -1,7 +1,7 @@
1
1
  #
2
2
  #--
3
3
  #
4
- # $Id: gallery.rb 369 2005-12-24 11:37:40Z thomas $
4
+ # $Id: gallery.rb 569 2006-12-29 20:11:21Z thomas $
5
5
  #
6
6
  # webgen: template based static website generator
7
7
  # Copyright (C) 2004 Thomas Leitner
@@ -20,49 +20,236 @@
20
20
  #++
21
21
  #
22
22
 
23
- require 'webgen/plugins/filehandlers/filehandler'
24
- require 'webgen/plugins/filehandlers/directory'
25
- require 'webgen/plugins/filehandlers/page'
23
+ load_plugin 'webgen/plugins/filehandlers/filehandler'
24
+ load_plugin 'webgen/plugins/filehandlers/directory'
25
+ load_plugin 'webgen/plugins/filehandlers/page'
26
+
27
+ load_optional_part( 'gallery-exif',
28
+ :needed_gems => ['exifr'],
29
+ :error_msg => 'EXIF library could not be loaded',
30
+ :info => 'EXIF information will be available for each image' ) do
31
+
32
+ require 'exifr'
33
+
34
+ end
35
+
26
36
 
27
37
  module FileHandlers
28
38
 
29
- class GalleryFileHandler < DefaultFileHandler
30
-
31
- summary "Handles images gallery files"
32
- extension 'gallery'
33
- add_param "imagesPerPage", 20, 'Number of images per gallery page'
34
- add_param "imagePageInMenu", false, 'True if the image pages should be in the menu'
35
- add_param "galleryPageInMenu", false, 'True if the gallery pages should be in the menu'
36
- add_param "galleryOrderInfo", 50, 'The <orderInfo> metainfo for the first gallery page. The second gallery page gets this value plus one, and so on.'
37
- add_param "mainPageInMenu", true, 'True if the main page of the image gallery should be in the menu'
38
- add_param "galleryPageTemplate", nil, 'The template for gallery pages. If nil or a not existing file is specified, the default template is used.'
39
- add_param "imagePageTemplate", nil, 'The template for image pages. If nil or a not existing file is specified, the default template is used.'
40
- add_param "mainPageTemplate", nil, 'The template for the main page. If nil or a not existing file is specified, the default template is used.'
41
- add_param "files", 'images/**/*.jpg', 'The Dir glob for specifying the image files'
42
- add_param "title", 'Gallery', 'The title of the gallery'
43
- add_param "layout", 'default', 'The layout used'
44
-
45
- depends_on 'FileHandler', 'PageFileHandler'
46
-
47
- def create_node( file, parent )
39
+ # Handles image gallery files.
40
+ class GalleryHandler < DefaultHandler
41
+
42
+ # Objects of this class represent a whole image gallery and are available in all image gallery
43
+ # page files.
44
+ class GalleryInfo
45
+
46
+ # A helper module that allows acessing and changing data via the bracket notation.
47
+ module KeyAccess
48
+
49
+ def []( key )
50
+ @data[key]
51
+ end
52
+
53
+ def []=( key, value )
54
+ @data[key] = value
55
+ end
56
+
57
+ end
58
+
59
+ # A helper module which declares common attributes for gallery pages.
60
+ module ItemHelper
61
+
62
+ include KeyAccess
63
+
64
+ # The name of the page.
65
+ attr_accessor :pagename
66
+
67
+ # The title of the page.
68
+ attr_reader :title
69
+
70
+ # Meta data for the page.
71
+ attr_reader :data
72
+
73
+ def initialize( pagename, data )
74
+ @pagename = pagename
75
+ @title = data['title']
76
+ @data = data
77
+ end
78
+
79
+ end
80
+
81
+
82
+ # Represents the main page of an image gallery.
83
+ class MainPage; include ItemHelper; end
84
+
85
+ # Represents an image gallery page.
86
+ class Gallery
87
+
88
+ include ItemHelper
89
+
90
+ # A list of images for this gallery.
91
+ attr_reader :images
92
+
93
+ def initialize( pagename, data, images )
94
+ super( pagename, data )
95
+ @images = images
96
+ end
97
+
98
+ # Returns the thumbnail image tag for the gallery.
99
+ def thumbnail( attr = {} )
100
+ @images.first.thumbnail( attr )
101
+ end
102
+
103
+ end
104
+
105
+ # Represents an image page.
106
+ class Image
107
+
108
+ include ItemHelper
109
+
110
+ # The name of the image file.
111
+ attr_reader :filename
112
+
113
+ def initialize( pagename, data, filename )
114
+ super( pagename, data )
115
+ @filename = filename
116
+ end
117
+
118
+ # Returns the thumbnail image tag for the image.
119
+ def thumbnail( attr = {} )
120
+ attr = attr.collect {|k,v| "#{k}='#{v}'"}.join( ' ' )
121
+ if !@data['thumbnail'].to_s.empty? && @data['thumbnail'] != @filename
122
+ "<img src=\"{relocatable: #{@data['thumbnail']}}\" alt=\"#{@title}\" #{attr}/>"
123
+ else
124
+ width, height = (@data['thumbnailSize'] || '').split('x')
125
+ "<img src=\"{relocatable: #{@filename}}\" width=\"#{width}\" height=\"#{height}\" alt=\"#{@title}\" #{attr}/>"
126
+ end
127
+ end
128
+
129
+ end
130
+
131
+ include KeyAccess
132
+
133
+ # The index for the current gallery or +nil+ if there is no current gallery.
134
+ attr_reader :gIndex
135
+
136
+ # The index for the current image in the current gallery or +nil+ if there is no current image.
137
+ attr_reader :iIndex
138
+
139
+ # The main page object if it exists; otherwise +nil+.
140
+ attr_accessor :mainpage
141
+
142
+ # The whole data hahs for the image gallery.
143
+ attr_reader :data
144
+
145
+ def initialize( gallery_data, gIndex = nil, iIndex = nil )
146
+ @data = gallery_data
147
+ @gIndex = gIndex
148
+ @iIndex = iIndex
149
+ end
150
+
151
+ # Returns the list of gallery objects for this image gallery.
152
+ def galleries
153
+ @data[:galleries]
154
+ end
155
+
156
+ # Returns the current image.
157
+ def cur_image
158
+ galleries[@gIndex].images[@iIndex]
159
+ end
160
+
161
+ # Returns the previous image using the given +gIndex+ and +iIndex+, if it exists, or +nil+ otherwise.
162
+ def prev_image( gIndex = @gIndex, iIndex = @iIndex )
163
+ result = nil
164
+ if gIndex != 0 || iIndex != 0
165
+ if iIndex == 0
166
+ result = galleries[gIndex - 1].images[galleries[gIndex - 1].images.length - 1]
167
+ else
168
+ result = galleries[gIndex].images[iIndex - 1]
169
+ end
170
+ end
171
+ return result
172
+ end
173
+
174
+ # Returns the next image using the given +gIndex+ and +iIndex+, if it exists, or +nil+ otherwise.
175
+ def next_image( gIndex = @gIndex, iIndex = @iIndex )
176
+ result = nil
177
+ if gIndex != galleries.length - 1 || iIndex != galleries[gIndex].images.length - 1
178
+ if iIndex == galleries[gIndex].images.length - 1
179
+ result = galleries[gIndex + 1].images[0]
180
+ else
181
+ result = galleries[gIndex].images[iIndex + 1]
182
+ end
183
+ end
184
+ return result
185
+ end
186
+
187
+ # Returns the current gallery.
188
+ def cur_gallery
189
+ galleries[@gIndex]
190
+ end
191
+
192
+ # Returns the previous gallery using the given +gIndex+, if it exists, or +nil+ otherwise.
193
+ def prev_gallery( gIndex = @gIndex )
194
+ gIndex != 0 ? galleries[gIndex - 1] : nil
195
+ end
196
+
197
+ # Returns the next gallery using the given +gIndex+, if it exists, or +nil+ otherwise.
198
+ def next_gallery( gIndex = @gIndex )
199
+ gIndex != galleries.length - 1 ? galleries[gIndex + 1] : nil
200
+ end
201
+
202
+ end
203
+
204
+ infos( :name => 'File/GalleryHandler',
205
+ :author => Webgen::AUTHOR,
206
+ :summary => "Handles images gallery files"
207
+ )
208
+
209
+ register_extension 'gallery'
210
+
211
+ param "imagesPerPage", 20, 'Number of images per gallery page'
212
+ param "galleryPageTemplate", 'gallery_gallery.template', 'The template for gallery pages. ' +
213
+ 'If nil or a not existing file is specified, the default template is used.'
214
+ param "imagePageTemplate", 'gallery_image.template', 'The template for image pages. ' +
215
+ 'If nil or a not existing file is specified, the default template is used.'
216
+ param "mainPageTemplate", 'gallery_main.template', 'The template for the main page. ' +
217
+ 'If nil or a not existing file is specified, the default template is used.'
218
+ param "images", 'images/**/*.jpg', 'The path pattern for specifying the image files'
219
+
220
+
221
+ def initialize( plugin_manager )
222
+ super
223
+ @filedata = {}
224
+ end
225
+
226
+ def create_node( file, parent, meta_info )
227
+ @filedata = {}
228
+ @imagedata = {}
48
229
  begin
49
- @filedata = YAML::load( File.read( file ) )
230
+ filedata = []
231
+ YAML::load_documents( File.read( file ) ) {|d| filedata << d}
232
+ @filedata = filedata[0] if filedata[0].kind_of?( Hash )
233
+ @imagedata = filedata[1] if filedata[1].kind_of?( Hash )
50
234
  rescue
51
- self.logger.error { "Could not parse gallery file <#{file}>, not creating gallery pages" }
235
+ log(:error) { "Could not parse gallery file <#{file}>, not creating gallery pages" }
52
236
  return
53
237
  end
238
+
54
239
  @path = File.dirname( file )
55
- images = Dir[File.join( @path, get_param( 'files' ))].collect {|i| i.sub( /#{@path + File::SEPARATOR}/, '' ) }
240
+ images = Dir[File.join( @path, param( 'images' ))].collect {|i| i.sub( /#{@path + File::SEPARATOR}/, '' ) }
56
241
  images.sort! do |a,b|
57
- aoi = @filedata[a].nil? ? 0 : @filedata[a]['orderInfo'] || 0
58
- boi = @filedata[b].nil? ? 0 : @filedata[b]['orderInfo'] || 0
59
- atitle = @filedata[a].nil? ? a : @filedata[a]['title'] || a
60
- btitle = @filedata[b].nil? ? b : @filedata[b]['title'] || b
242
+ aoi = @imagedata[a].nil? ? 0 : @imagedata[a]['orderInfo'].to_s.to_i || 0
243
+ boi = @imagedata[b].nil? ? 0 : @imagedata[b]['orderInfo'].to_s.to_i || 0
244
+ atitle = @imagedata[a].nil? ? a : @imagedata[a]['title'] || a
245
+ btitle = @imagedata[b].nil? ? b : @imagedata[b]['title'] || b
61
246
  (aoi == boi ? atitle <=> btitle : aoi <=> boi)
62
247
  end
63
- self.logger.info { "Creating gallery for file <#{file}> with #{images.length} images" }
64
248
 
65
- create_gallery( images, parent )
249
+ @filedata['title'] ||= File.basename( file, '.*' ).capitalize
250
+ log(:info) { "Creating gallery for file <#{file}> with #{images.length} images" }
251
+ ginfo = create_gallery( images, parent )
252
+ @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].handle_gallery( ginfo, parent ) if @filedata.has_key?('layouter') && @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"]
66
253
 
67
254
  nil
68
255
  end
@@ -76,150 +263,214 @@ module FileHandlers
76
263
  #######
77
264
 
78
265
  # Method overridden to lookup parameters specified in the gallery file first.
79
- def get_param( name )
266
+ def param( name, plugin = nil )
80
267
  ( @filedata.has_key?( name ) ? @filedata[name] : super )
81
268
  end
82
269
 
83
- def call_layouter( type, metainfo, *args )
84
- content = Webgen::Plugin['DefaultGalleryLayouter'].get_layout( get_param( 'layout' ) ).send( type.to_s, *args )
270
+ def page_data( metainfo )
85
271
  temp = metainfo.to_yaml
86
- temp = "---\n" + temp unless /^---\s$/ =~ temp
87
- "#{temp}\n---\n#{content}"
272
+ temp = "---\n" + temp unless /^---\s*$/ =~ temp
273
+ "#{temp}\n---\n"
274
+ end
275
+
276
+ def create_page_node( filename, parent, data )
277
+ filehandler = @plugin_manager['Core/FileHandler']
278
+ pagehandler = @plugin_manager['File/PageHandler']
279
+ filehandler.create_node( filename, parent, pagehandler ) do |filename, parent, handler, meta_info|
280
+ pagehandler.create_node_from_data( filename, parent, data, meta_info )
281
+ end
88
282
  end
89
283
 
90
284
  def create_gallery( images, parent )
91
- main = create_main_page( images, parent )
92
- main['galleries'] = create_gallery_pages( images, parent )
285
+ main_data = main_page_data()
286
+ galleries = create_gallery_pages( images, parent )
93
287
 
94
- if main['galleries'].length != 1
95
- mainNode = Webgen::Plugin['PageFileHandler'].create_node_from_data( call_layouter( :main, main, main ), main['srcName'], parent )
96
- parent.add_child( mainNode )
97
- else
98
- main['galleries'][0]['title'] = main['title']
99
- main['galleries'][0]['inMenu'] = main['inMenu']
100
- main['galleries'][0].update( @filedata['mainPage'] || {} )
101
- main['pageNotUsed'] = true
102
- end
103
-
104
- main['galleries'].each_with_index do |gallery, gIndex|
105
- node = Webgen::Plugin['PageFileHandler'].create_node_from_data( call_layouter( :gallery, gallery, main, gIndex ), gallery['srcName'], parent )
106
- parent.add_child( node )
107
- gallery['imageList'].each_with_index do |image, iIndex|
108
- node = Webgen::Plugin['PageFileHandler'].create_node_from_data( call_layouter( :image, image, main, gIndex, iIndex ), image['srcName'], parent )
109
- parent.add_child( node )
288
+ info_galleries = galleries.collect {|n,g,i| g}
289
+ main_page_used = images.length > param( 'imagesPerPage' )
290
+
291
+ gallery_data = @filedata.dup
292
+ gallery_data[:galleries] = info_galleries
293
+ gallery_data['imagesPerPage'] = param('imagesPerPage'),
294
+
295
+ if main_page_used
296
+ main_node = create_page_node( gallery_file_name( main_data['title'] ), parent, page_data( main_data ) )
297
+ main_page = GalleryInfo::MainPage.new( main_node.path, main_data )
298
+ main_node.node_info[:ginfo] = GalleryInfo.new( gallery_data )
299
+ main_node.node_info[:ginfo].mainpage = main_page
300
+ end
301
+
302
+ galleries.each_with_index do |gData, gIndex|
303
+ gData[0].node_info[:ginfo] = GalleryInfo.new( gallery_data, gIndex )
304
+ gData[0].node_info[:ginfo].mainpage = main_page if main_page_used
305
+ gData[2].each_with_index do |iData, iIndex|
306
+ iData[0].node_info[:ginfo] = GalleryInfo.new( gallery_data, gIndex, iIndex )
307
+ iData[0].node_info[:ginfo].mainpage = main_page if main_page_used
110
308
  end
111
309
  end
310
+
311
+ GalleryInfo.new( gallery_data )
112
312
  end
113
313
 
114
- def create_main_page( images, parent )
314
+ def main_page_data
115
315
  main = {}
116
- main['title'] = get_param( 'title' )
117
- main['inMenu'] = get_param( 'mainPageInMenu' )
118
- main['template'] = get_param( 'mainPageTemplate' )
119
- main['srcName'] = gallery_file_name( main['title'] )
120
- main['blocks'] = [{'name'=>'content', 'format'=>'html'}]
121
- main.update( @filedata['mainPage'] || {} )
316
+ main['title'] = @filedata['title']
317
+ main['template'] = param( 'mainPageTemplate' )
318
+ main.update( @filedata['mainPageMetaInfo'] || {} )
122
319
  main
123
320
  end
124
321
 
125
322
  def create_gallery_pages( images, parent )
126
323
  galleries = []
127
- picsPerPage = get_param( 'imagesPerPage' )
324
+ picsPerPage = param( 'imagesPerPage' )
128
325
  0.step( images.length - 1, picsPerPage ) do |i|
129
- data = (@filedata['galleryPages'] || {}).dup
326
+ gIndex = i/picsPerPage + 1
327
+
328
+ data = (@filedata['galleryPagesMetaInfo'] || {}).dup
329
+ data['template'] ||= param( 'galleryPageTemplate' )
330
+ data['orderInfo'] += gIndex if data['orderInfo']
331
+ data['title'] = @filedata['title'] + ' ' + gIndex.to_s
130
332
 
131
- data['blocks'] ||= [{'name'=>'content', 'format'=>'html'}]
132
- data['template'] ||= get_param( 'galleryPageTemplate' )
133
- data['inMenu'] ||= get_param( 'galleryPageInMenu' )
134
- data['number'] = i/picsPerPage + 1
135
- data['orderInfo'] = get_param( 'galleryOrderInfo' ) + data['number']
136
- data['title'] = gallery_title( data['number'] )
137
- data['srcName'] = gallery_file_name( data['title'] )
138
- data['imageList'] = create_image_pages( images[i..(i + picsPerPage - 1)], parent )
333
+ if images.length <= param( 'imagesPerPage' ) && gIndex == 1
334
+ template = data['template']
335
+ data.update( main_page_data )
336
+ data['template'] = template
337
+ end
139
338
 
140
- galleries << data
339
+ node = create_page_node( gallery_file_name( data['title'] ), parent, page_data( data ) )
340
+ gal_images = create_image_pages( images[i..(i + picsPerPage - 1)], parent )
341
+ gallery = GalleryInfo::Gallery.new( node.path, data, gal_images.collect {|n,i| i} )
342
+ galleries << [node, gallery, gal_images]
141
343
  end
142
344
  galleries
143
345
  end
144
346
 
145
- def gallery_title( index )
146
- ( index.nil? ? nil : get_param( 'title' ) + ' ' + index.to_s )
147
- end
148
-
149
347
  def gallery_file_name( title )
150
- ( title.nil? ? nil : title.tr( ' .', '_' ) + '.html' )
348
+ ( title.nil? ? nil : title.tr( '/ .\\', '_' ) + '.page' )
151
349
  end
152
350
 
153
351
  def create_image_pages( images, parent )
154
352
  imageList = []
155
353
  images.each do |image|
156
- imageData = (@filedata[image] || {}).dup
157
-
158
- imageData['blocks'] ||= [{'name'=>'content', 'format'=>'html'}]
159
- imageData['title'] ||= "Image #{File.basename( image )}"
160
- imageData['description'] ||= ''
161
- imageData['inMenu'] ||= get_param( 'imagePageInMenu' )
162
- imageData['template'] ||= get_param( 'imagePageTemplate' )
163
- imageData['imageFilename'] = image
164
- imageData['srcName'] = gallery_file_name( get_param( 'title' ) + ' ' + File.basename( image ) )
165
- imageData['thumbnailSize'] ||= @filedata['thumbnailSize']
166
- imageData['thumbnail'] ||= get_thumbnail( imageData, parent )
354
+ data = (@imagedata[image] || {}).dup
355
+ data['template'] ||= param( 'imagePageTemplate' )
356
+ data['title'] ||= "Image #{File.basename( image )}"
357
+ data['thumbnailSize'] ||= @filedata['thumbnailSize']
358
+ data['thumbnailResizeMethod'] ||= @filedata['thumbnailResizeMethod']
359
+ data['exif'] ||= exif_data( File.join( parent.node_info[:src], image ) )
360
+
361
+ if @filedata.has_key?('layouter') && @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].respond_to?( :thumbnail_for )
362
+ data['thumbnail'] ||= @plugin_manager["GalleryLayouter/#{@filedata['layouter']}"].thumbnail_for( image, data, parent )
363
+ else
364
+ data['thumbnail'] ||= thumbnail_for( image, data, parent )
365
+ end
167
366
 
168
- imageList << imageData
367
+ filename = @filedata['title'] + ' ' + image
368
+ node = create_page_node( gallery_file_name( filename ), parent, page_data( data ) )
369
+ image = GalleryInfo::Image.new( node.path, data, image )
370
+ imageList << [node, image]
169
371
  end
170
372
  imageList
171
373
  end
172
374
 
173
- def get_thumbnail( imageData, parent )
174
- imageData['imageFilename']
375
+ def exif_data( image )
376
+ if @plugin_manager.optional_part( 'gallery-exif' )[:loaded]
377
+ jpeg = EXIFR::JPEG.new( image ) rescue nil
378
+ if !jpeg.nil? && jpeg.exif?
379
+ exif = jpeg.exif.dup
380
+ exif[:width] = jpeg.width
381
+ exif[:height] = jpeg.height
382
+ exif[:comment] = jpeg.comment
383
+ exif[:bits] = jpeg.bits
384
+ exif
385
+ else
386
+ nil
387
+ end
388
+ else
389
+ nil
390
+ end
391
+ end
392
+
393
+ def thumbnail_for( image, data, parent )
394
+ image
175
395
  end
176
396
 
177
397
  end
178
398
 
179
399
  # Try to use RMagick as thumbnail creator
180
- begin
181
- require 'RMagick'
400
+ load_optional_part( 'gallery-thumbnail',
401
+ :error_msg => "Could not load RMagick, creation of thumbnails not available",
402
+ :needed_gems => ['rmagick'],
403
+ :info => 'RMagick will be used to create thumbnails for the images used in an image gallery.' ) do
182
404
 
183
- class GalleryFileHandler
405
+ require 'RMagick'
184
406
 
185
- remove_method :get_thumbnail
186
- def get_thumbnail( imageData, parent )
187
- p_node = Webgen::Plugin['DirectoryHandler'].recursive_create_path( File.dirname( imageData['imageFilename'] ), parent )
188
- node = Webgen::Plugin['ThumbnailWriter'].create_node( File.join( @path, imageData['imageFilename'] ), p_node, imageData['thumbnailSize'] )
189
- p_node.add_child( node )
407
+ class GalleryHandler
190
408
 
191
- File.dirname( imageData['imageFilename'] ) + '/' + node['dest']
409
+ remove_method :thumbnail_for
410
+ def thumbnail_for( image, data, parent )
411
+ parent_node = @plugin_manager['File/DirectoryHandler'].recursive_create_path( File.dirname( image ), parent )
412
+ tn_handler = @plugin_manager['File/ThumbnailWriter']
413
+ file_handler = @plugin_manager['Core/FileHandler']
414
+ node = file_handler.create_node( File.basename( image ), parent_node, tn_handler ) do |fn, parent, h, mi|
415
+ h.create_node( fn, parent, mi, data['thumbnailSize'], data['thumbnailResizeMethod'] )
416
+ end
417
+ node.absolute_path
192
418
  end
193
419
 
194
420
  end
195
421
 
196
- class ThumbnailWriter < DefaultFileHandler
197
422
 
198
- summary "Writes out thumbnails with RMagick"
199
- add_param "thumbnailSize", "100x100", "The size of the thumbnails"
423
+ # Used for creating thumbnails for images.
424
+ class ThumbnailWriter < DefaultHandler
425
+
426
+ infos( :name => 'File/ThumbnailWriter',
427
+ :author => Webgen::AUTHOR,
428
+ :summary => "Writes out thumbnails with RMagick"
429
+ )
200
430
 
201
- def create_node( file, parent, thumbnailSize = nil )
202
- node = Node.new( parent )
203
- node['title'] = node['src'] = node['dest'] = 'tn_' + File.basename( file )
204
- node['int:thumbnailFile'] = file
205
- node['int:thumbnailSize'] = thumbnailSize unless thumbnailSize.nil? || thumbnailSize !~ /\d+x\d+/
206
- node['processor'] = self
431
+ param "thumbnailSize", "100x100", "The size of the thumbnails"
432
+ param 'resizeMethod', :normal, 'Specifies the algorithm which should be used for generating the thumbnail: ' +
433
+ ':normal (thumbnail fits exactly into given thumbnail size), ' +
434
+ ':cropped (resized to exact thumbnail size, image parts maybe cropped)'
435
+
436
+ def create_node( file, parent, meta_info, thumbnailSize = nil, method = nil )
437
+ node = Node.new( parent, 'tn_' + File.basename( file ).tr( ' ', '_' ) )
438
+ node.meta_info.update( meta_info )
439
+ node['title'] = node.path
440
+ node.node_info[:thumbnail_size] = thumbnailSize || param( 'thumbnailSize' )
441
+ node.node_info[:thumbnail_file] = file
442
+ node.node_info[:thumbnail_resize_method] = method || param( 'resizeMethod' )
443
+ node.node_info[:processor] = self
207
444
  node
208
445
  end
209
446
 
210
447
  def write_node( node )
211
- if Webgen::Plugin['FileHandler'].file_modified?( node['int:thumbnailFile'], node.recursive_value( 'dest' ) )
212
- self.logger.info {"Creating thumbnail <#{node.recursive_value('dest')}> from <#{node['int:thumbnailFile']}>"}
213
- image = Magick::ImageList.new( node['int:thumbnailFile'] )
214
- image.change_geometry( node['int:thumbnailSize'] || get_param( 'thumbnailSize' ) ) {|c,r,i| i.resize!( c, r )}
215
- image.write( node.recursive_value( 'dest' ) )
448
+ if @plugin_manager['Core/FileHandler'].file_modified?( node.node_info[:thumbnail_file], node.full_path )
449
+ log(:info) {"Creating thumbnail <#{node.full_path}> from image <#{node.node_info[:thumbnail_file]}>"}
450
+ image = Magick::ImageList.new( node.node_info[:thumbnail_file] ).first
451
+ case node.node_info[:thumbnail_resize_method]
452
+ when :cropped then cropped_thumbnail( image, node.node_info[:thumbnail_size] )
453
+ when :normal then normal_thumbnail( image, node.node_info[:thumbnail_size] )
454
+ else
455
+ log(:warn) {"Invalid resize method specified (#{node.node_info[:thumbnail_resize_method].inspect}), falling back to :normal"}
456
+ normal_thumbnail( image, node.node_info[:thumbnail_size] )
457
+ end
458
+ image.write( node.full_path )
216
459
  end
217
460
  end
218
461
 
462
+ private
463
+
464
+ def normal_thumbnail( image, size )
465
+ image.change_geometry( size ) {|c,r,i| i.resize!( c, r )}
466
+ end
467
+
468
+ def cropped_thumbnail( image, size )
469
+ image.crop_resized!( *size.split('x').collect {|s| s.to_i} )
470
+ end
471
+
219
472
  end
220
473
 
221
- rescue LoadError => e
222
- self.logger.warn { "Could not load RMagick, creation of thumbnails not available" }
223
474
  end
224
475
 
225
476
  end