zena 0.15.2 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. data/.gitignore +20 -0
  2. data/CREDITS +27 -0
  3. data/Capfile +3 -0
  4. data/DEVELOPERS +46 -0
  5. data/History.txt +15 -0
  6. data/MIT-LICENSE +19 -0
  7. data/Rakefile +44 -0
  8. data/TODO +24 -0
  9. data/TODO_ZENA_1_0 +23 -0
  10. data/app/controllers/application_controller.rb +3 -0
  11. data/app/controllers/documents_controller.rb +22 -56
  12. data/app/controllers/nodes_controller.rb +42 -27
  13. data/app/controllers/pings_controller.rb +19 -0
  14. data/app/controllers/relations_controller.rb +5 -1
  15. data/app/controllers/sites_controller.rb +1 -46
  16. data/app/controllers/user_sessions_controller.rb +47 -0
  17. data/app/controllers/users_controller.rb +1 -0
  18. data/app/controllers/versions_controller.rb +25 -7
  19. data/app/controllers/virtual_classes_controller.rb +1 -1
  20. data/app/helpers/application_helper.rb +1 -1
  21. data/app/models/comment.rb +2 -1
  22. data/app/models/contact_content.rb +2 -2
  23. data/app/models/data_entry.rb +5 -6
  24. data/app/models/document.rb +14 -10
  25. data/app/models/document_content.rb +4 -6
  26. data/app/models/iformat.rb +2 -2
  27. data/app/models/image_content.rb +6 -9
  28. data/app/models/node.rb +106 -164
  29. data/app/models/page.rb +0 -20
  30. data/app/models/site.rb +42 -12
  31. data/app/models/template.rb +3 -8
  32. data/app/models/template_content.rb +2 -0
  33. data/app/models/text_document.rb +13 -8
  34. data/app/models/user.rb +47 -100
  35. data/app/models/user_session.rb +4 -0
  36. data/app/models/version.rb +1 -1
  37. data/app/views/comments/create.rjs +3 -3
  38. data/app/views/comments/edit.rjs +1 -1
  39. data/app/views/comments/update.rjs +1 -1
  40. data/app/views/nodes/_import_results.rhtml +1 -1
  41. data/app/views/nodes/create.rjs +3 -3
  42. data/app/views/templates/document_create_tabs/_file.rhtml +1 -2
  43. data/app/views/templates/document_create_tabs/_import.rhtml +7 -2
  44. data/app/views/templates/edit_tabs/_document.rhtml +1 -3
  45. data/app/views/templates/edit_tabs/_image.rhtml +1 -3
  46. data/app/views/versions/_tr.rhtml +1 -1
  47. data/app/views/versions/edit.rhtml +2 -26
  48. data/bin/zena +6 -1
  49. data/bricks/delayed_job/README +18 -0
  50. data/bricks/delayed_job/migrate/20091104191643_create_delayed_jobs_table.rb +19 -0
  51. data/bricks/delayed_job/misc/init.rb +8 -0
  52. data/bricks/delayed_job/misc/tasks.rb +2 -0
  53. data/bricks/math/patch/application_helper.rb +1 -1
  54. data/bricks/sphinx/MIT-LICENSE +19 -0
  55. data/bricks/sphinx/README +19 -0
  56. data/bricks/sphinx/lib/use_sphinx.rb +78 -0
  57. data/bricks/sphinx/migrate/20091102171258_add_delta_for_sphinx.rb +9 -0
  58. data/bricks/sphinx/misc/deploy.rb +20 -0
  59. data/bricks/sphinx/misc/sphinx.yml +12 -0
  60. data/bricks/sphinx/misc/tasks.rb +21 -0
  61. data/bricks/sphinx/patch/node.rb +8 -0
  62. data/bricks/tags/lib/has_tags.rb +5 -3
  63. data/bricks/tags/test/zafu/tags.yml +13 -1
  64. data/config/bricks.yml +35 -0
  65. data/config/deploy.rb +8 -1
  66. data/config/environment.rb +1 -1
  67. data/config/environments/production.rb +1 -1
  68. data/config/gems.yml +28 -5
  69. data/config/sphinx.yml +12 -0
  70. data/db/init/base/skins/default/Node-+popupLayout.zafu +1 -16
  71. data/db/migrate/20091026161708_add_persistence_token.rb +13 -0
  72. data/db/migrate/20091101184952_add_session_table.rb +16 -0
  73. data/db/migrate/20091123175137_add_single_access_token.rb +9 -0
  74. data/db/migrate/20091124161608_rebuild_fullpath.rb +11 -0
  75. data/db/schema.rb +21 -8
  76. data/doc/README_FOR_APP +24 -0
  77. data/doc/fixtures.graffle +19568 -0
  78. data/doc/fixtures.pdf +0 -0
  79. data/doc/template/LICENSE +184 -0
  80. data/doc/template/README +37 -0
  81. data/doc/template/allison.css +283 -0
  82. data/doc/template/allison.js +307 -0
  83. data/doc/template/allison.rb +260 -0
  84. data/doc/template/cache/BODY +588 -0
  85. data/doc/template/cache/CLASS_INDEX +4 -0
  86. data/doc/template/cache/CLASS_PAGE +1 -0
  87. data/doc/template/cache/FILE_INDEX +4 -0
  88. data/doc/template/cache/FILE_PAGE +1 -0
  89. data/doc/template/cache/FONTS +1 -0
  90. data/doc/template/cache/FR_INDEX_BODY +1 -0
  91. data/doc/template/cache/IMGPATH +1 -0
  92. data/doc/template/cache/INDEX +1 -0
  93. data/doc/template/cache/JAVASCRIPT +307 -0
  94. data/doc/template/cache/METHOD_INDEX +4 -0
  95. data/doc/template/cache/METHOD_LIST +1 -0
  96. data/doc/template/cache/SRC_PAGE +1 -0
  97. data/doc/template/cache/STYLE +283 -0
  98. data/doc/template/cache/URL +1 -0
  99. data/doc/zafu_changes.yml +29 -0
  100. data/lib/base_additions.rb +1 -1
  101. data/lib/bricks.rb +9 -0
  102. data/lib/bricks/loader.rb +86 -0
  103. data/lib/bricks/requirements_validation.rb +71 -0
  104. data/lib/tasks/zena.rake +42 -4
  105. data/lib/zafu/action.rb +285 -0
  106. data/lib/zafu/ajax.rb +93 -0
  107. data/lib/zafu/attributes.rb +117 -0
  108. data/lib/zafu/calendar.rb +159 -0
  109. data/lib/zafu/context.rb +330 -0
  110. data/lib/zafu/core/html.rb +102 -0
  111. data/lib/zafu/core/move_to_parser.rb +167 -0
  112. data/lib/zafu/dates.rb +58 -0
  113. data/lib/zafu/display.rb +502 -0
  114. data/lib/zafu/eval.rb +66 -0
  115. data/lib/zafu/experimental.rb +66 -0
  116. data/lib/zafu/i18n.rb +64 -0
  117. data/lib/zafu/meta.rb +25 -0
  118. data/lib/zafu/refactor.rb +73 -0
  119. data/lib/zafu/support/context.rb +265 -0
  120. data/lib/zafu/support/dom.rb +145 -0
  121. data/lib/zafu/support/erb.rb +62 -0
  122. data/lib/zafu/support/flow.rb +401 -0
  123. data/lib/zafu/support/forms.rb +461 -0
  124. data/lib/zafu/support/links.rb +306 -0
  125. data/lib/zafu_parser.rb +26 -2
  126. data/lib/zena.rb +34 -15
  127. data/lib/zena/acts/multiversion.rb +2 -2
  128. data/lib/zena/acts/secure.rb +41 -30
  129. data/lib/zena/app.rb +7 -10
  130. data/lib/zena/controller/test_case.rb +12 -7
  131. data/lib/zena/crypto_provider/initial.rb +15 -0
  132. data/lib/zena/db.rb +6 -1
  133. data/lib/zena/deploy.rb +34 -6
  134. data/lib/zena/deploy/logrotate_app.rhtml +9 -0
  135. data/lib/zena/deploy/logrotate_host.rhtml +34 -0
  136. data/lib/zena/deploy/template.rb +1 -9
  137. data/lib/zena/foxy_parser.rb +1 -1
  138. data/lib/zena/info.rb +3 -1
  139. data/lib/zena/migrator.rb +1 -1
  140. data/lib/zena/parser.rb +12 -4
  141. data/lib/zena/parser/zazen_rules.rb +6 -6
  142. data/lib/zena/parser/zena_rules.rb +1 -7
  143. data/lib/zena/routes.rb +5 -5
  144. data/lib/zena/test_controller.rb +7 -2
  145. data/lib/zena/unit/test_case.rb +6 -8
  146. data/lib/zena/use/ajax.rb +10 -10
  147. data/lib/zena/use/authlogic.rb +93 -0
  148. data/lib/zena/use/dyn_attributes.rb +5 -0
  149. data/lib/zena/use/html_tags.rb +16 -34
  150. data/lib/zena/use/i18n.rb +4 -1
  151. data/lib/zena/use/node_query_finders.rb +8 -4
  152. data/lib/zena/use/refactor.rb +8 -20
  153. data/lib/zena/use/relations.rb +1 -0
  154. data/lib/zena/use/rendering.rb +4 -2
  155. data/lib/zena/use/search.rb +52 -0
  156. data/lib/zena/use/test_helper.rb +27 -28
  157. data/lib/zena/use/upload.rb +188 -0
  158. data/lib/zena/use/urls.rb +16 -14
  159. data/lib/zena/use/zafu.rb +16 -63
  160. data/lib/zena/use/zazen.rb +8 -8
  161. data/lib/zena/view/test_case.rb +8 -4
  162. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  163. data/locale/en/zena.po +3 -3
  164. data/public/.htaccess +40 -0
  165. data/public/javascripts/upload-progress.js +17 -8
  166. data/public/javascripts/zena.js +8 -2
  167. data/public/stylesheets/popup.css +1 -0
  168. data/script/about +3 -0
  169. data/script/apache_logging +25 -0
  170. data/script/breakpointer +3 -0
  171. data/script/console +3 -0
  172. data/script/dbconsole +3 -0
  173. data/script/destroy +3 -0
  174. data/script/generate +3 -0
  175. data/script/performance/benchmarker +3 -0
  176. data/script/performance/profiler +3 -0
  177. data/script/plugin +3 -0
  178. data/script/process/inspector +3 -0
  179. data/script/process/reaper +3 -0
  180. data/script/process/spawner +3 -0
  181. data/script/runner +3 -0
  182. data/script/server +3 -0
  183. data/script/set_revision +29 -0
  184. data/spec/controllers/versions_controller_spec.rb +11 -0
  185. data/test/fixtures/files/Node-test.zafu +1 -1
  186. data/test/functional/nodes_controller_test.rb +25 -0
  187. data/test/functional/pings_controller_test.rb +8 -0
  188. data/test/functional/user_sessions_controller_test.rb +59 -0
  189. data/test/functional/users_controller_test.rb +81 -19
  190. data/test/helpers/node_query/filters.yml +5 -0
  191. data/test/helpers/node_query_test.rb +3 -3
  192. data/test/integration/multiple_hosts_test.rb +1 -1
  193. data/test/integration/navigation_test.rb +1 -1
  194. data/test/sites/complex/users.yml +1 -1
  195. data/test/sites/ocean/users.yml +3 -3
  196. data/test/sites/zena/users.yml +5 -4
  197. data/test/test_zena.rb +38 -38
  198. data/test/unit/cached_page_test.rb +2 -2
  199. data/test/unit/comment_test.rb +0 -1
  200. data/test/unit/document_test.rb +23 -11
  201. data/test/unit/helpers/ping_helper_test.rb +4 -0
  202. data/test/unit/multiversion_test.rb +24 -16
  203. data/test/unit/node_test.rb +32 -93
  204. data/test/unit/note_test.rb +9 -0
  205. data/test/unit/page_test.rb +2 -2
  206. data/test/unit/secure_test.rb +2 -12
  207. data/test/unit/site_test.rb +43 -24
  208. data/test/unit/template_test.rb +45 -3
  209. data/test/unit/text_document_test.rb +4 -3
  210. data/test/unit/user_test.rb +13 -33
  211. data/test/unit/zena/db_test.rb +8 -0
  212. data/test/unit/zena/parser/zazen.yml +4 -4
  213. data/test/unit/zena/use/dates_view_methods_test.rb +2 -1
  214. data/test/unit/zena/use/html_tags_test.rb +12 -4
  215. data/test/unit/zena/use/refactor_test.rb +4 -3
  216. data/test/unit/zena/use/rendering_test.rb +1 -0
  217. data/test/unit/zena/use/upload_test.rb +76 -0
  218. data/test/unit/zena/use/urls_test.rb +4 -0
  219. data/test/unit/zena/use/zafu_test.rb +8 -0
  220. data/test/unit/zena/workflow/status_version_test.rb +6 -0
  221. data/test/unit/zena/zena_tags/ajax.yml +4 -4
  222. data/test/unit/zena/zena_tags/basic.yml +21 -10
  223. data/test/unit/zena/zena_tags/relations.yml +0 -6
  224. data/test/unit/zena/zena_tags/rubyless.yml +35 -0
  225. data/test/unit/zena/zena_tags/zazen.yml +4 -4
  226. data/test/unit/zena/zena_tags_test.rb +36 -4
  227. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +1 -1
  228. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +2 -3
  229. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  230. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +102 -58
  231. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  232. data/vendor/TextMate/Zena.tmbundle/info.plist +2 -0
  233. data/zena.gemspec +2085 -0
  234. metadata +265 -90
  235. data/app/controllers/sessions_controller.rb +0 -41
  236. data/app/views/sites/zena_up.html.erb +0 -11
  237. data/config/database.yml +0 -40
  238. data/db/production.sqlite3 +0 -0
  239. data/lib/bricks/patcher.rb +0 -68
  240. data/lib/zena/parser/zena_tags.rb +0 -3562
  241. data/lib/zena/use/authentification.rb +0 -120
  242. data/public/images/ext/contact_pv.png +0 -0
  243. data/public/images/ext/other_pv.png +0 -0
  244. data/public/images/ext/page_pv.png +0 -0
  245. data/public/images/ext/page_tiny.png +0 -0
  246. data/public/images/ext/pdf_pv.png +0 -0
  247. data/public/images/ext/post_pv.png +0 -0
  248. data/public/images/ext/post_tiny.png +0 -0
  249. data/public/images/ext/project_pv.png +0 -0
  250. data/public/images/ext/project_tiny.png +0 -0
  251. data/public/images/ext/tag_pv.png +0 -0
  252. data/public/images/ext/zip_pv.png +0 -0
  253. data/tasks/ann.rake +0 -80
  254. data/tasks/bones.rake +0 -20
  255. data/tasks/gem.rake +0 -201
  256. data/tasks/git.rake +0 -40
  257. data/tasks/notes.rake +0 -27
  258. data/tasks/post_load.rake +0 -34
  259. data/tasks/rdoc.rake +0 -51
  260. data/tasks/rubyforge.rake +0 -55
  261. data/tasks/setup.rb +0 -292
  262. data/tasks/spec.rake +0 -54
  263. data/tasks/svn.rake +0 -47
  264. data/tasks/test.rake +0 -40
  265. data/tasks/zentest.rake +0 -36
  266. data/test/fixtures/comments.yml +0 -126
  267. data/test/fixtures/contact_contents.yml +0 -132
  268. data/test/fixtures/data_entries.yml +0 -65
  269. data/test/fixtures/discussions.yml +0 -48
  270. data/test/fixtures/document_contents.yml +0 -108
  271. data/test/fixtures/dyn_attributes.yml +0 -66
  272. data/test/fixtures/groups.yml +0 -86
  273. data/test/fixtures/groups_users.yml +0 -81
  274. data/test/fixtures/iformats.yml +0 -29
  275. data/test/fixtures/links.yml +0 -313
  276. data/test/fixtures/nodes.yml +0 -2592
  277. data/test/fixtures/relations.yml +0 -126
  278. data/test/fixtures/sites.yml +0 -58
  279. data/test/fixtures/template_contents.yml +0 -172
  280. data/test/fixtures/users.yml +0 -167
  281. data/test/fixtures/versions.yml +0 -1911
  282. data/test/fixtures/virtual_classes.yml +0 -87
  283. data/test/fixtures/zips.yml +0 -15
  284. data/test/functional/sessions_controller_test.rb +0 -73
