Minimal working frontend.
This commit is contained in:
@@ -24,7 +24,10 @@ Gem::Specification.new do |s|
|
||||
s.extra_rdoc_files = %w[README.md LICENSE]
|
||||
|
||||
s.add_dependency('grit', [">= 2.0.0", "< 3.0.0"])
|
||||
s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"])
|
||||
s.add_dependency('albino', "~> 1.0.0")
|
||||
s.add_dependency('sinatra', "~> 1.0.0")
|
||||
s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"])
|
||||
|
||||
s.add_development_dependency('shoulda')
|
||||
s.add_development_dependency('mocha')
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
require 'rubygems'
|
||||
|
||||
require 'sinatra'
|
||||
require 'gollum'
|
||||
require 'mustache/sinatra'
|
||||
|
||||
require 'gollum/frontend/views/layout'
|
||||
|
||||
$path = "~/dev/mojombo/gollum/test/examples/lotr.git"
|
||||
|
||||
module Precious
|
||||
class App < Sinatra::Base
|
||||
register Mustache::Sinatra
|
||||
|
||||
dir = File.dirname(File.expand_path(__FILE__))
|
||||
|
||||
# We want to serve public assets for now
|
||||
set :public, "#{dir}/public"
|
||||
set :static, true
|
||||
|
||||
set :mustache, {
|
||||
# Tell mustache where the Views constant lives
|
||||
:namespace => Precious,
|
||||
|
||||
# Mustache templates live here
|
||||
:templates => "#{dir}/templates",
|
||||
|
||||
# Tell mustache where the views are
|
||||
:views => "#{dir}/views"
|
||||
}
|
||||
|
||||
# Sinatra error handling
|
||||
configure :development, :staging do
|
||||
set :raise_errors, false
|
||||
set :show_exceptions, true
|
||||
set :dump_errors, true
|
||||
set :clean_trace, false
|
||||
end
|
||||
|
||||
get '/' do
|
||||
show_page_or_file('Home')
|
||||
end
|
||||
|
||||
get '/*' do
|
||||
show_page_or_file(params[:splat].first)
|
||||
end
|
||||
|
||||
def show_page_or_file(name)
|
||||
wiki = Gollum::Wiki.new($path)
|
||||
if page = wiki.page(name)
|
||||
@content = page.formatted_data
|
||||
mustache :page
|
||||
elsif file = wiki.file(name)
|
||||
file.raw_data
|
||||
else
|
||||
halt 404
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Precious::App.run!
|
||||
@@ -0,0 +1,93 @@
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #f90;
|
||||
font-weight: bold;
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 36pt;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 32pt;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 28pt;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 24pt;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 20pt;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 16pt;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: Georgia, serif;
|
||||
font-size: 14pt;
|
||||
line-height: 22pt;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 60em;
|
||||
margin: 0 auto;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/***********************/
|
||||
|
||||
.frame {
|
||||
margin: 1em 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.frame img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.frame > span {
|
||||
display: block;
|
||||
border: 1px solid #aaa;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.frame span span {
|
||||
display: block;
|
||||
font-size: 10pt;
|
||||
margin: 0;
|
||||
padding: 4px 0 2px 0;
|
||||
text-align: center;
|
||||
line-height: 10pt;
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.float-left {
|
||||
float: left;
|
||||
padding: .5em 1em .25em 0;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
padding: .5em 0 .25em 1em;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
display: block;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
display: block;
|
||||
text-align: right;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title>Gollum - {{title}}</title>
|
||||
<link rel="stylesheet" href="/css/global.css" type="text/css" charset="utf-8" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="content">
|
||||
{{{yield}}}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
{{{content}}}
|
||||
@@ -0,0 +1,12 @@
|
||||
module Precious
|
||||
module Views
|
||||
class Layout < Mustache
|
||||
include Rack::Utils
|
||||
alias_method :h, :escape_html
|
||||
|
||||
def title
|
||||
"Home"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
module Precious
|
||||
module Views
|
||||
class Page < Layout
|
||||
attr_reader :content
|
||||
|
||||
def title
|
||||
"A Page"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -100,7 +100,7 @@ module Gollum
|
||||
containered = true
|
||||
align ||= 'left'
|
||||
if %w{left right}.include?(align)
|
||||
classes << "float-#{align};"
|
||||
classes << "float-#{align}"
|
||||
end
|
||||
elsif %w{top texttop middle absmiddle bottom absbottom baseline}.include?(align)
|
||||
attrs << %{align="#{align}"}
|
||||
@@ -136,12 +136,12 @@ module Gollum
|
||||
|
||||
if opts['frame'] || containered
|
||||
classes << 'frame' if opts['frame']
|
||||
%{<div class="#{classes.join(' ')}">} +
|
||||
%{<div>} +
|
||||
%{<span class="#{classes.join(' ')}">} +
|
||||
%{<span>} +
|
||||
%{<img src="/#{file.path}"#{style_string} #{attr_string}/>} +
|
||||
(alt ? %{<p>#{alt}</p>} : '') +
|
||||
%{</div>} +
|
||||
%{</div>}
|
||||
(alt ? %{<span>#{alt}</span>} : '') +
|
||||
%{</span>} +
|
||||
%{</span>}
|
||||
else
|
||||
%{<img src="/#{file.path}"#{style_string} #{attr_string}/>}
|
||||
end
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
<style>
|
||||
div.frame {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
div.frame div {
|
||||
display: inline-block;
|
||||
border: 1px solid #aaa;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
div div p {
|
||||
font-size: 9px;
|
||||
margin: 0;
|
||||
padding: 4px 0 0 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.float-left {
|
||||
float: left;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. <img src="http://www.google.com/images/nav_logo8.png" style="max-width: 16px;" /> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante.
|
||||
|
||||
<div class="frame float-left">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" style="max-width: 100px;" />
|
||||
<p>Google</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Fusce ullamcorper orci enim. Duis lectus elit, convallis ac convallis sit amet, euismod imperdiet dolor. Nunc egestas nisi quis magna feugiat vitae fringilla elit fermentum.
|
||||
|
||||
<div class="frame float-right">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" style="max-width: 100px;" />
|
||||
<p>Google</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Vivamus sollicitudin dolor sit amet elit mollis ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas hendrerit eros felis. Nunc non enim at dolor malesuada pellentesque a quis nibh. Aliquam sit amet pretium ante.<p>
|
||||
|
||||
<div class="frame align-left">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" />
|
||||
<p>Google</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.</p>
|
||||
|
||||
<div class="frame align-center">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" />
|
||||
<p>Google</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.</p>
|
||||
|
||||
<p>
|
||||
<div class="frame align-right">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" />
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<p>Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies. <div class="frame align-right">
|
||||
<div>
|
||||
<img src="http://www.google.com/images/nav_logo8.png" />
|
||||
</div>
|
||||
</div> Phasellus porta dignissim leo vel hendrerit. Nulla pellentesque nisi ac nunc malesuada aliquam. Nullam et cursus augue. Sed rhoncus pharetra odio, vel dictum diam facilisis et. Etiam molestie justo ut purus elementum rhoncus. Fusce nec augue lectus. Proin a nisl ac lectus facilisis tempus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent blandit tempus libero, in interdum odio dignissim quis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec quis arcu a metus tincidunt scelerisque eget sed mauris. Nullam pellentesque faucibus sodales. Integer ullamcorper enim id nibh tempor ultricies.</p>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
x�ŽK
|
||||
1]ç}�‘ɯ{"Á…à:ŸŽ�i‰ñþÎʸy‹¢
|
||||
^–ÖÖÆúÃèÌ�¬vI‡ì‘Ù�‰”CÉ–BXB´¦úìÐR¯Øy ™4F«i‰„•m`¦´,uÎÕ”ì¢sä+ªøép“×Îï!Ûtç¾q‡Ó�viò”–䘥�AZ9‹¦™æYít9vù¿^Õµ3üF}ɆJü
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
x�’A�Σ@…9Ο―°΄‡‚ΤMO Δ±� 8P�8TrObe2�<“�ϊορd[΅έR.φΌ<Ο3u�ή½}�κφj�=vΗδά³8Aξ &•��DNΔΓΡZ�¥®9Ζ0$�J€ΰiq8M„�±±ΗUώM΄-Ώ·Η.m!/rλ�bΖ…p?DYbi�N_+8”Ο%Lρ|ή$π3¦,ΚΉΨT«{ΚΆ—d�0Οj�kB‹R@�R–Π‚W
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x��M
|
||||
Β0F]ηs�J:™ζD<‚Αυ¤� B:%Ζ…··gpω=ήƒoΦZ�ΠΡ΅7Η)η’�Dk‰Ω³υ(qN�#ν[Z27Y;�d�—%eοCI‚�Θ'XM.Δ9ΰbψΣΪমMή]Χα.m•§®υRυ¥5λqΦz†C¤0Z?Α`ƒµf§ϋΛΎΛ�υ†—δ+°=΄«ωo#J
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x]’A�Ó@…9ϯ°Ä¡ uSqÙÇ" 8PŠ8Tr'±2Gw£þ{<ÙVˆ•r±çåù{ž©£ÔðøîñÕkØs¬öØ÷œrÿ•Àl ˜U{Iœ
|
||||
¤ƒ£·>K]³¦0f� GÊ€ÐÑpž SãN«ü›h[~-nN}Þ‚-rïLâÆÅø0&YRiŸN_+8”/%ŽLé|Þdè0æ+,ÊVlªÕ=›èõYGhuÍ-¡G) AÉ$¶Ð©LŽÛrבR2˜IóL�ñèúaÀÙH×?.ôþ£R-ê’ð+uì+¨…#FÊU_<í3³&TÅÕ¯ßÛ¶/7ƒ£ÄuÄ=G�ÿÎméÁWg.P
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
x•�KjΓ0@»Φ)ζ)#{$� ”΅‹@Χϊ�hΪΘdωώρΆθφρΌΆ½ί&,k|™C¨„€iuK³ΒƒΝ�±q�‰#ΚΝEDnΙ<��mBΖj‘Χ…ΙE!jQ
|
||||
ΎT³ΕZΛJ©΅l�1ΏuΐU;|Ω§n—/›x›Ϊ?ΊώhΟϊZ΄Ώƒ]“χΑYΈ`@4'=/η)�§ηθώzsΏmΏp<`Χ.°Ο£5σΓ,L�
|
||||
@@ -0,0 +1 @@
|
||||
x��KjУ0@Лж)ц)#i,KPJ�аE k}fhкШdљўёЂшіёМЊНп&8�^ц`�ь).Ё�9&AOњт�#)5-та�GМM(и,Fя"-ЇE"By
|
||||
@@ -0,0 +1,3 @@
|
||||
�
|
||||
�
|
||||
�
|
||||
@@ -1 +1 @@
|
||||
f01428b3138994aab19d5f880b6f37336ddf1f24
|
||||
4fde706c7c8d3b30b6caec8c82ff4c01261350f2
|
||||
|
||||
+5
-5
@@ -81,34 +81,34 @@ context "Markup" do
|
||||
test "image with horizontal align" do
|
||||
%w{left center right}.each do |align|
|
||||
content = "a [[alpha.jpg|align=#{align}]] b"
|
||||
output = "<p>a <div class=\"align-#{align}\"><div><img src=\"/greek/alpha.jpg\" /></div></div> b</p>\n"
|
||||
output = "<p>a <span class=\"align-#{align}\"><span><img src=\"/greek/alpha.jpg\" /></span></span> b</p>\n"
|
||||
relative_image(content, output)
|
||||
end
|
||||
end
|
||||
|
||||
test "image with float" do
|
||||
content = "a\n\n[[alpha.jpg|float]]\n\nb"
|
||||
output = "<p>a</p>\n\n<p><div class=\"float-left;\"><div><img src=\"/greek/alpha.jpg\" /></div></div></p>\n\n<p>b</p>\n"
|
||||
output = "<p>a</p>\n\n<p><span class=\"float-left\"><span><img src=\"/greek/alpha.jpg\" /></span></span></p>\n\n<p>b</p>\n"
|
||||
relative_image(content, output)
|
||||
end
|
||||
|
||||
test "image with float and align" do
|
||||
%w{left right}.each do |align|
|
||||
content = "a\n\n[[alpha.jpg|float|align=#{align}]]\n\nb"
|
||||
output = "<p>a</p>\n\n<p><div class=\"float-#{align};\"><div><img src=\"/greek/alpha.jpg\" /></div></div></p>\n\n<p>b</p>\n"
|
||||
output = "<p>a</p>\n\n<p><span class=\"float-#{align}\"><span><img src=\"/greek/alpha.jpg\" /></span></span></p>\n\n<p>b</p>\n"
|
||||
relative_image(content, output)
|
||||
end
|
||||
end
|
||||
|
||||
test "image with frame" do
|
||||
content = "a\n\n[[alpha.jpg|frame]]\n\nb"
|
||||
output = "<p>a</p>\n\n<p><div class=\"frame\"><div><img src=\"/greek/alpha.jpg\" /></div></div></p>\n\n<p>b</p>\n"
|
||||
output = "<p>a</p>\n\n<p><span class=\"frame\"><span><img src=\"/greek/alpha.jpg\" /></span></span></p>\n\n<p>b</p>\n"
|
||||
relative_image(content, output)
|
||||
end
|
||||
|
||||
test "image with frame and alt" do
|
||||
content = "a\n\n[[alpha.jpg|frame|alt=Alpha]]\n\nb"
|
||||
output = "<p>a</p>\n\n<p><div class=\"frame\"><div><img src=\"/greek/alpha.jpg\" alt=\"Alpha\" /><p>Alpha</p></div></div></p>\n\n<p>b</p>\n"
|
||||
output = "<p>a</p>\n\n<p><span class=\"frame\"><span><img src=\"/greek/alpha.jpg\" alt=\"Alpha\" /><span>Alpha</span></span></span></p>\n\n<p>b</p>\n"
|
||||
relative_image(content, output)
|
||||
end
|
||||
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ context "Page" do
|
||||
|
||||
test "page versions" do
|
||||
page = @wiki.page('Bilbo Baggins')
|
||||
assert_equal ['5bc1aaec6149e854078f1d0f8b71933bbc6c2e43'],
|
||||
assert_equal ["f25eccd98e9b667f9e22946f3e2f945378b8a72d", "5bc1aaec6149e854078f1d0f8b71933bbc6c2e43"],
|
||||
page.versions.map { |v| v.id }
|
||||
end
|
||||
|
||||
|
||||
+9
-7
@@ -17,25 +17,27 @@ context "Wiki" do
|
||||
test "shows paginated log with no page" do
|
||||
Gollum::Wiki.per_page = 3
|
||||
assert_equal %w(
|
||||
f01428b3138994aab19d5f880b6f37336ddf1f24
|
||||
fbabba862dfa7ac35b39042dd4ad780c9f67b8cb
|
||||
df26e61e707116f81ebc6b935ec6d1676b7e96c4),
|
||||
4fde706c7c8d3b30b6caec8c82ff4c01261350f2
|
||||
1e716a3178a76fe39ee7b88f0cf2dc4a447566f6
|
||||
afe2034d400ba21e13361f38f74900c51dbc7fde),
|
||||
@wiki.log.map { |c| c.id }
|
||||
end
|
||||
|
||||
test "shows paginated log with 1st page" do
|
||||
Gollum::Wiki.per_page = 3
|
||||
assert_equal %w(
|
||||
f01428b3138994aab19d5f880b6f37336ddf1f24
|
||||
fbabba862dfa7ac35b39042dd4ad780c9f67b8cb
|
||||
df26e61e707116f81ebc6b935ec6d1676b7e96c4),
|
||||
4fde706c7c8d3b30b6caec8c82ff4c01261350f2
|
||||
1e716a3178a76fe39ee7b88f0cf2dc4a447566f6
|
||||
afe2034d400ba21e13361f38f74900c51dbc7fde),
|
||||
@wiki.log(:page => 1).map { |c| c.id }
|
||||
end
|
||||
|
||||
test "shows paginated log with next page" do
|
||||
Gollum::Wiki.per_page = 3
|
||||
assert_equal %w(
|
||||
5bc1aaec6149e854078f1d0f8b71933bbc6c2e43),
|
||||
f25eccd98e9b667f9e22946f3e2f945378b8a72d
|
||||
b0d108328459e44fff4a76cd19b10ddc34adce4b
|
||||
f01428b3138994aab19d5f880b6f37336ddf1f24),
|
||||
@wiki.log(:page => 2).map { |c| c.id }
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user