olelo 0.9.8 → 0.9.9
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.
- data/.gitignore +1 -0
- data/Rakefile +44 -10
- data/config.ru +4 -1
- data/lib/olelo/application.rb +1 -54
- data/lib/olelo/helper.rb +12 -7
- data/lib/olelo/initializer.rb +10 -13
- data/lib/olelo/locale.rb +7 -12
- data/lib/olelo/locale.yml +1 -36
- data/lib/olelo/plugin.rb +0 -12
- data/lib/olelo/routing.rb +1 -1
- data/lib/olelo/templates.rb +2 -3
- data/lib/olelo/util.rb +1 -1
- data/lib/olelo/version.rb +1 -1
- data/{views → lib/olelo/views}/delete.slim +0 -0
- data/{views → lib/olelo/views}/deleted.slim +0 -0
- data/{views → lib/olelo/views}/edit.slim +3 -3
- data/{views → lib/olelo/views}/error.slim +0 -0
- data/{views → lib/olelo/views}/layout.slim +1 -1
- data/{views → lib/olelo/views}/login.slim +1 -1
- data/{views → lib/olelo/views}/move.slim +0 -0
- data/{views → lib/olelo/views}/not_found.slim +0 -0
- data/{views → lib/olelo/views}/profile.slim +0 -0
- data/lib/olelo/views/show.slim +8 -0
- data/lib/olelo/virtualfs.rb +5 -29
- data/plugins/aspects/changelog.rb +3 -5
- data/plugins/aspects/documentbrowser.rb +24 -2
- data/plugins/aspects/download.rb +12 -0
- data/plugins/aspects/gallery/main.rb +9 -0
- data/plugins/aspects/highlight.rb +11 -0
- data/plugins/aspects/image.rb +12 -0
- data/plugins/aspects/imageinfo.rb +36 -2
- data/plugins/aspects/main.rb +16 -1
- data/plugins/aspects/pageinfo.rb +20 -2
- data/plugins/aspects/source.rb +12 -0
- data/plugins/aspects/subpages.rb +17 -1
- data/plugins/aspects/text.rb +12 -0
- data/plugins/blog/main.rb +4 -4
- data/plugins/editor/preview.rb +16 -0
- data/plugins/editor/recaptcha.rb +19 -0
- data/plugins/filters/editsection.rb +19 -0
- data/plugins/filters/locale.yml +11 -16
- data/plugins/filters/toc.rb +12 -0
- data/{views → plugins/history}/changes.slim +0 -0
- data/{views → plugins/history}/compare.slim +2 -2
- data/{views → plugins/history}/history.slim +1 -1
- data/plugins/history/locale.yml +40 -0
- data/plugins/history/main.rb +67 -0
- data/plugins/history/script.js +2 -0
- data/{static/script/12-olelo.historytable.js → plugins/history/script/00-historytable.js} +0 -0
- data/plugins/history/script/init.js +7 -0
- data/plugins/login/persistent.rb +11 -0
- data/plugins/repositories/git_grep.rb +19 -2
- data/plugins/repositories/gitrb_repository.rb +8 -0
- data/plugins/repositories/rugged_repository.rb +10 -0
- data/plugins/security/acl.rb +23 -0
- data/plugins/security/private_wiki.rb +11 -0
- data/plugins/utils/assets.rb +15 -21
- data/plugins/utils/store.rb +40 -19
- data/static/{images/favicon.png → favicon.png} +0 -0
- data/static/script.js +3 -5
- data/static/script/init.js +0 -1
- data/static/themes/atlantis/screen.scss +3 -3
- data/static/themes/atlantis/style.css +1 -1
- data/test/templates_test.rb +3 -11
- metadata +47 -49
- data/plugins/aspects/locale.yml +0 -87
- data/plugins/editor/locale.yml +0 -20
- data/plugins/login/locale.yml +0 -8
- data/plugins/repositories/locale.yml +0 -16
- data/plugins/security/locale.yml +0 -24
- data/views/show.slim +0 -8
data/lib/olelo/plugin.rb
CHANGED
@@ -17,18 +17,6 @@ module Olelo
|
|
17
17
|
# Get failed plugins
|
18
18
|
attr_reader :failed
|
19
19
|
|
20
|
-
# Current plugin
|
21
|
-
def caller
|
22
|
-
last, stack = nil, []
|
23
|
-
Kernel.caller(1).each do |line|
|
24
|
-
if line =~ %r{^#{@dir}/(.+?)(?:\/main)?\.rb} && $1 != last
|
25
|
-
stack << @loaded[$1]
|
26
|
-
last = $1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
stack
|
30
|
-
end
|
31
|
-
|
32
20
|
# Get loaded plugins
|
33
21
|
def loaded
|
34
22
|
@loaded.values
|
data/lib/olelo/routing.rb
CHANGED
data/lib/olelo/templates.rb
CHANGED
@@ -19,10 +19,9 @@ module Olelo
|
|
19
19
|
def render(name, options = {}, &block)
|
20
20
|
locals = options.delete(:locals) || {}
|
21
21
|
name = "#{name}.slim"
|
22
|
-
|
23
|
-
id = [path, options.to_a].flatten.join('-')
|
22
|
+
id = [name, options.to_a].flatten.join('-')
|
24
23
|
template = Templates.with_caching(id) do
|
25
|
-
Slim::Template.new(
|
24
|
+
Slim::Template.new(name, options) { Templates.loader.call(name) }
|
26
25
|
end
|
27
26
|
template.render(self, locals, &block).html_safe
|
28
27
|
end
|
data/lib/olelo/util.rb
CHANGED
data/lib/olelo/version.rb
CHANGED
File without changes
|
File without changes
|
@@ -30,7 +30,7 @@ form action=build_path(page.new? ? nil : page.path) method='post'
|
|
30
30
|
br
|
31
31
|
label for='edit-comment' = :comment.t
|
32
32
|
&text#edit-comment name='comment' value=params[:comment] size='50'
|
33
|
-
=
|
33
|
+
= wrap_block :edit_buttons do
|
34
34
|
button&submit name='action' value='edit' = :save.t
|
35
35
|
button&submit name='action' value='edit-close' = :save_and_close.t
|
36
36
|
button&reset = :reset.t
|
@@ -48,7 +48,7 @@ form action=build_path(page.new? ? nil : page.path) method='post' enctype='multi
|
|
48
48
|
label for='upload-file' = :file.t
|
49
49
|
&file#upload-file.observe name='file'
|
50
50
|
br
|
51
|
-
=
|
51
|
+
= wrap_block :upload_buttons do
|
52
52
|
button&submit name='action' value='upload' = :save.t
|
53
53
|
button&submit name='action' value='upload-close' = :save_and_close.t
|
54
54
|
button&reset = :reset.t
|
@@ -64,7 +64,7 @@ form action=build_path(page.new? ? nil : page.path) method='post'
|
|
64
64
|
- else
|
65
65
|
&hidden name='version' value=page.version
|
66
66
|
= page.attribute_editor
|
67
|
-
=
|
67
|
+
= wrap_block :attributes_buttons do
|
68
68
|
.indent
|
69
69
|
button&submit name='action' value='attributes' = :save.t
|
70
70
|
button&submit name='action' value='attributes-close' = :save_and_close.t
|
File without changes
|
@@ -2,7 +2,7 @@ doctype 5
|
|
2
2
|
html.no-js lang=Olelo::Config['locale'].sub('_', '-') class={page && !page.head? ? 'archive' : nil} xmlns='http://www.w3.org/1999/xhtml'
|
3
3
|
head
|
4
4
|
title= Olelo::Config['title'] + ' - ' + title
|
5
|
-
link rel='shortcut icon' href=build_path('static/
|
5
|
+
link rel='shortcut icon' href=build_path('static/favicon.png?1') type='image/png'
|
6
6
|
= head
|
7
7
|
body
|
8
8
|
#header
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,8 @@
|
|
1
|
+
- title page.title
|
2
|
+
= define_block :version do
|
3
|
+
a.version href=build_path(page, version: page.version, force_version: true) title=page.version = page.version.short
|
4
|
+
= footer do
|
5
|
+
== :version_by.t(version: render_block(:version), author: escape_html(page.version.author.name), date: date(page.version.date))
|
6
|
+
- if !page.attributes['no_title']
|
7
|
+
h1= title
|
8
|
+
== content
|
data/lib/olelo/virtualfs.rb
CHANGED
@@ -20,30 +20,6 @@ module Olelo
|
|
20
20
|
read(name).bytesize
|
21
21
|
end
|
22
22
|
|
23
|
-
class VirtualFile
|
24
|
-
attr_reader :fs, :name
|
25
|
-
|
26
|
-
def initialize(fs, name)
|
27
|
-
@fs, @name = fs, name
|
28
|
-
end
|
29
|
-
|
30
|
-
def read
|
31
|
-
fs.read(name)
|
32
|
-
end
|
33
|
-
|
34
|
-
def real_path
|
35
|
-
fs.real_path(name)
|
36
|
-
end
|
37
|
-
|
38
|
-
def mtime
|
39
|
-
@mtime ||= fs.mtime(name)
|
40
|
-
end
|
41
|
-
|
42
|
-
def size
|
43
|
-
@size ||= fs.size(name)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
23
|
class Native < VirtualFS
|
48
24
|
def initialize(dir)
|
49
25
|
@dir = dir
|
@@ -59,7 +35,7 @@ module Olelo
|
|
59
35
|
names.map do |name|
|
60
36
|
Dir[real_path(name)].select {|f| File.file?(f) }
|
61
37
|
end.flatten.each do |f|
|
62
|
-
yield(
|
38
|
+
yield(self, f[@dir.length+1..-1])
|
63
39
|
end
|
64
40
|
end
|
65
41
|
|
@@ -89,7 +65,7 @@ module Olelo
|
|
89
65
|
def read(name)
|
90
66
|
@cache[name] ||=
|
91
67
|
begin
|
92
|
-
code, data = File.read(@file).split('__END__')
|
68
|
+
code, data = File.read(@file).split('__END__', 2)
|
93
69
|
content = nil
|
94
70
|
data.to_s.each_line do |line|
|
95
71
|
if line =~ /^@@\s*([^\s]+)\s*/
|
@@ -108,10 +84,10 @@ module Olelo
|
|
108
84
|
|
109
85
|
# @override
|
110
86
|
def glob(*names)
|
111
|
-
code, data = File.read(@file).split('__END__')
|
87
|
+
code, data = File.read(@file).split('__END__', 2)
|
112
88
|
data.to_s.each_line do |line|
|
113
|
-
if line =~ /^@@\
|
114
|
-
yield(
|
89
|
+
if line =~ /^@@\ss*([^\s]+)\s*/ && names.any? {|pattern| File.fnmatch(pattern, $1) }
|
90
|
+
yield(self, $1)
|
115
91
|
end
|
116
92
|
end
|
117
93
|
end
|
@@ -34,15 +34,13 @@ Aspect.create(:changelog, cacheable: true, hidden: true) do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
Application.hook :head do
|
37
|
-
%{<link rel="alternate" type="application/atom+xml" title="Sitewide Atom Changelog"
|
37
|
+
result = %{<link rel="alternate" type="application/atom+xml" title="Sitewide Atom Changelog"
|
38
38
|
href="#{escape_html build_path('/', aspect: 'changelog', format: 'atom')}"/>
|
39
39
|
<link rel="alternate" type="application/rss+xml" title="Sitewide RSS Changelog"
|
40
40
|
href="#{escape_html build_path('/', aspect: 'changelog', format: 'rss')}"/>}
|
41
|
-
|
42
|
-
|
43
|
-
Application.hook :head do
|
44
|
-
%{<link rel="alternate" type="application/atom+xml" title="#{escape_html page.path} Atom Changelog"
|
41
|
+
result << %{<link rel="alternate" type="application/atom+xml" title="#{escape_html page.path} Atom Changelog"
|
45
42
|
href="#{escape_html(build_path(page.path, aspect: 'changelog', format: 'atom'))}"/>
|
46
43
|
<link rel="alternate" type="application/rss+xml" title="#{escape_html page.path} RSS Changelog"
|
47
44
|
href="#{escape_html(build_path(page.path, aspect: 'changelog', format: 'rss'))}"/>} if page && !page.new? && !page.root?
|
45
|
+
result
|
48
46
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Document browser aspect'
|
2
3
|
dependencies 'utils/shell'
|
3
4
|
|
@@ -18,13 +19,13 @@ Aspect.create(:documentbrowser, priority: 1, layout: true, cacheable: true, acce
|
|
18
19
|
@page = page
|
19
20
|
@page_nr = [context.params[:page].to_i, 1].max
|
20
21
|
@page_count = count_pages
|
21
|
-
render :
|
22
|
+
render :documentbrowser
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
26
|
__END__
|
26
27
|
|
27
|
-
@@
|
28
|
+
@@ documentbrowser.slim
|
28
29
|
= pagination(@page, @page_count, @page_nr, aspect: 'documentbrowser')
|
29
30
|
p
|
30
31
|
img src=build_path(@page, aspect: 'image', geometry: '480x>', trim: 1, page: @page_nr)
|
@@ -55,3 +56,24 @@ table
|
|
55
56
|
td= :download.t
|
56
57
|
td
|
57
58
|
a href=build_path(@page, aspect: 'download') = :download.t
|
59
|
+
@@ locale.yml
|
60
|
+
cs_CZ:
|
61
|
+
aspect_documentbrowser: 'Document Browser'
|
62
|
+
download: 'Stáhnout'
|
63
|
+
information: 'Informace'
|
64
|
+
type: 'Typ'
|
65
|
+
de:
|
66
|
+
aspect_documentbrowser: 'Dokumentenbrowser'
|
67
|
+
download: 'Herunterladen'
|
68
|
+
information: 'Information'
|
69
|
+
type: 'Typ'
|
70
|
+
en:
|
71
|
+
aspect_documentbrowser: 'Document Browser'
|
72
|
+
download: 'Download'
|
73
|
+
information: 'Information'
|
74
|
+
type: 'Type'
|
75
|
+
fr:
|
76
|
+
aspect_documentbrowser: "Explorateur de fichier"
|
77
|
+
download: "Télécharger"
|
78
|
+
information: "Information"
|
79
|
+
type: "Type"
|
data/plugins/aspects/download.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Download aspect'
|
2
3
|
|
3
4
|
Aspect.create(:download) do
|
@@ -9,3 +10,14 @@ Aspect.create(:download) do
|
|
9
10
|
page.content
|
10
11
|
end
|
11
12
|
end
|
13
|
+
|
14
|
+
__END__
|
15
|
+
@@ locale.yml
|
16
|
+
cs_CZ:
|
17
|
+
aspect_download: 'Stažení (neupraveno)'
|
18
|
+
de:
|
19
|
+
aspect_download: 'Herunterladen'
|
20
|
+
en:
|
21
|
+
aspect_download: 'Raw Download'
|
22
|
+
fr:
|
23
|
+
aspect_download: "Téléchargement brut"
|
@@ -32,3 +32,12 @@ table.gallery
|
|
32
32
|
a.fancybox href=info_path rel="gallery" title=description
|
33
33
|
img src=thumb_path alt=''
|
34
34
|
a.title href=info_path = description
|
35
|
+
@@ locale.yml
|
36
|
+
cs_CZ:
|
37
|
+
aspect_gallery: 'Galerie'
|
38
|
+
de:
|
39
|
+
aspect_gallery: 'Bildergalerie'
|
40
|
+
en:
|
41
|
+
aspect_gallery: 'Image Gallery'
|
42
|
+
fr:
|
43
|
+
aspect_gallery: "Galerie d'images"
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Source code highlighting aspect'
|
2
3
|
dependencies 'utils/pygments'
|
3
4
|
|
@@ -6,3 +7,13 @@ Aspect.create(:highlight, priority: 2, layout: true, cacheable: true) do
|
|
6
7
|
def call(context, page); Pygments.pygmentize(page.content, Pygments.file_format(page.name)); end
|
7
8
|
end
|
8
9
|
|
10
|
+
__END__
|
11
|
+
@@ locale.yml
|
12
|
+
cs_CZ:
|
13
|
+
aspect_highlight: 'Zvýrazněný zdroj'
|
14
|
+
de:
|
15
|
+
aspect_highlight: 'Quellcode mit Syntaxhighlighting'
|
16
|
+
en:
|
17
|
+
aspect_highlight: 'Highlighted Source'
|
18
|
+
fr:
|
19
|
+
aspect_highlight: "Source mise en valeur"
|
data/plugins/aspects/image.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Image aspect'
|
2
3
|
dependencies 'utils/image_magick'
|
3
4
|
|
@@ -39,3 +40,14 @@ Aspect.create(:image, priority: 5, accepts: %r{^application/pdf$|postscript$|^im
|
|
39
40
|
end
|
40
41
|
end
|
41
42
|
end
|
43
|
+
|
44
|
+
__END__
|
45
|
+
@@ locale.yml
|
46
|
+
cs_CZ:
|
47
|
+
aspect_image: 'Stažení obrázku'
|
48
|
+
de:
|
49
|
+
aspect_image: 'Bild'
|
50
|
+
en:
|
51
|
+
aspect_image: 'Raw Image'
|
52
|
+
fr:
|
53
|
+
aspect_image: "Image brute"
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Image information aspect'
|
2
3
|
dependencies 'utils/image_magick'
|
3
4
|
|
@@ -8,12 +9,12 @@ Aspect.create(:imageinfo, priority: 1, layout: true, cacheable: true, accepts: %
|
|
8
9
|
@type = identify[0]
|
9
10
|
@geometry = "#{identify[1]}x#{identify[2]}"
|
10
11
|
@exif = identify[3..-1].to_a.map {|line| line.sub(/^exif:/, '').split('=', 2) }
|
11
|
-
render :
|
12
|
+
render :imageinfo
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
__END__
|
16
|
-
@@
|
17
|
+
@@ imageinfo.slim
|
17
18
|
p
|
18
19
|
a href=build_path(@page, aspect: 'image')
|
19
20
|
img src=build_path(@page, aspect: 'image', geometry: '640x480>') alt=@page.title
|
@@ -54,3 +55,36 @@ table
|
|
54
55
|
tr
|
55
56
|
td= key
|
56
57
|
td= value
|
58
|
+
@@ locale.yml
|
59
|
+
cs_CZ:
|
60
|
+
aspect_imageinfo: 'Informace o obrázku'
|
61
|
+
entry: 'Položka'
|
62
|
+
exif: 'Informace EXIF'
|
63
|
+
geometry: 'Geometrie'
|
64
|
+
information: 'Informace'
|
65
|
+
type: 'Typ'
|
66
|
+
value: 'Hodnota'
|
67
|
+
de:
|
68
|
+
aspect_imageinfo: 'Bild-Information'
|
69
|
+
entry: 'Eintrag'
|
70
|
+
exif: 'EXIF-Information'
|
71
|
+
geometry: 'Geometrie'
|
72
|
+
information: 'Information'
|
73
|
+
type: 'Typ'
|
74
|
+
value: 'Wert'
|
75
|
+
en:
|
76
|
+
aspect_imageinfo: 'Image Information'
|
77
|
+
entry: 'Entry'
|
78
|
+
exif: 'EXIF Information'
|
79
|
+
geometry: 'Geometry'
|
80
|
+
information: 'Information'
|
81
|
+
type: 'Type'
|
82
|
+
value: 'Value'
|
83
|
+
fr:
|
84
|
+
aspect_imageinfo: "Information sur l'image"
|
85
|
+
entry: "Entrée"
|
86
|
+
exif: "Information EXIF"
|
87
|
+
geometry: "Geometrie"
|
88
|
+
information: "Information"
|
89
|
+
type: "Type"
|
90
|
+
value: "Valeur"
|
data/plugins/aspects/main.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Aspect subsystem'
|
2
3
|
dependencies 'utils/cache'
|
3
4
|
|
@@ -175,7 +176,6 @@ class ::Olelo::Application
|
|
175
176
|
|
176
177
|
self.response.header.merge!(header)
|
177
178
|
|
178
|
-
@menu_versions = true
|
179
179
|
layout ? render(:show, locals: {content: content}) : content
|
180
180
|
rescue Aspect::NotAvailable => ex
|
181
181
|
cache_control no_cache: true
|
@@ -199,3 +199,18 @@ class ::Olelo::Application
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
end
|
202
|
+
|
203
|
+
__END__
|
204
|
+
@@ locale.yml
|
205
|
+
cs_CZ:
|
206
|
+
aspect_not_available: 'Vzhled %{aspect} není k dispozici pro stránku %{page} s typem %{type}.'
|
207
|
+
attribute_aspect: 'Přednastavený vzhled'
|
208
|
+
de:
|
209
|
+
aspect_not_available: 'Aspekt %{aspect} für die Seite %{page} mit dem Typ %{type} ist nicht verfügbar.'
|
210
|
+
attribute_aspect: 'Standard-Ansicht'
|
211
|
+
en:
|
212
|
+
aspect_not_available: 'Aspect %{aspect} is not available for page %{page} with type %{type}.'
|
213
|
+
attribute_aspect: 'Default Aspect'
|
214
|
+
fr:
|
215
|
+
aspect_not_available: "L'aspect %{aspect} n'est pas disponible pour la page %{page} avec le type %{type}."
|
216
|
+
attribute_aspect: "Aspect par défaut"
|
data/plugins/aspects/pageinfo.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
description 'Page information aspect'
|
2
3
|
|
3
4
|
Aspect.create(:pageinfo, priority: 4, layout: true, cacheable: true) do
|
4
5
|
def call(context, page)
|
5
6
|
@page = page
|
6
|
-
render :
|
7
|
+
render :pageinfo
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
10
11
|
__END__
|
11
|
-
@@
|
12
|
+
@@ pageinfo.slim
|
12
13
|
table
|
13
14
|
tbody
|
14
15
|
tr
|
@@ -35,3 +36,20 @@ table
|
|
35
36
|
td= :download.t
|
36
37
|
td
|
37
38
|
a href=build_path(@page, aspect: 'download') = :download.t
|
39
|
+
@@ locale.yml
|
40
|
+
cs_CZ:
|
41
|
+
aspect_pageinfo: 'Informace o stránce'
|
42
|
+
download: 'Stáhnout'
|
43
|
+
type: 'Typ'
|
44
|
+
de:
|
45
|
+
aspect_pageinfo: 'Seiten-Information'
|
46
|
+
download: 'Herunterladen'
|
47
|
+
type: 'Typ'
|
48
|
+
en:
|
49
|
+
aspect_pageinfo: 'Page Information'
|
50
|
+
download: 'Download'
|
51
|
+
type: 'Type'
|
52
|
+
fr:
|
53
|
+
aspect_pageinfo: "Page d'information"
|
54
|
+
download: "Télécharger"
|
55
|
+
type: "Type"
|