olelo 0.9.2 → 0.9.3
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/{doc/LICENSE → LICENSE} +0 -0
- data/README.creole +127 -0
- data/Rakefile +2 -2
- data/bin/olelo +55 -2
- data/config.ru +21 -4
- data/config/aspects.rb +9 -7
- data/config/config.yml.default +1 -0
- data/lib/olelo.rb +1 -0
- data/lib/olelo/application.rb +25 -14
- data/lib/olelo/config.rb +1 -1
- data/lib/olelo/extensions.rb +0 -12
- data/lib/olelo/helper.rb +0 -4
- data/lib/olelo/initializer.rb +4 -7
- data/lib/olelo/locale.yml +0 -3
- data/lib/olelo/page.rb +1 -1
- data/lib/olelo/plugin.rb +5 -4
- data/lib/olelo/routing.rb +15 -12
- data/lib/olelo/user.rb +10 -24
- data/lib/olelo/util.rb +4 -11
- data/lib/olelo/version.rb +1 -1
- data/lib/olelo/virtualfs.rb +11 -19
- data/olelo.gemspec +5 -2
- data/plugins/aspects/locale.yml +5 -0
- data/plugins/aspects/main.rb +8 -4
- data/plugins/authentication/yamlfile.rb +1 -1
- data/plugins/blog/main.rb +5 -5
- data/plugins/editor/ace/init.js +17 -0
- data/plugins/editor/ace/main.rb +7 -0
- data/plugins/editor/markup/main.rb +1 -1
- data/plugins/editor/markup/script.js +8 -8
- data/plugins/editor/markup/script/init.js +3 -3
- data/plugins/editor/recaptcha.rb +2 -2
- data/plugins/filters/interwiki.rb +0 -1
- data/plugins/gallery/main.rb +1 -1
- data/plugins/login/persistent.rb +2 -2
- data/plugins/misc/fancybox/script.js +1 -1
- data/plugins/misc/fancybox/script/init.js +2 -2
- data/plugins/misc/variables.rb +2 -2
- data/plugins/tags/math.rb +6 -7
- data/plugins/tags/scripting.rb +1 -1
- data/plugins/tags/tabs.rb +1 -1
- data/plugins/treeview/script.js +2 -2
- data/plugins/treeview/script/init.js +26 -24
- data/plugins/utils/assets.rb +20 -14
- data/static/themes/atlantis/images/bg/header.jpg +0 -0
- data/static/themes/atlantis/images/bg/header_gray.jpg +0 -0
- data/views/layout.slim +0 -1
- data/views/login.slim +3 -2
- metadata +127 -34
- data/README.markdown +0 -104
- data/doc/AUTHORS +0 -7
- data/lib/rack/olelo_patches.rb +0 -33
- data/lib/yard/addons.rb +0 -1
- data/lib/yard/addons/hook_handler.rb +0 -25
- data/lib/yard/addons/override_tag.rb +0 -14
- data/lib/yard/addons/route_handler.rb +0 -33
- data/lib/yard/addons/sanitize_anchor.rb +0 -16
@@ -1,10 +1,10 @@
|
|
1
|
-
(function(){var
|
2
|
-
a.createTextRange();a.setEndPoint("EndToStart",b);b=a.text.length}c=b+c}else throw"Unable to get selection range.";return{start:b,end:c}},getSelectionStart:function(a){return this.getSelectionRange(a).start},getSelectionEnd:function(a){return this.getSelectionRange(a).end},setSelectionRange:function(a,b,c){var d;a.focus();if(typeof c==="undefined")c=b;if(typeof a.selectionStart!=="undefined")a.setSelectionRange(b,c);else if(
|
3
|
-
1;b-=d.slice(0,b).split("\n").length-1;a.move("character",b);a.moveEnd("character",c);a.select()}else throw"Unable to set selection range.";},getSelectedText:function(a){var b=this.getSelectionRange(a);return a.value.substring(b.start,b.end)},insertText:function(a,b,c,d,
|
4
|
-
b,d.start,d.end,c)},wrapSelectedText:function(a,b,c,d){b=b+this.getSelectedText(a)+c;this.replaceSelectedText(a,b,d)}}}();window.Selection=
|
5
|
-
(function(
|
6
|
-
b,c)})},replaceSelectedText:function(
|
1
|
+
(function(){var e=function(){var g=typeof document.selection!=="undefined"&&typeof document.selection.createRange!=="undefined";return{getSelectionRange:function(a){var b,c,d;a.focus();if(typeof a.selectionStart!=="undefined"){b=a.selectionStart;c=a.selectionEnd}else if(g){b=document.selection.createRange();c=b.text.length;if(b.parentElement()!==a)throw"Unable to get selection range.";if(a.type==="textarea"){d=b.duplicate();d.moveToElementText(a);d.setEndPoint("EndToEnd",b);b=d.text.length-c}else{a=
|
2
|
+
a.createTextRange();a.setEndPoint("EndToStart",b);b=a.text.length}c=b+c}else throw"Unable to get selection range.";return{start:b,end:c}},getSelectionStart:function(a){return this.getSelectionRange(a).start},getSelectionEnd:function(a){return this.getSelectionRange(a).end},setSelectionRange:function(a,b,c){var d;a.focus();if(typeof c==="undefined")c=b;if(typeof a.selectionStart!=="undefined")a.setSelectionRange(b,c);else if(g){d=a.value;a=a.createTextRange();c-=b+d.slice(b+1,c).split("\n").length-
|
3
|
+
1;b-=d.slice(0,b).split("\n").length-1;a.move("character",b);a.moveEnd("character",c);a.select()}else throw"Unable to set selection range.";},getSelectedText:function(a){var b=this.getSelectionRange(a);return a.value.substring(b.start,b.end)},insertText:function(a,b,c,d,h){d=d||c;var i=c+b.length,l=a.value.substring(0,c);d=a.value.substr(d);a.value=l+b+d;h===true?this.setSelectionRange(a,c,i):this.setSelectionRange(a,i)},replaceSelectedText:function(a,b,c){var d=this.getSelectionRange(a);this.insertText(a,
|
4
|
+
b,d.start,d.end,c)},wrapSelectedText:function(a,b,c,d){b=b+this.getSelectedText(a)+c;this.replaceSelectedText(a,b,d)}}}();window.Selection=e})();
|
5
|
+
(function(e){e.fn.extend({getSelectionRange:function(){return Selection.getSelectionRange(this[0])},getSelectionStart:function(){return Selection.getSelectionStart(this[0])},getSelectionEnd:function(){return Selection.getSelectionEnd(this[0])},getSelectedText:function(){return Selection.getSelectedText(this[0])},setSelectionRange:function(g,a){return this.each(function(){Selection.setSelectionRange(this,g,a)})},insertText:function(g,a,b,c){return this.each(function(){Selection.insertText(this,g,a,
|
6
|
+
b,c)})},replaceSelectedText:function(g,a){return this.each(function(){Selection.replaceSelectedText(this,g,a)})},wrapSelectedText:function(g,a,b){return this.each(function(){Selection.wrapSelectedText(this,g,a,b)})}})})(jQuery);(function(e){var g={creole:{link:["[[","link text","]]"],bold:["**","bold text","**"],italic:["//","italic text","//"],ul:["* ","list item","",true],ol:["# ","list item","",true],h1:["= ","headline","",true],h2:["== ","headline","",true],h3:["=== ","headline","",true],sub:["~~","subscript","~~"],sup:["^^","superscript","^^"],del:["--","deleted text","--"],ins:["++","inserted text","++"],image:["{{","image","}}"],preformatted:["{{{","preformatted","}}}"]},markdown:{link:function(a){return(a=prompt("link target:",
|
7
7
|
a))?["[","link text","]("+a+")"]:null},bold:["**","bold text","**"],italic:["*","italic text","*"],ul:["* ","list item","",true],ol:["1. ","list item","",true],h1:["","headline","\n========",true],h2:["","headline","\n--------",true],image:function(a){return(a=prompt("image path:",a))?[""]:null},preformatted:[" ","preformatted","",true]},orgmode:{bold:["*","bold text","*"],italic:["/","italic text","/"],ul:["- ","list item",""],ol:["1. ","list item",""],h1:["* ","headline",
|
8
8
|
""],h2:["** ","headline",""],h3:["*** ","headline",""]},textile:{link:function(a){return(a=prompt("link target:",a))?['"',"link text",'":'+a]:null},bold:["*","bold text","*"],italic:["_","italic text","_"],ul:["* ","list item","",true],ol:["# ","list item","",true],h1:["h1. ","headline","",true],h2:["h2. ","headline","",true],h3:["h3. ","headline","",true],em:["_","emphasized text","_"],sub:["~","subscript","~"],sup:["^","superscript","^"],del:["-","deleted text","-"],ins:["+","inserted text","+"],
|
9
|
-
image:["!","image","!"]}};
|
10
|
-
0&&
|
9
|
+
image:["!","image","!"]}};e.fn.markupEditor=function(a){if(a=g[a]){var b=e('<ul class="button-bar" id="markup-editor"/>'),c=[];for(k in a)c.push(k);c.sort();for(var d=0;d<c.length;++d)b.append('<li><a href="#" id="markup-editor-'+c[d]+'">'+c[d]+"</a></li>");this.before(b);var h=this;e("a",b).click(function(){var i=a[this.id.substr(14)],l=h.getSelectedText();if(typeof i=="function")i=i(l);if(i){var f=h.getSelectionRange(),j=i[0],n=i[1],m=i[2];if(i[3]){h.setSelectionRange(f.start-1,f.start);if(f.start!==
|
10
|
+
0&&h.getSelectedText()!="\n")j="\n"+j;h.setSelectionRange(f.end,f.end+1);if(h.getSelectedText()!="\n")m+="\n"}if(f.start==f.end){h.insertText(j+n+m,f.start,f.start,false);h.setSelectionRange(f.start+j.length,f.start+j.length+n.length)}else h.insertText(j+l+m,f.start,f.end,false)}return false})}}})(jQuery);$(function(){var e=Olelo.page_mime;if(e=="application/x-empty"||e=="inode/directory")e=Olelo.default_mime;(e=/text\/x-(\w+)/.exec(e))&&$("#edit-content").markupEditor(e[1])});
|
@@ -1,10 +1,10 @@
|
|
1
|
-
|
1
|
+
$(function() {
|
2
2
|
var mime = Olelo.page_mime;
|
3
3
|
if (mime == 'application/x-empty' || mime == 'inode/directory') {
|
4
|
-
|
4
|
+
mime = Olelo.default_mime;
|
5
5
|
}
|
6
6
|
var match = /text\/x-(\w+)/.exec(mime);
|
7
7
|
if (match) {
|
8
8
|
$('#edit-content').markupEditor(match[1]);
|
9
9
|
}
|
10
|
-
}
|
10
|
+
});
|
data/plugins/editor/recaptcha.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
description 'reCAPTCHA
|
1
|
+
description 'Adds a reCAPTCHA to the editor to avoid spamming'
|
2
2
|
require 'net/http'
|
3
3
|
|
4
4
|
RECAPTCHA_PUBLIC = Config['recaptcha.public']
|
5
5
|
RECAPTCHA_PRIVATE = Config['recaptcha.private']
|
6
6
|
|
7
7
|
class ::Olelo::Application
|
8
|
-
hook :
|
8
|
+
hook :head do
|
9
9
|
%{<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"/>
|
10
10
|
<script type="text/javascript">
|
11
11
|
$(function() {
|
data/plugins/gallery/main.rb
CHANGED
@@ -9,7 +9,7 @@ Aspects::Aspect.create(:gallery, :priority => 3, :layout => true, :hidden => tru
|
|
9
9
|
per_page = @per_row * 4
|
10
10
|
@page_nr = [context.params[:page].to_i, 1].max
|
11
11
|
@page = page
|
12
|
-
@images = @page.children.select {|
|
12
|
+
@images = @page.children.select {|p| p.mime.image? }
|
13
13
|
@page_count = @images.size / per_page + 1
|
14
14
|
@images = @images[((@page_nr - 1) * per_page) ... (@page_nr * per_page)].to_a
|
15
15
|
render :gallery
|
data/plugins/login/persistent.rb
CHANGED
@@ -8,7 +8,7 @@ class ::Olelo::Application
|
|
8
8
|
if !User.current
|
9
9
|
token = request.cookies[TOKEN_NAME]
|
10
10
|
if token
|
11
|
-
|
11
|
+
hash, user = token.split('-', 2)
|
12
12
|
User.current = User.find(user) if sha256(user + Config['rack.session_secret']) == hash
|
13
13
|
end
|
14
14
|
end
|
@@ -22,7 +22,7 @@ class ::Olelo::Application
|
|
22
22
|
after :action do |method, path|
|
23
23
|
if path == '/login'
|
24
24
|
if User.logged_in? && params[:persistent]
|
25
|
-
token = "#{
|
25
|
+
token = "#{sha256(User.current.name + Config['rack.session_secret'])}-#{User.current.name}"
|
26
26
|
response.set_cookie(TOKEN_NAME, :value => token, :expires => Time.now + TOKEN_LIFETIME)
|
27
27
|
end
|
28
28
|
elsif path == '/logout'
|
@@ -34,4 +34,4 @@ if(h.opacity)n.opacity=1;o.empty().hide();D.prop=1;a(D).animate({prop:0},{durati
|
|
34
34
|
j.append(k=a('<div id="fancybox-content"></div>'),w=a('<a id="fancybox-close"></a>'),o=a('<div id="fancybox-title"></div>'),x=a('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),C=a('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));w.click(a.fancybox.close);f.click(a.fancybox.cancel);x.click(function(c){c.preventDefault();a.fancybox.prev()});C.click(function(c){c.preventDefault();a.fancybox.next()});
|
35
35
|
a.fn.mousewheel&&d.bind("mousewheel.fb",function(c,g){if(m)c.preventDefault();else if(a(c.target).get(0).clientHeight==0||a(c.target).get(0).scrollHeight===a(c.target).get(0).clientHeight){c.preventDefault();a.fancybox[g>0?"prev":"next"]()}});a.support.opacity||d.addClass("fancybox-ie");if(M){f.addClass("fancybox-ie6");d.addClass("fancybox-ie6");a('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(j)}}};
|
36
36
|
a.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
|
37
|
-
easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};a(document).ready(function(){a.fancybox.init()})})(jQuery)
|
37
|
+
easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};a(document).ready(function(){a.fancybox.init()})})(jQuery);$(function(){function a(){$("a.fancybox").each(function(){var b=this.href.replace(/aspect=\w+/g,"");this.href=b+(b.indexOf("?")<0?"?":"&")+"aspect=image&geometry=800x800>"});$("a.fancybox").fancybox({transitionIn:"none",transitionOut:"none",titlePosition:"over",titleFormat:function(b,f,e){return'<span id="fancybox-title-over">'+(e+1)+" / "+f.length+" "+(b?b:"")+"</span>"}})}$("#content").bind("pageLoaded",a);a()});
|
data/plugins/misc/variables.rb
CHANGED
@@ -2,7 +2,7 @@ description 'Export variables to context and javascript'
|
|
2
2
|
dependencies 'aspects'
|
3
3
|
|
4
4
|
def self.exported_variables(page)
|
5
|
-
|
5
|
+
{
|
6
6
|
'base_path' => Config['base_path'],
|
7
7
|
'page_name' => page.name,
|
8
8
|
'page_new' => page.new?,
|
@@ -23,7 +23,7 @@ Aspects::Context.hook(:initialized) do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Export variables to javascript for client extensions
|
26
|
-
Application.hook :head do
|
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
29
|
%{<script type="text/javascript">Olelo = #{escape_javascript(vars.to_json)};</script>}
|
data/plugins/tags/math.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
description '
|
1
|
+
description 'Wiki tags for TeX math rendering'
|
2
2
|
dependencies 'utils/image_magick'
|
3
3
|
|
4
4
|
class MathRenderer
|
@@ -98,18 +98,17 @@ Tag.define :math, :optional => 'display' do |context, attrs, code|
|
|
98
98
|
end
|
99
99
|
|
100
100
|
class ::Olelo::Application
|
101
|
-
hook :
|
101
|
+
hook :head do
|
102
102
|
if page && Config['math_renderer'] == 'mathjax'
|
103
103
|
%{<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"/>}
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
get '/_/blahtex/:name', :name =>
|
107
|
+
get '/_/blahtex/:name', :name => /\w+\.\w+/ do
|
108
108
|
begin
|
109
|
-
|
110
|
-
file = File.join(Config['blahtex_directory'], params[:name])
|
111
|
-
|
112
|
-
halt BlockFile.open(file, 'rb')
|
109
|
+
file = Rack::File.new(nil)
|
110
|
+
file.path = File.join(Config['blahtex_directory'], params[:name])
|
111
|
+
file.serving(env)
|
113
112
|
rescue => ex
|
114
113
|
ImageMagick.label(ex.message)
|
115
114
|
end
|
data/plugins/tags/scripting.rb
CHANGED
data/plugins/tags/tabs.rb
CHANGED
data/plugins/treeview/script.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
(function(c){c.fn.treeView=function(a){function l(b,e){if(a.stateStore){var d=jStorage.get(a.stateStore,[]);if(e)c.inArray(b,d)<0&&d.push(b);else d=c.grep(d,function(f){return f!=b});jStorage.set(a.stateStore,d)}}function m(b){var e=b[2],d=c('<li><div class="'+(b[0]?"hitarea collapsed":"placeholder")+'"><div class="arrow"/><div class="'+b[1]+'"/></div><a href="'+e+'">'+b[3]+"</a></li>"),f=d.children(".hitarea");d.data("name",b[3]);f.click(function(){if(f.hasClass("collapsed")){n(d,e);f.removeClass("collapsed").addClass("expanded")}else{d.children("ul").hide();
|
2
2
|
f.removeClass("expanded").addClass("collapsed")}l(e,f.hasClass("expanded"));return false});if(a.stateStore&&c.inArray(e,jStorage.get(a.stateStore,[]))>=0){n(d,e);f.removeClass("collapsed").addClass("expanded")}return d}function n(b,e){function d(i){var j=c("<ul/>");c.each(i,function(o,k){j.append(m(k))});e==a.root&&b.empty();b.children("ul").remove();b.append(j)}function f(i){g&&jStorage.set(g,i);var j={},o=[];c.each(i,function(k,h){j[h[3]]=h});c("> ul > li",b).each(function(){var k=c(this),h=k.data("name");
|
3
3
|
if(j[h])delete j[h];else k.remove();o.push(c(this))});c.each(j,function(k,h){var p=false;c.each(o,function(t,q){if(k<q.data("name")){p=true;q.before(m(h));return false}});p||b.children("ul").append(m(h))})}function r(){setTimeout(function(){a.ajax(e,f,function(){g&&jStorage.remove(g)})},a.delay)}var g=a.cacheStore?a.cacheStore+":"+e:null;if(b.children("ul").length!==0){b.children("ul").show();r()}else{var s=g?jStorage.get(g):null;if(s){d(s);r()}else{b.addClass("wait");a.ajax(e,function(i){b.removeClass("wait");
|
4
|
-
d(i);g&&jStorage.set(g,i)},function(){b.removeClass("wait")})}}}a||(a={});if(!a.root)a.root="/";if(!a.url)a.url="/treeview.json";if(!a.delay)a.delay=2E3;if(!a.ajax)a.ajax=function(b,e,d){c.ajax({url:a.url,data:{dir:b},success:e,error:d,dataType:"json"})};this.each(function(){n(c(this),a.root)})}})(jQuery)
|
5
|
-
$("#treeview").treeView({stateStore:"treeview-state",cacheStore:"treeview-cache",root:Olelo.base_path,ajax:function(c,a,l){$.ajax({url:c,data:{aspect:"treeview.json"},success:a,error:l,dataType:"json"})}});
|
4
|
+
d(i);g&&jStorage.set(g,i)},function(){b.removeClass("wait")})}}}a||(a={});if(!a.root)a.root="/";if(!a.url)a.url="/treeview.json";if(!a.delay)a.delay=2E3;if(!a.ajax)a.ajax=function(b,e,d){c.ajax({url:a.url,data:{dir:b},success:e,error:d,dataType:"json"})};this.each(function(){n(c(this),a.root)})}})(jQuery);$(function(){$.translations({en:{menu:"Menu",tree:"Tree"},de:{menu:"Men\u00fc",tree:"Baumansicht"},cs:{menu:"Menu",tree:"Strom"}});$("#sidebar").wrapInner('<div id="sidebar-menu"/>').prepend('<div id="sidebar-tree" style="display: none"><h1>'+$.t("tree")+'</h1><div id="treeview"/></div>');$("#menu").prepend('<ul><li class="selected" id="sidebar-tab-menu"><a href="#sidebar-menu">'+$.t("menu")+'</a></li><li id="sidebar-tab-tree"><a href="#sidebar-tree">'+$.t("tree")+"</a></li></ul>");$("#sidebar-tab-menu, #sidebar-tab-tree").tabWidget({store:"sidebar-tab"});
|
5
|
+
$("#treeview").treeView({stateStore:"treeview-state",cacheStore:"treeview-cache",root:Olelo.base_path,ajax:function(c,a,l){$.ajax({url:c,data:{aspect:"treeview.json"},success:a,error:l,dataType:"json"})}})});
|
@@ -1,25 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
}
|
1
|
+
$(function() {
|
2
|
+
// Add treeview translations
|
3
|
+
$.translations({
|
4
|
+
en: {
|
5
|
+
menu: 'Menu',
|
6
|
+
tree: 'Tree'
|
7
|
+
},
|
8
|
+
de: {
|
9
|
+
menu: 'Menü',
|
10
|
+
tree: 'Baumansicht'
|
11
|
+
},
|
12
|
+
cs: {
|
13
|
+
menu: 'Menu',
|
14
|
+
tree: 'Strom'
|
15
|
+
}
|
16
|
+
});
|
16
17
|
|
17
|
-
// Start tree view
|
18
|
-
$('#sidebar').wrapInner('<div id="sidebar-menu"/>').prepend('<div id="sidebar-tree" style="display: none"><h1>' + $.t('tree') +
|
19
|
-
|
20
|
-
$('#menu').prepend('<ul><li class="selected" id="sidebar-tab-menu"><a href="#sidebar-menu">' + $.t('menu') +
|
21
|
-
|
22
|
-
$('#sidebar-tab-menu, #sidebar-tab-tree').tabWidget({store: 'sidebar-tab'});
|
23
|
-
$('#treeview').treeView({stateStore: 'treeview-state', cacheStore: 'treeview-cache', root: Olelo.base_path, ajax: function(path, success, error) {
|
24
|
-
|
25
|
-
}});
|
18
|
+
// Start tree view
|
19
|
+
$('#sidebar').wrapInner('<div id="sidebar-menu"/>').prepend('<div id="sidebar-tree" style="display: none"><h1>' + $.t('tree') +
|
20
|
+
'</h1><div id="treeview"/></div>');
|
21
|
+
$('#menu').prepend('<ul><li class="selected" id="sidebar-tab-menu"><a href="#sidebar-menu">' + $.t('menu') +
|
22
|
+
'</a></li><li id="sidebar-tab-tree"><a href="#sidebar-tree">' + $.t('tree') + '</a></li></ul>');
|
23
|
+
$('#sidebar-tab-menu, #sidebar-tab-tree').tabWidget({store: 'sidebar-tab'});
|
24
|
+
$('#treeview').treeView({stateStore: 'treeview-state', cacheStore: 'treeview-cache', root: Olelo.base_path, ajax: function(path, success, error) {
|
25
|
+
$.ajax({url: path, data: { aspect: 'treeview.json' }, success: success, error: error, dataType: 'json'});
|
26
|
+
}});
|
27
|
+
});
|
data/plugins/utils/assets.rb
CHANGED
@@ -10,20 +10,20 @@ class ::Olelo::Application
|
|
10
10
|
|
11
11
|
attr_reader? :disable_assets
|
12
12
|
|
13
|
-
hook :
|
13
|
+
hook :head, 2 do
|
14
|
+
return if disable_assets?
|
14
15
|
js = Application.scripts['js']
|
15
|
-
if js && !disable_assets?
|
16
|
-
path = build_path "_/assets/assets.js?#{js.first.to_i}"
|
17
|
-
%{<script src="#{escape_html path}" type="text/javascript"/>}
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
hook :head, 1 do
|
22
16
|
css = Application.scripts['css']
|
23
|
-
|
17
|
+
result = ''
|
18
|
+
if css
|
24
19
|
path = build_path "_/assets/assets.css?#{css.first.to_i}"
|
25
|
-
%{<link rel="stylesheet" href="#{escape_html path}" type="text/css"/>}
|
20
|
+
result << %{<link rel="stylesheet" href="#{escape_html path}" type="text/css"/>}
|
21
|
+
end
|
22
|
+
if js
|
23
|
+
path = build_path "_/assets/assets.js?#{js.first.to_i}"
|
24
|
+
result << %{<script src="#{escape_html path}" type="text/javascript"/>}
|
26
25
|
end
|
26
|
+
result
|
27
27
|
end
|
28
28
|
|
29
29
|
get "/_/assets/assets.:type", :type => 'js|css' do
|
@@ -39,10 +39,16 @@ class ::Olelo::Application
|
|
39
39
|
|
40
40
|
get "/_/assets/:name", :name => '.*' do
|
41
41
|
if asset = Application.assets[params[:name]]
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
if path = asset.real_path
|
43
|
+
file = Rack::File.new(nil)
|
44
|
+
file.path = path
|
45
|
+
file.serving(env)
|
46
|
+
else
|
47
|
+
cache_control :last_modified => asset.mtime, :max_age => :static
|
48
|
+
response['Content-Type'] = (MimeMagic.by_path(asset.name) || 'application/octet-stream').to_s
|
49
|
+
response['Content-Length'] = asset.size.to_s
|
50
|
+
asset.read
|
51
|
+
end
|
46
52
|
else
|
47
53
|
:not_found
|
48
54
|
end
|
Binary file
|
Binary file
|
data/views/layout.slim
CHANGED
data/views/login.slim
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
- title :login.t
|
2
|
+
- signup_enabled = Olelo::Config['authentication.enable_signup'] && Olelo::User.supports?(:signup)
|
2
3
|
p
|
3
|
-
=
|
4
|
+
= signup_enabled ? tabs(:login, :signup) : tabs(:login)
|
4
5
|
form action=build_path(:login) method='post'
|
5
6
|
#tab-login.tab.fieldset
|
6
7
|
h2 Login
|
@@ -15,7 +16,7 @@ p
|
|
15
16
|
= render_block :login_buttons do
|
16
17
|
button&submit= :login.t
|
17
18
|
br
|
18
|
-
- if
|
19
|
+
- if signup_enabled
|
19
20
|
form action=build_path(:signup) method='post'
|
20
21
|
#tab-signup.tab.fieldset
|
21
22
|
h2= :signup.t
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: olelo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tilt
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 1.3.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.3
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: slim
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 1.3.3
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.3.3
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: creole
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 0.4.2
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.4.2
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: nokogiri
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,21 +69,31 @@ dependencies:
|
|
54
69
|
version: 1.5.5
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.5.5
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: mimemagic
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
64
84
|
- !ruby/object:Gem::Version
|
65
|
-
version: 0.
|
85
|
+
version: 0.2.0
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.2.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: rack
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ~>
|
@@ -76,21 +101,31 @@ dependencies:
|
|
76
101
|
version: 1.4.1
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.4.1
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: redcarpet
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ~>
|
86
116
|
- !ruby/object:Gem::Version
|
87
|
-
version: 2.
|
117
|
+
version: 2.2.1
|
88
118
|
type: :runtime
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 2.2.1
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: rugged
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ~>
|
@@ -98,10 +133,31 @@ dependencies:
|
|
98
133
|
version: 0.17.0b6
|
99
134
|
type: :runtime
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.17.0b6
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: evaluator
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.1.6
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.1.6
|
102
158
|
- !ruby/object:Gem::Dependency
|
103
159
|
name: rake
|
104
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
105
161
|
none: false
|
106
162
|
requirements:
|
107
163
|
- - ! '>='
|
@@ -109,18 +165,60 @@ dependencies:
|
|
109
165
|
version: 0.8.7
|
110
166
|
type: :development
|
111
167
|
prerelease: false
|
112
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.8.7
|
113
174
|
- !ruby/object:Gem::Dependency
|
114
175
|
name: sass
|
115
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: 3.1.0
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
116
185
|
none: false
|
117
186
|
requirements:
|
118
187
|
- - ! '>='
|
119
188
|
- !ruby/object:Gem::Version
|
120
189
|
version: 3.1.0
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: bacon
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ~>
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 1.1.0
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 1.1.0
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: rack-test
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ~>
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: 0.6.2
|
121
214
|
type: :development
|
122
215
|
prerelease: false
|
123
|
-
version_requirements:
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ~>
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: 0.6.2
|
124
222
|
description: Olelo is a git-based wiki which supports many markup languages, tags,
|
125
223
|
embedded TeX and much more. It can be extended through plugins.
|
126
224
|
email:
|
@@ -133,7 +231,8 @@ files:
|
|
133
231
|
- .gitignore
|
134
232
|
- .gitmodules
|
135
233
|
- Gemfile
|
136
|
-
-
|
234
|
+
- LICENSE
|
235
|
+
- README.creole
|
137
236
|
- Rakefile
|
138
237
|
- bin/olelo
|
139
238
|
- config.ru
|
@@ -142,8 +241,6 @@ files:
|
|
142
241
|
- config/initializers/00-mime_types.rb
|
143
242
|
- config/initializers/01-slim.rb
|
144
243
|
- config/interwiki.yml
|
145
|
-
- doc/AUTHORS
|
146
|
-
- doc/LICENSE
|
147
244
|
- lib/olelo.rb
|
148
245
|
- lib/olelo/application.rb
|
149
246
|
- lib/olelo/attributes.rb
|
@@ -169,14 +266,8 @@ files:
|
|
169
266
|
- lib/olelo/util.rb
|
170
267
|
- lib/olelo/version.rb
|
171
268
|
- lib/olelo/virtualfs.rb
|
172
|
-
- lib/rack/olelo_patches.rb
|
173
269
|
- lib/rack/relative_redirect.rb
|
174
270
|
- lib/rack/static_cache.rb
|
175
|
-
- lib/yard/addons.rb
|
176
|
-
- lib/yard/addons/hook_handler.rb
|
177
|
-
- lib/yard/addons/override_tag.rb
|
178
|
-
- lib/yard/addons/route_handler.rb
|
179
|
-
- lib/yard/addons/sanitize_anchor.rb
|
180
271
|
- olelo.gemspec
|
181
272
|
- plugins/aspects/changelog.rb
|
182
273
|
- plugins/aspects/documentbrowser.rb
|
@@ -197,6 +288,8 @@ files:
|
|
197
288
|
- plugins/blog/blog.scss
|
198
289
|
- plugins/blog/locale.yml
|
199
290
|
- plugins/blog/main.rb
|
291
|
+
- plugins/editor/ace/init.js
|
292
|
+
- plugins/editor/ace/main.rb
|
200
293
|
- plugins/editor/locale.yml
|
201
294
|
- plugins/editor/markup/main.rb
|
202
295
|
- plugins/editor/markup/script.js
|
@@ -432,7 +525,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
432
525
|
version: '0'
|
433
526
|
requirements: []
|
434
527
|
rubyforge_project: olelo
|
435
|
-
rubygems_version: 1.8.
|
528
|
+
rubygems_version: 1.8.24
|
436
529
|
signing_key:
|
437
530
|
specification_version: 3
|
438
531
|
summary: Olelo is a git-based wiki.
|