olelo 0.9.3 → 0.9.4

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 (92) hide show
  1. data/.travis.yml +4 -0
  2. data/Rakefile +6 -12
  3. data/bin/olelo +13 -8
  4. data/config.ru +21 -15
  5. data/config/aspects.rb +45 -32
  6. data/config/config.yml.default +1 -0
  7. data/config/initializers/00-mime_types.rb +22 -17
  8. data/config/initializers/01-slim.rb +2 -2
  9. data/lib/olelo.rb +1 -8
  10. data/lib/olelo/application.rb +33 -34
  11. data/lib/olelo/attributes.rb +4 -4
  12. data/lib/olelo/extensions.rb +0 -7
  13. data/lib/olelo/helper.rb +13 -25
  14. data/lib/olelo/html_safe.rb +0 -4
  15. data/lib/olelo/locale.yml +6 -3
  16. data/lib/olelo/menu.rb +1 -1
  17. data/lib/olelo/page.rb +21 -18
  18. data/lib/olelo/version.rb +1 -1
  19. data/olelo.gemspec +5 -3
  20. data/plugins/aspects/changelog.rb +5 -5
  21. data/plugins/aspects/documentbrowser.rb +5 -5
  22. data/plugins/{gallery → aspects/gallery}/gallery.css +0 -0
  23. data/plugins/{gallery → aspects/gallery}/gallery.scss +0 -0
  24. data/plugins/{gallery → aspects/gallery}/main.rb +3 -3
  25. data/plugins/aspects/highlight.rb +1 -1
  26. data/plugins/aspects/image.rb +1 -1
  27. data/plugins/aspects/imageinfo.rb +3 -3
  28. data/plugins/aspects/main.rb +21 -21
  29. data/plugins/aspects/pageinfo.rb +2 -2
  30. data/plugins/aspects/source.rb +1 -1
  31. data/plugins/aspects/subpages.rb +7 -7
  32. data/plugins/aspects/text.rb +1 -1
  33. data/plugins/authentication/portal.rb +2 -2
  34. data/plugins/authentication/yamlfile.rb +1 -1
  35. data/plugins/blog/main.rb +10 -10
  36. data/plugins/editor/preview.rb +3 -3
  37. data/plugins/filters/creole.rb +1 -1
  38. data/plugins/filters/editsection.rb +2 -2
  39. data/plugins/filters/html2xml.rb +6 -0
  40. data/plugins/filters/main.rb +1 -1
  41. data/plugins/filters/remind/main.rb +15 -0
  42. data/plugins/filters/remind/rem2html +562 -0
  43. data/plugins/filters/s5/main.rb +1 -1
  44. data/plugins/login/persistent.rb +1 -1
  45. data/plugins/misc/system.rb +4 -0
  46. data/plugins/misc/variables.rb +1 -1
  47. data/plugins/misc/webdav.rb +10 -10
  48. data/plugins/repositories/git_grep.rb +2 -2
  49. data/plugins/repositories/gitrb_repository.rb +10 -10
  50. data/plugins/repositories/rugged_repository.rb +7 -7
  51. data/plugins/tags/code.rb +1 -1
  52. data/plugins/tags/footnotes.rb +4 -3
  53. data/plugins/tags/gist.rb +2 -2
  54. data/plugins/tags/html.rb +11 -11
  55. data/plugins/tags/include.rb +6 -6
  56. data/plugins/tags/main.rb +10 -10
  57. data/plugins/tags/math.rb +2 -2
  58. data/plugins/tags/redirect.rb +3 -3
  59. data/plugins/tags/scripting.rb +12 -12
  60. data/plugins/tags/sort.rb +1 -1
  61. data/plugins/tags/tabs.rb +1 -1
  62. data/plugins/treeview/main.rb +3 -3
  63. data/plugins/treeview/script.js +5 -5
  64. data/plugins/treeview/script/00-jquery.treeview.js +6 -6
  65. data/plugins/treeview/script/init.js +1 -1
  66. data/plugins/utils/assets.rb +4 -4
  67. data/plugins/utils/cache.rb +10 -6
  68. data/plugins/utils/store.rb +4 -4
  69. data/static/script.js +124 -126
  70. data/static/script/{02-jquery.js → 01-jquery.js} +0 -0
  71. data/static/script/02-olelo.storage.js +54 -0
  72. data/static/script/10-olelo.historytable.js +2 -2
  73. data/static/script/13-olelo.tabwidget.js +2 -2
  74. data/test/helper.rb +5 -4
  75. data/test/page_test.rb +1 -1
  76. data/test/request_test.rb +42 -38
  77. data/test/string_extensions_test.rb +0 -6
  78. data/test/templates_test.rb +1 -1
  79. data/test/util_test.rb +1 -1
  80. data/views/changes.slim +2 -2
  81. data/views/compare.slim +4 -4
  82. data/views/delete.slim +2 -2
  83. data/views/deleted.slim +1 -1
  84. data/views/edit.slim +31 -26
  85. data/views/history.slim +5 -5
  86. data/views/layout.slim +1 -1
  87. data/views/login.slim +30 -32
  88. data/views/move.slim +3 -3
  89. data/views/profile.slim +2 -2
  90. data/views/show.slim +1 -1
  91. metadata +43 -104
  92. data/static/script/01-jstorage.js +0 -217