@@ -0,0 +1,306 @@
1
+ module Zafu
2
+ module Support
3
+ module Links
4
+
5
+ # creates a link. Options are:
6
+ # :href (node, parent, project, root)
7
+ # :tattr (translated attribute used as text link)
8
+ # :attr (attribute used as text link)
9
+ # <r:link href='node'><r:trans attr='lang'/></r:link>
10
+ # <r:link href='node' tattr='lang'/>
11
+ # <r:link update='dom_id'/>
12
+ # <r:link page='next'/> <r:link page='previous'/> <r:link page='list'/>
13
+ def r_link
14
+ if @params[:page] && @params[:page] != '[page_page]' # lets users use 'page' as pagination key
15
+ pagination_links
16
+ else
17
+ make_link
18
+ end
19
+ end
20
+
21
+ def make_link(options = {})
22
+ query_params = options[:query_params] || {}
23
+ default_text = options[:default_text]
24
+ params = {}
25
+ (options[:params] || @params).each do |k,v|
26
+ next if v.nil?
27
+ params[k] = v
28
+ end
29
+
30
+ opts = {}
31
+ if upd = params.delete(:update)
32
+ return unless remote_target = find_target(upd)
33
+ end
34
+
35
+ if href = params.delete(:href)
36
+ if lnode = find_stored(Node, href)
37
+ # using stored node
38
+ else
39
+ lnode, klass = build_finder_for(:first, href, {})
40
+ return unless lnode
41
+ return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node)
42
+ end
43
+ else
44
+ # obj
45
+ if node_class == Version
46
+ lnode = "#{node}.node"
47
+ opts[:lang] = "#{node}.lang"
48
+ elsif node_kind_of?(Node)
49
+ lnode = node
50
+ else
51
+ lnode = @context[:previous_node]
52
+ end
53
+ end
54
+
55
+ if fmt = params.delete(:format)
56
+ if fmt == 'data'
57
+ opts[:format] = "#{node}.c_ext"
58
+ else
59
+ opts[:format] = fmt.inspect
60
+ end
61
+ end
62
+
63
+ if mode = params.delete(:mode)
64
+ opts[:mode] = mode.inspect
65
+ end
66
+
67
+ if anchor = params.delete(:anchor)
68
+ opts[:anchor] = anchor.inspect
69
+ end
70
+
71
+ if anchor_in = params.delete(:in)
72
+ finder, klass = build_finder_for(:first, anchor_in, {})
73
+ return unless finder
74
+ return parser_error("invalid class (#{klass})") unless klass.ancestors.include?(Node)
75
+ opts[:anchor_in] = finder
76
+ end
77
+
78
+ if @html_tag && @html_tag != 'a'
79
+ # FIXME: can we remove this ?
80
+ # html attributes do not belong to anchor
81
+ pre_space = ''
82
+ html_params = {}
83
+ else
84
+ html_params = get_html_params(params.merge(@html_tag_params), :link)
85
+ pre_space = @space_before || ''
86
+ @html_tag_done = true
87
+ end
88
+
89
+ (params.keys - [:style, :class, :id, :rel, :name, :anchor, :attr, :tattr, :trans, :text]).each do |k|
90
+ next if k.to_s =~ /if_|set_|\A_/
91
+ query_params[k] = params[k]
92
+ end
93
+
94
+ # TODO: merge these two query_params cleanup things into something cleaner.
95
+ if remote_target
96
+ # ajax
97
+ query_params_list = []
98
+ query_params.each do |k,v|
99
+ if k == :date
100
+ if v == 'current_date'
101
+ str = "\#{#{current_date}}"
102
+ elsif v =~ /\A\d/
103
+ str = CGI.escape(v.gsub('"',''))
104
+ elsif v =~ /\[/
105
+ attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
106
+ str = static ? CGI.escape(attribute) : "\#{CGI.escape(\"#{attribute}\")}"
107
+ else
108
+ str = "\#{CGI.escape(#{node_attribute(v)})}"
109
+ end
110
+ else
111
+ attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
112
+ str = static ? CGI.escape(attribute) : "\#{CGI.escape(\"#{attribute}\")}"
113
+ end
114
+ query_params_list << "#{k.to_s.gsub('"','')}=#{str}"
115
+ end
116
+ pre_space + link_to_update(remote_target, :node_id => "#{lnode}.zip", :query_params => query_params_list, :default_text => default_text, :html_params => html_params)
117
+ else
118
+ # direct link
119
+ query_params.each do |k,v|
120
+ if k == :date
121
+ if v == 'current_date'
122
+ query_params[k] = current_date
123
+ elsif v =~ /\A\d/
124
+ query_params[k] = v.inspect
125
+ elsif v =~ /\[/
126
+ attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
127
+ query_params[k] = "\"#{attribute}\""
128
+ else
129
+ query_params[k] = node_attribute(v)
130
+ end
131
+ else
132
+ attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false)
133
+ query_params[k] = "\"#{attribute}\""
134
+ end
135
+ end
136
+
137
+ query_params.merge!(opts)
138
+
139
+ opts_str = ''
140
+ query_params.keys.sort {|a,b| a.to_s <=> b.to_s }.each do |k|
141
+ opts_str << ",:#{k.to_s.gsub(/[^a-z_A-Z_]/,'')}=>#{query_params[k]}"
142
+ end
143
+
144
+ opts_str += ", :host => #{@context["exp_host"]}" if @context["exp_host"]
145
+
146
+ pre_space + "<a#{params_to_html(html_params)} href='<%= zen_path(#{lnode}#{opts_str}) %>'>#{text_for_link(default_text)}</a>"
147
+ end
148
+ end
149
+
150
+ # <r:link page='next'/> <r:link page='previous'/> <r:link page='list'/>
151
+ def pagination_links
152
+ return parser_error("not in pagination scope") unless pagination_key = @context[:paginate]
153
+
154
+ case @params[:page]
155
+ when 'previous'
156
+ out "<% if set_#{pagination_key}_previous = (set_#{pagination_key} > 1 ? set_#{pagination_key} - 1 : nil) -%>"
157
+ @context[:vars] ||= []
158
+ @context[:vars] << "#{pagination_key}_previous"
159
+ out make_link(:default_text => "<%= set_#{pagination_key}_previous %>", :query_params => {pagination_key => "[#{pagination_key}_previous]"}, :params => @params.merge(:page => nil))
160
+ if descendant('else')
161
+ out expand_with(:in_if => true, :only => ['else', 'elsif'])
162
+ end
163
+ out "<% end -%>"
164
+ when 'next'
165
+ out "<% if set_#{pagination_key}_next = (set_#{pagination_key}_count - set_#{pagination_key} > 0 ? set_#{pagination_key} + 1 : nil) -%>"
166
+ @context[:vars] ||= []
167
+ @context[:vars] << "#{pagination_key}_next"
168
+ out make_link(:default_text => "<%= set_#{pagination_key}_next %>", :query_params => {pagination_key => "[#{pagination_key}_next]"}, :params => @params.merge(:page => nil))
169
+ if descendant('else')
170
+ out expand_with(:in_if => true, :only => ['else', 'elsif'])
171
+ end
172
+ out "<% end -%>"
173
+ when 'list'
174
+ @context[:vars] ||= []
175
+ @context[:vars] << "#{pagination_key}_page"
176
+ if @blocks == [] || (@blocks.size == 1 && !@blocks.first.kind_of?(String) && @blocks.first.method == 'else')
177
+ # add a default block
178
+ if tag = @params[:tag]
179
+ open_tag = "<#{tag}>"
180
+ close_tag = "</#{tag}>"
181
+ else
182
+ open_tag = close_tag = ''
183
+ end
184
+ link_params = {}
185
+ @params.each do |k,v|
186
+ next if [:tag, :page, :join, :page_count].include?(k)
187
+ link_params[k] = v
188
+ end
189
+ text = "#{open_tag}<r:link #{params_to_html(link_params)} #{pagination_key}='[#{pagination_key}_page]' do='[#{pagination_key}_page]'/>#{close_tag}"
190
+ @blocks = [make(:void, :method=>'void', :text=>text)]
191
+ remove_instance_variable(:@all_descendants)
192
+ end
193
+
194
+ if !descendant('else')
195
+ @blocks += [make(:void, :method=>'void', :text=>"<r:else>#{open_tag}<r:show var='#{pagination_key}_page'/>#{close_tag}</r:else>")]
196
+ remove_instance_variable(:@all_descendants)
197
+ end
198
+
199
+ out "<% page_numbers(set_#{pagination_key}, set_#{pagination_key}_count, #{(@params[:join] || ' ').inspect}, #{@params[:page_count] ? @params[:page_count].to_i : 'nil'}) do |set_#{pagination_key}_page, #{pagination_key}_page_join| %>"
200
+ out "<%= #{pagination_key}_page_join %>"
201
+ out "<% if set_#{pagination_key}_page != set_#{pagination_key} -%>"
202
+ out expand_with(:in_if => true)
203
+ out "<% end; end -%>"
204
+ else
205
+ parser_error("unkown option for 'page' #{@params[:page].inspect} should be ('previous', 'next' or 'list')")
206
+ end
207
+ end
208
+
209
+ def r_anchor(obj=node)
210
+ if single_child_method == 'link'
211
+ link = @blocks[0]
212
+ link.params.merge!(:_name => anchor_name(params[:type] || 'true', obj))
213
+ expand_block(link)
214
+ else
215
+ "<a name='#{anchor_name(@anchor_param, obj)}'></a>"
216
+ end
217
+ end
218
+
219
+ def r_check_lang
220
+ text = @params[:text] || expand_with
221
+ klass = @params[:class] || @html_tag_params[:class]
222
+ text = nil if text.blank?
223
+ klas = nil if klass.blank?
224
+ @html_tag_done = true
225
+ "#{@space_before}<%= check_lang(#{node},:text=>#{text.inspect},:class=>#{klass.inspect},:wrap=>#{@html_tag.inspect}) %>"
226
+ end
227
+
228
+ def anchor_name(p, obj=node)
229
+ if p =~ /\[(.+)\]/
230
+ "<%= #{node_attribute($1)} %>"
231
+ else
232
+ "#{base_class.to_s.underscore}#{erb_node_id(obj)}"
233
+ end
234
+ end
235
+
236
+ def link_to_update(target, opts = {})
237
+ method = opts[:method] || :get
238
+
239
+ html_params = opts[:html_params] || {}
240
+ node_id = opts[:node_id] || self.node_id
241
+
242
+ url = opts[:url] || "/#{base_class.to_s.pluralize.underscore}/\#{#{node_id}}#{method == :get ? '/zafu' : ''}"
243
+ opts[:cond] ||= "#{node}.can_write?" if method != :get
244
+
245
+ query_params = [opts[:query_params]].flatten.compact
246
+
247
+ if method == :get
248
+ if target
249
+ query_params << "t_url=#{CGI.escape(target.template_url)}"
250
+ query_params << "dom_id=#{target.dom_id}"
251
+ else
252
+ query_params << "dom_id=_page"
253
+ end
254
+ else
255
+ query_params << "t_url=#{CGI.escape(template_url)}" if method != :delete
256
+
257
+ query_params << "dom_id=#{dom_id}"
258
+ if target != self
259
+ if target
260
+ query_params << "u_url=#{CGI.escape(target.template_url)}"
261
+ query_params << "udom_id=#{target.dom_id}"
262
+ else
263
+ query_params << "udom_id=_page"
264
+ end
265
+ end
266
+ end
267
+
268
+ query_params << "link_id=\#{#{node}.link_id}" if @context[:need_link_id] && node_kind_of?(Node)
269
+ query_params << "node[v_status]=#{Zena::Status[:pub]}" if @params[:publish] # FIXME: this acts like publish = 'force'
270
+ query_params << start_node_s_param(:string)
271
+
272
+ res = ''
273
+ res += "<% if #{opts[:cond]} -%>" if opts[:cond]
274
+ res += "<%= tag_to_remote({:url => \"#{url}?#{query_params.join('&')}\", :method => #{method.inspect}}#{params_to_erb(html_params)}) %>"
275
+ res += text_for_link(opts[:default_text])
276
+ res += "</a>"
277
+ if opts[:cond]
278
+ if opts[:else] != :void
279
+ res += "<% else -%>"
280
+ res += text_for_link(opts[:default_text])
281
+ end
282
+ res += "<% end -%>"
283
+ end
284
+ res
285
+ end
286
+
287
+ def text_for_link(default = nil)
288
+ if @blocks.size > 1 || (@blocks.size == 1 && !(@blocks.first.kind_of?(String) || ['else','elsif'].include?(@blocks.first.method)))
289
+ expand_with
290
+ elsif default
291
+ default
292
+ elsif erb_text = get_text_for_erb(@params, false, :string)
293
+ erb_text
294
+ elsif node_kind_of?(Node)
295
+ "<%= #{node}.version.title %>"
296
+ elsif node_kind_of?(Version)
297
+ "<%= #{node}.title %>"
298
+ elsif node_kind_of?(Link)
299
+ "<%= #{node}.name %>"
300
+ else
301
+ _('edit')
302
+ end
303
+ end
304
+ end # Links
305
+ end # Support
306
+ end # Zafu
@@ -1,3 +1,27 @@
1
- ZafuParser = Zena::Parser.parser_with_rules(Zena::Parser::ZafuRules, Zena::Parser::ZenaRules, Zena::Parser::ZafuTags, Zena::Parser::ZenaTags)
1
+ ZafuParser = Zena::Parser.parser_with_rules(
2
+ Zena::Parser::ZafuRules,
3
+ Zena::Parser::ZenaRules,
4
+ Zena::Parser::ZafuTags,
5
+ Zafu::Action,
6
+ Zafu::Ajax,
7
+ Zafu::Attributes,
8
+ Zafu::Calendar,
9
+ Zafu::Context,
10
+ Zafu::Core::HTML,
11
+ Zafu::Core::MoveToParser,
12
+ Zafu::Dates,
13
+ Zafu::Display,
14
+ Zafu::Eval,
15
+ Zafu::Experimental, # FIXME: remove and fix tests !
16
+ Zafu::I18n,
17
+ Zafu::Meta,
18
+ Zafu::Refactor,
19
+ Zafu::Support::Forms,
20
+ Zafu::Support::Context,
21
+ Zafu::Support::Dom,
22
+ Zafu::Support::Erb,
23
+ Zafu::Support::Flow,
24
+ Zafu::Support::Links
25
+ )
2
26
 
3
- Bricks::Patcher.load_zafu(ZafuParser)
27
+ Bricks.load_zafu(ZafuParser)
@@ -9,16 +9,15 @@ def has_executable(*list)
9
9
  s && !(`which #{e} || echo 'no #{e}'` =~ /^no #{e}/)
10
10
  end
11
11
  end
12
- ENABLE_LATEX = true && has_executable('pdflatex') # enable LateX post-rendering
13
- ENABLE_FOP = true && has_executable('fop', 'xsltproc') # enable xsl-fo post-rendering
14
- ENABLE_MATH = true && has_executable('latex', 'dvips', 'convert', 'gs')
15
- ENABLE_ZENA_UP = false && has_executable('zena_up')
16
12
 
17
- UPLOAD_KEY = defined?(Mongrel) ? 'upload_id' : "X-Progress-ID"
18
13
 
19
- require 'bricks/patcher'
14
+ require 'bricks'
20
15
 
21
16
  module Zena
17
+ ENABLE_LATEX = true && has_executable('pdflatex') # enable LateX post-rendering
18
+ ENABLE_FOP = true && has_executable('fop', 'xsltproc') # enable xsl-fo post-rendering
19
+ ENABLE_MATH = true && has_executable('latex', 'dvips', 'convert', 'gs')
20
+
22
21
  # VERSION is defined in root.rb
23
22
  class << self
24
23
  attr_accessor :tools_enabled
@@ -26,7 +25,7 @@ module Zena
26
25
  paths_to_add = (
27
26
  Dir["#{Zena::ROOT}/vendor/gems/*/lib"] +
28
27
  Dir["#{Zena::ROOT}/vendor/plugins/*/lib"] +
29
- Bricks::Patcher.models_paths
28
+ Bricks.models_paths
30
29
  )
31
30
  if config
32
31
  config.load_paths += ["#{Zena::ROOT}/vendor"]
@@ -39,7 +38,7 @@ module Zena
39
38
 
40
39
  def enable_tools
41
40
  # TODO: move all code from environment.rb here...
42
- @tools_enabled ||= {:Latex => ENABLE_LATEX, :fop => ENABLE_FOP, :math => ENABLE_MATH, :zena_up => ENABLE_ZENA_UP}.map{|k,v| v ? k : nil}.compact
41
+ @tools_enabled ||= {:Latex => Zena::ENABLE_LATEX, :fop => Zena::ENABLE_FOP, :math => Zena::ENABLE_MATH}.map{|k,v| v ? k : nil}.compact
43
42
  end
44
43
 
45
44
  def include_modules
@@ -51,7 +50,6 @@ module Zena
51
50
  end
52
51
 
53
52
  # FIXME: make this explicit in models
54
- ActiveRecord::Base.send :include, Zena::Use::Zafu::ModelMethods
55
53
  ActiveRecord::Base.send :include, Zena::Use::NodeQueryFinders::AddUseNodeQueryMethod
56
54
  ActiveRecord::Base.send :include, Zena::Acts::Secure
57
55
  ActionController::Base.send :include, Zena::Acts::Secure
@@ -88,13 +86,19 @@ module Zena
88
86
  def gems_setup
89
87
  gem_configuration.each do |gem_name, gem_config|
90
88
  if gem_config
91
- gem gem_name, gem_config['version']
89
+ if gem_config['optional']
90
+ begin
91
+ gem gem_name, gem_config['version']
92
+ rescue LoadError
93
+ # ignore
94
+ end
95
+ else
96
+ gem gem_name, gem_config['version']
97
+ end
92
98
  else
93
99
  gem gem_name
94
100
  end
95
101
  end
96
- rescue LoadError
97
- # ignore (we need this to pass in rake tasks)
98
102
  end
99
103
 
100
104
  def config_gems(config)
@@ -102,7 +106,15 @@ module Zena
102
106
  if gem_config
103
107
  conf = gem_config.symbolize_keys
104
108
  conf[:version].gsub!(/\A=\s*/,'')
105
- config.gem gem_name, conf
109
+ if conf[:optional]
110
+ begin
111
+ config.gem gem_name, conf
112
+ rescue LoadError
113
+ # ignore
114
+ end
115
+ else
116
+ config.gem gem_name, conf
117
+ end
106
118
  else
107
119
  config.gem gem_name
108
120
  end
@@ -137,7 +149,7 @@ module Zena
137
149
  end
138
150
 
139
151
  def load_bricks
140
- Bricks::Patcher.load_bricks
152
+ Bricks.load_bricks
141
153
  end
142
154
 
143
155
  def add_inflections
@@ -153,10 +165,15 @@ module Zena
153
165
  FastGettext.text_domain = 'zena'
154
166
  end
155
167
 
168
+ def initialize_authlogic
169
+ require "authlogic"
170
+ end
171
+
156
172
  def init
157
173
  config = Rails.configuration
158
174
  enable_tools
159
175
  puts "** zena #{Zena::VERSION} #{tools_enabled == [] ? '' : '('+tools_enabled.join(', ')+') '}starting"
176
+ puts "** Bricks: #{Bricks::CONFIG.map{|k,v| k}.sort.join(', ')}"
160
177
 
161
178
  add_load_paths(config)
162
179
  config_gems(config)
@@ -166,7 +183,9 @@ module Zena
166
183
  load_bricks
167
184
  set_default_timezone(config)
168
185
  add_inflections
186
+ initialize_authlogic
169
187
  initialize_gettext
188
+ Bricks.load_misc('init')
170
189
  end
171
190
  end
172
191
  end
@@ -385,7 +404,7 @@ def make_hashes(h)
385
404
  [keys_to_val, val_to_keys]
386
405
  end
387
406
 
388
- EXT_TO_TYPE, TYPE_TO_EXT = make_hashes(EXT_TYPE)
407
+ Zena::EXT_TO_TYPE, Zena::TYPE_TO_EXT = make_hashes(EXT_TYPE)
389
408
  Zena.add_load_paths
390
409
  Zena.gems_setup
391
410
  require 'rubyless'