Compare commits

...

65 Commits

Author SHA1 Message Date
bootstraponline b6633f0ecb Release 2.3.2 2012-10-22 19:21:10 -06:00
bootstraponline e08d2d3052 Enable show_all for /pages 2012-10-22 19:10:40 -06:00
bootstraponline fbc0548b43 Add --show-all
--show-all will show all files in file view (not just valid pages). Default is false.
2012-10-22 19:03:21 -06:00
bootstraponline a9807bd1e1 Update math note 2012-10-21 17:22:31 -06:00
bootstraponline 554b80b39d Add MathJax examples 2012-10-21 17:21:24 -06:00
bootstraponline 99e74bf00b Release 2.3.1 2012-10-21 17:16:40 -06:00
bootstraponline f48e923f28 Fix release 2012-10-21 17:15:09 -06:00
bootstraponline 5400b4bfdd Support inline and display math.
$$2^2$$

$2^2$

\\(2^2\\)

[2^2]
2012-10-21 17:15:09 -06:00
bootstraponline f68bebe0f6 Update math note 2012-10-21 16:26:35 -06:00
bootstraponline 4c6019b439 Update math note 2012-10-21 16:23:58 -06:00
bootstraponline 66e08a6b17 Release 2.3.0 2012-10-21 16:19:05 -06:00
bootstraponline 7898db70ed Auto load all MathJax extensions
Fix #549
2012-10-21 16:14:04 -06:00
bootstraponline 7c357116ff Remove TeX
As discussed with @vmg
MathJax is available via a flag for those self hosting gollum
2012-10-18 23:36:05 -06:00
bootstraponline 69ce0eb0d0 Update rake 2012-10-17 21:04:20 -06:00
bootstraponline 4db31a297b Update rake
Jekyll uses rake ~> 0.9
2012-10-17 21:03:29 -06:00
bootstraponline e1fca457e4 Restore gemnasium
Gemnasium fixed the missing pygments.rb issue.

https://github.com/laserlemon/gemnasium-parser/commit/c9b3e43c3021967d5c1bb115e7dd1555e01c6444
2012-10-17 20:54:01 -06:00
bootstraponline 7f8485ce80 Improve system requirements language 2012-10-16 22:31:25 -06:00
bootstraponline 290061fd11 Add system requirements to readme 2012-10-16 22:15:26 -06:00
bootstraponline a507836936 Update dependencies 2012-10-16 21:39:22 -06:00
bootstraponline 6524d20a96 Use pygments.rb 0.3.2 2012-10-16 21:36:37 -06:00
bootstraponline f1c523aa30 Release 2.2.9 2012-10-14 22:26:17 -06:00
bootstraponline 87c08f5613 Escape " in headers 2012-10-14 22:21:00 -06:00
bootstraponline 82913cea20 Improve base path note 2012-10-14 21:42:25 -06:00
bootstraponline 2ad743e4bd Release 2.2.8 2012-10-14 21:28:43 -06:00
bootstraponline fa97b57a96 Define default map as suggested on #460
Base path now sets a default map without having to use an external config.ru.
2012-10-14 20:57:27 -06:00
bootstraponline 1b952b6d56 Release 2.2.7 2012-10-14 17:24:33 -06:00
bootstraponline 90cc512bd1 Fix home loop with page-file-dir #491 2012-10-14 15:45:26 -06:00
bootstraponline b82556c9c0 Fix #460 2012-10-14 15:42:06 -06:00
bootstraponline fbe3b4bb3b Fix #460 2012-10-14 15:23:52 -06:00
bootstraponline 5ffd98ad31 Fix #491 2012-10-14 15:15:55 -06:00
bootstraponline cb9dd4d228 Fix formatting 2012-10-14 14:31:40 -06:00
bootstraponline cd823bf10c Add doc from wiki.rb 2012-10-14 14:31:00 -06:00
bootstraponline 5560ec52c2 Add base_path doc 2012-10-14 14:27:08 -06:00
bootstraponline 065151a77f Add base_path disclaimer 2012-10-14 14:25:27 -06:00
bootstraponline 23454f556c Release 2.2.6 2012-10-14 13:14:08 -06:00
bootstraponline a2b3ddf931 Update tests to XHTML 2012-10-14 13:07:18 -06:00
bootstraponline 44b0d2fcfc Remove old comment 2012-10-14 12:26:23 -06:00
bootstraponline aed4cc590a Fix unicode characters
Fix #547

Update test
2012-10-14 12:21:31 -06:00
bootstraponline 72ee08b5ab Release 2.2.5 2012-10-14 11:21:56 -06:00
bootstraponline 45547624e4 Improve tilde fence support
More than 3 tildes can be used. The code block must end with the same amount of tildes used to open the code block.

Fix #537