@@ -16,7 +16,7 @@ end
16
16
 
17
17
  class S5 < XSLT
18
18
  def configure(options)
19
- super(options.merge(:stylesheet => 's5/s5.xsl'))
19
+ super(options.merge(stylesheet: 's5/s5.xsl'))
20
20
  end
21
21
 
22
22
  def params(context)
@@ -23,7 +23,7 @@ class ::Olelo::Application
23
23
  if path == '/login'
24
24
  if User.logged_in? && params[:persistent]
25
25
  token = "#{sha256(User.current.name + Config['rack.session_secret'])}-#{User.current.name}"
26
- response.set_cookie(TOKEN_NAME, :value => token, :expires => Time.now + TOKEN_LIFETIME)
26
+ response.set_cookie(TOKEN_NAME, value: token, expires: Time.now + TOKEN_LIFETIME)
27
27
  end
28
28
  elsif path == '/logout'
29
29
  response.delete_cookie(TOKEN_NAME)
@@ -44,6 +44,10 @@ ul.tabs
44
44
  tr
45
45
  td Memory usage:
46
46
  td #{@memory} MiB
47
+ - if defined?(Olelo::Worker)
48
+ tr
49
+ td Worker jobs
50
+ td= Olelo::Worker.jobs
47
51
  #tab-configuration.tab
48
52
  h2 Configuration
49
53
  table
@@ -26,5 +26,5 @@ end
26
26
  Application.hook :head, 1 do
27
27
  vars = page ? params.merge(PLUGIN.exported_variables(page)) : params
28
28
  vars = vars.merge('user_logged_in' => !User.logged_in?, 'user_name' => User.current.name)
