zena 0.15.0 → 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/History.txt +14 -0
  2. data/{README.txt → README.rdoc} +13 -19
  3. data/app/controllers/documents_controller.rb +7 -2
  4. data/app/controllers/nodes_controller.rb +4 -0
  5. data/app/models/iformat.rb +43 -1
  6. data/app/models/skin.rb +1 -2
  7. data/app/models/text_document.rb +2 -2
  8. data/app/models/version.rb +1 -0
  9. data/app/views/documents/new.rhtml +2 -2
  10. data/app/views/iformats/_form.rhtml +5 -4
  11. data/app/views/iformats/_li.rhtml +1 -0
  12. data/app/views/iformats/index.rhtml +1 -1
  13. data/app/views/nodes/_import_results.rhtml +1 -1
  14. data/app/views/nodes/edit.html.erb +2 -2
  15. data/app/views/templates/edit_tabs/_custom.rhtml +2 -2
  16. data/app/views/templates/edit_tabs/_document.rhtml +3 -3
  17. data/app/views/versions/_tr.rhtml +5 -6
  18. data/app/views/versions/edit.rhtml +2 -2
  19. data/bin/zena +2 -2
  20. data/bricks/captcha/patch/application_controller.rb +1 -1
  21. data/bricks/captcha/zafu/captcha.rb +1 -1
  22. data/config/deploy.rb +36 -380
  23. data/config/gems.yml +2 -7
  24. data/db/migrate/20091018200734_add_popup_info_to_image_format.rb +9 -0
  25. data/db/schema.rb +3 -2
  26. data/lib/gettext_strings.rb +8 -0
  27. data/lib/tasks/zena.rake +30 -12
  28. data/lib/zena/app.rb +2 -0
  29. data/{config → lib/zena/deploy}/awstats.conf.rhtml +0 -0
  30. data/{config → lib/zena/deploy}/database.rhtml +0 -0
  31. data/lib/zena/deploy/httpd.rhtml +22 -0
  32. data/{config → lib/zena/deploy}/start.html +2 -2
  33. data/{config → lib/zena/deploy}/stats.vhost.rhtml +0 -0
  34. data/{config/zena.rb → lib/zena/deploy/template.rb} +13 -8
  35. data/{config → lib/zena/deploy}/vhost.rhtml +28 -14
  36. data/{config → lib/zena/deploy}/vhost_www.rhtml +0 -0
  37. data/lib/zena/deploy.rb +377 -0
  38. data/lib/zena/info.rb +13 -0
  39. data/lib/zena/parser/zena_tags.rb +3 -0
  40. data/lib/zena/parser.rb +1 -0
  41. data/lib/zena/use/calendar.rb +2 -1
  42. data/lib/zena/use/dates.rb +6 -1
  43. data/lib/zena/use/fixtures.rb +9 -0
  44. data/lib/zena/use/html_tags.rb +44 -5
  45. data/lib/zena/use/node_query_finders.rb +1 -2
  46. data/lib/zena/use/refactor.rb +0 -13
  47. data/lib/zena/use/rendering.rb +13 -0
  48. data/lib/zena/use/zafu.rb +21 -9
  49. data/lib/zena.rb +4 -11
  50. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  51. data/locale/en/zena.po +29 -1
  52. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  53. data/locale/fr/zena.po +29 -1
  54. data/locale/zena.pot +28 -0
  55. data/public/images/popup_next.png +0 -0
  56. data/public/images/popup_prev.png +0 -0
  57. data/public/javascripts/upload-progress.js +13 -3
  58. data/public/javascripts/zena.js +177 -23
  59. data/public/stylesheets/popup.css +5 -3
  60. data/public/stylesheets/zena.css +10 -1
  61. data/{lib/zena/use → test}/custom_queries/complex.host.yml +0 -0
  62. data/test/fixtures/iformats.yml +1 -0
  63. data/test/fixtures/nodes.yml +1 -1
  64. data/test/fixtures/versions.yml +3 -1
  65. data/test/sites/zena/iformats.yml +1 -0
  66. data/test/sites/zena/versions.yml +3 -1
  67. data/test/test_helper.rb +2 -0
  68. data/test/unit/iformat_test.rb +53 -1
  69. data/test/unit/text_document_test.rb +3 -0
  70. data/test/unit/zena/use/html_tags_test.rb +24 -2
  71. data/test/unit/zena/use/refactor_test.rb +0 -4
  72. data/test/unit/zena/use/zafu_test.rb +12 -0
  73. data/test/unit/zena/use/zazen_test.rb +6 -3
  74. data/test/unit/zena/zena_tags/basic.yml +3 -3
  75. data/vendor/apache2_upload_progress/MIT-LICENSE +22 -0
  76. data/vendor/apache2_upload_progress/README +53 -0
  77. data/vendor/apache2_upload_progress/mod_upload_progress.c +813 -0
  78. metadata +45 -45
  79. data/config/deploy_config_example.rb +0 -7
  80. data/config/httpd.rhtml +0 -18
  81. data/config/locales/de.yml +0 -120
  82. data/config/locales/fr-CH.yml +0 -123
  83. data/config/locales/fr.yml +0 -123
  84. data/lib/zena/root.rb +0 -3
