mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
Merge branch 'mediawiki-support' of https://github.com/somu/sinatra
Conflicts: Gemfile
This commit is contained in:
commit
baae681420
6 changed files with 147 additions and 0 deletions
1
Gemfile
1
Gemfile
|
@ -52,6 +52,7 @@ if RUBY_ENGINE == "ruby" and RUBY_VERSION > '1.9.2'
|
|||
gem 'kramdown'
|
||||
gem 'maruku'
|
||||
gem 'creole'
|
||||
gem 'wikicloth'
|
||||
gem 'markaby'
|
||||
gem 'radius'
|
||||
gem 'liquid'
|
||||
|
|
36
README.md
36
README.md
|
@ -57,6 +57,7 @@ pick up if available.
|
|||
* [RABL Templates](#rabl-templates)
|
||||
* [Slim Templates](#slim-templates)
|
||||
* [Creole Templates](#creole-templates)
|
||||
* [MediaWiki Templates](#mediawiki-templates)
|
||||
* [CoffeeScript Templates](#coffeescript-templates)
|
||||
* [Stylus Templates](#stylus-templates)
|
||||
* [Yajl Templates](#yajl-templates)
|
||||
|
@ -897,6 +898,41 @@ Since you cannot call Ruby from Creole, you cannot use layouts written in
|
|||
Creole. However, it is possible to use another rendering engine for the
|
||||
template than for the layout by passing the `:layout_engine` option.
|
||||
|
||||
#### MediaWiki Templates
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Dependency</td>
|
||||
<td><a href="https://github.com/nricciar/wikicloth" title="WikiCloth">WikiCloth</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>File Extension</td>
|
||||
<td><tt>.mediawiki</tt> and <tt>.mw</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Example</td>
|
||||
<td><tt>mediawiki :wiki, :layout_engine => :erb</tt></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
It is not possible to call methods from MediaWiki markup, nor to pass locals to it.
|
||||
You therefore will usually use it in combination with another rendering engine:
|
||||
|
||||
``` ruby
|
||||
erb :overview, :locals => { :text => mediawiki(:introduction) }
|
||||
```
|
||||
|
||||
Note that you may also call the `mediawiki` method from within other templates:
|
||||
|
||||
``` ruby
|
||||
%h1 Hello From Haml!
|
||||
%p= mediawiki(:greetings)
|
||||
```
|
||||
|
||||
Since you cannot call Ruby from MediaWiki, you cannot use layouts written in
|
||||
MediaWiki. However, it is possible to use another rendering engine for the
|
||||
template than for the layout by passing the `:layout_engine` option.
|
||||
|
||||
#### CoffeeScript Templates
|
||||
|
||||
<table>
|
||||
|
|
37
README.ru.md
37
README.ru.md
|
@ -820,6 +820,43 @@ erb :overview, :locals => { :text => creole(:introduction) }
|
|||
один шаблонизатор для отображения шаблона, а другой для лэйаута с помощью
|
||||
опции `:layout_engine`.
|
||||
|
||||
#### MediaWiki шаблоны
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Зависимости</td>
|
||||
<td><a href="https://github.com/nricciar/wikicloth" title="WikiCloth">WikiCloth</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Расширения файлов</td>
|
||||
<td><tt>.mediawiki</tt> и <tt>.mw</tt></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Пример</td>
|
||||
<td><tt>mediawiki :wiki, :layout_engine => :erb</tt></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
В разметке MediaWiki невозможно вызывать методы или передавать локальные переменные.
|
||||
Следовательно, вам, скорее всего, придется использовать этот шаблон совместно
|
||||
с другим шаблонизатором:
|
||||
|
||||
```ruby
|
||||
erb :overview, :locals => { :text => mediawiki(:introduction) }
|
||||
```
|
||||
|
||||
Заметьте, что вы можете вызывать метод `mediawiki` из других шаблонов:
|
||||
|
||||
```ruby
|
||||
%h1 Hello From Haml!
|
||||
%p= mediawiki(:greetings)
|
||||
```
|
||||
|
||||
Вы не можете вызывать Ruby из MediaWiki, соответственно, вы не можете
|
||||
использовать лэйауты на MediaWiki. Тем не менее, есть возможность использовать
|
||||
один шаблонизатор для отображения шаблона, а другой для лэйаута с помощью
|
||||
опции `:layout_engine`.
|
||||
|
||||
#### CoffeeScript шаблоны
|
||||
|
||||
<table>
|
||||
|
|
|
@ -741,6 +741,10 @@ module Sinatra
|
|||
render :creole, template, options, locals
|
||||
end
|
||||
|
||||
def mediawiki(template, options = {}, locals = {})
|
||||
render :mediawiki, template, options, locals
|
||||
end
|
||||
|
||||
def wlang(template, options = {}, locals = {}, &block)
|
||||
render(:wlang, template, options, locals, &block)
|
||||
end
|
||||
|
|
68
test/mediawiki_test.rb
Normal file
68
test/mediawiki_test.rb
Normal file
|
@ -0,0 +1,68 @@
|
|||
require File.expand_path('../helper', __FILE__)
|
||||
|
||||
begin
|
||||
require 'wikicloth'
|
||||
|
||||
class MediaWikiTest < Test::Unit::TestCase
|
||||
def mediawiki_app(&block)
|
||||
mock_app do
|
||||
set :views, File.dirname(__FILE__) + '/views'
|
||||
get('/', &block)
|
||||
end
|
||||
get '/'
|
||||
end
|
||||
|
||||
it 'supports both .mw and .mediawiki extensions' do
|
||||
assert_equal Tilt[:mw], Tilt[:mediawiki]
|
||||
end
|
||||
|
||||
it 'renders inline mediawiki strings' do
|
||||
mediawiki_app { mediawiki "''Hiya''" }
|
||||
assert ok?
|
||||
assert_include body, '<i>Hiya</i>'
|
||||
end
|
||||
|
||||
it 'renders .mediawiki files in views path' do
|
||||
mediawiki_app { mediawiki :hello }
|
||||
assert ok?
|
||||
assert_include body, "<i>Hello from MediaWiki</i>"
|
||||
end
|
||||
|
||||
it 'raises error if template not found' do
|
||||
mock_app { get('/') { mediawiki :no_such_template } }
|
||||
assert_raise(Errno::ENOENT) { get('/') }
|
||||
end
|
||||
|
||||
it 'renders with inline layouts' do
|
||||
mock_app do
|
||||
layout { 'THIS. IS. #{yield.upcase}!' }
|
||||
get('/') { mediawiki 'Sparta', :layout_engine => :str }
|
||||
end
|
||||
get '/'
|
||||
assert ok?
|
||||
assert_like 'THIS. IS. <P>SPARTA</P>!', body
|
||||
end
|
||||
|
||||
it 'renders with file layouts' do
|
||||
mediawiki_app do
|
||||
mediawiki 'Hello World', :layout => :layout2, :layout_engine => :erb
|
||||
end
|
||||
assert ok?
|
||||
assert_body "ERB Layout!\n<p>Hello World</p>"
|
||||
end
|
||||
|
||||
it 'can be used in a nested fashion for partials and whatnot' do
|
||||
mock_app do
|
||||
template(:inner) { "hi" }
|
||||
template(:outer) { "<outer><%= mediawiki :inner %></outer>" }
|
||||
get('/') { erb :outer }
|
||||
end
|
||||
|
||||
get '/'
|
||||
assert ok?
|
||||
assert_like '<outer><p>hi</p></outer>', body
|
||||
end
|
||||
end
|
||||
rescue LoadError
|
||||
warn "#{$!.to_s}: skipping mediawiki tests"
|
||||
end
|
1
test/views/hello.mediawiki
Normal file
1
test/views/hello.mediawiki
Normal file
|
@ -0,0 +1 @@
|
|||
''Hello from MediaWiki''
|
Loading…
Add table
Reference in a new issue