http://johnmacfarlane.net/pandoc/README.html#delimited-code-blocks
2012-10-14 11:02:45 -06:00
bootstraponline f928cfa8be Don't ship Lorem ipsum in gem 2012-10-13 20:21:08 -06:00
bootstraponline 988984846a Release 2.2.4 2012-10-13 20:01:57 -06:00
bootstraponline 1149618653 Fix #537 2012-10-13 19:53:41 -06:00
bootstraponline 168a033903 Remove old comment 2012-10-13 14:59:42 -06:00
bootstraponline 6a765c9791 Fix #537 2012-10-13 14:52:28 -06:00
bootstraponline e16ae7b511 Travis is having a bad day
E: There are problems and -y was used without --force-yes
before_install: 'sudo apt-get install -y asciidoc' returned false.
Done. Build script exited with: 1
2012-10-13 14:07:15 -06:00
bootstraponline 174334ea44 Remove comment 2012-10-13 13:58:56 -06:00
bootstraponline dbdf06930d Fix 2012-10-13 13:55:20 -06:00
bootstraponline c93e65ddc3 Merge branch 'master' of github.com:github/gollum 2012-10-13 13:32:19 -06:00
bootstraponline 56101ed264 Fix #535 and add test 2012-10-13 13:32:08 -06:00
bootstraponline 8269c8e574 TOC doesn't require ' 2012-10-13 13:11:31 -06:00
bootstraponline 2246419d1e Fix spacing 2012-10-13 13:09:20 -06:00
bootstraponline 118a0c318b Update comment 2012-10-13 13:06:15 -06:00
bootstraponline 5401cf2910 Fix #542 2012-10-13 13:04:51 -06:00
bootstraponline 432f9b8d2f Add test for #542 2012-10-13 12:57:58 -06:00
bootstraponline 66fc8a2d31 Revert "Fix #542"
This reverts commit 2f3dd3d227.
2012-10-13 12:55:43 -06:00
bootstraponline 2f3dd3d227 Fix #542
Page link may contain duplicate starting forward slashes.
//page points to http://page/ when what we want is
/page pointing to http://localhost:1234/page
2012-10-13 09:53:25 -06:00
bootstraponline c43fd9fa6c Update language comment 2012-10-12 21:19:24 -06:00
bootstraponline 868518e0f5 Bash is Ace mode sh 2012-10-12 20:58:05 -06:00
bootstraponline 039b5cce98 Try to fix Travis
FFI is no longer used in the new pygments.rb.
apt-get update may resolve the asciidoc install failure.
2012-10-12 20:24:31 -06:00
bootstraponline 4a421842d5 https://github.com/travis-ci/travis-ci/issues/725
Modified README to trigger a Travis CI build. It's currently broken.
2012-10-12 20:22:10 -06:00
bootstraponline cfbb124f81 Update README.md 2012-10-12 20:16:43 -06:00
bootstraponline dcb147cde2 Ensure declaredLanguage is lower case 2012-10-10 20:20:33 -06:00
bootstraponline 8d06b5e67e Fix pygments language to Ace mode translation 2012-10-10 20:16:04 -06:00
bootstraponline 4776d0b422 Use rake release in readme 2012-10-10 19:45:42 -06:00
23 changed files with 343 additions and 191 deletions
+2 -2
View File
@@ -4,5 +4,5 @@ rvm:
notifications: notifications:
disabled: true disabled: true
before_install: before_install:
- gem uninstall ffi -a - sudo apt-get update
- sudo apt-get install -y asciidoc - sudo apt-get install -y --force-yes asciidoc
+2 -2
View File
@@ -1,4 +1,4 @@
source "http://rubygems.org" source 'http://rubygems.org'
gemspec gemspec
gem "rake", "~> 0.9.2.2" gem 'rake', '~> 0.9'
+30 -24
View File
@@ -2,6 +2,7 @@ gollum -- A wiki built on top of Git
==================================== ====================================
[![Build Status](https://secure.travis-ci.org/github/gollum.png?branch=master)](http://travis-ci.org/github/gollum) [![Build Status](https://secure.travis-ci.org/github/gollum.png?branch=master)](http://travis-ci.org/github/gollum)
[![Dependency Status](https://gemnasium.com/github/gollum.png)](https://gemnasium.com/github/gollum)
## DESCRIPTION ## DESCRIPTION
@@ -18,6 +19,11 @@ number of ways depending on your needs. You can edit your wiki locally:
Gollum follows the rules of [Semantic Versioning](http://semver.org/) and uses Gollum follows the rules of [Semantic Versioning](http://semver.org/) and uses
[TomDoc](http://tomdoc.org/) for inline documentation. [TomDoc](http://tomdoc.org/) for inline documentation.
## SYSTEM REQUIREMENTS
- Python 2.5+ (2.7.3 recommended)
- Ruby 1.8.7+ (1.9.3 recommended)
- Unix like operating system (OS X, Ubuntu, Debian, and more)
- Will not work on Windows (because of [grit](https://github.com/github/grit))
## INSTALLATION ## INSTALLATION
@@ -295,7 +301,7 @@ This is useful for writing about the link syntax in your wiki pages.
Gollum has a special tag to insert a table of contents (new in v2.1) Gollum has a special tag to insert a table of contents (new in v2.1)
'[[_TOC_]] [[_TOC_]]
This tag is case sensitive, use all upper case. The TOC tag can be inserted This tag is case sensitive, use all upper case. The TOC tag can be inserted
into the `_Header`, `_Footer` or `_Sidebar` files too. into the `_Header`, `_Footer` or `_Sidebar` files too.
@@ -357,25 +363,17 @@ appropriately.
## MATHEMATICAL EQUATIONS ## MATHEMATICAL EQUATIONS
Start gollum with the `--mathjax` flag. Read more about [MathJax](http://docs.mathjax.org/en/latest/index.html) on the web. Gollum uses the `TeX-AMS-MML_HTMLorMML` config with the `autoload-all` extension.
Page files may contain mathematic equations in TeX syntax that will be nicely Inline math:
typeset into the expected output. A block-style equation is delimited by `\[`
and `\]`. For example:
\[ P(E) = {n \choose k} p^k (1-p)^{ n-k} \] - $2^2$
- `\\(2^2\\)`
Inline equations are delimited by `\(` and `\)`. These equations will appear Display math:
inline with regular text. For example:
The Pythagorean theorem is \( a^2 + b^2 = c^2 \). - $$2^2$$
- [2^2]
### INSTALLATION REQUIREMENTS
In order to get the mathematical equations rendering to work, you need the following binaries:
* LaTex, TeTex or MacTex/BasicTeX (pdflatex)
* Netpbm (pnmcrop, pnmpad, pnmscale, ppmtopgm, pnmgamma, pnmtopng)
* Ghostscript (gs)
## SEQUENCE DIAGRAMS ## SEQUENCE DIAGRAMS
@@ -413,6 +411,17 @@ By default, internal wiki links are all absolute from the root. To specify a dif
wiki = Gollum::Wiki.new("my-gollum-repo.git", :base_path => "/wiki") wiki = Gollum::Wiki.new("my-gollum-repo.git", :base_path => "/wiki")
Note that base_path just modifies the links. To map gollum to a non-root location:
- Use the gollum binary: `gollum path/to/wiki --base-path mywiki`
- Define config.ru with `map`. See [#532](https://github.com/github/gollum/issues/532) for an example.
> :base_path - String base path for all Wiki links.
>
> The String base path to prefix to internal links. For example, when set
> to "/wiki", the page "Hobbit" will be linked as "/wiki/Hobbit". Defaults
> to "/".
Get the latest version of the given human or canonical page name: Get the latest version of the given human or canonical page name:
page = wiki.page('page-name') page = wiki.page('page-name')
@@ -547,17 +556,14 @@ your changes merged back into core is as follows:
1. Send a pull request to the github/gollum project. 1. Send a pull request to the github/gollum project.
## RELEASING ## RELEASING
For z releases:
$ rake bump
$ rake release
For x.y releases: For x.y releases:
Update VERSION in lib/gollum.rb Update VERSION in lib/gollum.rb
$ rake gemspec $ rake gemspec
$ rake release
For z releases:
$ rake bump
$ git tag vX.Y.Z
$ git push origin vX.Y.Z
$ gem build gollum.gemspec
$ gem push gollum-X.Y.Z.gem
## BUILDING THE GEM FROM MASTER ## BUILDING THE GEM FROM MASTER
$ gem uninstall -aIx gollum $ gem uninstall -aIx gollum
+2 -1
View File
@@ -114,6 +114,7 @@ task :release => :build do
exit! exit!
end end
sh "git commit --allow-empty -a -m 'Release #{version}'" sh "git commit --allow-empty -a -m 'Release #{version}'"
sh "git pull"
sh "git tag v#{version}" sh "git tag v#{version}"
sh "git push origin master" sh "git push origin master"
sh "git push origin v#{version}" sh "git push origin v#{version}"
@@ -145,7 +146,7 @@ task :gemspec => :validate do
split("\n"). split("\n").
sort. sort.
reject { |file| file =~ /^\./ }. reject { |file| file =~ /^\./ }.
reject { |file| file =~ /^(rdoc|pkg|test)/ }. reject { |file| file =~ /^(rdoc|pkg|test|Home\.md)/ }.
map { |file| " #{file}" }. map { |file| " #{file}" }.
join("\n") join("\n")
+31 -1
View File
@@ -68,6 +68,10 @@ opts = OptionParser.new do |opts|
opts.on("--mathjax", "Enables mathjax.") do opts.on("--mathjax", "Enables mathjax.") do
wiki_options[:mathjax] = true wiki_options[:mathjax] = true
end end
opts.on("--show-all", "Shows all files in file view. By default only valid pages are shown.") do
wiki_options[:show_all] = true
end
end end
# Read command line options into `options` hash # Read command line options into `options` hash
@@ -141,5 +145,31 @@ else
require cfg require cfg
end end
Precious::App.run!(options) base_path = wiki_options[:base_path]
if wiki_options[:base_path].nil?
Precious::App.run!(options)
else
require 'rack'
class MapGollum
def initialize base_path
@mg = Rack::Builder.new do
map '/' do
run Proc.new { [ 302, {'Location'=> "/#{base_path}" }, [] ] }
end
map "/#{base_path}" do
run Precious::App
end
end
end
def call(env)
@mg.call(env)
end
end
# Rack::Handler does not work with Ctrl + C. Use Rack::Server instead.
Rack::Server.new(:app => MapGollum.new(base_path), :Port => options['port']).start
end
end end
+9 -12
View File
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
s.required_ruby_version = ">= 1.8.7" s.required_ruby_version = ">= 1.8.7"
s.name = 'gollum' s.name = 'gollum'
s.version = '2.2.3' s.version = '2.3.2'
s.date = '2012-10-10' s.date = '2012-10-22'
s.rubyforge_project = 'gollum' s.rubyforge_project = 'gollum'
s.summary = "A simple, Git-powered wiki." s.summary = "A simple, Git-powered wiki."
@@ -26,28 +26,26 @@ Gem::Specification.new do |s|
s.add_dependency('grit', '~> 2.5.0') s.add_dependency('grit', '~> 2.5.0')
s.add_dependency('github-markup', ['>= 0.7.4', '< 1.0.0']) s.add_dependency('github-markup', ['>= 0.7.4', '< 1.0.0'])
s.add_dependency('github-markdown', '~> 0.5.1') s.add_dependency('github-markdown', '~> 0.5.1')
s.add_dependency('pygments.rb', '~> 0.3.1') s.add_dependency('pygments.rb', '~> 0.3.2')
s.add_dependency('escape_utils', '0.2.4')
s.add_dependency('sinatra', '~> 1.3.3') s.add_dependency('sinatra', '~> 1.3.3')
s.add_dependency('mustache', ['>= 0.99.4', '< 1.0.0']) s.add_dependency('mustache', ['>= 0.99.4', '< 1.0.0'])
s.add_dependency('sanitize', '~> 2.0.3') s.add_dependency('sanitize', '~> 2.0.3')
s.add_dependency('nokogiri', '~> 1.5.5') s.add_dependency('nokogiri', '~> 1.5.5')
s.add_dependency('useragent', '~> 0.4.10') s.add_dependency('useragent', '~> 0.4.12')
s.add_dependency('stringex', '~> 1.4.0') s.add_dependency('stringex', '~> 1.4.0')
s.add_development_dependency('RedCloth', '~> 4.2.9') s.add_development_dependency('RedCloth', '~> 4.2.9')
s.add_development_dependency('mocha', '~> 0.12.6') s.add_development_dependency('mocha', '~> 0.12.7')
s.add_development_dependency('org-ruby', '~> 0.7.1') s.add_development_dependency('org-ruby', '~> 0.7.2')
s.add_development_dependency('shoulda', '~> 3.1.1') s.add_development_dependency('shoulda', '~> 3.3.1')
s.add_development_dependency('rack-test', '~> 0.6.2') s.add_development_dependency('rack-test', '~> 0.6.2')
s.add_development_dependency('wikicloth', '~> 0.8.0') s.add_development_dependency('wikicloth', '~> 0.8.0')
s.add_development_dependency('rake', '~> 0.9.2.2') s.add_development_dependency('rake', '~> 0.9')
# = MANIFEST = # = MANIFEST =
s.files = %w[ s.files = %w[
Gemfile Gemfile
HISTORY.md HISTORY.md
Home.md
LICENSE LICENSE
README.md README.md
Rakefile Rakefile
@@ -459,7 +457,6 @@ Gem::Specification.new do |s|
lib/gollum/page.rb lib/gollum/page.rb
lib/gollum/pagination.rb lib/gollum/pagination.rb
lib/gollum/sanitization.rb lib/gollum/sanitization.rb
lib/gollum/tex.rb
lib/gollum/web_sequence_diagram.rb lib/gollum/web_sequence_diagram.rb
lib/gollum/wiki.rb lib/gollum/wiki.rb
licenses/css_tree_menu_thecssninja/license.txt licenses/css_tree_menu_thecssninja/license.txt
@@ -471,4 +468,4 @@ Gem::Specification.new do |s|
# = MANIFEST = # = MANIFEST =
s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ } s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
end end
+1 -2
View File
@@ -18,12 +18,11 @@ require File.expand_path('../gollum/file', __FILE__)
require File.expand_path('../gollum/file_view', __FILE__) require File.expand_path('../gollum/file_view', __FILE__)
require File.expand_path('../gollum/markup', __FILE__) require File.expand_path('../gollum/markup', __FILE__)
require File.expand_path('../gollum/sanitization', __FILE__) require File.expand_path('../gollum/sanitization', __FILE__)
require File.expand_path('../gollum/tex', __FILE__)
require File.expand_path('../gollum/web_sequence_diagram', __FILE__) require File.expand_path('../gollum/web_sequence_diagram', __FILE__)
require File.expand_path('../gollum/frontend/uri_encode_component', __FILE__) require File.expand_path('../gollum/frontend/uri_encode_component', __FILE__)
module Gollum module Gollum
VERSION = '2.2.3' VERSION = '2.3.2'
def self.assets_path def self.assets_path
::File.expand_path('gollum/frontend/public', ::File.dirname(__FILE__)) ::File.expand_path('gollum/frontend/public', ::File.dirname(__FILE__))
+20
View File
@@ -13,6 +13,26 @@ module Gollum
@path = nil @path = nil
end end
# Public: The url path required to reach this page within the repo.
#
# Returns the String url_path
def url_path
path = if self.path.include?('/')
self.path.sub(/\/[^\/]+$/, '/')
else
''
end
path
end
# Public: The url_path, but CGI escaped.
#
# Returns the String url_path
def escaped_url_path
CGI.escape(self.url_path).gsub('%2F','/')
end
# Public: The on-disk filename of the file. # Public: The on-disk filename of the file.
# #
# Returns the String name. # Returns the String name.
+15 -2
View File
@@ -5,8 +5,12 @@ module Gollum
- Then all the folders are sorted and processed - Then all the folders are sorted and processed
=end =end
class FileView class FileView
def initialize pages # common use cases:
# set pages to wiki.pages and show_all to false
# set pages to wiki.pages + wiki.files and show_all to true
def initialize pages, show_all = false
@pages = pages @pages = pages
@show_all = show_all
end end
def enclose_tree string def enclose_tree string
@@ -39,7 +43,16 @@ module Gollum
end end
def url_for_page page def url_for_page page
url = ::File.join(::File.dirname(page.path), page.filename_stripped) url = ''
if @show_all
# Remove ext for valid pages.
filename = page.filename
filename = Page::valid_page_name?(filename) ? filename.chomp(::File.extname(filename)) : filename
url = ::File.join(::File.dirname(page.path), filename)
else
url = ::File.join(::File.dirname(page.path), page.filename_stripped)
end
url = url[2..-1] if url[0,2] == './' url = url[2..-1] if url[0,2] == './'
url url
end end
+16 -4
View File
@@ -86,7 +86,7 @@ module Precious
end end
get '/' do get '/' do
redirect File.join(settings.wiki_options[:base_path].to_s, 'Home') redirect File.join(settings.wiki_options[:page_file_dir].to_s,settings.wiki_options[:base_path].to_s, 'Home')
end end
# path is set to name if path is nil. # path is set to name if path is nil.
@@ -145,6 +145,7 @@ module Precious
page_name = CGI.unescape(params[:page]) page_name = CGI.unescape(params[:page])
wiki = wiki_new wiki = wiki_new
page = wiki.paged(page_name, path, exact = true) page = wiki.paged(page_name, path, exact = true)
return if page.nil?
rename = params[:rename].to_url if params[:rename] rename = params[:rename].to_url if params[:rename]
name = rename || page.name name = rename || page.name
committer = Gollum::Committer.new(wiki, commit_message) committer = Gollum::Committer.new(wiki, commit_message)
@@ -190,13 +191,20 @@ module Precious
path = '' if path.nil? path = '' if path.nil?
format = params[:format].intern format = params[:format].intern
page_dir = File.join(settings.wiki_options[:page_file_dir].to_s,
settings.wiki_options[:base_path].to_s)
# Home is a special case.
path = '' if name.downcase == 'home'
page_dir = File.join(page_dir, path)
# write_page is not directory aware so use wiki_options to emulate dir support. # write_page is not directory aware so use wiki_options to emulate dir support.
wiki_options = settings.wiki_options.merge({ :page_file_dir => path }) wiki_options = settings.wiki_options.merge({ :page_file_dir => page_dir })
wiki = Gollum::Wiki.new(settings.gollum_path, wiki_options) wiki = Gollum::Wiki.new(settings.gollum_path, wiki_options)
begin begin
wiki.write_page(name, format, params[:content], commit_message) wiki.write_page(name, format, params[:content], commit_message)
redirect to("/#{clean_url(CGI.escape(::File.join(path,name)))}") redirect to("/#{clean_url(CGI.escape(::File.join(page_dir,name)))}")
rescue Gollum::DuplicatePageError => e rescue Gollum::DuplicatePageError => e
@message = "Duplicate page: #{e.message}" @message = "Duplicate page: #{e.message}"
mustache :error mustache :error
@@ -315,13 +323,17 @@ module Precious
wiki_options = settings.wiki_options.merge({ :page_file_dir => @path }) wiki_options = settings.wiki_options.merge({ :page_file_dir => @path })
wiki = Gollum::Wiki.new(settings.gollum_path, wiki_options) wiki = Gollum::Wiki.new(settings.gollum_path, wiki_options)
@results = wiki.pages @results = wiki.pages
@results += wiki.files if settings.wiki_options[:show_all]
@ref = wiki.ref @ref = wiki.ref
mustache :pages mustache :pages
end end
get '/fileview' do get '/fileview' do
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
@results = Gollum::FileView.new(wiki.pages).render_files show_all = settings.wiki_options[:show_all]
# if showing all files include wiki.files
@results = show_all ? Gollum::FileView.new(wiki.pages + wiki.files, show_all).render_files :
Gollum::FileView.new(wiki.pages).render_files
@ref = wiki.ref @ref = wiki.ref
mustache :file_view, { :layout => false } mustache :file_view, { :layout => false }
end end
+7
View File
@@ -23,5 +23,12 @@ module Precious
return url if url.nil? return url if url.nil?
url.gsub('%2F','/').gsub(/^\/+/,'') url.gsub('%2F','/').gsub(/^\/+/,'')
end end
def trim_leading_slash url
return url if url.nil?
url.gsub!('%2F','/')
return '/' + url.gsub(/^\/+/,'') if url[0,1] == '/'
url
end
end end
end end
@@ -194,8 +194,8 @@ var previewSet = function( text ) {
} }
}; };
// 'c', 'c++', 'cpp' are github specific and transformed to c_cpp for Ace. // See pygmentsLanguageToAceMode for pygment to ace mode translations.
// 'coffeescript' is transformed to 'coffee' for Ace. // TODO: Update languages and translation once Ace is upgraded to v1.0.
var languages = [ 'c', 'c++', 'cpp', 'clojure', 'coffee', var languages = [ 'c', 'c++', 'cpp', 'clojure', 'coffee',
'coffeescript', 'coldfusion', 'csharp', 'css', 'diff', 'golang', 'coffeescript', 'coldfusion', 'csharp', 'css', 'diff', 'golang',
'groovy', 'haxe', 'html', 'java', 'javascript', 'json', 'latex', 'groovy', 'haxe', 'html', 'java', 'javascript', 'json', 'latex',
@@ -244,6 +244,31 @@ function highlight( element, language ) {
element.parentNode.parentNode.replaceChild( newDiv, element.parentNode ); element.parentNode.parentNode.replaceChild( newDiv, element.parentNode );
} }
// Pygments and Ace have different names for languages.
function pygmentsLanguageToAceMode( declaredLanguage ) {
declaredLanguage = declaredLanguage.toLowerCase();
switch ( declaredLanguage ) {
case 'bash':
return 'sh';
case 'c':
case 'c++':
case 'cpp':
case 'objective-c':
return 'c_cpp';
case 'c#':
return 'csharp';
case 'coffeescript':
return 'coffee';
case 'html+erb':
return 'html'
}
// Assume language name is the same
// if it's not handled above.
return declaredLanguage;
}
var makePreviewHtml = function () { var makePreviewHtml = function () {
var text = editorSession.getValue(); var text = editorSession.getValue();
@@ -294,21 +319,7 @@ var makePreviewHtml = function () {
// the syntax for code highlighting means all code, even one line, contains newlines. // the syntax for code highlighting means all code, even one line, contains newlines.
if ( txt.length > 1 && codeHTML.match( /\n/ ) ) { if ( txt.length > 1 && codeHTML.match( /\n/ ) ) {
var declaredLanguage = element.className.toLowerCase(); var declaredLanguage = element.className.toLowerCase();
var aceMode = declaredLanguage; var aceMode = pygmentsLanguageToAceMode( declaredLanguage );
// GitHub supports 'c', 'c++', 'cpp'
// which must trigger the 'c_cpp' mode in Ace.
if ( declaredLanguage === 'c' ||
declaredLanguage === 'c++' ||
declaredLanguage === 'cpp' ) {
aceMode = 'c_cpp';
}
// Pygments's name for CoffeeScript is 'coffeescript', but Ace
// calls it 'coffee'.
if ( declaredLanguage === 'coffeescript' ) {
aceMode = 'coffee';
}
if ( $.inArray( declaredLanguage, languages ) === -1 ) { if ( $.inArray( declaredLanguage, languages ) === -1 ) {
// Unsupported language. // Unsupported language.
+11 -1
View File
@@ -18,7 +18,17 @@
<script type="text/javascript" src="{{base_url}}/javascript/gollum.dialog.js"></script> <script type="text/javascript" src="{{base_url}}/javascript/gollum.dialog.js"></script>
<script type="text/javascript" src="{{base_url}}/javascript/gollum.placeholder.js"></script> <script type="text/javascript" src="{{base_url}}/javascript/gollum.placeholder.js"></script>
<script type="text/javascript" src="{{base_url}}/javascript/editor/gollum.editor.js"></script> <script type="text/javascript" src="{{base_url}}/javascript/editor/gollum.editor.js"></script>
{{#mathjax}}<script>(function(d,j){ {{#mathjax}}
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ['\\(','\\)']],
displayMath: [ ['$$','$$'], ['\[','\]'] ],
processEscapes: true
},
TeX: { extensions: ["autoload-all.js"] }});
</script>
<script>(function(d,j){
j = d.createElement('script'); j = d.createElement('script');
j.src = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'; j.src = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
(d.head || d.getElementsByTagName('head')[0]).appendChild(j); (d.head || d.getElementsByTagName('head')[0]).appendChild(j);
+39 -53
View File
@@ -33,7 +33,6 @@ module Gollum
@dir = ::File.dirname(page.path) @dir = ::File.dirname(page.path)
@tagmap = {} @tagmap = {}
@codemap = {} @codemap = {}
@texmap = {}
@wsdmap = {} @wsdmap = {}
@premap = {} @premap = {}
@toc = nil @toc = nil
@@ -57,7 +56,6 @@ module Gollum
data = extract_metadata(data) data = extract_metadata(data)
data = extract_gitcode(data) data = extract_gitcode(data)
data = extract_code(data) data = extract_code(data)
data = extract_tex(data)
data = extract_wsd(data) data = extract_wsd(data)
data = extract_tags(data) data = extract_tags(data)
begin begin
@@ -76,10 +74,9 @@ module Gollum
doc,toc = process_headers(doc) doc,toc = process_headers(doc)
@toc = @sub_page ? ( @parent_page ? @parent_page.toc_data : "[[_TOC_]]" ) : toc @toc = @sub_page ? ( @parent_page ? @parent_page.toc_data : "[[_TOC_]]" ) : toc
yield doc if block_given? yield doc if block_given?
data = doc.to_html data = doc.to_xhtml
data = process_toc_tags(data) data = process_toc_tags(data)
data = process_tex(data)
data = process_wsd(data) data = process_wsd(data)
data.gsub!(/<p><\/p>/) do data.gsub!(/<p><\/p>/) do
'' ''
@@ -95,16 +92,13 @@ module Gollum
def process_headers(doc) def process_headers(doc)
toc = nil toc = nil
doc.css('h1,h2,h3,h4,h5,h6').each do |h| doc.css('h1,h2,h3,h4,h5,h6').each do |h|
id = encodeURIComponent(h.content.gsub(' ','-')) # must escape "
h_name = h.content.gsub(' ','-').gsub('"','%22')
level = h.name.gsub(/[hH]/,'').to_i level = h.name.gsub(/[hH]/,'').to_i
# Add anchors # Add anchors
anchor = Nokogiri::XML::Node.new('a', doc) h.add_child(%Q{<a class="anchor" id="#{h_name}" href="##{h_name}"></a>})
anchor['class'] = 'anchor'
anchor['id'] = id
# % -> %25 so anchors work on Firefox. See issue #475
anchor['href'] = '#' + id.gsub('%', '%25')
h.add_child(anchor)
# Build TOC # Build TOC
toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>') toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>')
@@ -122,54 +116,13 @@ module Gollum
end end
node = Nokogiri::XML::Node.new('li', doc) node = Nokogiri::XML::Node.new('li', doc)
# % -> %25 so anchors work on Firefox. See issue #475 # % -> %25 so anchors work on Firefox. See issue #475
node.add_child("<a href='##{id.gsub('%', '%25')}'>#{h.content}</a>") node.add_child(%Q{<a href="##{h_name}">#{h.content}</a>})
tail.add_child(node) tail.add_child(node)
end end
toc = toc.to_xhtml if toc != nil toc = toc.to_xhtml if toc != nil
[doc, toc] [doc, toc]
end end
#########################################################################
#
# TeX
#
#########################################################################
# Extract all TeX into the texmap and replace with placeholders.
#
# data - The raw String data.
#
# Returns the placeholder'd String data.
def extract_tex(data)
data.gsub(/\\\[\s*(.*?)\s*\\\]/m) do
tag = CGI.escapeHTML($1)
id = Digest::SHA1.hexdigest(tag)
@texmap[id] = [:block, tag]
id
end.gsub(/\\\(\s*(.*?)\s*\\\)/m) do
tag = CGI.escapeHTML($1)
id = Digest::SHA1.hexdigest(tag)
@texmap[id] = [:inline, tag]
id
end
end
# Process all TeX from the texmap and replace the placeholders with the
# final markup.
#
# data - The String data (with placeholders).
#
# Returns the marked up String data.
def process_tex(data)
@texmap.each do |id, spec|
type, tex = *spec
data.gsub!(id) do
Gollum::Tex.to_html(tex, type)
end
end
data
end
######################################################################### #########################################################################
# #
# Tags # Tags
@@ -407,6 +360,12 @@ module Gollum
presence = "present" presence = "present"
end end
link = ::File.join(@wiki.base_path, page ? page.escaped_url_path : CGI.escape(link_name)) link = ::File.join(@wiki.base_path, page ? page.escaped_url_path : CGI.escape(link_name))
# //page is invalid
# strip all duplicate forward slashes using helpers.rb trim_leading_slash
# //page => /page
link = trim_leading_slash link
%{<a class="internal #{presence}" href="#{link}#{extra}">#{name}</a>} %{<a class="internal #{presence}" href="#{link}#{extra}">#{name}</a>}
end end
end end
@@ -505,6 +464,33 @@ module Gollum
# #
# Returns the placeholder'd String data. # Returns the placeholder'd String data.
def extract_code(data) def extract_code(data)
data.gsub!(/^([ \t]*)(~~~+) ?([^\r\n]+)?\r?\n(.+?)\r?\n\1(~~~+)\r?$/m) do
m_indent = $1
m_start = $2 # ~~~
m_lang = $3
m_code = $4
m_end = $5 # ~~~
# start and finish tilde fence must be the same length
return '' if m_start.length != m_end.length
lang = m_lang ? m_lang.strip : nil
id = Digest::SHA1.hexdigest("#{lang}.#{m_code}")
cached = check_cache(:code, id)
# extract lang from { .ruby } or { #stuff .ruby .indent }
# see http://johnmacfarlane.net/pandoc/README.html#delimited-code-blocks
lang = lang.match(/\.([^}\s]+)/)
lang = lang[1] unless lang.nil?
@codemap[id] = cached ?
{ :output => cached } :
{ :lang => lang, :code => m_code, :indent => m_indent }
"#{m_indent}#{id}" # print the SHA1 ID with the proper indentation
end
data.gsub!(/^([ \t]*)``` ?([^\r\n]+)?\r?\n(.+?)\r?\n\1```\r?$/m) do data.gsub!(/^([ \t]*)``` ?([^\r\n]+)?\r?\n(.+?)\r?\n\1```\r?$/m) do
lang = $2 ? $2.strip : nil lang = $2 ? $2.strip : nil
id = Digest::SHA1.hexdigest("#{lang}.#{$3}") id = Digest::SHA1.hexdigest("#{lang}.#{$3}")
-14
View File
@@ -1,14 +0,0 @@
require 'escape_utils'
module Gollum
module Tex
TEX_URL = "http://www.mathtran.org/cgi-bin/toy/"
TEX_SIZES = { :inline => 2, :block => 4 }
def self.to_html(tex, type = :inline)
tex_uri = EscapeUtils.escape_uri(tex)
tex_alt = EscapeUtils.escape_html(tex)
%{<img src="#{TEX_URL}?D=#{TEX_SIZES[type]};tex=#{tex_uri}" alt="#{tex_alt}">}
end
end
end
+5
View File
@@ -180,6 +180,7 @@ module Gollum
@live_preview = options.fetch(:live_preview, true) @live_preview = options.fetch(:live_preview, true)
@universal_toc = options.fetch(:universal_toc, false) @universal_toc = options.fetch(:universal_toc, false)
@mathjax = options[:mathjax] || false @mathjax = options[:mathjax] || false
@show_all = options[:show_all] || false
end end
# Public: check whether the wiki's git repo exists on the filesystem. # Public: check whether the wiki's git repo exists on the filesystem.
@@ -588,6 +589,10 @@ module Gollum
# Toggles mathjax. # Toggles mathjax.
attr_reader :mathjax attr_reader :mathjax
# Toggles showing all files in files view. Default is false.
# When false, only valid pages in the git repo are displayed.
attr_reader :show_all
# Normalize the data. # Normalize the data.
# #
# data - The String data to be normalized. # data - The String data to be normalized.
+5 -1
View File
@@ -184,7 +184,7 @@ context "Frontend" do
name = "A" name = "A"
post "/create", :content => 'abc', :page => name, post "/create", :content => 'abc', :page => name,
:format => 'markdown', :message => 'def' :format => 'markdown', :message => 'def'
follow_redirect!
assert last_response.ok? assert last_response.ok?
@wiki.clear_cache @wiki.clear_cache
@@ -273,6 +273,9 @@ context "Frontend" do
Precious::App.set(:wiki_options, { :base_path => '/wiki/' }) Precious::App.set(:wiki_options, { :base_path => '/wiki/' })
get "/" get "/"
assert_match "http://example.org/wiki/Home", last_response.headers['Location'] assert_match "http://example.org/wiki/Home", last_response.headers['Location']
# Reset base path
Precious::App.set(:wiki_options, { :base_path => nil })
end end
test "author details in session are used" do test "author details in session are used" do
@@ -377,6 +380,7 @@ context "Frontend with lotr" do
test "edit pages within sub-directories" do test "edit pages within sub-directories" do
post "/create", :content => 'big smelly creatures', :page => 'Orc', post "/create", :content => 'big smelly creatures', :page => 'Orc',
:path => 'Mordor', :format => 'markdown', :message => 'oooh, scary' :path => 'Mordor', :format => 'markdown', :message => 'oooh, scary'
assert_equal 'http://example.org/Mordor/orc', last_response.headers['Location'] assert_equal 'http://example.org/Mordor/orc', last_response.headers['Location']
post "/edit/Mordor/Orc", :content => 'not so big smelly creatures', post "/edit/Mordor/Orc", :content => 'not so big smelly creatures',
+4
View File
@@ -12,6 +12,10 @@ class FakePage
::File.basename(@filepath, ::File.extname(@filepath)) ::File.basename(@filepath, ::File.extname(@filepath))
end end
def filename
::File.basename(@filepath)
end
def path def path
return @filepath return @filepath
end end
+1 -1
View File
@@ -25,7 +25,7 @@ context "gitcode" do
end end
test 'that the rendered output is correctly fetched and rendered as html code' do test 'that the rendered output is correctly fetched and rendered as html code' do
assert_equal %Q{<p>a</p>\n\n<div class=\"highlight\"><pre><span class=\"nt\">&lt;ol</span> <span class=\"na\">class=</span><span class=\"s\">\"tree\"</span><span class=\"nt\">&gt;</span>\n <span class=\"nt\">&lt;li</span> <span class=\"na\">class=</span><span class=\"s\">\"file\"</span><span class=\"nt\">&gt;&lt;a</span> <span class=\"na\">href=</span><span class=\"s\">\"0\"</span><span class=\"nt\">&gt;</span>0<span class=\"nt\">&lt;/a&gt;&lt;/li&gt;</span>\n<span class=\"nt\">&lt;/ol&gt;</span>\n</pre></div>\n\n<p>b</p>}, @rendered assert_equal %Q{<p>a</p>\n\n<div class=\"highlight\">\n <pre><span class=\"nt\">&lt;ol</span> <span class=\"na\">class=</span><span class=\"s\">\"tree\"</span><span class=\"nt\">&gt;</span>\n <span class=\"nt\">&lt;li</span> <span class=\"na\">class=</span><span class=\"s\">\"file\"</span><span class=\"nt\">&gt;&lt;a</span> <span class=\"na\">href=</span><span class=\"s\">\"0\"</span><span class=\"nt\">&gt;</span>0<span class=\"nt\">&lt;/a&gt;&lt;/li&gt;</span>\n<span class=\"nt\">&lt;/ol&gt;</span>\n</pre>\n</div>\n\n<p>b</p>}, @rendered
end end
test 'contents' do test 'contents' do
+79 -45
View File
@@ -55,6 +55,21 @@ context "Markup" do
# #
######################################################################### #########################################################################
test "absolute link to non-existent page" do
@wiki.write_page("linktest", :markdown, "[[/Page]]", commit_details)
page = @wiki.page("linktest")
doc = Nokogiri::HTML page.formatted_data
paras = doc / :p
para = paras.first
anchors = para / :a
assert_equal 1, paras.size
assert_equal 1, anchors.size
assert_equal 'internal absent', anchors[0]['class']
assert_equal '/Page', anchors[0]['href']
assert_equal '/Page', anchors[0].text
end
test "double page links no space" do test "double page links no space" do
@wiki.write_page("Bilbo Baggins", :markdown, "a [[Foo]][[Bar]] b", commit_details) @wiki.write_page("Bilbo Baggins", :markdown, "a [[Foo]][[Bar]] b", commit_details)
@@ -178,7 +193,7 @@ context "Markup" do
test "wiki link within inline code block" do test "wiki link within inline code block" do
@wiki.write_page("Potato", :markdown, "`sed -i '' 's/[[:space:]]*$//'`", commit_details) @wiki.write_page("Potato", :markdown, "`sed -i '' 's/[[:space:]]*$//'`", commit_details)
page = @wiki.page("Potato") page = @wiki.page("Potato")
assert_equal "<p><code>sed -i '' 's/[[:space:]]*$//'</code></p>", page.formatted_data assert_equal "<p>\n <code>sed -i '' 's/[[:space:]]*$//'</code>\n</p>", page.formatted_data
end end
test "regexp gsub! backref (#383)" do test "regexp gsub! backref (#383)" do
@@ -193,20 +208,57 @@ context "Markup" do
DATA DATA
), commit_details) ), commit_details)
output = @wiki.page(page).formatted_data output = @wiki.page(page).formatted_data
expected = %Q{<pre><code> <div class=\"highlight\"><pre><span class=\"n\">rot13</span><span class=\"p\">=</span><span class=\"s\">'tr '</span><span class=\"o\">\\</span><span class=\"s\">''</span><span class=\"n\">A</span><span class=\"o\">-</span><span class=\"n\">Za</span><span class=\"o\">-</span><span class=\"n\">z</span><span class=\"o\">'\\</span><span class=\"s\">''</span> <span class=\"s\">'\\''N-ZA-Mn-za-m'</span><span class=\"o\">\\</span><span class=\"s\">'</span>\n</pre></div>\n</code></pre>}.strip # remove trailing \n expected = %Q{<pre>\n <code> <div class=\"highlight\"><pre><span class=\"n\">rot13</span><span class=\"p\">=</span><span class=\"s\">'tr '</span><span class=\"o\">\\</span><span class=\"s\">''</span><span class=\"n\">A</span><span class=\"o\">-</span><span class=\"n\">Za</span><span class=\"o\">-</span><span class=\"n\">z</span><span class=\"o\">'\\</span><span class=\"s\">''</span> <span class=\"s\">'\\''N-ZA-Mn-za-m'</span><span class=\"o\">\\</span><span class=\"s\">'</span>\n</pre></div>\n</code>\n</pre>}
assert_equal expected, output
end
test "~~~ code blocks #537" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~ {.ruby}
'hi'
~~~
), commit_details)
output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\">\n <pre><span class=\"s1\">'hi'</span>\n</pre>\n</div>}
assert_equal expected, output
end
test "~~~ code blocks #537 with more than one class" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~ {#hi .ruby .sauce}
'hi'
~~~
), commit_details)
output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\">\n <pre><span class=\"s1\">'hi'</span>\n</pre>\n</div>}
assert_equal expected, output
end
test "~~~ code blocks #537 with lots of tildes" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~~~~ {#hi .ruby .sauce}
~~
'hi'~
~~~~~~
), commit_details)
output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\">\n <pre><span class=\"o\">~~</span>\n<span class=\"s1\">'hi'</span><span class=\"o\">~</span>\n</pre>\n</div>}
assert_equal expected, output assert_equal expected, output
end end
test "wiki link within code block" do test "wiki link within code block" do
@wiki.write_page("Potato", :markdown, " sed -i '' 's/[[:space:]]*$//'", commit_details) @wiki.write_page("Potato", :markdown, " sed -i '' 's/[[:space:]]*$//'", commit_details)
page = @wiki.page("Potato") page = @wiki.page("Potato")
assert_equal "<pre><code>sed -i '' 's/[[:space:]]*$//'\n</code></pre>", page.formatted_data assert_equal "<pre>\n <code>sed -i '' 's/[[:space:]]*$//'\n</code>\n</pre>", page.formatted_data
end end
test "piped wiki link within code block" do test "piped wiki link within code block" do
@wiki.write_page("Potato", :markdown, "`make a link [[home|sweet home]]`", commit_details) @wiki.write_page("Potato", :markdown, "`make a link [[home|sweet home]]`", commit_details)
page = @wiki.page("Potato") page = @wiki.page("Potato")
assert_equal "<p><code>make a link [[home|sweet home]]</code></p>", page.formatted_data assert_equal "<p>\n <code>make a link [[home|sweet home]]</code>\n</p>", page.formatted_data
end end
######################################################################### #########################################################################
@@ -222,7 +274,7 @@ context "Markup" do
page = @wiki.page(name) page = @wiki.page(name)
output = page.formatted_data output = page.formatted_data
assert_equal %{<p>a <img src="#{scheme}://example.com/bilbo.jpg"> b</p>}, output assert_equal %{<p>a <img src=\"#{scheme}://example.com/bilbo.jpg\" /> b</p>}, output
end end
end end
@@ -233,7 +285,7 @@ context "Markup" do
page = @wiki.page(name) page = @wiki.page(name)
output = page.formatted_data output = page.formatted_data
assert_equal %{<p>a <img src="#{scheme}://example.com/bilbo.JPG"> b</p>}, output assert_equal %{<p>a <img src=\"#{scheme}://example.com/bilbo.JPG\" /> b</p>}, output
end end
end end
@@ -245,7 +297,7 @@ context "Markup" do
@wiki.write_page("Bilbo Baggins", :markdown, "a [[/alpha.jpg]] [[a | /alpha.jpg]] b", commit_details) @wiki.write_page("Bilbo Baggins", :markdown, "a [[/alpha.jpg]] [[a | /alpha.jpg]] b", commit_details)
page = @wiki.page("Bilbo Baggins") page = @wiki.page("Bilbo Baggins")
assert_equal %{<p>a <img src="/wiki/alpha.jpg"><a href="/wiki/alpha.jpg">a</a> b</p>}, page.formatted_data assert_equal %{<p>a <img src=\"/wiki/alpha.jpg\" /><a href=\"/wiki/alpha.jpg\">a</a> b</p>}, page.formatted_data
end end
test "image with relative path on root" do test "image with relative path on root" do
@@ -256,7 +308,7 @@ context "Markup" do
index.commit("Add alpha.jpg") index.commit("Add alpha.jpg")
page = @wiki.page("Bilbo Baggins") page = @wiki.page("Bilbo Baggins")
assert_equal %{<p>a <img src="/wiki/alpha.jpg"><a href="/wiki/alpha.jpg">a</a> b</p>}, page.formatted_data assert_equal %Q{<p>a <img src=\"/wiki/alpha.jpg\" /><a href=\"/wiki/alpha.jpg\">a</a> b</p>}, page.formatted_data
end end
test "image with relative path" do test "image with relative path" do
@@ -268,7 +320,7 @@ context "Markup" do
page = @wiki.page("Bilbo Baggins") page = @wiki.page("Bilbo Baggins")
output = page.formatted_data output = page.formatted_data
assert_equal %{<p>a <img src="/wiki/greek/alpha.jpg"><a href="/wiki/greek/alpha.jpg">a</a> b</p>}, output assert_equal %{<p>a <img src=\"/wiki/greek/alpha.jpg\" /><a href=\"/wiki/greek/alpha.jpg\">a</a> b</p>}, output
end end
test "image with absolute path on a preview" do test "image with absolute path on a preview" do
@@ -278,7 +330,7 @@ context "Markup" do
index.commit("Add alpha.jpg") index.commit("Add alpha.jpg")
page = @wiki.preview_page("Test", "a [[/alpha.jpg]] b", :markdown) page = @wiki.preview_page("Test", "a [[/alpha.jpg]] b", :markdown)
assert_equal %{<p>a <img src="/wiki/alpha.jpg"> b</p>}, page.formatted_data assert_equal %{<p>a <img src=\"/wiki/alpha.jpg\" /> b</p>}, page.formatted_data
end end
test "image with relative path on a preview" do test "image with relative path on a preview" do
@@ -289,12 +341,12 @@ context "Markup" do
index.commit("Add alpha.jpg") index.commit("Add alpha.jpg")
page = @wiki.preview_page("Test", "a [[alpha.jpg]] [[greek/alpha.jpg]] b", :markdown) page = @wiki.preview_page("Test", "a [[alpha.jpg]] [[greek/alpha.jpg]] b", :markdown)
assert_equal %{<p>a <img src="/wiki/alpha.jpg"><img src="/wiki/greek/alpha.jpg"> b</p>}, page.formatted_data assert_equal %{<p>a <img src=\"/wiki/alpha.jpg\" /><img src=\"/wiki/greek/alpha.jpg\" /> b</p>}, page.formatted_data
end end
test "image with alt" do test "image with alt" do
content = "a [[alpha.jpg|alt=Alpha Dog]] b" content = "a [[alpha.jpg|alt=Alpha Dog]] b"
output = %{<p>a <img src="/greek/alpha.jpg" alt="Alpha Dog"> b</p>} output = %{<p>a<imgsrc=\"/greek/alpha.jpg\"alt=\"AlphaDog\"/>b</p>}
relative_image(content, output) relative_image(content, output)
end end
@@ -302,7 +354,7 @@ context "Markup" do
%w{em px}.each do |unit| %w{em px}.each do |unit|
%w{width height}.each do |dim| %w{width height}.each do |dim|
content = "a [[alpha.jpg|#{dim}=100#{unit}]] b" content = "a [[alpha.jpg|#{dim}=100#{unit}]] b"
output = "<p>a <img src=\"/greek/alpha.jpg\" #{dim}=\"100#{unit}\"> b</p>" output = "<p>a<imgsrc=\"/greek/alpha.jpg\"#{dim}=\"100#{unit}\"/>b</p>"
relative_image(content, output) relative_image(content, output)
end end
end end
@@ -311,7 +363,7 @@ context "Markup" do
test "image with bogus dimension" do test "image with bogus dimension" do
%w{width height}.each do |dim| %w{width height}.each do |dim|
content = "a [[alpha.jpg|#{dim}=100]] b" content = "a [[alpha.jpg|#{dim}=100]] b"
output = "<p>a <img src=\"/greek/alpha.jpg\"> b</p>" output = "<p>a<imgsrc=\"/greek/alpha.jpg\"/>b</p>"
relative_image(content, output) relative_image(content, output)
end end
end end
@@ -319,7 +371,7 @@ context "Markup" do
test "image with vertical align" do test "image with vertical align" do
%w{top texttop middle absmiddle bottom absbottom baseline}.each do |align| %w{top texttop middle absmiddle bottom absbottom baseline}.each do |align|
content = "a [[alpha.jpg|align=#{align}]] b" content = "a [[alpha.jpg|align=#{align}]] b"
output = "<p>a <img src=\"/greek/alpha.jpg\" align=\"#{align}\"> b</p>" output = %Q{<p>a<imgsrc=\"/greek/alpha.jpg\"align=\"#{align}\"/>b</p>}
relative_image(content, output) relative_image(content, output)
end end
end end
@@ -327,40 +379,40 @@ context "Markup" do
test "image with horizontal align" do test "image with horizontal align" do
%w{left center right}.each do |align| %w{left center right}.each do |align|
content = "a [[alpha.jpg|align=#{align}]] b" content = "a [[alpha.jpg|align=#{align}]] b"
output = "<p>a <span class=\"align-#{align}\"><span><img src=\"/greek/alpha.jpg\"></span></span> b</p>" output = "<p>a<spanclass=\"align-#{align}\"><span><imgsrc=\"/greek/alpha.jpg\"/></span></span>b</p>"
relative_image(content, output) relative_image(content, output)
end end
end end
test "image with float" do test "image with float" do
content = "a\n\n[[alpha.jpg|float]]\n\nb" content = "a\n\n[[alpha.jpg|float]]\n\nb"
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>" output = "<p>a</p><p><spanclass=\"float-left\"><span><imgsrc=\"/greek/alpha.jpg\"/></span></span></p><p>b</p>"
relative_image(content, output) relative_image(content, output)
end end
test "image with float and align" do test "image with float and align" do
%w{left right}.each do |align| %w{left right}.each do |align|
content = "a\n\n[[alpha.jpg|float|align=#{align}]]\n\nb" content = "a\n\n[[alpha.jpg|float|align=#{align}]]\n\nb"
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>" output = "<p>a</p><p><spanclass=\"float-#{align}\"><span><imgsrc=\"/greek/alpha.jpg\"/></span></span></p><p>b</p>"
relative_image(content, output) relative_image(content, output)
end end
end end
test "image with frame" do test "image with frame" do
content = "a\n\n[[alpha.jpg|frame]]\n\nb" content = "a\n\n[[alpha.jpg|frame]]\n\nb"
output = "<p>a</p>\n\n<p><span class=\"frame\"><span><img src=\"/greek/alpha.jpg\"></span></span></p>\n\n<p>b</p>" output = "<p>a</p><p><spanclass=\"frame\"><span><imgsrc=\"/greek/alpha.jpg\"/></span></span></p><p>b</p>"
relative_image(content, output) relative_image(content, output)
end end
test "absolute image with frame" do test "absolute image with frame" do
content = "a\n\n[[http://example.com/bilbo.jpg|frame]]\n\nb" content = "a\n\n[[http://example.com/bilbo.jpg|frame]]\n\nb"
output = "<p>a</p>\n\n<p><span class=\"frame\"><span><img src=\"http://example.com/bilbo.jpg\"></span></span></p>\n\n<p>b</p>" output = "<p>a</p><p><spanclass=\"frame\"><span><imgsrc=\"http://example.com/bilbo.jpg\"/></span></span></p><p>b</p>"
relative_image(content, output) relative_image(content, output)
end end
test "image with frame and alt" do test "image with frame and alt" do
content = "a\n\n[[alpha.jpg|frame|alt=Alpha]]\n\nb" content = "a\n\n[[alpha.jpg|frame|alt=Alpha]]\n\nb"
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>" output = "<p>a</p><p><spanclass=\"frame\"><span><imgsrc=\"/greek/alpha.jpg\"alt=\"Alpha\"/><span>Alpha</span></span></span></p><p>b</p>"
relative_image(content, output) relative_image(content, output)
end end
@@ -409,7 +461,7 @@ context "Markup" do
test "code blocks" do test "code blocks" do
content = "a\n\n```ruby\nx = 1\n```\n\nb" content = "a\n\n```ruby\nx = 1\n```\n\nb"
output = %Q{<p>a</p>\n\n<div class=\"highlight\"><pre><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</pre></div>\n\n<p>b</p>} output = %Q{<p>a</p>\n\n<div class=\"highlight\">\n <pre><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</pre>\n</div>\n\n<p>b</p>}
index = @wiki.repo.index index = @wiki.repo.index
index.add("Bilbo-Baggins.md", content) index.add("Bilbo-Baggins.md", content)
@@ -422,7 +474,7 @@ context "Markup" do
test "code blocks with carriage returns" do test "code blocks with carriage returns" do
content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb" content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb"
output = %Q{<p>a</p>\n\n<div class=\"highlight\"><pre><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</pre></div>\n\n<p>b</p>} output = %Q{<p>a</p>\n\n<div class=\"highlight\">\n <pre><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</pre>\n</div>\n\n<p>b</p>}
index = @wiki.repo.index index = @wiki.repo.index
index.add("Bilbo-Baggins.md", content) index.add("Bilbo-Baggins.md", content)
@@ -453,7 +505,7 @@ context "Markup" do
test "code blocks with multibyte caracters indent" do test "code blocks with multibyte caracters indent" do
content = "a\n\n```ruby\ns = 'やくしまるえつこ'\n```\n\nb" content = "a\n\n```ruby\ns = 'やくしまるえつこ'\n```\n\nb"
output = %Q{<p>a</p>\n\n<div class=\"highlight\"><pre><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"s1\">'やくしまるえつこ'</span>\n</pre></div>\n\n<p>b</p>} output = %Q{<p>a</p>\n\n<div class=\"highlight\">\n <pre><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"s1\">'やくしまるえつこ'</span>\n</pre>\n</div>\n\n<p>b</p>}
index = @wiki.repo.index index = @wiki.repo.index
index.add("Bilbo-Baggins.md", content) index.add("Bilbo-Baggins.md", content)
index.commit("Add alpha.jpg") index.commit("Add alpha.jpg")
@@ -513,7 +565,7 @@ np.array([[2,2],[1,3]],np.float)
output_page = @wiki.page("page").formatted_data output_page = @wiki.page("page").formatted_data
assert_equal %Q{<p>a b</p>}, output_script assert_equal %Q{<p>a b</p>}, output_script
assert_equal %Q{<div class=\"highlight\"><pre><span class=\"nt\">&lt;p&gt;</span>a b<span class=\"nt\">&lt;/p&gt;</span>\n</pre></div>}, output_page assert_equal %Q{<div class=\"highlight\">\n <pre><span class=\"nt\">&lt;p&gt;</span>a b<span class=\"nt\">&lt;/p&gt;</span>\n</pre>\n</div>}, output_page
end end
test "embed code page absolute link" do test "embed code page absolute link" do
@@ -522,7 +574,7 @@ np.array([[2,2],[1,3]],np.float)
page = @wiki.page("a") page = @wiki.page("a")
output = page.formatted_data output = page.formatted_data
assert_equal %Q{<p>a\n</p><div class=\"highlight\"><pre><span class=\"nt\">&lt;p&gt;</span>a\n!base<span class=\"nt\">&lt;/p&gt;</span>\n</pre></div>\n}, output assert_equal %Q{<p>a\n</p><div class=\"highlight\">\n <pre><span class=\"nt\">&lt;p&gt;</span>a\n!base<span class=\"nt\">&lt;/p&gt;</span>\n</pre>\n</div>\n}, output
end end
test "embed code page relative link" do test "embed code page relative link" do
@@ -531,7 +583,7 @@ np.array([[2,2],[1,3]],np.float)
page = @wiki.page("a") page = @wiki.page("a")
output = page.formatted_data output = page.formatted_data
assert_equal %Q{<p>a\n</p><div class=\"highlight\"><pre><span class=\"nt\">&lt;p&gt;</span>a\n!rel<span class=\"nt\">&lt;/p&gt;</span>\n</pre></div>\n}, output assert_equal %Q{<p>a\n</p><div class=\"highlight\">\n <pre><span class=\"nt\">&lt;p&gt;</span>a\n!rel<span class=\"nt\">&lt;/p&gt;</span>\n</pre>\n</div>\n}, output
end end
test "code block in unsupported language" do test "code block in unsupported language" do
@@ -706,24 +758,6 @@ end
] ]
end end
#########################################################################
#
# TeX
#
#########################################################################
test "TeX block syntax" do
content = 'a \[ a^2 \] b'
output = "<p>a<imgsrc=\"http://www.mathtran.org/cgi-bin/toy/?D=4;tex=a%5E2\"alt=\"a^2\">b</p>"
compare(content, output, 'md')
end
test "TeX inline syntax" do
content = 'a \( a^2 \) b'
output = "<p>a<imgsrc=\"http://www.mathtran.org/cgi-bin/toy/?D=2;tex=a%5E2\"alt=\"a^2\">b</p>"
compare(content, output, 'md')
end
######################################################################### #########################################################################
# Asciidoc # Asciidoc
######################################################################### #########################################################################
+1 -1
View File
@@ -16,7 +16,7 @@ context "Page" do
page = @wiki.page('Bilbo Baggins') page = @wiki.page('Bilbo Baggins')
assert_equal Gollum::Page, page.class assert_equal Gollum::Page, page.class
assert page.raw_data =~ /^# Bilbo Baggins\n\nBilbo Baggins/ assert page.raw_data =~ /^# Bilbo Baggins\n\nBilbo Baggins/
assert page.formatted_data =~ %r{<h1>Bilbo Baggins<a class="anchor" id="Bilbo-Baggins" href="#Bilbo-Baggins"></a>\n</h1>\n\n<p>Bilbo Baggins} assert page.formatted_data =~ %r{<h1>Bilbo Baggins<a class="anchor" id="Bilbo-Baggins" href="#Bilbo-Baggins"></a></h1>\n\n<p>Bilbo Baggins}
assert_equal 'Bilbo-Baggins.md', page.path assert_equal 'Bilbo-Baggins.md', page.path
assert_equal :markdown, page.format assert_equal :markdown, page.format
assert_equal @wiki.repo.commits.first.id, page.version.id assert_equal @wiki.repo.commits.first.id, page.version.id
+24 -7
View File
@@ -29,19 +29,36 @@ context "Unicode Support" do
assert_equal "# 한글", utf8(page.raw_data) assert_equal "# 한글", utf8(page.raw_data)
# markup.rb # markup.rb
# #简介
# href.gsub('%', '%25') so the anchor works in Firefox.
# <a href="#%25ED%2595%259C%25EA%25B8%2580" id="%ED%95%9C%EA%B8%80" class="anchor"></a>
doc = Nokogiri::HTML page.formatted_data doc = Nokogiri::HTML page.formatted_data
h1s = doc / :h1 h1s = doc / :h1
h1 = h1s.first h1 = h1s.first
anchors = h1 / :a anchors = h1 / :a
assert_equal 1, h1s.size assert_equal 1, h1s.size
assert_equal 1, anchors.size assert_equal 1, anchors.size
assert_equal '#%25ED%2595%259C%25EA%25B8%2580', anchors[0]['href'] assert_equal '#한글', anchors[0]['href']
assert_equal '%ED%95%9C%EA%B8%80', anchors[0]['id'] assert_equal '한글', anchors[0]['id']
assert_equal 'anchor', anchors[0]['class'] assert_equal 'anchor', anchors[0]['class']
assert_equal '', anchors[0].text assert_equal '', anchors[0].text
end
test "create and read non-latin page with anchor 2" do
@wiki.write_page("test", :markdown, "# \"La\" faune d'Édiacara")
page = @wiki.page("test")
assert_equal Gollum::Page, page.class
assert_equal "# \"La\" faune d'Édiacara", utf8(page.raw_data)
# markup.rb test: ', ", É
doc = Nokogiri::HTML page.formatted_data
h1s = doc / :h1
h1 = h1s.first
anchors = h1 / :a
assert_equal 1, h1s.size
assert_equal 1, anchors.size
assert_equal %q(#%22La%22-faune-d'Édiacara), anchors[0]['href']
assert_equal %q(%22La%22-faune-d'Édiacara), anchors[0]['id']
assert_equal 'anchor', anchors[0]['class']
assert_equal '', anchors[0].text
end end
test "unicode with existing format rules" do test "unicode with existing format rules" do
+11 -1
View File
@@ -123,7 +123,7 @@ context "Wiki page previewing" do
test "preview_page" do test "preview_page" do
page = @wiki.preview_page("Test", "# Bilbo", :markdown) page = @wiki.preview_page("Test", "# Bilbo", :markdown)
assert_equal "# Bilbo", page.raw_data assert_equal "# Bilbo", page.raw_data
assert_equal %Q{<h1>Bilbo<a class="anchor" id="Bilbo" href="#Bilbo"></a>\n</h1>}, page.formatted_data assert_equal %Q{<h1>Bilbo<a class=\"anchor\" id=\"Bilbo\" href=\"#Bilbo\"></a></h1>}, page.formatted_data
assert_equal "Test.md", page.filename assert_equal "Test.md", page.filename
assert_equal "Test", page.name assert_equal "Test", page.name
end end
@@ -142,6 +142,16 @@ context "Wiki TOC" do
assert_equal '<h1>Bilbo<a class="anchor" id="Bilbo" href="#Bilbo"></a></h1>', page.formatted_data.gsub(/\n/,"") assert_equal '<h1>Bilbo<a class="anchor" id="Bilbo" href="#Bilbo"></a></h1>', page.formatted_data.gsub(/\n/,"")
assert_equal %{<div class="toc"><div class="toc-title">Table of Contents</div><ul><li><a href="#Bilbo">Bilbo</a></li></ul></div>}, page.toc_data.gsub(/\n */,"") assert_equal %{<div class="toc"><div class="toc-title">Table of Contents</div><ul><li><a href="#Bilbo">Bilbo</a></li></ul></div>}, page.toc_data.gsub(/\n */,"")
end end
# Ensure ' creates valid links in TOC
# Incorrect: <a href=\"#a\" b=\"\">
# Correct: <a href=\"#a'b\">
test "' in link" do
page = @wiki.preview_page("Test", "# a'b", :markdown)
assert_equal "# a'b", page.raw_data
assert_equal %q{<h1>a'b<a class="anchor" id="a'b" href="#a'b"></a></h1>}, page.formatted_data.gsub(/\n/,"")
assert_equal %{<div class=\"toc\"><div class=\"toc-title\">Table of Contents</div><ul><li><a href=\"#a'b\">a'b</a></li></ul></div>}, page.toc_data.gsub(/\n */,"")
end
end end
context "Wiki page writing" do context "Wiki page writing" do