@@ -3,8 +3,21 @@ require 'tempfile'
3
3
  module Zena
4
4
  module Use
5
5
  module Rendering
6
+ module ViewMethods
7
+ def render_js
8
+ return '' unless self.js_data
9
+ javascript_tag(self.js_data.join("\n"))
10
+ end
11
+ end
12
+
6
13
  module ControllerMethods
14
+ def self.included(base)
15
+ base.send(:helper_attr, :js_data)
16
+ end
7
17
 
18
+ def js_data
19
+ @js_data ||= []
20
+ end
8
21
 
9
22
  # TODO: test
10
23
  # Our own handling of exceptions
data/lib/zena/use/zafu.rb CHANGED
@@ -34,20 +34,30 @@ module Zena
34
34
  src2, mode2 = $1, $2
35
35
  end
36
36
 
37
+ paths = []
37
38
  if src[0..0] == '/'
38
- path1 = src[1..-1]
39
- path2 = src2[1..-1] if src2
39
+ paths << src[1..-1]
40
+ paths << src2[1..-1] if src2
40
41
  else
41
- path1 = current_folder + '/' + src
42
- path2 = current_folder + '/' + src2 if src2
42
+ paths << (current_folder + '/' + src)
43
+ paths << (current_folder + '/' + src2) if src2
43
44
  end
44
45
 
45
46
  # make sure path elements are url_names
46
- path1 = path1.split('/').map {|s| s.url_name!}.join('/')
47
- path2 = path2.split('/').map {|s| s.url_name!}.join('/') if src2
47
+ paths.map! do |path|
48
+ res = []
49
+ path.split('/').each do |e|
50
+ if e == '..'
51
+ res.pop
52
+ else
53
+ res << e.url_name
54
+ end
55
+ end
56
+ res.join('/')
57
+ end
48
58
 
49
- if asset = secure(Document) { Document.find_by_path(path1) }
50
- elsif src2 && (asset = secure(Document) { Document.find_by_path(path2) })
59
+ if asset = secure(Document) { Document.find_by_path(paths[0]) }
60
+ elsif src2 && (asset = secure(Document) { Document.find_by_path(paths[1]) })
51
61
  mode = mode2
52
62
  else
53
63
  return nil
@@ -283,10 +293,12 @@ module Zena
283
293
  dev_box << " <li>skins used: #{skin_names.join(', ')}</li>\n"
284
294
  dev_box << " </ul>\n </li>\n</ul></div>"
285
295
  if res =~ /<\/body>/
286
- res.sub!('</body>', "#{dev_box}</body>")
296
+ res.sub!('</body>', "#{dev_box}<%= render_js %></body>")
287
297
  else
288
298
  res << dev_box
289
299
  end
300
+ else
301
+ res.sub!('</body>', "<%= render_js %></body>")
290
302
  end
291
303
 
