zena 0.15.2 → 0.16.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 (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'