Compare commits

...

59 Commits

Author SHA1 Message Date
bootstraponline 00751d05b4 Release 2.3.7 2012-11-06 18:27:05 -07:00
bootstraponline b5be5df11a Fix test name 2012-11-06 18:26:49 -07:00
bootstraponline 7d159273fc Merge pull request #569 from dekimsey/issue-568
Fixed #568, triple tilde without language causes Gollum to crash
2012-11-06 17:11:08 -08:00
Daniel Kimsey 70127922ab Added test for #568 2012-11-06 15:49:47 -05:00
Daniel Kimsey b95df93775 Fixes #568, triple-tilde without language causes crash 2012-11-06 15:39:39 -05:00
bootstraponline dc06edcf5b Add x.y.z 2012-11-05 17:30:01 -07:00
bootstraponline fdc437dcd5 Release 2.3.6 2012-11-05 17:28:51 -07:00
bootstraponline f6873c9612 Merge pull request #566 from dekimsey/deterministic-search
Gollum search results now displayed in a deterministic order
2012-11-05 16:17:40 -08:00
Daniel Kimsey 93754ab32d Sort by filename in addition to count 2012-11-05 18:01:50 -05:00
Daniel Kimsey 5759334635 Gollum search results are displayed in a deterministic order 2012-11-05 17:02:19 -05:00
bootstraponline f2f543b72d Release 2.3.5 2012-10-31 20:14:15 -06:00
bootstraponline 598b052be3 Fix clean
Duplicate slashes must be removed everywhere.
2012-10-31 20:11:23 -06:00
bootstraponline a746062422 Merge pull request #564 from nikitug/patch-1
Update README to new Sequence diagram markup style
2012-10-31 19:09:45 -07:00
Nikita Afanasenko c8868d369f Update README to new Sequence diagram markup style 2012-10-31 18:02:28 +04:00
bootstraponline 52c6e7474c Release 2.3.4 2012-10-28 20:59:06 -06:00
bootstraponline be81f09b0e Update gemspec 2012-10-28 12:43:51 -06:00
bootstraponline 6fa4504e31 Fix #551 2012-10-28 12:37:02 -06:00
bootstraponline 992ba01a12 Fix page file dir 2012-10-28 11:57:25 -06:00
bootstraponline 72c5a74cf1 Update test
The test passes when verified manually using bin/gollum. Without a running server the test
will fail so it has been commented out. If there's an easy way to mock Rack::Server
then the test can be restored.
2012-10-27 23:44:11 -06:00
bootstraponline 919f41a0f1 Fix #559 2012-10-27 23:44:11 -06:00
bootstraponline 785921cb0f Fix toc generation 2012-10-27 21:46:30 -06:00
bootstraponline 8c8cda5e7d Fix comment 2012-10-27 21:05:56 -06:00
bootstraponline 64ef74e7e9 Add preview button to live preview 2012-10-27 20:52:54 -06:00
bootstraponline 776df4e6ee Fix nokogiri rendering
https://github.com/sparklemotion/nokogiri/issues/782
2012-10-27 19:52:26 -06:00
bootstraponline 68465a8651 Set indent and encoding 2012-10-27 18:12:32 -06:00
bootstraponline fa16c8960c Fix #560 2012-10-27 17:58:14 -06:00
bootstraponline 2c57915781 Refactor fileview 2012-10-23 23:27:31 -06:00
bootstraponline d0527f1aeb Release 2.3.3 2012-10-23 22:58:41 -06:00
bootstraponline 75083c5b56 Fix collapse tree 2012-10-23 22:36:17 -06:00
bootstraponline 82526594db Add attr reader for collapse tree 2012-10-23 22:22:56 -06:00
bootstraponline 941d39800c Merge pull request #556 from adiknoth/fileview
Documentation and usability enhancement of recent fileview fix
2012-10-23 21:20:28 -07:00
bootstraponline a1ae2e8bc0 Fix #554 2012-10-23 22:14:45 -06:00
bootstraponline 4af6f366ca Fix show_all /pages 2012-10-23 22:09:27 -06:00
Adrian Knoth c7a9534ed9 Add --collapse-tree command line option 2012-10-23 14:27:15 +02:00
Adrian Knoth 00bcbbf72b File View: Add option to collapse file trees.
For potentially large repositories, starting with a collapsed tree may
be beneficial.
2012-10-23 14:27:12 +02:00
Adrian Knoth ed2254ff9f Add missing documentation for --show-all 2012-10-23 14:22:54 +02:00
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
31 changed files with 276 additions and 163 deletions
+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'
+21 -18
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
@@ -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
@@ -383,10 +381,10 @@ You may imbed sequence diagrams into your wiki page (rendered by
[WebSequenceDiagrams](http://www.websequencediagrams.com) by using the [WebSequenceDiagrams](http://www.websequencediagrams.com) by using the
following syntax: following syntax:
{{{ blue-modern {{{{{{ blue-modern
alice->bob: Test alice->bob: Test
bob->alice: Test response bob->alice: Test response
}}} }}}}}}
You can replace the string "blue-modern" with any supported style. You can replace the string "blue-modern" with any supported style.
@@ -413,7 +411,10 @@ 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 `map` in config.ru. See [#532](https://github.com/github/gollum/issues/532). `bin/gollum` now includes a simple map based on base path. 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. > :base_path - String base path for all Wiki links.
> >
@@ -555,6 +556,8 @@ 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
x.y.z
For z releases: For z releases:
$ rake bump $ rake bump
$ rake release $ rake release
+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}"
+8
View File
@@ -68,6 +68,14 @@ 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
opts.on("--collapse-tree", "Collapse file view tree. By default, expanded tree is shown.") do
wiki_options[:collapse_tree] = true
end
end end
# Read command line options into `options` hash # Read command line options into `options` hash
+13 -11
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.8' s.version = '2.3.7'
s.date = '2012-10-14' s.date = '2012-11-06'
s.rubyforge_project = 'gollum' s.rubyforge_project = 'gollum'
s.summary = "A simple, Git-powered wiki." s.summary = "A simple, Git-powered wiki."
@@ -26,22 +26,24 @@ 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')
s.add_development_dependency('pry', '~> 0.9.10')
# required by pry
s.add_development_dependency('rb-readline', '~> 0.4.2')
# = MANIFEST = # = MANIFEST =
s.files = %w[ s.files = %w[
@@ -93,6 +95,7 @@ Gem::Specification.new do |s|
lib/gollum/frontend/public/gollum/javascript/mousetrap.min.js lib/gollum/frontend/public/gollum/javascript/mousetrap.min.js
lib/gollum/frontend/public/gollum/livepreview/css/custom.css lib/gollum/frontend/public/gollum/livepreview/css/custom.css
lib/gollum/frontend/public/gollum/livepreview/images/cancel_24.png lib/gollum/frontend/public/gollum/livepreview/images/cancel_24.png
lib/gollum/frontend/public/gollum/livepreview/images/globe_24.png
lib/gollum/frontend/public/gollum/livepreview/images/lr_24.png lib/gollum/frontend/public/gollum/livepreview/images/lr_24.png
lib/gollum/frontend/public/gollum/livepreview/images/save_24.png lib/gollum/frontend/public/gollum/livepreview/images/save_24.png
lib/gollum/frontend/public/gollum/livepreview/images/savecomment_24.png lib/gollum/frontend/public/gollum/livepreview/images/savecomment_24.png
@@ -458,7 +461,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
@@ -470,4 +472,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
+2 -2
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
# stdlib # stdlib
require 'digest/md5' require 'digest/md5'
require 'ostruct' require 'ostruct'
@@ -18,12 +19,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.8' VERSION = '2.3.7'
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__))
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
class BlobEntry class BlobEntry
# Gets the String SHA for this blob. # Gets the String SHA for this blob.
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
# Responsible for handling the commit process for a Wiki. It sets up the # Responsible for handling the commit process for a Wiki. It sets up the
# Git index, provides methods for modifying the tree, and stores callbacks # Git index, provides methods for modifying the tree, and stores callbacks
+17
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
class File class File
Wiki.file_class = self Wiki.file_class = self
@@ -13,6 +14,22 @@ 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 = self.path
path = path.sub(/\/[^\/]+$/, '/') if path.include?('/')
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.
+19 -4
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
=begin =begin
FileView requires that: FileView requires that:
@@ -5,8 +6,13 @@ 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, options = {}
@pages = pages @pages = pages
@show_all = options[:show_all] || false
@checked = options[:collapse_tree] ? '' : "checked"
end end
def enclose_tree string def enclose_tree string
@@ -26,7 +32,7 @@ module Gollum
def new_sub_folder path def new_sub_folder path
<<-HTML <<-HTML
<li> <li>
<label>#{path}</label> <input type="checkbox" checked /> <label>#{path}</label> <input type="checkbox" #{@checked} />
<ol> <ol>
HTML HTML
end end
@@ -39,7 +45,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
@@ -74,7 +89,7 @@ module Gollum
url = url_for_page page url = url_for_page page
html += <<-HTML html += <<-HTML
<li> <li>
<label>#{::File.dirname(page.path)}</label> <input type="checkbox" checked /> <label>#{::File.dirname(page.path)}</label> <input type="checkbox" #{@checked} />
<ol> <ol>
<li class="file"><a href="#{url}">#{name}</a></li> <li class="file"><a href="#{url}">#{name}</a></li>
</ol> </ol>
+25 -17
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
require 'cgi' require 'cgi'
require 'sinatra' require 'sinatra'
require 'gollum' require 'gollum'
@@ -82,11 +83,12 @@ module Precious
before do before do
@base_url = url('/', false).chomp('/') @base_url = url('/', false).chomp('/')
settings.wiki_options.merge!({ :base_path => @base_url }) unless settings.wiki_options.has_key? :base_path # above will detect base_path when it's used with map in a config.ru
settings.wiki_options.merge!({ :base_path => @base_url })
end end
get '/' do get '/' do
redirect File.join(settings.wiki_options[:page_file_dir].to_s,settings.wiki_options[:base_path].to_s, 'Home') redirect ::File.join(@base_url, 'Home')
end end
# path is set to name if path is nil. # path is set to name if path is nil.
@@ -187,24 +189,20 @@ module Precious
post '/create' do post '/create' do
name = params[:page].to_url name = params[:page].to_url
path = sanitize_empty_params(params[:path]) path = sanitize_empty_params(params[:path]) || ''
path = '' if path.nil?
format = params[:format].intern format = params[:format].intern
page_dir = File.join(settings.wiki_options[:page_file_dir].to_s, # ensure pages are created in page_file_dir
settings.wiki_options[:base_path].to_s) page_dir = settings.wiki_options[:page_file_dir].to_s
# Home is a special case. path = clean_url(::File.join(page_dir, path)) unless path.start_with?(page_dir)
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 => page_dir }) 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)
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(page_dir,name)))}") redirect to("/#{clean_url(::File.join(path,name))}")
rescue Gollum::DuplicatePageError => e rescue Gollum::DuplicatePageError => e
@message = "Duplicate page: #{e.message}" @message = "Duplicate page: #{e.message}"
mustache :error mustache :error
@@ -308,7 +306,8 @@ module Precious
get '/search' do get '/search' do
@query = params[:q] @query = params[:q]
wiki = wiki_new wiki = wiki_new
@results = wiki.search @query # Sort wiki search results by count (desc) and then by name (asc)
@results = wiki.search(@query).sort{ |a, b| (a[:count] <=> b[:count]).nonzero? || b[:name] <=> a[:name] }.reverse
@name = @query @name = @query
mustache :search mustache :search
end end
@@ -323,13 +322,21 @@ 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 = wiki_new
@results = Gollum::FileView.new(wiki.pages).render_files options = settings.wiki_options
content = wiki.pages
# if showing all files include wiki.files
content += wiki.files if options[:show_all]
# must pass wiki_options to FileView
# --show-all and --collapse-tree can be set.
@results = Gollum::FileView.new(content, options).render_files
@ref = wiki.ref @ref = wiki.ref
mustache :file_view, { :layout => false } mustache :file_view, { :layout => false }
end end
@@ -340,10 +347,11 @@ module Precious
def show_page_or_file(fullpath) def show_page_or_file(fullpath)
name = extract_name(fullpath) name = extract_name(fullpath)
path = extract_path(fullpath) path = extract_path(fullpath) || '/'
wiki = wiki_new wiki = wiki_new
path = '/' if path.nil? page_dir = settings.wiki_options[:page_file_dir].to_s
path = ::File.join(page_dir, path) unless path.start_with?(page_dir)
if page = wiki.paged(name, path, exact = true) if page = wiki.paged(name, path, exact = true)
@page = page @page = page
+3 -1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Precious module Precious
module Helpers module Helpers
# Extract the path string that Gollum::Wiki expects # Extract the path string that Gollum::Wiki expects
@@ -19,9 +20,10 @@ module Precious
end end
# Remove all slashes from the start of string. # Remove all slashes from the start of string.
# Remove all double slashes
def clean_url url def clean_url url
return url if url.nil? return url if url.nil?
url.gsub('%2F','/').gsub(/^\/+/,'') url.gsub('%2F','/').gsub(/^\/+/,'').gsub('//','/')
end end
def trim_leading_slash url def trim_leading_slash url
Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

