radiant-globalize2-extension 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (318) hide show
  1. data/Rakefile +136 -0
  2. data/app/views/admin/shared/_change_locale.html.haml +22 -0
  3. data/app/views/admin/shared/_change_locale_admin.html.haml +7 -0
  4. data/app/views/admin/shared/_globalize_td.html.haml +4 -0
  5. data/app/views/admin/shared/_globalize_th.html.haml +2 -0
  6. data/config/routes.rb +4 -0
  7. data/cucumber.yml +1 -0
  8. data/db/migrate/20090728084238_create_translation_tables.rb +23 -0
  9. data/db/migrate/20090728114627_populate_translations.rb +21 -0
  10. data/db/migrate/20090729085422_remove_translated_attributes.rb +16 -0
  11. data/features/globalize_layouts.feature +19 -0
  12. data/features/globalize_pages.feature +58 -0
  13. data/features/globalize_snippets.feature +19 -0
  14. data/features/step_definitions/admin_steps.rb +58 -0
  15. data/features/step_definitions/webrat_steps.rb +119 -0
  16. data/features/support/env.rb +30 -0
  17. data/features/support/paths.rb +26 -0
  18. data/globalize2_extension.rb +93 -0
  19. data/lib/globalize2/compatibility/archive/archive_page_extensions.rb +21 -0
  20. data/lib/globalize2/compatibility/copy_move/copy_move_model_extensions.rb +22 -0
  21. data/lib/globalize2/compatibility/paginate/globalize_tags.rb +19 -0
  22. data/lib/globalize2/compatibility/paginate/page_extensions.rb +9 -0
  23. data/lib/globalize2/compatibility/vhost/page_extensions.rb +9 -0
  24. data/lib/globalize2/form_builder_extensions.rb +21 -0
  25. data/lib/globalize2/globalize_tags.rb +203 -0
  26. data/lib/globalize2/globalized_fields_controller_extension.rb +22 -0
  27. data/lib/globalize2/page_extensions.rb +88 -0
  28. data/lib/globalize2/page_part_extensions.rb +21 -0
  29. data/lib/globalize2/pages_controller_extensions.rb +9 -0
  30. data/lib/globalize2/site_controller_extensions.rb +24 -0
  31. data/lib/tasks/globalize2_extension_tasks.rake +28 -0
  32. data/public/images/admin/ad.gif +0 -0
  33. data/public/images/admin/ae.gif +0 -0
  34. data/public/images/admin/af.gif +0 -0
  35. data/public/images/admin/ag.gif +0 -0
  36. data/public/images/admin/ai.gif +0 -0
  37. data/public/images/admin/al.gif +0 -0
  38. data/public/images/admin/am.gif +0 -0
  39. data/public/images/admin/an.gif +0 -0
  40. data/public/images/admin/ao.gif +0 -0
  41. data/public/images/admin/ar.gif +0 -0
  42. data/public/images/admin/as.gif +0 -0
  43. data/public/images/admin/at.gif +0 -0
  44. data/public/images/admin/au.gif +0 -0
  45. data/public/images/admin/aw.gif +0 -0
  46. data/public/images/admin/ax.gif +0 -0
  47. data/public/images/admin/az.gif +0 -0
  48. data/public/images/admin/ba.gif +0 -0
  49. data/public/images/admin/bb.gif +0 -0
  50. data/public/images/admin/bd.gif +0 -0
  51. data/public/images/admin/be.gif +0 -0
  52. data/public/images/admin/bf.gif +0 -0
  53. data/public/images/admin/bg.gif +0 -0
  54. data/public/images/admin/bh.gif +0 -0
  55. data/public/images/admin/bi.gif +0 -0
  56. data/public/images/admin/bj.gif +0 -0
  57. data/public/images/admin/bm.gif +0 -0
  58. data/public/images/admin/bn.gif +0 -0
  59. data/public/images/admin/bo.gif +0 -0
  60. data/public/images/admin/br.gif +0 -0
  61. data/public/images/admin/bs.gif +0 -0
  62. data/public/images/admin/bt.gif +0 -0
  63. data/public/images/admin/bv.gif +0 -0
  64. data/public/images/admin/bw.gif +0 -0
  65. data/public/images/admin/by.gif +0 -0
  66. data/public/images/admin/bz.gif +0 -0
  67. data/public/images/admin/ca.gif +0 -0
  68. data/public/images/admin/catalonia.gif +0 -0
  69. data/public/images/admin/cc.gif +0 -0
  70. data/public/images/admin/cd.gif +0 -0
  71. data/public/images/admin/cf.gif +0 -0
  72. data/public/images/admin/cg.gif +0 -0
  73. data/public/images/admin/ch.gif +0 -0
  74. data/public/images/admin/ci.gif +0 -0
  75. data/public/images/admin/ck.gif +0 -0
  76. data/public/images/admin/cl.gif +0 -0
  77. data/public/images/admin/cm.gif +0 -0
  78. data/public/images/admin/cn.gif +0 -0
  79. data/public/images/admin/co.gif +0 -0
  80. data/public/images/admin/cr.gif +0 -0
  81. data/public/images/admin/cs.gif +0 -0
  82. data/public/images/admin/cu.gif +0 -0
  83. data/public/images/admin/cv.gif +0 -0
  84. data/public/images/admin/cx.gif +0 -0
  85. data/public/images/admin/cy.gif +0 -0
  86. data/public/images/admin/cz.gif +0 -0
  87. data/public/images/admin/de.gif +0 -0
  88. data/public/images/admin/dj.gif +0 -0
  89. data/public/images/admin/dk.gif +0 -0
  90. data/public/images/admin/dm.gif +0 -0
  91. data/public/images/admin/do.gif +0 -0
  92. data/public/images/admin/dz.gif +0 -0
  93. data/public/images/admin/ec.gif +0 -0
  94. data/public/images/admin/ee.gif +0 -0
  95. data/public/images/admin/eg.gif +0 -0
  96. data/public/images/admin/eh.gif +0 -0
  97. data/public/images/admin/en.gif +0 -0
  98. data/public/images/admin/england.gif +0 -0
  99. data/public/images/admin/er.gif +0 -0
  100. data/public/images/admin/es.gif +0 -0
  101. data/public/images/admin/et.gif +0 -0
  102. data/public/images/admin/europeanunion.gif +0 -0
  103. data/public/images/admin/fam.gif +0 -0
  104. data/public/images/admin/fi.gif +0 -0
  105. data/public/images/admin/fj.gif +0 -0
  106. data/public/images/admin/fk.gif +0 -0
  107. data/public/images/admin/fm.gif +0 -0
  108. data/public/images/admin/fo.gif +0 -0
  109. data/public/images/admin/fr.gif +0 -0
  110. data/public/images/admin/ga.gif +0 -0
  111. data/public/images/admin/gb.gif +0 -0
  112. data/public/images/admin/gd.gif +0 -0
  113. data/public/images/admin/ge.gif +0 -0
  114. data/public/images/admin/gf.gif +0 -0
  115. data/public/images/admin/gh.gif +0 -0
  116. data/public/images/admin/gi.gif +0 -0
  117. data/public/images/admin/gl.gif +0 -0
  118. data/public/images/admin/gm.gif +0 -0
  119. data/public/images/admin/gn.gif +0 -0
  120. data/public/images/admin/gp.gif +0 -0
  121. data/public/images/admin/gq.gif +0 -0
  122. data/public/images/admin/gr.gif +0 -0
  123. data/public/images/admin/gs.gif +0 -0
  124. data/public/images/admin/gt.gif +0 -0
  125. data/public/images/admin/gu.gif +0 -0
  126. data/public/images/admin/gw.gif +0 -0
  127. data/public/images/admin/gy.gif +0 -0
  128. data/public/images/admin/hk.gif +0 -0
  129. data/public/images/admin/hm.gif +0 -0
  130. data/public/images/admin/hn.gif +0 -0
  131. data/public/images/admin/hr.gif +0 -0
  132. data/public/images/admin/ht.gif +0 -0
  133. data/public/images/admin/hu.gif +0 -0
  134. data/public/images/admin/id.gif +0 -0
  135. data/public/images/admin/ie.gif +0 -0
  136. data/public/images/admin/il.gif +0 -0
  137. data/public/images/admin/in.gif +0 -0
  138. data/public/images/admin/io.gif +0 -0
  139. data/public/images/admin/iq.gif +0 -0
  140. data/public/images/admin/ir.gif +0 -0
  141. data/public/images/admin/is.gif +0 -0
  142. data/public/images/admin/it.gif +0 -0
  143. data/public/images/admin/jm.gif +0 -0
  144. data/public/images/admin/jo.gif +0 -0
  145. data/public/images/admin/jp.gif +0 -0
  146. data/public/images/admin/ke.gif +0 -0
  147. data/public/images/admin/kg.gif +0 -0
  148. data/public/images/admin/kh.gif +0 -0
  149. data/public/images/admin/ki.gif +0 -0
  150. data/public/images/admin/km.gif +0 -0
  151. data/public/images/admin/kn.gif +0 -0
  152. data/public/images/admin/kp.gif +0 -0
  153. data/public/images/admin/kr.gif +0 -0
  154. data/public/images/admin/kw.gif +0 -0
  155. data/public/images/admin/ky.gif +0 -0
  156. data/public/images/admin/kz.gif +0 -0
  157. data/public/images/admin/la.gif +0 -0
  158. data/public/images/admin/lb.gif +0 -0
  159. data/public/images/admin/lc.gif +0 -0
  160. data/public/images/admin/li.gif +0 -0
  161. data/public/images/admin/lk.gif +0 -0
  162. data/public/images/admin/lr.gif +0 -0
  163. data/public/images/admin/ls.gif +0 -0
  164. data/public/images/admin/lt.gif +0 -0
  165. data/public/images/admin/lu.gif +0 -0
  166. data/public/images/admin/lv.gif +0 -0
  167. data/public/images/admin/ly.gif +0 -0
  168. data/public/images/admin/ma.gif +0 -0
  169. data/public/images/admin/mc.gif +0 -0
  170. data/public/images/admin/md.gif +0 -0
  171. data/public/images/admin/me.gif +0 -0
  172. data/public/images/admin/mg.gif +0 -0
  173. data/public/images/admin/mh.gif +0 -0
  174. data/public/images/admin/mk.gif +0 -0
  175. data/public/images/admin/ml.gif +0 -0
  176. data/public/images/admin/mm.gif +0 -0
  177. data/public/images/admin/mn.gif +0 -0
  178. data/public/images/admin/mo.gif +0 -0
  179. data/public/images/admin/mp.gif +0 -0
  180. data/public/images/admin/mq.gif +0 -0
  181. data/public/images/admin/mr.gif +0 -0
  182. data/public/images/admin/ms.gif +0 -0
  183. data/public/images/admin/mt.gif +0 -0
  184. data/public/images/admin/mu.gif +0 -0
  185. data/public/images/admin/mv.gif +0 -0
  186. data/public/images/admin/mw.gif +0 -0
  187. data/public/images/admin/mx.gif +0 -0
  188. data/public/images/admin/my.gif +0 -0
  189. data/public/images/admin/mz.gif +0 -0
  190. data/public/images/admin/na.gif +0 -0
  191. data/public/images/admin/nc.gif +0 -0
  192. data/public/images/admin/ne.gif +0 -0
  193. data/public/images/admin/nf.gif +0 -0
  194. data/public/images/admin/ng.gif +0 -0
  195. data/public/images/admin/ni.gif +0 -0
  196. data/public/images/admin/nl.gif +0 -0
  197. data/public/images/admin/no.gif +0 -0
  198. data/public/images/admin/np.gif +0 -0
  199. data/public/images/admin/nr.gif +0 -0
  200. data/public/images/admin/nu.gif +0 -0
  201. data/public/images/admin/nz.gif +0 -0
  202. data/public/images/admin/om.gif +0 -0
  203. data/public/images/admin/pa.gif +0 -0
  204. data/public/images/admin/pe.gif +0 -0
  205. data/public/images/admin/pf.gif +0 -0
  206. data/public/images/admin/pg.gif +0 -0
  207. data/public/images/admin/ph.gif +0 -0
  208. data/public/images/admin/pk.gif +0 -0
  209. data/public/images/admin/pl.gif +0 -0
  210. data/public/images/admin/pm.gif +0 -0
  211. data/public/images/admin/pn.gif +0 -0
  212. data/public/images/admin/pr.gif +0 -0
  213. data/public/images/admin/ps.gif +0 -0
  214. data/public/images/admin/pt.gif +0 -0
  215. data/public/images/admin/pw.gif +0 -0
  216. data/public/images/admin/py.gif +0 -0
  217. data/public/images/admin/qa.gif +0 -0
  218. data/public/images/admin/re.gif +0 -0
  219. data/public/images/admin/ro.gif +0 -0
  220. data/public/images/admin/rs.gif +0 -0
  221. data/public/images/admin/ru.gif +0 -0
  222. data/public/images/admin/rw.gif +0 -0
  223. data/public/images/admin/sa.gif +0 -0
  224. data/public/images/admin/sb.gif +0 -0
  225. data/public/images/admin/sc.gif +0 -0
  226. data/public/images/admin/scotland.gif +0 -0
  227. data/public/images/admin/sd.gif +0 -0
  228. data/public/images/admin/se.gif +0 -0
  229. data/public/images/admin/sg.gif +0 -0
  230. data/public/images/admin/sh.gif +0 -0
  231. data/public/images/admin/si.gif +0 -0
  232. data/public/images/admin/sj.gif +0 -0
  233. data/public/images/admin/sk.gif +0 -0
  234. data/public/images/admin/sl.gif +0 -0
  235. data/public/images/admin/sm.gif +0 -0
  236. data/public/images/admin/sn.gif +0 -0
  237. data/public/images/admin/so.gif +0 -0
  238. data/public/images/admin/sr.gif +0 -0
  239. data/public/images/admin/st.gif +0 -0
  240. data/public/images/admin/sv.gif +0 -0
  241. data/public/images/admin/sy.gif +0 -0
  242. data/public/images/admin/sz.gif +0 -0
  243. data/public/images/admin/tc.gif +0 -0
  244. data/public/images/admin/td.gif +0 -0
  245. data/public/images/admin/tf.gif +0 -0
  246. data/public/images/admin/tg.gif +0 -0
  247. data/public/images/admin/th.gif +0 -0
  248. data/public/images/admin/tj.gif +0 -0
  249. data/public/images/admin/tk.gif +0 -0
  250. data/public/images/admin/tl.gif +0 -0
  251. data/public/images/admin/tm.gif +0 -0
  252. data/public/images/admin/tn.gif +0 -0
  253. data/public/images/admin/to.gif +0 -0
  254. data/public/images/admin/tr.gif +0 -0
  255. data/public/images/admin/tt.gif +0 -0
  256. data/public/images/admin/tv.gif +0 -0
  257. data/public/images/admin/tw.gif +0 -0
  258. data/public/images/admin/tz.gif +0 -0
  259. data/public/images/admin/ua.gif +0 -0
  260. data/public/images/admin/ug.gif +0 -0
  261. data/public/images/admin/um.gif +0 -0
  262. data/public/images/admin/us.gif +0 -0
  263. data/public/images/admin/uy.gif +0 -0
  264. data/public/images/admin/uz.gif +0 -0
  265. data/public/images/admin/va.gif +0 -0
  266. data/public/images/admin/vc.gif +0 -0
  267. data/public/images/admin/ve.gif +0 -0
  268. data/public/images/admin/vg.gif +0 -0
  269. data/public/images/admin/vi.gif +0 -0
  270. data/public/images/admin/vn.gif +0 -0
  271. data/public/images/admin/vu.gif +0 -0
  272. data/public/images/admin/wales.gif +0 -0
  273. data/public/images/admin/wf.gif +0 -0
  274. data/public/images/admin/ws.gif +0 -0
  275. data/public/images/admin/ye.gif +0 -0
  276. data/public/images/admin/yt.gif +0 -0
  277. data/public/images/admin/za.gif +0 -0
  278. data/public/images/admin/zm.gif +0 -0
  279. data/public/images/admin/zw.gif +0 -0
  280. data/public/stylesheets/sass/admin/globalize2.sass +59 -0
  281. data/readme.md +159 -0
  282. data/spec/controllers/admin/pages_controller_spec.rb +22 -0
  283. data/spec/controllers/site_controller_spec.rb +40 -0
  284. data/spec/factories.rb +39 -0
  285. data/spec/models/globalize_tags_spec.rb +155 -0
  286. data/spec/models/page_spec.rb +91 -0
  287. data/spec/spec.opts +6 -0
  288. data/spec/spec_helper.rb +34 -0
  289. data/vendor/plugins/globalize2/.gitignore +5 -0
  290. data/vendor/plugins/globalize2/LICENSE +21 -0
  291. data/vendor/plugins/globalize2/README.textile +86 -0
  292. data/vendor/plugins/globalize2/Rakefile +39 -0
  293. data/vendor/plugins/globalize2/VERSION +1 -0
  294. data/vendor/plugins/globalize2/generators/db_backend.rb +0 -0
  295. data/vendor/plugins/globalize2/generators/templates/db_backend_migration.rb +25 -0
  296. data/vendor/plugins/globalize2/globalize2.gemspec +81 -0
  297. data/vendor/plugins/globalize2/init.rb +1 -0
  298. data/vendor/plugins/globalize2/lib/globalize.rb +15 -0
  299. data/vendor/plugins/globalize2/lib/globalize/active_record.rb +215 -0
  300. data/vendor/plugins/globalize2/lib/globalize/active_record/adapter.rb +80 -0
  301. data/vendor/plugins/globalize2/lib/globalize/active_record/attributes.rb +25 -0
  302. data/vendor/plugins/globalize2/lib/globalize/active_record/migration.rb +44 -0
  303. data/vendor/plugins/globalize2/lib/i18n/missing_translations_log_handler.rb +41 -0
  304. data/vendor/plugins/globalize2/lib/i18n/missing_translations_raise_handler.rb +25 -0
  305. data/vendor/plugins/globalize2/test/active_record/fallbacks_test.rb +102 -0
  306. data/vendor/plugins/globalize2/test/active_record/migration_test.rb +118 -0
  307. data/vendor/plugins/globalize2/test/active_record/sti_translated_test.rb +61 -0
  308. data/vendor/plugins/globalize2/test/active_record/translates_test.rb +96 -0
  309. data/vendor/plugins/globalize2/test/active_record/translation_class_test.rb +30 -0
  310. data/vendor/plugins/globalize2/test/active_record/validation_tests.rb +75 -0
  311. data/vendor/plugins/globalize2/test/active_record_test.rb +467 -0
  312. data/vendor/plugins/globalize2/test/all.rb +2 -0
  313. data/vendor/plugins/globalize2/test/data/models.rb +62 -0
  314. data/vendor/plugins/globalize2/test/data/no_globalize_schema.rb +11 -0
  315. data/vendor/plugins/globalize2/test/data/schema.rb +55 -0
  316. data/vendor/plugins/globalize2/test/i18n/missing_translations_test.rb +36 -0
  317. data/vendor/plugins/globalize2/test/test_helper.rb +76 -0
  318. metadata +409 -0