29
- %{<script type="text/javascript">Olelo = #{escape_javascript(vars.to_json)};</script>}
29
+ %{<script type="text/javascript">Olelo = #{escape_javascript MultiJson.dump(vars)};</script>}
30
30
  end
@@ -7,7 +7,7 @@ class ::Olelo::Application
7
7
  raise :reserved_path.t if self.class.reserved_path?(page.path)
8
8
  page.content = request.body
9
9
  page.save
10
- Page.commit(:page_uploaded.t(:page => page.title))
10
+ Page.commit(:page_uploaded.t(page: page.title))
11
11
  :created
12
12
  end
13
13
  rescue NotFound => ex
@@ -18,7 +18,7 @@ class ::Olelo::Application
18
18
  :bad_request
19
19
  end
20
20
 
21
- put '/(:path)', :tail => true do
21
+ put '/(:path)', tail: true do
22
22
  if request.form_data?
23
23
  :not_implemented
24
24
  else
@@ -26,7 +26,7 @@ class ::Olelo::Application
26
26
  end
27
27
  end
28
28
 
29
- post '/(:path)', :tail => true do
29
+ post '/(:path)', tail: true do
30
30
  if request.form_data?
31
31
  super()
32
32
  else
@@ -35,11 +35,11 @@ class ::Olelo::Application
35
35
  end
36
36
 
37
37
  # TODO: Implement more methods if needed
38
- add_route('PROPFIND', '/(:path)', :tail => true) { :not_found }
39
- add_route('PROPPATCH', '/(:path)', :tail => true) { :not_implemented }
40
- add_route('MKCOL', '/(:path)', :tail => true) { :not_implemented }
41
- add_route('COPY', '/(:path)', :tail => true) { :not_implemented }
42
- add_route('MOVE', '/(:path)', :tail => true) { :not_implemented }
43
- add_route('LOCK', '/(:path)', :tail => true) { :not_implemented }
44
- add_route('UNLOCK', '/(:path)', :tail => true) { :not_implemented }
38
+ add_route('PROPFIND', '/(:path)', tail: true) { :not_found }
39
+ add_route('PROPPATCH', '/(:path)', tail: true) { :not_implemented }
40
+ add_route('MKCOL', '/(:path)', tail: true) { :not_implemented }
41
+ add_route('COPY', '/(:path)', tail: true) { :not_implemented }
42
+ add_route('MOVE', '/(:path)', tail: true) { :not_implemented }
43
+ add_route('LOCK', '/(:path)', tail: true) { :not_implemented }
44
+ add_route('UNLOCK', '/(:path)', tail: true) { :not_implemented }
45
45
  end
@@ -58,9 +58,9 @@ end
58
58
 
59
59
  __END__
60
60
  @@ grep.slim
61
- - title :search_results.t(:pattern => params[:pattern])
61
+ - title :search_results.t(pattern: params[:pattern])
62
62
  h1= title
63
- p= :match.t(:count => @matches.length)
63
+ p= :match.t(count: @matches.length)
64
64
  .search
65
65
  - @matches.each do |path, content|
66
66
  .match
@@ -7,8 +7,8 @@ class GitrbRepository < Repository
7
7
 
8
8
  def initialize(config)
9
9
  Olelo.logger.info "Opening git repository: #{config[:path]}"
10
- @git = Gitrb::Repository.new(:path => config[:path], :create => true,
11
- :bare => config[:bare], :logger => Olelo.logger)
10
+ @git = Gitrb::Repository.new(path: config[:path], create: true,
11
+ bare: config[:bare], logger: Olelo.logger)
12
12
  end
13
13
 
14
14
  # @override
@@ -36,15 +36,15 @@ class GitrbRepository < Repository
36
36
 
37
37
  # @override
38
38
  def get_history(path, skip, limit)
39
- @git.log(:max_count => limit, :skip => skip,
40
- :path => [path, path + ATTRIBUTE_EXT, path + CONTENT_EXT]).map do |c|
39
+ @git.log(max_count: limit, skip: skip,
40
+ path: [path, path + ATTRIBUTE_EXT, path + CONTENT_EXT]).map do |c|
41
41
  commit_to_version(c)
42
42
  end
43
43
  end
44
44
 
45
45
  # @override
46
46
  def get_path_version(path, version)
47
- commits = @git.log(:max_count => 2, :start => version, :path => [path, path + ATTRIBUTE_EXT, path + CONTENT_EXT])
47
+ commits = @git.log(max_count: 2, start: version, path: [path, path + ATTRIBUTE_EXT, path + CONTENT_EXT])
48
48
 
49
49
  succ = nil
50
50
  @git.git_rev_list('--reverse', '--remove-empty', "#{commits[0]}..", '--', path, path + ATTRIBUTE_EXT, path + CONTENT_EXT) do |io|
@@ -94,11 +94,11 @@ class GitrbRepository < Repository
94
94
  if content.blank?
95
95
  @git.root.delete(path + CONTENT_EXT)
96
96
  else
97
- @git.root[path + CONTENT_EXT] = Gitrb::Blob.new(:data => content)
97
+ @git.root[path + CONTENT_EXT] = Gitrb::Blob.new(data: content)
98
98
  end
99
99
  collapse_empty_tree(path)
100
100
  else
101
- @git.root[path] = Gitrb::Blob.new(:data => content)
101
+ @git.root[path] = Gitrb::Blob.new(data: content)
102
102
  end
103
103
  end
104
104
 
@@ -108,7 +108,7 @@ class GitrbRepository < Repository
108
108
  attributes = attributes.blank? ? nil : YAML.dump(attributes).sub(/\A\-\-\-\s*\n/s, '')
109
109
  expand_tree(path)
110
110
  if attributes
111
- @git.root[path + ATTRIBUTE_EXT] = Gitrb::Blob.new(:data => attributes)
111
+ @git.root[path + ATTRIBUTE_EXT] = Gitrb::Blob.new(data: attributes)
112
112
  else
113
113
  @git.root.delete(path + ATTRIBUTE_EXT)
114
114
  end
@@ -133,8 +133,8 @@ class GitrbRepository < Repository
133
133
 
134
134
  # @override
135
135
  def diff(path, from, to)
136
- diff = @git.diff(:from => from && from.to_s, :to => to.to_s,
137
- :path => [path, path + CONTENT_EXT, path + ATTRIBUTE_EXT], :detect_renames => true)
136
+ diff = @git.diff(from: from && from.to_s, to: to.to_s,
137
+ path: [path, path + CONTENT_EXT, path + ATTRIBUTE_EXT], detect_renames: true)
138
138
  Diff.new(commit_to_version(diff.from), commit_to_version(diff.to), diff.patch)
139
139
  end
140
140
 
@@ -132,7 +132,7 @@ class RuggedRepository < Repository
132
132
  return @oid if @oid
133
133
  builder = Rugged::Tree::Builder.new
134
134
  @entries.each do |name, entry|
135
- builder << { :type => entry.type, :filemode => entry.filemode, :oid => entry.save, :name => name }
135
+ builder << { type: entry.type, filemode: entry.filemode, oid: entry.save, name: name }
136
136
  end
137
137
  builder.write(@git)
138
138
  end
@@ -151,13 +151,13 @@ class RuggedRepository < Repository
151
151
  raise 'Concurrent transactions' if @head != current_head
152
152
 
153
153
  user = User.current
154
- author = {:email => user.email, :name => user.name, :time => Time.now }
154
+ author = {email: user.email, name: user.name, time: Time.now }
155
155
  commit = Rugged::Commit.create(@git,
156
- :author => author,
157
- :message => comment,
158
- :committer => author,
159
- :parents => [@head],
160
- :tree => @tree.save)
156
+ author: author,
157
+ message: comment,
158
+ committer: author,
159
+ parents: [@head],
160
+ tree: @tree.save)
161
161
 
162
162
  raise 'Concurrent transactions' if @head != current_head
163
163
  if current_head
@@ -1,6 +1,6 @@
1
1
  description 'Code tag with syntax highlighting'
2
2
  dependencies 'utils/pygments'
3
3
 
4
- Tag.define :code, :requires => 'lang' do |context, attrs, content|
4
+ Tag.define :code, requires: 'lang' do |context, attrs, content|
5
5
  Pygments.pygmentize(content, attrs['lang'])
6
6
  end
@@ -1,6 +1,7 @@
1
+ # -*- coding: utf-8 -*-
1
2
  description 'Footnote support'
2
3
 
3
- Tag.define :ref, :optional => 'name', :description => 'Create footnote' do |context, attrs, content|
4
+ Tag.define :ref, optional: 'name', description: 'Create footnote' do |context, attrs, content|
4
5
  footnotes = context[:footnotes] ||= []
5
6
  hash = context[:footnotes_hash] ||= {}
6
7
  name = attrs['name']
@@ -19,9 +20,9 @@ Tag.define :ref, :optional => 'name', :description => 'Create footnote' do |cont
19
20
  %{<a class="ref" id="ref#{ref_id}" href="#note#{note_id}">[#{note_id}]</a>}
20
21
  end
21
22
 
22
- Tag.define :references, :description => 'Print all footnotes' do |context, attrs|
23
+ Tag.define :references, description: 'Print all footnotes' do |context, attrs|
23
24
  footnotes = context[:footnotes]
24
- render :footnotes, :locals => {:footnotes => footnotes} if footnotes
25
+ render :footnotes, locals: {footnotes: footnotes} if footnotes
25
26
  end
26
27
 
27
28
  __END__
@@ -2,10 +2,10 @@ description 'Tag to embed github gist'
2
2
  export_scripts 'gist-embed.css'
3
3
  require 'open-uri'
4
4
 
5
- Tag.define :gist, :requires => 'id' do |context, attrs|
5
+ Tag.define :gist, requires: 'id' do |context, attrs|
6
6
  if attrs['id'] =~ /^\d+$/
7
7
  body = open("https://gist.github.com/#{attrs['id']}.json").read
8
- gist = JSON.parse(body)
8
+ gist = MultiJson.load(body)
9
9
  gist['div'].gsub('&nbsp;', '&#8239;')
10
10
  else
11
11
  raise ArgumentError, 'Invalid gist id'
@@ -1,16 +1,16 @@
1
1
  description 'Safe html tags'
2
2
 
3
3
  HTML_TAGS = [
4
- [:a, {:optional => %w(href title)}],
5
- [:img, {:autoclose => true, :optional => %w(src alt title)}],
6
- [:br, {:autoclose => true}],
4
+ [:a, {optional: %w(href title)}],
5
+ [:img, {autoclose: true, optional: %w(src alt title)}],
6
+ [:br, {autoclose: true}],
7
7
  [:i],
8
8
  [:u],
9
9
  [:b],
10
10
  [:pre],
11
11
  [:kbd],
12
12
  # provided by syntax highlighter
13
- # [:code, :optional => %w(lang)]
13
+ # [:code, optional: %w(lang)]
14
14
  [:cite],
15
15
  [:strong],
16
16
  [:em],
@@ -20,9 +20,9 @@ HTML_TAGS = [
20
20
  [:del],
21
21
  [:table],
22
22
  [:tr],
23
- [:td, {:optional => %w(colspan rowspan)}],
23
+ [:td, {optional: %w(colspan rowspan)}],
24
24
  [:th],
25
- [:ol, {:optional => %w(start)}],
25
+ [:ol, {optional: %w(start)}],
26
26
  [:ul],
27
27
  [:li],
28
28
  [:p],
@@ -32,11 +32,11 @@ HTML_TAGS = [
32
32
  [:h4],
33
33
  [:h5],
34
34
  [:h6],
35
- [:blockquote, {:optional => %w(cite)}],
36
- [:div, {:optional => %w(style)}],
37
- [:span, {:optional => %w(style)}],
38
- [:video, {:optional => %w(autoplay controls height width loop preload src poster)}],
39
- [:audio, {:optional => %w(autoplay controls loop preload src)}]
35
+ [:blockquote, {optional: %w(cite)}],
36
+ [:div, {optional: %w(style)}],
37
+ [:span, {optional: %w(style)}],
38
+ [:video, {optional: %w(autoplay controls height width loop preload src poster)}],
39
+ [:audio, {optional: %w(autoplay controls loop preload src)}]
40
40
  ]
41
41
 
42
42
  HTML_TAGS.each do |name, options|
@@ -1,20 +1,20 @@
1
1
  description 'Include tags'
2
2
 
3
- Tag.define :include, :optional => '*', :requires => 'page', :limit => 10, :description => 'Include page' do |context, attrs|
3
+ Tag.define :include, optional: '*', requires: 'page', limit: 10, description: 'Include page' do |context, attrs|
4
4
  path = attrs['page']
5
5
  path = context.page.path/'..'/path if !path.starts_with? '/'
6
6
  if page = Page.find(path, context.page.tree_version)
7
- Aspects::Aspect.find!(page, :name => attrs['aspect'], :layout => true).
8
- call(context.subcontext(:params => attrs.merge(:included => true), :page => page), page)
7
+ Aspects::Aspect.find!(page, name: attrs['aspect'], layout: true).
8
+ call(context.subcontext(params: attrs.merge(included: true), page: page), page)
9
9
  else
10
- %{<a href="#{escape_html build_path(path, :action => :new)}">#{escape_html :create_page.t(:page => path)}</a>}
10
+ %{<a href="#{escape_html build_path(path, action: :new)}">#{escape_html :create_page.t(page: path)}</a>}
11
11
  end
12
12
  end
13
13
 
14
- Tag.define :includeonly, :immediate => true, :description => 'Text which is shown only if included' do |context, attrs, content|
14
+ Tag.define :includeonly, immediate: true, description: 'Text which is shown only if included' do |context, attrs, content|
15
15
  nested_tags(context.subcontext, content) if context.params[:included]
16
16
  end
17
17
 
18
- Tag.define :noinclude, :immediate => true, :description => 'Text which is not included' do |context, attrs, content|
18
+ Tag.define :noinclude, immediate: true, description: 'Text which is not included' do |context, attrs, content|
19
19
  nested_tags(context.subcontext, content) if !context.params[:included]
20
20
  end
@@ -157,9 +157,9 @@ class Tag < Filters::NestingFilter
157
157
  raise 'Tag must take two or three arguments' if block.arity != 2 && block.arity != 3
158
158
  # Find the plugin which provided this tag.
159
159
  plugin = Plugin.for(block)
160
- options.merge!(:name => name.to_s, :plugin => plugin, :autoclose => block.arity == 2,
161
- :optional => Set.new([*options[:optional]].compact.flatten),
162
- :requires => Set.new([*options[:requires]].compact.flatten))
160
+ options.merge!(name: name.to_s, plugin: plugin, autoclose: block.arity == 2,
161
+ optional: Set.new([*options[:optional]].compact.flatten),
162
+ requires: Set.new([*options[:requires]].compact.flatten))
163
163
  options[:description] ||= plugin.description
164
164
  options[:namespace] ||= plugin.path.split('/').last
165
165
  tag = TagInfo.new(options)
@@ -184,7 +184,7 @@ class Tag < Filters::NestingFilter
184
184
  # * :static - Execute dynamic tags only once
185
185
  #
186
186
  # Examples:
187
- # :enable => %w(html:* include) Enables all tags in the html namespace and the include tag.
187
+ # enable: %w(html:* include) Enables all tags in the html namespace and the include tag.
188
188
  def configure(options)
189
189
  super
190
190
  list = @options[:enable] ? tag_list(*@options[:enable]) : @@tags.keys
@@ -288,7 +288,7 @@ class Tag < Filters::NestingFilter
288
288
  "#{@protection_prefix}#{@protected_tags.length-1}#{@protection_suffix}"
289
289
  end
290
290
  rescue Exception => ex
291
- Olelo.logger.error ex.message
291
+ Olelo.logger.warn ex.message
292
292
  "#{name} - #{ex.message}"
293
293
  end
294
294
 
@@ -322,7 +322,7 @@ Application.hook :render, 2000 do |name, xml, layout|
322
322
  name, attrs, content = Marshal.load(decode64($1))
323
323
  raise 'Invalid dynamic tag' unless Hash === attrs && Tag.tags[name] && Tag.tags[name].dynamic
324
324
  begin
325
- context = Aspects::Context.new(:page => page, :params => params, :request => request, :response => response)
325
+ context = Aspects::Context.new(page: page, params: params, request: request, response: response)
326
326
  if content
327
327
  raise 'Invalid dynamic tag' unless String === content
328
328
  Tag.tags[name].dynamic.new.call(context, attrs, content).to_s
@@ -338,16 +338,16 @@ Application.hook :render, 2000 do |name, xml, layout|
338
338
  ''
339
339
  end
340
340
  end
341
- cache_control(:no_cache => true) if no_cache
341
+ cache_control(no_cache: true) if no_cache
342
342
  end
343
343
 
344
- Filters::Filter.register :tag, Tag, :description => 'Process extension tags'
344
+ Filters::Filter.register :tag, Tag, description: 'Process extension tags'
345
345
 
346
- Tag.define :nowiki, :description => 'Disable tag and wikitext filtering' do |context, attrs, content|
346
+ Tag.define :nowiki, description: 'Disable tag and wikitext filtering' do |context, attrs, content|
347
347
  escape_html(content)
348
348
  end
349
349
 
350
- Tag.define :notags, :description => 'Disable tag processing', :immediate => true do |context, attrs, content|
350
+ Tag.define :notags, description: 'Disable tag processing', immediate: true do |context, attrs, content|
351
351
  content
352
352
  end
353
353
 
@@ -92,7 +92,7 @@ class LaTeXRenderer < MathRenderer
92
92
  register 'mathjax', LaTeXRenderer
93
93
  end
94
94
 
95
- Tag.define :math, :optional => 'display' do |context, attrs, code|
95
+ Tag.define :math, optional: 'display' do |context, attrs, code|
96
96
  raise('Limits exceeded') if code.size > 10240
97
97
  MathRenderer.instance.render(code, attrs['display'] == 'block' ? 'block' : 'inline')
98
98
  end
@@ -104,7 +104,7 @@ class ::Olelo::Application
104
104
  end
105
105
  end
106
106
 
107
- get '/_/blahtex/:name', :name => /\w+\.\w+/ do
107
+ get '/_/blahtex/:name', name: /\w+\.\w+/ do
108
108
  begin
109
109
  file = Rack::File.new(nil)
110
110
  file.path = File.join(Config['blahtex_directory'], params[:name])
@@ -3,19 +3,19 @@ description 'Tag to redirect to other pages'
3
3
  Application.hook :render do |name, xml, layout|
4
4
  if params[:redirect] && layout
5
5
  links = [params[:redirect]].flatten.map do |link|
6
- %{<a href="#{escape_html build_path(link, :action => :edit)}">#{escape_html link}</a>}
6
+ %{<a href="#{escape_html build_path(link, action: :edit)}">#{escape_html link}</a>}
7
7
  end.join(' &#8594; ')
8
8
  xml.sub!(/<div id="menu">.*?<\/ul>/m, "\\0Redirected from #{links} &#8594; &#9678; ")
9
9
  end
10
10
  end
11
11
 
12
- Tag.define :redirect, :requires => 'to', :dynamic => true do |context, attrs|
12
+ Tag.define :redirect, requires: 'to', dynamic: true do |context, attrs|
13
13
  list = context.params[:redirect] || []
14
14
  to = attrs['to']
15
15
  if list.include?(to)
16
16
  raise "Invalid redirect to #{to}"
17
17
  else
18
18
  list << context.page.path
19
- throw :redirect, build_path(to, 'redirect[]' => list, :version => !context.page.head? && context.page)
19
+ throw :redirect, build_path(to, 'redirect[]' => list, version: !context.page.head? && context.page)
20
20
  end
21
21
  end
@@ -1,12 +1,12 @@
1
1
  description 'Wiki syntax tags for scripting'
2
2
  require 'evaluator'
3
3
 
4
- Tag.define :value, :requires => 'of', :immediate => true, :description => 'Print value' do |context, attrs|
4
+ Tag.define :value, requires: 'of', immediate: true, description: 'Print value' do |context, attrs|
5
5
  Evaluator.eval(attrs['of'], context.params)
6
6
  end
7
7
 
8
- Tag.define :def, :optional => %w(value args), :requires => 'name',
9
- :immediate => true, :description => 'Define variable' do |context, attrs, content|
8
+ Tag.define :def, optional: %w(value args), requires: 'name',
9
+ immediate: true, description: 'Define variable' do |context, attrs, content|
10
10
  name = attrs['name'].downcase
11
11
  if attrs['value']
12
12
  context.params[name] = Evaluator.eval(attrs['value'], context.params)
@@ -17,7 +17,7 @@ Tag.define :def, :optional => %w(value args), :requires => 'name',
17
17
  nil
18
18
  end
19
19
 
20
- Tag.define :call, :optional => '*', :requires => 'name', :immediate => true, :description => 'Call function' do |context, attrs|
20
+ Tag.define :call, optional: '*', requires: 'name', immediate: true, description: 'Call function' do |context, attrs|
21
21
  name = attrs['name'].downcase
22
22
  functions = context[:functions]
23
23
  raise NameError, "Function #{name} not found" if !functions || !functions[name]
@@ -27,7 +27,7 @@ Tag.define :call, :optional => '*', :requires => 'name', :immediate => true, :de
27
27
  hash[arg] = Evaluator.eval(attrs[arg], context.params)
28
28
  hash
29
29
  end
30
- result = nested_tags(context.subcontext(:params => args), content)
30
+ result = nested_tags(context.subcontext(params: args), content)
31
31
  if attrs['result']
32
32
  context.params[attrs['result']] = result
33
33
  nil
@@ -36,28 +36,28 @@ Tag.define :call, :optional => '*', :requires => 'name', :immediate => true, :de
36
36
  end
37
37
  end
38
38
 
39
- Tag.define :for, :optional => 'counter', :requires => %w(from to),
40
- :immediate => true, :limit => 50, :description => 'For loop' do |context, attrs, content|
39
+ Tag.define :for, optional: 'counter', requires: %w(from to),
40
+ immediate: true, limit: 50, description: 'For loop' do |context, attrs, content|
41
41
  to = attrs['to'].to_i
42
42
  from = attrs['from'].to_i
43
43
  raise 'Limits exceeded' if to - from > 10
44
44
  (from..to).map do |i|
45
45
  params = attrs['counter'] ? {attrs['counter'] => i} : {}
46
- nested_tags(context.subcontext(:params => params), content)
46
+ nested_tags(context.subcontext(params: params), content)
47
47
  end.join
48
48
  end
49
49
 
50
- Tag.define :repeat, :optional => 'counter', :requires => 'times',
51
- :immediate => true, :limit => 50, :description => 'Repeat loop' do |context, attrs, content|
50
+ Tag.define :repeat, optional: 'counter', requires: 'times',
51
+ immediate: true, limit: 50, description: 'Repeat loop' do |context, attrs, content|
52
52
  n = attrs['times'].to_i
53
53
  raise 'Limits exceeded' if n > 10
54
54
  (1..n).map do |i|
55
55
  params = attrs['counter'] ? {attrs['counter'] => i} : {}
56
- nested_tags(context.subcontext(:params => params), content)
56
+ nested_tags(context.subcontext(params: params), content)
57
57
  end.join
58
58
  end
59
59
 
60
- Tag.define :if, :requires => 'test', :immediate => true, :description => 'If statement' do |context, attrs, content|
60
+ Tag.define :if, requires: 'test', immediate: true, description: 'If statement' do |context, attrs, content|
61
61
  if Evaluator.eval(attrs['test'], context.params)
62
62
  nested_tags(context.subcontext, content)
63
63
  end