292
304
  secure!(CachedPage) { CachedPage.create(
data/lib/zena.rb CHANGED
@@ -2,11 +2,8 @@
2
2
  require 'yaml'
3
3
  require 'date'
4
4
  require 'fileutils'
5
+ require File.join(File.dirname(__FILE__), 'zena', 'info')
5
6
 
6
- AUTHENTICATED_PREFIX = "oo"
7
- SITES_ROOT = "#{RAILS_ROOT}/sites"
8
- PASSWORD_SALT = "jf93jfnvnas09093nas0923" # type anything here (but change this line !)
9
- ZENA_CALENDAR_LANGS = ["en", "fr"] # FIXME: build this dynamically from existing files
10
7
  def has_executable(*list)
11
8
  list.inject(true) do |s,e|
12
9
  s && !(`which #{e} || echo 'no #{e}'` =~ /^no #{e}/)
@@ -16,17 +13,13 @@ ENABLE_LATEX = true && has_executable('pdflatex') # enable LateX post-renderi
16
13
  ENABLE_FOP = true && has_executable('fop', 'xsltproc') # enable xsl-fo post-rendering
17
14
  ENABLE_MATH = true && has_executable('latex', 'dvips', 'convert', 'gs')
18
15
  ENABLE_ZENA_UP = false && has_executable('zena_up')
19
- ENABLE_XSENDFILE = false
20
16
 
21
17
  UPLOAD_KEY = defined?(Mongrel) ? 'upload_id' : "X-Progress-ID"
22
18
 
23
19
  require 'bricks/patcher'
24
20
 
25
21
  module Zena
26
- VERSION = '0.15.0'
27
- REVISION = 1336
28
- ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
29
-
22
+ # VERSION is defined in root.rb
30
23
  class << self
31
24
  attr_accessor :tools_enabled
32
25
  def add_load_paths(config = nil)
@@ -180,8 +173,8 @@ end
180
173
 
181
174
 
182
175
  # test if DRB started
183
- unless RAILS_ENV == 'test' || File.exist?(File.join(File.dirname(__FILE__), '..', 'log', 'upload_progress_drb.pid'))
184
- puts "\n** WARNING: drb server not running. Upload progress will not work."
176
+ if RAILS_ENV == 'production' && defined?(Mongrel) && !File.exist?(File.join(File.dirname(__FILE__), '..', 'log', 'upload_progress_drb.pid'))
177
+ puts "\n** WARNING: drb server not running. Upload progress will not work using Mongrel."
185
178
  puts " * WARNING: you should start the drb server with 'lib/upload_progress_server.rb start'\n\n"
186
179
  end
187
180
 
Binary file
data/locale/en/zena.po CHANGED
@@ -2,7 +2,7 @@ msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: 0.9.0\n"
4
4
  "POT-Creation-Date: 2008-09-26 20:39-0000\n"
5
- "PO-Revision-Date: 2008-09-26 23:21+0100\n"
5
+ "PO-Revision-Date: 2009-10-17 21:34+0100\n"
6
6
  "Last-Translator: Gaspard Bucher <gaspard@teti.ch>\n"
7
7
  "Language-Team: en <gaspard@teti.ch>\n"
8
8
  "MIME-Version: 1.0\n"
@@ -1816,6 +1816,34 @@ msgstr "removed"
1816
1816
  msgid "status_0"
1817
1817
  msgstr "deleted"
1818
1818
 
1819
+ #: lib/gettext_strings.rb:92
1820
+ msgid "status_50_img"
1821
+ msgstr "<img src='/images/weather_sun.png'/>"
1822
+
1823
+ #: lib/gettext_strings.rb:93
1824
+ msgid "status_60_img"
1825
+ msgstr "<img src='/images/magnifier.png'/>"
1826
+
1827
+ #: lib/gettext_strings.rb:94
1828
+ msgid "status_65_img"
1829
+ msgstr "<img src='/images/magnifier.png'/>"
1830
+
1831
+ #: lib/gettext_strings.rb:95
1832
+ msgid "status_70_img"
1833
+ msgstr "<img src='/images/pencil.png'/>"
1834
+
1835
+ #: lib/gettext_strings.rb:96
1836
+ msgid "status_20_img"
1837
+ msgstr "<img src='/images/weather_clouds.png'/>"
1838
+
1839
+ #: lib/gettext_strings.rb:97
1840
+ msgid "status_10_img"
1841
+ msgstr "<img src='/images/weather_rain.png'/>"
1842
+
1843
+ #: lib/gettext_strings.rb:98
1844
+ msgid "status_0_img"
1845
+ msgstr "<img src='/images/weather_lightning.png'/>"
1846
+
1819
1847
  #: lib/gettext_strings.rb:94
1820
1848
  msgid "en"
1821
1849
  msgstr "english"
Binary file
data/locale/fr/zena.po CHANGED
@@ -2,7 +2,7 @@ msgid ""
2
2
  msgstr ""
3
3
  "Project-Id-Version: 0.9.0\n"
4
4
  "POT-Creation-Date: 2008-09-26 20:39-0000\n"
5
- "PO-Revision-Date: 2008-09-26 23:22+0100\n"
5
+ "PO-Revision-Date: 2009-10-17 21:32+0100\n"
6
6
  "Last-Translator: Gaspard Bucher <gaspard@teti.ch>\n"
7
7
  "Language-Team: fr <gaspard@teti.ch>\n"
8
8
  "MIME-Version: 1.0\n"
@@ -1810,6 +1810,34 @@ msgstr "enlevé"
1810
1810
  msgid "status_0"
1811
1811
  msgstr "effacé"
1812
1812
 
1813
+ #: lib/gettext_strings.rb:92
1814
+ msgid "status_50_img"
1815
+ msgstr "<img src='/images/weather_sun.png'/>"
1816
+
1817
+ #: lib/gettext_strings.rb:93
1818
+ msgid "status_60_img"
1819
+ msgstr "<img src='/images/magnifier.png'/>"
1820
+
1821
+ #: lib/gettext_strings.rb:94
1822
+ msgid "status_65_img"
1823
+ msgstr "<img src='/images/magnifier.png'/>"
1824
+
1825
+ #: lib/gettext_strings.rb:95
1826
+ msgid "status_70_img"
1827
+ msgstr "<img src='/images/pencil.png'/>"
1828
+
1829
+ #: lib/gettext_strings.rb:96
1830
+ msgid "status_20_img"
1831
+ msgstr "<img src='/images/weather_clouds.png'/>"
1832
+
1833
+ #: lib/gettext_strings.rb:97
1834
+ msgid "status_10_img"
1835
+ msgstr "<img src='/images/weather_rain.png'/>"
1836
+
1837
+ #: lib/gettext_strings.rb:98
1838
+ msgid "status_0_img"
1839
+ msgstr "<img src='/images/weather_lightning.png'/>"
1840
+
1813
1841
  #: lib/gettext_strings.rb:94
1814
1842
  msgid "en"
1815
1843
  msgstr "anglais"
data/locale/zena.pot CHANGED
@@ -1665,6 +1665,34 @@ msgstr ""
1665
1665
  msgid "status_0"
1666
1666
  msgstr ""
1667
1667
 
1668
+ #: lib/gettext_strings.rb:92
1669
+ msgid "status_50_img"
1670
+ msgstr ""
1671
+
1672
+ #: lib/gettext_strings.rb:93
1673
+ msgid "status_60_img"
1674
+ msgstr ""
1675
+
1676
+ #: lib/gettext_strings.rb:94
1677
+ msgid "status_65_img"
1678
+ msgstr ""
1679
+
1680
+ #: lib/gettext_strings.rb:95
1681
+ msgid "status_70_img"
1682
+ msgstr ""
1683
+
1684
+ #: lib/gettext_strings.rb:96
1685
+ msgid "status_20_img"
1686
+ msgstr ""
1687
+
1688
+ #: lib/gettext_strings.rb:97
1689
+ msgid "status_10_img"
1690
+ msgstr ""
1691
+
1692
+ #: lib/gettext_strings.rb:98
1693
+ msgid "status_0_img"
1694
+ msgstr ""
1695
+
1668
1696
  #: lib/gettext_strings.rb:94
1669
1697
  msgid "en"
1670
1698
  msgstr ""
Binary file
Binary file
@@ -1,3 +1,6 @@
1
+ // This progress bar JS comes from Piotr Sarnacki (I think)
2
+ // the code has been adapted for zena for a nicer progression (Morph)
3
+ // and to fix some strange Safari bugs.
1
4
 
2
5
  function submitUploadForm(form, uuid) {
3
6
  if ($('progress_bar' + uuid)) return;
@@ -7,10 +10,11 @@ function submitUploadForm(form, uuid) {
7
10
  $(document.body).insert('<iframe id="UploadIFrame" name="UploadIFrame" src="about:blank"></iframe>');
8
11
  }
9
12
  $(form).target = 'UploadIFrame';
10
- $(form).submit();
11
13
  if (need_progress) {
12
- UploadProgress.monitor(uuid) ;
14
+ // make sure the POST occurs before (Safari Bug)
15
+ UploadProgress.monitor(uuid, form);
13
16
  }
17
+ $(form).submit();
14
18
  }
15
19
 
16
20
  //
@@ -34,8 +38,9 @@ var UploadProgress = {
34
38
  period: 1.0,
35
39
  morphPeriod: 1.2,
36
40
  uuid: '',
41
+ submitted: false,
37
42
 
38
- monitor: function(uuid) {
43
+ monitor: function(uuid, form) {
39
44
  this.uuid = uuid;
40
45
  this.buildProgressBar();
41
46
  this.setAsStarting();
@@ -49,6 +54,11 @@ var UploadProgress = {
49
54
  UploadProgress.update(upload.size, upload.received);
50
55
  } else if (upload.state == 'done') {
51
56
  UploadProgress.setAsFinished();
57
+ } else if (upload.state == 'starting' && !this.submitted) {
58
+ // This is to solve a bug in Safari where the form is sometimes not
59
+ // submitted before the monitoring occurs. We just resubmit the form.
60
+ this.submitted = true;
61
+ $(form).submit();
52
62
  } else {
53
63
  UploadProgress.message(upload.state);
54
64
  }
@@ -39,38 +39,42 @@ Zena.save = function(url, form, close_on_complete) {
39
39
  }
40
40
  }
41
41
 
42
- var diff_from = '';
43
- var diff_to = '';
44
- var diff_next_sel = 'from';
42
+ var diff_from = false;
43
+ var diff_to = false;
45
44
 
46
45
  Zena.diff_select = function(tag) {
47
- if (diff_next_sel == 'from') {
48
- if (diff_from != '') {
49
- diff_from.style.background = 'none';
50
- }
51
- diff_from = tag;
52
- diff_next_sel = 'to';
53
- } else {
54
- if (diff_to != '') {
46
+ tag_number = parseInt(tag.innerHTML);
47
+ if (tag == diff_from || tag == diff_to) {
48
+ // reset
49
+ if (diff_from) diff_from.style.background = 'none';
50
+ if (diff_to ) diff_to.style.background = 'none';
51
+ diff_from = false;
52
+ diff_to = false;
53
+ opener.window.location.href = '/nodes/' + $('node_zip').innerHTML;
54
+ return;
55
+ } else if (diff_to && diff_from) {
56
+ // update
57
+ if (parseInt(diff_to.innerHTML) - tag_number < tag_number - parseInt(diff_from.innerHTML)) {
55
58
  diff_to.style.background = 'none';
59
+ diff_to = tag;
60
+ } else {
61
+ diff_from.style.background = 'none';
62
+ diff_from = tag;
56
63
  }
64
+ } else if (!diff_to) {
57
65
  diff_to = tag;
58
- diff_next_sel = 'from';
59
- }
60
- if (diff_from != '' && diff_to != '' && parseInt(diff_from.innerHTML) > parseInt(diff_to.innerHTML)) {
61
- var tmp = diff_from;
62
- diff_from = diff_to;
63
- diff_to = tmp;
64
- if (diff_next_sel == 'from') {
65
- diff_next_sel = 'to';
66
+ } else {
67
+ if (tag_number > parseInt(diff_to.innerHTML)) {
68
+ diff_from = diff_to;
69
+ diff_to = tag;
66
70
  } else {
67
- diff_next_sel = 'from';
71
+ diff_from = tag;
68
72
  }
69
73
  }
70
74
 
71
- diff_from.style.background = '#7A6414';
72
- diff_to.style.background = '#FAD12A';
73
- if (diff_from != '' && diff_to != '') {
75
+ if (diff_from) diff_from.style.background = '#7A6414';
76
+ if (diff_to) diff_to.style.background = '#FAD12A';
77
+ if (diff_from && diff_to) {
74
78
  opener.Zena.version_diff($('node_zip').innerHTML, diff_from, diff_to);
75
79
  }
76
80
  }
@@ -498,4 +502,154 @@ Zena.select_tab = function(name) {
498
502
  current_tab = $(name+'_tab');
499
503
  current_sel.className = 'selected';
500
504
  current_tab.style.display = '';
505
+ }
506
+
507
+ Zena.popup_gallery = null;
508
+
509
+ Zena.popup = function(elem) {
510
+ var offsets = elem.positionedOffset();
511
+ var e_left = offsets[0];
512
+ var e_top = offsets[1];
513
+ var e_width = elem.clientWidth;
514
+ var e_height = elem.clientHeight;
515
+ var config = elem._popup;
516
+
517
+ var cont = $('pg_cont');
518
+ // FIXME copy border style from 'elem'
519
+ var border_width = 1;
520
+
521
+ if (!cont) {
522
+ // open popup
523
+ var html_img = "<img onclick='Zena.popup_close();' id='pg_img' style='position:absolute; z-index:10001; border:" + border_width + "px solid grey; top:"+e_top+"px; left:"+e_left+"px; width:"+e_width+"px;height:"+e_height+"px;' src='" + config.src + "'/>"
524
+ Element.insert(document.body, "<div id='pg_cont' style='position:absolute; top:0; left:0;'><div id='pg_mask' onclick='Zena.popup_close();'>&nbsp;</div>" + html_img + "</div>");
525
+ img = $('pg_img');
526
+ } else {
527
+ // next, previous image
528
+ img = $('pg_img');
529
+ img.src = config.src;
530
+ }
531
+
532
+ // used when closing
533
+ img._elem_top = e_top;
534
+ img._elem_left = e_left;
535
+ img._elem_width = e_width;
536
+ img._elem_height = e_height;
537
+
538
+ var view = document.viewport.getDimensions();
539
+ var offset = document.viewport.getScrollOffsets();
540
+ config.left = (view.width - config.width)/2 + offset[0];
541
+ config.top = (view.height - config.height)/2 + offset[1];
542
+ config.klass = elem.className;
543
+
544
+ // get next/previous elements
545
+ if (config.navigation) {
546
+ var gallery;
547
+ if (false && !this.popup_gallery) {
548
+ document.observe('keydown', function(e, el) {
549
+ if (!$('pg_info')) {
550
+ e.stop();
551
+ this.popup_gallery = null;
552
+ } else if (e.keyCode == 37) {
553
+ if (gallery.prev) {
554
+ Zena.popup(gallery.prev);
555
+ } else {
556
+ Zena.popup(gallery.list[gallery.list.size()-1]);
557
+ }
558
+ } else if (e.keyCode == 39) {
559
+ if (gallery.next) {
560
+ Zena.popup(gallery.next);
561
+ } else {
562
+ Zena.popup(gallery.list[0]);
563
+ }
564
+ } else {
565
+ e.stop();
566
+ this.popup_gallery = null;
567
+ Zena.popup_close();
568
+ }
569
+ });
570
+ }
571
+ if (!this.popup_gallery || this.popup_gallery.klass != config.klass) {
572
+ this.popup_gallery = {
573
+ klass: config.klass,
574
+ list: elem.up('div').select('img.' + config.klass)
575
+ };
576
+ }
577
+ this.popup_gallery.current = elem;
578
+ this.popup_gallery.index = this.popup_gallery.list.indexOf(elem);
579
+ gallery = this.popup_gallery;
580
+ }
581
+
582
+ if (!config.pg_info_style) {
583
+ config.pg_info_style = 'top:' + (config.top-10) + 'px; left:' + (config.left-10) + 'px; width:' + (config.width+20) + 'px; padding-top:' + (config.height+20) + 'px;';
584
+ if (config.keys.size() == 0 && config.navigation) {
585
+ config.pg_info_style += ' min-height:30px;';
586
+ }
587
+ }
588
+
589
+ if ($('pg_info')) {
590
+ Zena.popup_wrap(img, config);
591
+ new Effect.Morph(img, {
592
+ style: 'width:'+config.width+'px; height:'+config.height+'px; top:'+config.top+'px; left:'+config.left+'px;',
593
+ duration: 0.2
594
+ });
595
+ new Effect.Morph('pg_info', {
596
+ style: config.pg_info_style,
597
+ duration: 0.2
598
+ });
599
+ $(img).appear();
600
+ } else {
601
+ new Effect.Morph(img, {
602
+ style: 'width:'+config.width+'px; height:'+config.height+'px; top:'+config.top+'px; left:'+config.left+'px;',
603
+ duration: 0.5,
604
+ afterFinishInternal: function(effect) {
605
+ Zena.popup_wrap(img, config);
606
+ }
607
+ });
608
+ }
609
+ }
610
+
611
+ Zena.popup_wrap = function(img, config) {
612
+ cont = $('pg_cont');
613
+ var content = '';
614
+ var border_width = 1;
615
+ gallery = this.popup_gallery;
616
+
617
+ config.keys.each(function(key, index) {
618
+ if (key == 'navigation') {
619
+ var index = gallery.index;
620
+ gallery.prev = gallery.list[index - 1];
621
+ gallery.next = gallery.list[index + 1];
622
+
623
+ if (gallery.prev) content += "<a id='pg_prev' href='#' onclick='Zena.popup($(\""+gallery.prev.id+"\"));return false;' title='previous image'>&nbsp;</a>";
624
+ if (gallery.next) content += "<a id='pg_next' href='#' onclick='Zena.popup($(\""+gallery.next.id+"\"));return false;' title='next image'>&nbsp;</a>";
625
+ } else {
626
+ content += "<div class='"+key+"'>" + config.fields[key] + "</div>";
627
+ }
628
+ });
629
+
630
+ if ($('pg_info')) {
631
+ if (content != '') {
632
+ $('pg_info').update(content);
633
+ } else {
634
+ $('pg_info').remove();
635
+ }
636
+ } else if (content != '') {
637
+ cont.insert("<div id='pg_info' class='" + config.klass + "' style='position:absolute; " + config.pg_info_style + "'>" + content + "</div>");
638
+ }
639
+ }
640
+
641
+ Zena.popup_close = function() {
642
+ var cont = $('pg_cont');
643
+ if (cont) {
644
+ var img = $('pg_img');
645
+ var pg_info = $('pg_info');
646
+ if (pg_info) pg_info.remove();
647
+ new Effect.Morph(img, {
648
+ style: 'width:'+(img._elem_width)+'px; height:'+(img._elem_height)+'px; top:'+img._elem_top+'px; left:'+img._elem_left+'px;',
649
+ duration: 0.5,
650
+ afterFinishInternal: function(effect) {
651
+ cont.remove();
652
+ }
653
+ });
654
+ }
501
655
  }
@@ -145,7 +145,7 @@ ul.infos li { padding:0.4em 0.4em; list-style:none; display:block; }
145
145
  #links_tab .add { text-align:left;}
146
146
  #links_tab .date { width:95px; }
147
147
  #links_tab .status { width:70px; }
148
- #links_tab .box { width:18px;}
148
+ #links_tab .box { width:15px;}
149
149
  #links_tab .comment { font-style:italic; width:auto; text-align:left;}
150
150
  #links_tab .actions { width:100px;}
151
151
 
@@ -171,8 +171,10 @@ ul.infos li { padding:0.4em 0.4em; list-style:none; display:block; }
171
171
 
172
172
  #versions_list { max-height:230px; overflow:auto;}
173
173
  #versions .sign { width:20px; }
174
- #links_tab .diff .box { border-right-width:0; }
175
- #links_tab .diff .text { font-style:italic; text-align:left;}
174
+ #versions .number { width:25px; font-size:13px; padding:0 5px; font-weight:bold; cursor:pointer;}
175
+ #versions .actions { width:100px; }
176
+
177
+ .import { max-height:400px; overflow:auto;}
176
178
 
177
179
  #discussions .inline_form div { float: left; padding:0 8px; }
178
180
  #discussions .inline_form .inside { margin-top:2px; }
@@ -75,4 +75,13 @@ padding:5px; border:1px solid #714D3D; text-align:left; color:#444; z-index:9999
75
75
 
76
76
  /* diff */
77
77
  del.differ, del.differ * { background:#fcc; padding:1px 2px;}
78
- ins.differ, ins.differ * { background:#cfc; text-decoration:none; padding:1px 2px;}
78
+ ins.differ, ins.differ * { background:#cfc; text-decoration:none; padding:1px 2px;}
79
+
80
+ /* popup gallery */
81
+ #pg_mask { position:fixed; top:0; left:0; width:100%; height:100%; background:black; opacity:0.8; z-index:9999;}
82
+ #pg_info { z-index:10000; background:white; border:1px solid grey;}
83
+ #pg_info .v_title {text-align:center; font-weight:bold;}
84
+ #pg_info .v_summary {clear:both; padding:3px 10px 10px;}
85
+ #pg_info a { width:100px; height:40px;}
86
+ #pg_next {position:absolute; right:0; background:url('/images/popup_next.png') no-repeat right top;}
87
+ #pg_prev {position:absolute; left:0; background:url('/images/popup_prev.png') no-repeat left top;}
@@ -23,6 +23,7 @@ zena_med:
23
23
  site_id: 705790409
24
24
  name: med
25
25
  size: 1
26
+ popup: std
26
27
  width: 300
27
28
  height: 200
28
29
  updated_at: 2008-05-01
@@ -1615,7 +1615,7 @@ zena_lake:
1615
1615
  type: Contact
1616
1616
  kpath: NRC
1617
1617
  zip: 23
1618
- publish_from: Thu Oct 15 18:31:52 +0000 2009
1618
+ publish_from: Tue Oct 27 13:14:13 +0000 2009
1619
1619
  vhash: '{"w":{"en":1833724126},"r":{"en":618648829}}'
1620
1620
  inherit: yes
1621
1621
  skin: default
@@ -860,7 +860,9 @@ zena_letter_en:
860
860
  type: Version
861
861
  comment: letter for testing
862
862
  summary: This page is a *Letter*.
863
- text: letter content
863
+ text: "letter content
864
+
865
+ !30_med! !31_med! !24_med!"
864
866
 
865
867
 
866
868
  zena_wiki_skin_en:
@@ -1,6 +1,7 @@
1
1
 
2
2
  med:
3
3
  size: limit
4
+ popup: std
4
5
  width: 300
5
6
  height: 200
6
7
  updated_at: 2008-05-01
@@ -375,7 +375,9 @@ letter_en:
375
375
  comment: letter for testing
376
376
  title: zena enhancements
377
377
  summary: This page is a *Letter*.
378
- text: letter content
378
+ text: "letter content
379
+
380
+ !30_med! !31_med! !24_med!"
379
381
 
380
382
  wiki_skin_en:
381
383
  type: Version
data/test/test_helper.rb CHANGED
@@ -23,6 +23,8 @@ end
23
23
  class SubPagerDummy < PagerDummy
24
24
  end
25
25
 
26
+ NodeQuery.load_custom_queries File.join(Zena::ROOT, 'test', 'custom_queries')
27
+
26
28
  class ActiveSupport::TestCase
27
29
  # Transactional fixtures accelerate your tests by wrapping each test method
28
30
  # in a transaction that's rolled back on completion. This ensures that the