@@ -11,6 +11,7 @@
<div id='previewframe'><div id='contentframe' class='markdown-body'></div></div> <div id='previewframe'><div id='contentframe' class='markdown-body'></div></div>
<!-- tool panel from notepage.es. save & savecomment icons from Retina Display Icon Set. --> <!-- tool panel from notepage.es. save & savecomment icons from Retina Display Icon Set. -->
<div id='toolpanel' class='toolpanel edit' style='width: 500px; right: 0px; visibility: hidden;'> <div id='toolpanel' class='toolpanel edit' style='width: 500px; right: 0px; visibility: hidden;'>
<a id='preview' class='edit'><img src='images/globe_24.png' alt='Preview' title='Preview'></a>
<a id='save' class='edit'><img src='images/save_24.png' alt='Save' title='Save'></a> <a id='save' class='edit'><img src='images/save_24.png' alt='Save' title='Save'></a>
<a id='savecomment' class='edit'><img src='images/savecomment_24.png' alt='Save with comment' title='Save with comment'></a> <a id='savecomment' class='edit'><img src='images/savecomment_24.png' alt='Save with comment' title='Save with comment'></a>
<a id='toggle' class='edit' href='javascript:void(0)' onclick='jsm.toggleLeftRight();'><img src='images/lr_24.png' alt='Toggle left to right' title='Toggle left to right'></a> <a id='toggle' class='edit' href='javascript:void(0)' onclick='jsm.toggleLeftRight();'><img src='images/lr_24.png' alt='Toggle left to right' title='Toggle left to right'></a>
@@ -87,6 +87,18 @@ defaultCommitMessage = function() {
// Set comment using the default commit message. // Set comment using the default commit message.
commentEditorSession.setValue( defaultCommitMessage() ); commentEditorSession.setValue( defaultCommitMessage() );
$.preview = function( previewWindow ) {
jQuery.ajax( {
type: 'POST',
url: baseUrl + '/preview',
data: { page: 'Preview: ' + pageName, format: 'markdown', content: editorSession.getValue() },
success: function( html ) {
previewWindow.document.write( html );
previewWindow.focus();
}
});
}
$.save = function( commitMessage ) { $.save = function( commitMessage ) {
win.onbeforeunload = null; win.onbeforeunload = null;
@@ -96,8 +108,9 @@ $.save = function( commitMessage ) {
var msg = defaultCommitMessage(); var msg = defaultCommitMessage();
var newLocation = baseUrl; var newLocation = baseUrl;
// Remove all duplicate slashes
function clean( str ) { function clean( str ) {
return str.replace(/^\/+/, '/'); return str.replace(/\/+/g, '/');
} }
// 'a%2Fb' => a/b // 'a%2Fb' => a/b
@@ -377,8 +390,16 @@ var applyTimeout = function () {
}); });
} }
$( '#preview' ).click( function() {
$(this).target = "_blank";
// pass window into preview
$.preview( window.open() );
return false;
});
$( '#save' ).click( function() { $( '#save' ).click( function() {
$.save(); $.save();
return false;
}); });
// Hide dimmer, comment tool panel, and comment. // Hide dimmer, comment tool panel, and comment.
@@ -15,7 +15,10 @@ CC BY-SA 3.0 Unported
http://blog.twg.ca/2010/11/retina-display-icon-set/ http://blog.twg.ca/2010/11/retina-display-icon-set/
http://creativecommons.org/licenses/by-sa/3.0/legalcode.txt http://creativecommons.org/licenses/by-sa/3.0/legalcode.txt
lib/gollum/frontend/public/images/savecomment_24.png
lib/gollum/frontend/public/images/cancel_24.png
lib/gollum/frontend/public/images/save_24.png lib/gollum/frontend/public/images/save_24.png
lib/gollum/frontend/public/images/globe_24.png
--- ---
+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);
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
# Controls all access to the Git objects from Gollum. Extend this class to # Controls all access to the Git objects from Gollum. Extend this class to
# add custom caching for special cases. # add custom caching for special cases.
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
require 'net/http' require 'net/http'
require 'net/https' # ruby 1.8.7 fix, remove at upgrade require 'net/https' # ruby 1.8.7 fix, remove at upgrade
require 'uri' require 'uri'
+18 -50
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
require 'digest/sha1' require 'digest/sha1'
require 'cgi' require 'cgi'
require 'pygments' require 'pygments'
@@ -33,11 +34,11 @@ 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
@metadata = nil @metadata = nil
@to_xml = { :save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML ^ 1, :indent => 0, :encoding => 'UTF-8' }
end end
# Render the content with Gollum wiki syntax on top of the file's own # Render the content with Gollum wiki syntax on top of the file's own
@@ -57,7 +58,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,14 +76,18 @@ 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_xhtml # nokogiri's save options are ored together. FORMAT has a value of 1 so ^ 1 removes it.
# formatting will create extra spaces in pre tags.
# https://github.com/sparklemotion/nokogiri/issues/782
# DEFAULT_HTML encodes unicode so XHTML is used for proper unicode support in href.
data = doc.to_xml( @to_xml )
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
'' ''
end end
data data
end end
@@ -95,7 +99,8 @@ 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|
h_name = 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
@@ -121,51 +126,10 @@ module Gollum
node.add_child(%Q{<a href="##{h_name}">#{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_xml(@to_xml) 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
@@ -524,8 +488,10 @@ module Gollum
# extract lang from { .ruby } or { #stuff .ruby .indent } # extract lang from { .ruby } or { #stuff .ruby .indent }
# see http://johnmacfarlane.net/pandoc/README.html#delimited-code-blocks # see http://johnmacfarlane.net/pandoc/README.html#delimited-code-blocks
lang = lang.match(/\.([^}\s]+)/) if lang
lang = lang[1] unless lang.nil? lang = lang.match(/\.([^}\s]+)/)
lang = lang[1] unless lang.nil?
end
@codemap[id] = cached ? @codemap[id] = cached ?
{ :output => cached } : { :output => cached } :
@@ -586,7 +552,9 @@ module Gollum
blocks.each do |lang, code| blocks.each do |lang, code|
encoding ||= 'utf-8' encoding ||= 'utf-8'
begin begin
hl_code = Pygments.highlight(code, :lexer => lang, :options => {:encoding => encoding.to_s}) # must set startinline to true for php to be highlighted without <?
# http://pygments.org/docs/lexers/
hl_code = Pygments.highlight(code, :lexer => lang, :options => {:encoding => encoding.to_s, :startinline => true})
rescue rescue
hl_code = code hl_code = code
end end
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
class Page class Page
include Pagination include Pagination
+2 -1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
module Pagination module Pagination
def self.included(klass) def self.included(klass)
@@ -58,4 +59,4 @@ module Gollum
self.class.log_pagination_options(options) self.class.log_pagination_options(options)
end end
end end
end end
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
# Encapsulate sanitization options. # Encapsulate sanitization options.
# #
-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
+1
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
require 'net/http' require 'net/http'
require 'uri' require 'uri'
require 'open-uri' require 'open-uri'
+13
View File
@@ -1,3 +1,4 @@
# ~*~ encoding: utf-8 ~*~
module Gollum module Gollum
class Wiki class Wiki
include Pagination include Pagination
@@ -154,6 +155,9 @@ module Gollum
# :ref - String the repository ref to retrieve pages from # :ref - String the repository ref to retrieve pages from
# :ws_subs - Array of chars to sub for ws in filenames. # :ws_subs - Array of chars to sub for ws in filenames.
# :mathjax - Set to false to disable mathjax. # :mathjax - Set to false to disable mathjax.
# :show_all - Show all files in file view, not just valid pages.
# Default: false
# :collapse_tree - Start with collapsed file view. Default: false
# #
# Returns a fresh Gollum::Repo. # Returns a fresh Gollum::Repo.
def initialize(path, options = {}) def initialize(path, options = {})
@@ -180,6 +184,8 @@ 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
@collapse_tree = options[:collapse_tree] || 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 +594,13 @@ 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
# Start with collapsed file view. Default: false
attr_reader :collapse_tree
# Normalize the data. # Normalize the data.
# #
# data - The String data to be normalized. # data - The String data to be normalized.
+36
View File
@@ -185,6 +185,8 @@ context "Frontend" do
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
@@ -260,6 +262,9 @@ context "Frontend" do
page2 = @wiki.page('A') page2 = @wiki.page('A')
assert_equal page1.version.sha, page2.version.sha assert_equal page1.version.sha, page2.version.sha
end end
=begin
# redirects are now handled by class MapGollum in bin/gollum
# they should be set in config.ru
test "redirects from 'base_path' or 'base_path/' to 'base_path/Home'" do test "redirects from 'base_path' or 'base_path/' to 'base_path/Home'" do
Precious::App.set(:wiki_options, {}) Precious::App.set(:wiki_options, {})
@@ -277,6 +282,7 @@ context "Frontend" do
# Reset base path # Reset base path
Precious::App.set(:wiki_options, { :base_path => nil }) Precious::App.set(:wiki_options, { :base_path => nil })
end end
=end
test "author details in session are used" do test "author details in session are used" do
page1 = @wiki.page('A') page1 = @wiki.page('A')
@@ -363,6 +369,36 @@ context "Frontend with lotr" do
assert body.include?("Eye Of Sauron"), "/pages/Mordor/ should include the page 'Eye Of Sauron'" assert body.include?("Eye Of Sauron"), "/pages/Mordor/ should include the page 'Eye Of Sauron'"
end end
# base path requires 'map' in a config.ru to work correctly.
test "create pages within sub-directories using base path" do
Precious::App.set(:wiki_options, { :base_path => 'wiki' })
page = 'path'
post "/create", :content => '123', :page => page,
:path => 'Mordor', :format => 'markdown', :message => 'oooh, scary'
# should be wiki/Mordor/path
assert_equal 'http://example.org/Mordor/' + page, last_response.headers['Location']
get '/Mordor/' + page
assert_match /123/, last_response.body
# Reset base path
Precious::App.set(:wiki_options, { :base_path => nil })
end
test "create pages within sub-directories using page file dir" do
Precious::App.set(:wiki_options, { :page_file_dir => 'wiki' })
post "/create", :content => 'one two', :page => 'base',
:path => 'Mordor', :format => 'markdown', :message => 'oooh, scary'
assert_equal 'http://example.org/wiki/Mordor/base', last_response.headers['Location']
get "/wiki/Mordor/base"
# Reset page_file_dir after request but before matching.
Precious::App.set(:wiki_options, { :page_file_dir => nil })
assert_match /one two/, last_response.body
end
test "create pages within sub-directories" do test "create 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'
+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\">\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 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
end end
test 'contents' do test 'contents' do
+42 -35
View File
@@ -193,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>\n <code>sed -i '' 's/[[:space:]]*$//'</code>\n</p>", page.formatted_data assert_equal "<p><code>sed -i '' 's/[[:space:]]*$//'</code></p>", page.formatted_data
end end
test "regexp gsub! backref (#383)" do test "regexp gsub! backref (#383)" do
@@ -208,11 +208,24 @@ context "Markup" do
DATA DATA
), commit_details) ), commit_details)
output = @wiki.page(page).formatted_data output = @wiki.page(page).formatted_data
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>} 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>}
assert_equal expected, output assert_equal expected, output
end end
test "~~~ code blocks #537" do # Issue #568
test "tilde code blocks without a language" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~
'hi'
~~~
), commit_details)
output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\"><pre><span class=\"s\">'hi'</span>\n</pre></div>}
assert_equal expected, output
end
test "tilde code blocks #537" do
page = 'test_rgx' page = 'test_rgx'
@wiki.write_page(page, :markdown, @wiki.write_page(page, :markdown,
%Q(~~~ {.ruby} %Q(~~~ {.ruby}
@@ -220,11 +233,12 @@ context "Markup" do
~~~ ~~~
), commit_details) ), commit_details)
output = @wiki.page(page).formatted_data output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\">\n <pre><span class=\"s1\">'hi'</span>\n</pre>\n</div>} expected = %Q{<div class=\"highlight\"><pre><span class=\"s1\">'hi'</span>\n</pre></div>}
assert_equal expected, output assert_equal expected, output
end end
test "~~~ code blocks #537 with more than one class" do # Issue #537
test "tilde code blocks with more than one class" do
page = 'test_rgx' page = 'test_rgx'
@wiki.write_page(page, :markdown, @wiki.write_page(page, :markdown,
%Q(~~~ {#hi .ruby .sauce} %Q(~~~ {#hi .ruby .sauce}
@@ -232,11 +246,12 @@ context "Markup" do
~~~ ~~~
), commit_details) ), commit_details)
output = @wiki.page(page).formatted_data output = @wiki.page(page).formatted_data
expected = %Q{<div class=\"highlight\">\n <pre><span class=\"s1\">'hi'</span>\n</pre>\n</div>} expected = %Q{<div class=\"highlight\"><pre><span class=\"s1\">'hi'</span>\n</pre></div>}
assert_equal expected, output assert_equal expected, output
end end
test "~~~ code blocks #537 with lots of tildes" do # Issue #537
test "tilde code blocks with lots of tildes" do
page = 'test_rgx' page = 'test_rgx'
@wiki.write_page(page, :markdown, @wiki.write_page(page, :markdown,
%Q(~~~~~~ {#hi .ruby .sauce} %Q(~~~~~~ {#hi .ruby .sauce}
@@ -245,20 +260,30 @@ context "Markup" do
~~~~~~ ~~~~~~
), commit_details) ), commit_details)
output = @wiki.page(page).formatted_data 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>} expected = %Q{<div class=\"highlight\"><pre><span class=\"o\">~~</span>\n<span class=\"s1\">'hi'</span><span class=\"o\">~</span>\n</pre></div>}
assert_equal expected, output
end
test "four space indented code block" do
page = 'test_four'
@wiki.write_page(page, :markdown,
%( test
test), commit_details)
output = @wiki.page(page).formatted_data
expected = %(<pre><code>test\ntest\n</code></pre>)
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>\n <code>sed -i '' 's/[[:space:]]*$//'\n</code>\n</pre>", page.formatted_data assert_equal "<pre><code>sed -i '' 's/[[:space:]]*$//'\n</code></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>\n <code>make a link [[home|sweet home]]</code>\n</p>", page.formatted_data assert_equal "<p><code>make a link [[home|sweet home]]</code></p>", page.formatted_data
end end
######################################################################### #########################################################################
@@ -459,9 +484,9 @@ context "Markup" do
# #
######################################################################### #########################################################################
test "code blocks" do test "regular 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\">\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>} 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>}
index = @wiki.repo.index index = @wiki.repo.index
index.add("Bilbo-Baggins.md", content) index.add("Bilbo-Baggins.md", content)
@@ -474,7 +499,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\">\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>} 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>}
index = @wiki.repo.index index = @wiki.repo.index
index.add("Bilbo-Baggins.md", content) index.add("Bilbo-Baggins.md", content)
@@ -505,7 +530,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\">\n <pre><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"s1\">'やくしまるえつこ'</span>\n</pre>\n</div>\n\n<p>b</p>} 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>}
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")
@@ -565,7 +590,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\">\n <pre><span class=\"nt\">&lt;p&gt;</span>a b<span class=\"nt\">&lt;/p&gt;</span>\n</pre>\n</div>}, output_page 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
end end
test "embed code page absolute link" do test "embed code page absolute link" do
@@ -574,7 +599,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\">\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 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
end end
test "embed code page relative link" do test "embed code page relative link" do
@@ -583,7 +608,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\">\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 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
end end
test "code block in unsupported language" do test "code block in unsupported language" do
@@ -758,24 +783,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
######################################################################### #########################################################################
+5 -5
View File
@@ -42,21 +42,21 @@ context "Unicode Support" do
end end
test "create and read non-latin page with anchor 2" do test "create and read non-latin page with anchor 2" do
@wiki.write_page("test", :markdown, "# La faune d'Édiacara") @wiki.write_page("test", :markdown, "# \"La\" faune d'Édiacara")
page = @wiki.page("test") page = @wiki.page("test")
assert_equal Gollum::Page, page.class assert_equal Gollum::Page, page.class
assert_equal "# La faune d'Édiacara", utf8(page.raw_data) assert_equal "# \"La\" faune d'Édiacara", utf8(page.raw_data)
# markup.rb # markup.rb test: ', ", É
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 %q(#La-faune-d'Édiacara), anchors[0]['href'] assert_equal %q(#%22La%22-faune-d'Édiacara), anchors[0]['href']
assert_equal %q(La-faune-d'Édiacara), anchors[0]['id'] assert_equal %q(%22La%22-faune-d'Édiacara), 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 end