@@ -0,0 +1,30 @@
1
+ # Sets up the Rails environment for Cucumber
2
+ ENV["RAILS_ENV"] = "test"
3
+ require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
4
+
5
+ require 'cucumber/rails/world'
6
+ require 'cucumber/formatter/unicode' # Comment out this line if you don't want Cucumber Unicode support
7
+ require 'webrat'
8
+
9
+ Webrat.configure do |config|
10
+ config.mode = :rails
11
+ end
12
+
13
+ Before do
14
+ ActiveRecord::Base.connection.tables.each do |table|
15
+ begin
16
+ table.classify.constantize.delete_all
17
+ rescue StandardError => e
18
+ # silent
19
+ end
20
+ end
21
+ Radiant::Config.create!(:key => 'globalize.languages', :value => "ro") if Radiant::Config['globalize.languages'].blank?
22
+ end
23
+
24
+ require 'cucumber/rails/rspec'
25
+ require 'webrat/core/matchers'
26
+
27
+ gem 'thoughtbot-factory_girl', '>= 1.2.1'
28
+ require 'factory_girl'
29
+
30
+ require File.dirname(__FILE__) + "/../../spec/factories.rb"
@@ -0,0 +1,26 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in webrat_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the welcome page/
12
+ welcome_path
13
+ when /the pages index page/
14
+ admin_pages_path
15
+ when /the layouts index page/
16
+ admin_layouts_path
17
+ when /the snippets index page/
18
+ admin_snippets_path
19
+ else
20
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
21
+ "Now, go and add a mapping in #{__FILE__}"
22
+ end
23
+ end
24
+ end
25
+
26
+ World(NavigationHelpers)
@@ -0,0 +1,93 @@
1
+ # Uncomment this if you reference any of your controllers in activate
2
+ # require_dependency 'application'
3
+ require 'globalize2/form_builder_extensions'
4
+
5
+ class Globalize2Extension < Radiant::Extension
6
+ version "0.2"
7
+ description "Translate content in Radiant CMS using the Globalize2 Rails plugin."
8
+ url "http://blog.aissac.ro/radiant/globalize2-extension/"
9
+
10
+ GLOBALIZABLE_CONTENT = {
11
+
12
+ Page => [:title, :slug, :breadcrumb],
13
+ PagePart => [:content],
14
+ Layout => [:content],
15
+ Snippet => [:content]
16
+ }
17
+
18
+ def self.default_language
19
+ @@default_language ||= Radiant::Config['globalize.default_language'].blank? ? "en" : Radiant::Config['globalize.default_language']
20
+ end
21
+
22
+ def self.languages
23
+ @@languages ||= Radiant::Config['globalize.languages'].blank? ? [] : Radiant::Config['globalize.languages'].split(",").map(&:to_s)
24
+ end
25
+
26
+ def self.locales
27
+ @@locales ||= [default_language, *languages].map(&:to_s)
28
+ end
29
+
30
+ def self.content_locale
31
+ Thread.current[:content_locale] || default_language
32
+ end
33
+
34
+ def self.content_locale= locale
35
+ Thread.current[:content_locale] = locale
36
+ end
37
+
38
+ def activate
39
+ require 'i18n/backend/fallbacks'
40
+ I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
41
+
42
+ admin.page.edit.add :form, 'admin/shared/change_locale', :before => 'edit_page_parts'
43
+ admin.snippet.edit.add :form, 'admin/shared/change_locale', :before => 'edit_content'
44
+ admin.layout.edit.add :form, 'admin/shared/change_locale', :before => 'edit_content'
45
+
46
+ admin.page.index.add :top, 'admin/shared/change_locale_admin'
47
+ admin.layout.index.add :top, 'admin/shared/change_locale_admin'
48
+ admin.snippet.index.add :top, 'admin/shared/change_locale_admin'
49
+
50
+ admin.page.index.add :sitemap_head, 'admin/shared/globalize_th'
51
+ admin.page.index.add :node, 'admin/shared/globalize_td'
52
+
53
+ I18n.default_locale = Globalize2Extension.default_language
54
+
55
+ Admin::PagesController.send(:include, Globalize2::PagesControllerExtensions)
56
+ Admin::PagesController.send(:include, Globalize2::GlobalizedFieldsControllerExtension)
57
+ Admin::LayoutsController.send(:include, Globalize2::GlobalizedFieldsControllerExtension )
58
+ Admin::SnippetsController.send(:include, Globalize2::GlobalizedFieldsControllerExtension)
59
+
60
+ SiteController.send(:include, Globalize2::SiteControllerExtensions)
61
+
62
+ GLOBALIZABLE_CONTENT.each do |model, columns|
63
+ model.send(:translates, *columns)
64
+ #p model.ancestors
65
+ end
66
+
67
+ Page.send(:include, Globalize2::GlobalizeTags)
68
+
69
+ Page.class_eval {
70
+
71
+ #extend Globalize2::PageExtensions::ClassMethods
72
+ include Globalize2::PageExtensions::InstanceMethods
73
+ }
74
+
75
+ #Page.send(:include, Globalize2::PageExtensions)
76
+ PagePart.send(:include, Globalize2::PagePartExtensions)
77
+
78
+ #compatibility
79
+ CopyMove::Model.send(:include, Globalize2::Compatibility::CopyMove::CopyMoveModelExtensions) if defined?(CopyMoveExtension)
80
+ ArchivePage.send(:include, Globalize2::Compatibility::Archive::ArchivePageExtensions) if defined?(ArchiveExtension)
81
+ #ArchivePage.send(:include, Globalize2::GlobalizeTags) if defined?(ArchiveExtension)
82
+ Page.send(:include, Globalize2::Compatibility::Vhost::PageExtensions) if defined?(VhostExtension)
83
+
84
+ if defined?(PaginateExtension)
85
+ Page.send(:include, Globalize2::Compatibility::Paginate::GlobalizeTags)
86
+ Page.send(:include, Globalize2::Compatibility::Paginate::PageExtensions)
87
+ end
88
+ end
89
+
90
+ def deactivate
91
+ end
92
+
93
+ end
@@ -0,0 +1,21 @@
1
+ module Globalize2::Compatibility
2
+ module Archive::ArchivePageExtensions
3
+ def self.included(base)
4
+ base.class_eval do
5
+ def child_url(child)
6
+ date = child.published_at || Time.now
7
+
8
+ if ArchiveYearIndexPage === child
9
+ clean_url "#{ url }/#{ date.strftime '%Y' }/"
10
+ elsif ArchiveMonthIndexPage === child
11
+ clean_url "#{ url }/#{ date.strftime '%Y/%m' }/"
12
+ elsif ArchiveDayIndexPage === child
13
+ clean_url "#{ url }/#{ date.strftime '%Y/%m/%d/' }/"
14
+ else
15
+ clean_url "#{ url }/#{ date.strftime '%Y/%m/%d' }/#{ child.slug }"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module Globalize2::Compatibility
2
+ module CopyMove::CopyMoveModelExtensions
3
+ def self.included(base)
4
+ base.class_eval do
5
+ alias_method :old_copy_to, :copy_to
6
+
7
+ def copy_to(parent, status = nil)
8
+ parent.children.build(copiable_attributes.symbolize_keys.merge(new_slug_and_title_under(parent))).tap do |new_page|
9
+ self.translations.each do |gt|
10
+ new_page.translations << gt.clone
11
+ end
12
+ self.parts.each do |part|
13
+ new_page.parts << part.clone
14
+ end
15
+ new_page.status_id = status.blank? ? new_page.status_id : status
16
+ new_page.save!
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Globalize2::Compatibility
2
+ module Paginate::GlobalizeTags
3
+ include Radiant::Taggable
4
+
5
+ class TagError < StandardError; end
6
+
7
+ tag 'paginate_with_globalize' do |tag|
8
+ with_translated_locales = tag.attr['locale'] == 'false' ? false : true
9
+ if with_translated_locales
10
+ result = Page.scope_locale(I18n.locale.to_s) do
11
+ send('tag:paginate_without_globalize', tag)
12
+ end
13
+ else
14
+ result = send('tag:paginate_without_globalize', tag)
15
+ end
16
+ result
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ module Globalize2::Compatibility
2
+ module Paginate::PageExtensions
3
+ def self.included(base)
4
+ base.class_eval do
5
+ alias_method_chain 'tag:paginate', :globalize
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Globalize2::Compatibility
2
+ module Vhost::PageExtensions
3
+ def self.included(base)
4
+ base.validate.delete_if { |v|
5
+ (v.options[:scope].is_a?(Array)) ? v.options[:scope].include?("site_id") : false
6
+ }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module Globalize2
2
+ module FormBuilderExtensions
3
+ def self.included(base)
4
+ base.alias_method_chain :text_field, :globalize
5
+ base.alias_method_chain :text_area, :globalize
6
+ end
7
+
8
+ def text_field_with_globalize(method, options = {})
9
+ Rails.logger.debug "FormBuilder: text_field_with_globalize"
10
+ options[:value] = options[:value] || I18n.with_locale(Globalize2Extension.content_locale) { object.send(method) }
11
+ text_field_without_globalize(method, options)
12
+ end
13
+
14
+ def text_area_with_globalize(method, options = {})
15
+ options[:value] = options[:value] || I18n.with_locale(Globalize2Extension.content_locale) { object.send(method) }
16
+ text_area_without_globalize(method, options)
17
+ end
18
+ end
19
+ end
20
+
21
+ ActionView::Helpers::FormBuilder.send(:include, Globalize2::FormBuilderExtensions)
@@ -0,0 +1,203 @@
1
+ module Globalize2
2
+ module GlobalizeTags
3
+ include Radiant::Taggable
4
+
5
+ class TagError < StandardError; end
6
+
7
+ tag 'link_with_globalize' do |tag|
8
+ locale = tag.attr.delete("locale")
9
+ if locale
10
+ switch_locale(locale) do
11
+ send('tag:link_without_globalize', tag)
12
+ end
13
+ else
14
+ send('tag:link_without_globalize', tag)
15
+ end
16
+ end
17
+
18
+ tag 'children:each_with_globalize' do |tag|
19
+ with_translated_locales = tag.attr['locale'] == 'false' ? false : true
20
+ if with_translated_locales
21
+ result = Page.scope_locale(I18n.locale.to_s) do
22
+ send('tag:children:each_without_globalize', tag)
23
+ end
24
+ else
25
+
26
+ result = send('tag:children:each_without_globalize', tag)
27
+ end
28
+ result
29
+ end
30
+
31
+ desc %{
32
+ Renders the current locale.
33
+
34
+ *Usage:*
35
+
36
+ <pre><code><r:locale /></code></pre>
37
+ }
38
+ tag 'locale' do |tag|
39
+ I18n.locale.to_s
40
+ end
41
+
42
+ desc %{
43
+ Renders the locales passed in @codes@ attribute. Use the @between@ attribute to specify something between the rendered locale codes.
44
+
45
+ *Example*
46
+
47
+ <pre><code>
48
+ <ul>
49
+ <r:locales codes='en|ro'>
50
+ <r:normal>
51
+ <li><r:link id='<r:locale />'><r:locale /></r:link></li>
52
+ </r:normal>
53
+ <r:active>
54
+ <li><r:link id='<r:locale />'><r:locale /></r:link></li>
55
+ </r:active>
56
+ </r:locales>
57
+ </ul>
58
+ </code></pre>
59
+ }
60
+ tag 'locales' do |tag|
61
+ hash = tag.locals.locale = {}
62
+ tag.expand
63
+ raise TagError.new("'locales' tag must include a 'normal' tag") unless hash.has_key? :normal
64
+ raise TagError.new("'codes' attribute must be set") if tag.attr['codes'].blank?
65
+
66
+ result = []
67
+ codes = tag.attr["codes"].split("|").each do |code|
68
+ hash[:code] = code
69
+ if I18n.locale.to_s == code
70
+ result << (hash[:active] || hash[:normal]).call
71
+ else
72
+ switch_locale(code) do
73
+ result << hash[:normal].call
74
+ end
75
+ end
76
+ end
77
+ between = tag.attr["between"] || " "
78
+ result.reject { |i| i.blank? }.join(between)
79
+ end
80
+
81
+ [:normal, :active].each do |symbol|
82
+ tag "locales:#{symbol}" do |tag|
83
+ hash = tag.locals.locale
84
+ hash[symbol] = tag.block
85
+ end
86
+ end
87
+
88
+ tag 'locales:code' do |tag|
89
+ hash = tag.locals.locale
90
+ hash[:code]
91
+ end
92
+
93
+ desc %{
94
+ Temporarily switch the locale within the block. Use the @code@ attribute so specify the locale you want to switch to.
95
+
96
+ *Usage:*
97
+
98
+ <pre><code><r:with_locale code='en'>...</r:with_locale></code></pre>
99
+ }
100
+ tag 'with_locale' do |tag|
101
+ code = tag.attr['code']
102
+ raise TagError.new("'code' must be set") if code.blank?
103
+ result = ''
104
+ switch_locale(code) do
105
+ result << tag.expand
106
+ end
107
+ result
108
+ end
109
+
110
+ desc %{
111
+ Renders the containing elements if the page's title is translated. This doesn't necessarily mean the content (page parts) are translated.
112
+
113
+ *Usage:*
114
+
115
+ <pre><code><r:if_translation_title>...</r:if_translation_title></code></pre>
116
+ }
117
+ tag 'if_translation_title' do |tag|
118
+ page = tag.locals.page
119
+ tag.expand if page.translated_locales.include?(I18n.locale.to_sym)
120
+ end
121
+
122
+ desc %{
123
+ The opposite of the @if_translation_title@ tag. Renders the containing elements if the page's title is not translated.
124
+
125
+ *Usage:*
126
+
127
+ <pre><code><r:unless_translation_title>...</r:unless_translation_title></code></pre>
128
+ }
129
+ tag 'unless_translation_title' do |tag|
130
+ page = tag.locals.page
131
+ tag.expand unless page.translated_locales.include?(I18n.locale.to_sym)
132
+ end
133
+
134
+ desc %{
135
+ Renders the containing elements if the page's part is translated. By default the @part@ attribute is set to @body@
136
+
137
+ *Usage:*
138
+
139
+ <pre><code><r:if_translation_content [part='part_name']>...</r:if_translation_content></code></pre>
140
+
141
+ }
142
+ tag 'if_translation_content' do |tag|
143
+ name = tag.attr['part'] || 'body'
144
+ part = tag.locals.page.part(name)
145
+ tag.expand if part && part.translated_locales.include?(I18n.locale.to_sym)
146
+ end
147
+
148
+ desc %{
149
+ The opposite of the @if_translation_content@ tag. Renders the containing elements if the page's part is not translated. By default, the @part@ attribute is set to @body@
150
+
151
+ *Usage:*
152
+
153
+ <pre><code><r:unless_translation_content [part='part_name']>...</r:unless_translation_content></code></pre>
154
+ }
155
+ tag 'unless_translation_content' do |tag|
156
+ name = tag.attr['part'] || 'body'
157
+ part = tag.locals.page.part(name)
158
+ tag.expand if part.nil? || !part.translated_locales.include?(I18n.locale.to_sym)
159
+ end
160
+
161
+ desc %{
162
+ Renders the date based on the current page (by default when it was published or created).
163
+ The format attribute uses the same formating codes used by the Ruby @strftime@ function. By
164
+ default it's set to @%A, %B %d, %Y@. The @for@ attribute selects which date to render. Valid
165
+ options are @published_at@, @created_at@, @updated_at@, and @now@. @now@ will render the
166
+ current date/time, regardless of the page.
167
+
168
+ *Usage:*
169
+
170
+ <pre><code><r:date [format="%A, %B %d, %Y"] [for="published_at"]/></code></pre>
171
+ }
172
+ tag 'date' do |tag|
173
+ page = tag.locals.page
174
+ format = (tag.attr['format'] || '%A, %B %d, %Y')
175
+ time_attr = tag.attr['for']
176
+ date = if time_attr
177
+ case
178
+ when time_attr == 'now'
179
+ Time.zone.now
180
+ when ['published_at', 'created_at', 'updated_at'].include?(time_attr)
181
+ page[time_attr]
182
+ else
183
+ raise TagError, "Invalid value for 'for' attribute."
184
+ end
185
+ else
186
+ page.published_at || page.created_at
187
+ end
188
+ I18n.l date , :format => format
189
+ end
190
+
191
+
192
+ private
193
+ # Allows you to switch the current locale while within the block.
194
+ # The previously current locale is reset after the block is finished.
195
+ def switch_locale(locale)
196
+ current_locale = I18n.locale
197
+ I18n.locale = locale.to_sym
198
+ result = yield
199
+ I18n.locale = current_locale
200
+ result
201
+ end
202
+ end
203
+ end