olelo 0.9.8 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|