Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f68d96815 | |||
| 015cd895d2 | |||
| 5fa4b48d85 | |||
| 88a3783bbc | |||
| ea2254b9bd | |||
| 9a0c1f2605 | |||
| 008f26bb7d | |||
| 69e453ea0b | |||
| 88b0b608f4 | |||
| 19e3987ae3 | |||
| c72e91ddaf | |||
| c789dd5067 | |||
| 551949de29 | |||
| 80730ee87a | |||
| 71028adc9e | |||
| a2efebc06c |
+3
-3
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
|
||||
s.required_ruby_version = ">= 1.8.7"
|
||||
|
||||
s.name = 'gollum'
|
||||
s.version = '2.1.0'
|
||||
s.date = '2012-08-01'
|
||||
s.version = '2.1.2'
|
||||
s.date = '2012-08-06'
|
||||
s.rubyforge_project = 'gollum'
|
||||
|
||||
s.summary = "A simple, Git-powered wiki."
|
||||
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
|
||||
|
||||
s.add_development_dependency('RedCloth')
|
||||
s.add_development_dependency('mocha')
|
||||
s.add_development_dependency('org-ruby', '~>0.6.3')
|
||||
s.add_development_dependency('org-ruby', '~> 0.7.0')
|
||||
s.add_development_dependency('shoulda')
|
||||
s.add_development_dependency('rack-test')
|
||||
s.add_development_dependency('wikicloth', '~>0.8.0')
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ require File.expand_path('../gollum/tex', __FILE__)
|
||||
require File.expand_path('../gollum/web_sequence_diagram', __FILE__)
|
||||
|
||||
module Gollum
|
||||
VERSION = '2.1.0'
|
||||
VERSION = '2.1.2'
|
||||
|
||||
def self.assets_path
|
||||
::File.expand_path('gollum/frontend/public', ::File.dirname(__FILE__))
|
||||
|
||||
+14
-10
@@ -82,7 +82,7 @@ module Precious
|
||||
end
|
||||
|
||||
before do
|
||||
@base_url = settings.wiki_options.has_key?(:base_url) ? settings.wiki_options[:base_url] : url('/')
|
||||
@base_url = url('/', false)
|
||||
settings.wiki_options.merge!({ :base_path => @base_url }) unless settings.wiki_options.has_key? :base_path
|
||||
end
|
||||
|
||||
@@ -90,12 +90,16 @@ module Precious
|
||||
show_page_or_file('Home')
|
||||
end
|
||||
|
||||
# path is set to name if path is nil.
|
||||
# if path is 'a/b' and a and b are dirs, then
|
||||
# path must have a trailing slash 'a/b/' or
|
||||
# extract_path will trim path to 'a'
|
||||
# name, path, version
|
||||
def wiki_page( name, path = nil, version = nil)
|
||||
path = name if path.nil?
|
||||
|
||||
name = extract_name(name)
|
||||
path = extract_path(path)
|
||||
|
||||
wiki = wiki_new
|
||||
|
||||
OpenStruct.new(:wiki => wiki, :page => wiki.paged(name, path, version),
|
||||
@@ -137,7 +141,7 @@ module Precious
|
||||
end
|
||||
|
||||
post '/edit/*' do
|
||||
wikip = wiki_page(CGI.unescape(params[:page]), sanitize_empty_params(params[:path]))
|
||||
wikip = wiki_page(CGI.unescape(params[:page]), sanitize_empty_params(params[:path]))
|
||||
path = wikip.path
|
||||
wiki = wikip.wiki
|
||||
page = wikip.page
|
||||
@@ -168,9 +172,8 @@ module Precious
|
||||
end
|
||||
|
||||
get '/create/*' do
|
||||
splat = params[:splat].first
|
||||
wikip = wiki_page(extract_name(splat).to_url, splat)
|
||||
@name = wikip.name
|
||||
wikip = wiki_page(params[:splat].first)
|
||||
@name = wikip.name.to_url
|
||||
@path = wikip.path
|
||||
|
||||
page = wikip.page
|
||||
@@ -193,7 +196,7 @@ module Precious
|
||||
begin
|
||||
wiki.write_page(name, format, params[:content], commit_message)
|
||||
page = wiki.page(name)
|
||||
redirect to("/#{page.escaped_url_path}")
|
||||
redirect to("/#{page.escaped_url_path}") unless page.nil?
|
||||
rescue Gollum::DuplicatePageError => e
|
||||
@message = "Duplicate page: #{e.message}"
|
||||
mustache :error
|
||||
@@ -285,10 +288,11 @@ module Precious
|
||||
|
||||
get %r{/(.+?)/([0-9a-f]{40})} do
|
||||
file_path = params[:captures][0]
|
||||
name = extract_name(file_path)
|
||||
path = extract_path(file_path)
|
||||
version = params[:captures][1]
|
||||
if page = wiki_page(name, path, version).page
|
||||
wikip = wiki_page(file_path, file_path, version)
|
||||
name = wikip.name
|
||||
path = wikip.path
|
||||
if page = wikip.page
|
||||
@page = page
|
||||
@name = name
|
||||
@content = page.formatted_data
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
setActiveLanguage: function( name ) {
|
||||
// On first load _ACTIVE_LANG.length is 0 and evtChangeFormat isn't called.
|
||||
if ( LanguageDefinition._ACTIVE_LANG.length <= 0 ) {
|
||||
if ( LanguageDefinition._ACTIVE_LANG != null && LanguageDefinition._ACTIVE_LANG.length <= 0 ) {
|
||||
FormatSelector.updateCommitMessage( name );
|
||||
}
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
}
|
||||
|
||||
// attempt to load the definition for this language
|
||||
var script_uri = baseUrl + '/javascript/editor/langs/' + markup_name + '.js';
|
||||
var script_uri = '.' + baseUrl + '/javascript/editor/langs/' + markup_name + '.js';
|
||||
$.ajax({
|
||||
url: script_uri,
|
||||
dataType: 'script',
|
||||
|
||||
@@ -157,7 +157,7 @@ $(document).ready(function() {
|
||||
var path = location.pathname;
|
||||
// ensure there's more than one slash in pathname.
|
||||
if (path.split('/').length > 2) {
|
||||
path = path.substr(path.lastIndexOf('/')+1) + '/';
|
||||
path = path.substr(0, path.lastIndexOf('/') + 1);
|
||||
} else {
|
||||
path = '';
|
||||
}
|
||||
|
||||
@@ -99,8 +99,10 @@ $.save = function( commitMessage ) {
|
||||
var msg = defaultCommitMessage();
|
||||
var newLocation = location.protocol + '//' + location.host + baseUrl;
|
||||
|
||||
// 'a%2Fb' => a/b
|
||||
if (pathName) {
|
||||
newLocation += '/' + pathName;
|
||||
newLocation += '/' + unescape(pathName);
|
||||
pathName = pathName + '/'; // pathName must end with /
|
||||
}
|
||||
|
||||
newLocation += '/' + pageName;
|
||||
|
||||
@@ -79,6 +79,17 @@ module Precious
|
||||
def mathjax
|
||||
@mathjax
|
||||
end
|
||||
|
||||
# Access to embedded metadata.
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# {{#metadata}}{{name}}{{/metadata}}
|
||||
#
|
||||
# Returns Hash.
|
||||
def metadata
|
||||
@page.metadata
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+28
-1
@@ -7,6 +7,8 @@ module Gollum
|
||||
|
||||
class Markup
|
||||
attr_accessor :toc
|
||||
attr_reader :metadata
|
||||
|
||||
# Initialize a new Markup object.
|
||||
#
|
||||
# page - The Gollum::Page.
|
||||
@@ -27,6 +29,7 @@ module Gollum
|
||||
@wsdmap = {}
|
||||
@premap = {}
|
||||
@toc = nil
|
||||
@metadata = nil
|
||||
end
|
||||
|
||||
# Render the content with Gollum wiki syntax on top of the file's own
|
||||
@@ -43,6 +46,7 @@ module Gollum
|
||||
@wiki.sanitizer
|
||||
|
||||
data = @data.dup
|
||||
data = extract_metadata(data)
|
||||
data = extract_code(data)
|
||||
data = extract_tex(data)
|
||||
data = extract_wsd(data)
|
||||
@@ -399,7 +403,7 @@ module Gollum
|
||||
link_name = @wiki.page_class.cname(page.name)
|
||||
presence = "present"
|
||||
end
|
||||
link = ::File.join(@wiki.base_path, CGI.escape(link_name))
|
||||
link = ::File.join(@wiki.base_path, page ? page.escaped_url_path : CGI.escape(link_name))
|
||||
%{<a class="internal #{presence}" href="#{link}#{extra}">#{name}</a>}
|
||||
end
|
||||
end
|
||||
@@ -565,6 +569,29 @@ module Gollum
|
||||
data
|
||||
end
|
||||
|
||||
#########################################################################
|
||||
#
|
||||
# Metadata
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
# Extract metadata for data and build metadata table. Metadata
|
||||
# is content found between `<!-- ---` and `-->` markers, and must
|
||||
# be a valid YAML mapping.
|
||||
#
|
||||
# Returns the String of formatted data with metadata removed.
|
||||
def extract_metadata(data)
|
||||
@metadata ||= {}
|
||||
data.gsub(/\<\!--+\s+---(.*?)--+\>/m) do
|
||||
yaml = @wiki.sanitizer.clean($1)
|
||||
hash = YAML.load(yaml)
|
||||
if Hash === hash
|
||||
@metadata.update(hash)
|
||||
end
|
||||
''
|
||||
end
|
||||
end
|
||||
|
||||
# Hook for getting the formatted value of extracted tag data.
|
||||
#
|
||||
# type - Symbol value identifying what type of data is being extracted.
|
||||
|
||||
@@ -217,6 +217,14 @@ module Gollum
|
||||
markup_class.toc
|
||||
end
|
||||
|
||||
# Public: Embedded metadata.
|
||||
#
|
||||
# Returns Hash of metadata.
|
||||
def meta_data()
|
||||
formatted_data if markup_class.metadata == nil
|
||||
markup_class.metadata
|
||||
end
|
||||
|
||||
# Public: The format of the page.
|
||||
#
|
||||
# Returns the Symbol format of the page. One of:
|
||||
|
||||
@@ -142,6 +142,23 @@ context "Frontend" do
|
||||
assert last_response.ok?
|
||||
end
|
||||
|
||||
test "page create and edit with dash" do
|
||||
page = 'c-d-e'
|
||||
path = 'a/b/' # path must end with /
|
||||
|
||||
post '/create', :content => 'create_msg', :page => page,
|
||||
:path => path, :format => 'markdown', :message => ''
|
||||
assert_equal 'create_msg', @wiki.paged(page, path).raw_data
|
||||
|
||||
# must clear or create_msg will be returned
|
||||
@wiki.clear_cache
|
||||
|
||||
# post '/edit' fails. post '/edit/' works.
|
||||
post '/edit/', :content => 'edit_msg',
|
||||
:page => page, :path => path, :message => ''
|
||||
assert_equal 'edit_msg', @wiki.paged(page, path).raw_data
|
||||
end
|
||||
|
||||
test "guards against creation of existing page" do
|
||||
name = "A"
|
||||
post "/create", :content => 'abc', :page => name,
|
||||
|
||||
@@ -517,6 +517,57 @@ np.array([[2,2],[1,3]],np.float)
|
||||
assert_not_nil rendered.match(output)
|
||||
end
|
||||
|
||||
#########################################################################
|
||||
#
|
||||
# Metadata Blocks
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
test "metadata blocks" do
|
||||
content = "a\n\n<!-- ---\ntags: [foo, bar]\n-->\n\nb"
|
||||
output = "<p>a</p>\n\n<p>b</p>"
|
||||
result = {'tags'=>['foo','bar']}
|
||||
|
||||
index = @wiki.repo.index
|
||||
index.add("Bilbo-Baggins.md", content)
|
||||
index.commit("Add metadata")
|
||||
|
||||
page = @wiki.page("Bilbo Baggins")
|
||||
rendered = Gollum::Markup.new(page).render
|
||||
assert_equal output, rendered
|
||||
assert_equal result, page.meta_data
|
||||
end
|
||||
|
||||
test "metadata blocks with newline" do
|
||||
content = "a\n\n<!--\n---\ntags: [foo, bar]\n-->\n\nb"
|
||||
output = "<p>a</p>\n\n<p>b</p>"
|
||||
result = {'tags'=>['foo','bar']}
|
||||
|
||||
index = @wiki.repo.index
|
||||
index.add("Bilbo-Baggins.md", content)
|
||||
index.commit("Add metadata")
|
||||
|
||||
page = @wiki.page("Bilbo Baggins")
|
||||
rendered = Gollum::Markup.new(page).render
|
||||
assert_equal output, rendered
|
||||
assert_equal result, page.meta_data
|
||||
end
|
||||
|
||||
test "metadata sanitation" do
|
||||
content = "a\n\n<!-- ---\nfoo: <script>alert('');</script>\n-->\n\nb"
|
||||
output = "<p>a</p>\n\n<p>b</p>"
|
||||
result = {'foo'=>nil}
|
||||
|
||||
index = @wiki.repo.index
|
||||
index.add("Bilbo-Baggins.md", content)
|
||||
index.commit("Add metadata")
|
||||
|
||||
page = @wiki.page("Bilbo Baggins")
|
||||
rendered = Gollum::Markup.new(page).render
|
||||
assert_equal output, rendered
|
||||
assert_equal result, page.meta_data
|
||||
end
|
||||
|
||||
#########################################################################
|
||||
#
|
||||
# Various
|
||||
|
||||
Reference in New Issue
Block a user