Compare commits

...

51 Commits

Author SHA1 Message Date
bootstraponline df75d2d60c Release 2.4.0 2012-11-11 15:08:45 -07:00
bootstraponline 2713aabeaf Update gemspec 2012-11-11 15:08:21 -07:00
bootstraponline 796d1b44c2 Update README.md 2012-11-11 14:46:58 -07:00
bootstraponline 470a7b8f52 Fix #579 2012-11-11 14:40:47 -07:00
bootstraponline f699b82a9f Fix #539 2012-11-11 14:18:14 -07:00
bootstraponline 44edb8c7da Merge pull request #576 from roman-zaharenkov/title_control
Page title control
2012-11-11 12:29:37 -08:00
bootstraponline bc4fc0edd9 Fix gitcode test 2012-11-11 13:14:25 -07:00
Roman Zaharenkov 6545fa691b Adjust page header / title generation.
Now page header can be generated by first h1 header from page content. But page title generated by URL is it was before.
2012-11-11 13:22:10 +03:00
Roman Zaharenkov 4954553927 Page title control
Allow to set page title by setting header inside page body. It will use header as title If header is present and page URL otherwise.
2012-11-11 13:20:14 +03:00
bootstraponline 9c50ba9eeb XSLT was never used 2012-11-10 17:02:27 -07:00
bootstraponline 9a67da145a Merge pull request #578 from github/fileview-hover-fix
Fileview hover fix
2012-11-10 15:59:28 -08:00
bootstraponline ca7d82278c Pretty print with nokogiri 2012-11-10 16:34:37 -07:00
bootstraponline f6245c53dd Add .gitattributes 2012-11-10 12:15:20 -07:00
bootstraponline 6888420cc6 Update file_view output 2012-11-10 12:15:19 -07:00
Daniel Kimsey c5631f5b7d Fixed a:hover not highlighting the a block correctly 2012-11-10 12:15:19 -07:00
Daniel Kimsey 34e0b49d72 Refactored the template generator to use new_page method 2012-11-10 12:15:19 -07:00
Daniel Kimsey bd072264ef Line-ending fix for _styles.css 2012-11-10 12:15:19 -07:00
bootstraponline cfb2d24c71 Merge pull request #577 from dekimsey/fix-page-metadata
Renamed page.meta_data => page.metadata
2012-11-09 18:03:12 -08:00
Daniel Kimsey fe0eb72fa3 Renamed page.meta_data to page.metadata for consistency with views 2012-11-09 18:29:49 -05:00
Daniel Kimsey 2783257f06 Added page.meta_data to tests 2012-11-09 18:25:33 -05:00
bootstraponline cc11cb866c Add css note
#572
2012-11-08 18:51:57 -07:00
bootstraponline 6a02643bda Merge pull request #573 from dekimsey/license-guidelines
Added bootstraponline's comment about licensing guidelines
2012-11-08 16:12:40 -08:00
Daniel Kimsey 7f269c8da3 Added bootstraponline's comment about licensing guidelines 2012-11-08 16:46:49 -05:00
bootstraponline ef7f7cebd1 Release 2.3.12 2012-11-07 20:37:50 -07:00
bootstraponline 05c24fd5e3 Fix #570
Fix #571
2012-11-07 20:35:57 -07:00
bootstraponline b08b97bd28 Release 2.3.11 2012-11-07 20:18:43 -07:00
bootstraponline dbb6ce2f71 Fix #570
Error in gollum.js broke new page button.
2012-11-07 20:17:50 -07:00
bootstraponline f66f14b593 Release 2.3.10 2012-11-07 19:47:09 -07:00
bootstraponline 8a52315dee Add base url to custom css 2012-11-07 19:46:27 -07:00
bootstraponline 7c4052906c Add custom css 2012-11-07 19:40:52 -07:00
bootstraponline 3a56f39f6a Fix readme 2012-11-07 19:17:49 -07:00
bootstraponline 6585ca5dd0 Fix space 2012-11-07 19:13:57 -07:00
bootstraponline 792abae07e Release 2.3.9 2012-11-07 19:11:04 -07:00
bootstraponline 74ce648c59 Options.fetch 2012-11-07 19:04:36 -07:00
bootstraponline 2686e96046 Release 2.3.8 2012-11-07 18:50:37 -07:00
bootstraponline 213e2bb432 Add config example 2012-11-07 18:48:07 -07:00
bootstraponline 79bb5c10ab Remove lib.so note 2012-11-07 18:46:36 -07:00
bootstraponline 7ea012d786 Fix code style 2012-11-07 18:45:20 -07:00
bootstraponline 43591f75de Merge pull request #570 from dekimsey/only-alert-on-changes
Only alert on changes
2012-11-07 17:39:30 -08:00
Daniel Kimsey 05d82c0569 Attach unsaved changes warning to trigger only after changes are made 2012-11-07 17:51:36 -05:00
Daniel Kimsey 76c8d3206c Consolidated create and edit page's javascript into the global gollum.js 2012-11-07 17:50:12 -05:00
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
40 changed files with 523 additions and 250 deletions
+25
View File
@@ -0,0 +1,25 @@
# https://help.github.com/articles/dealing-with-line-endings
# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto
# Explicitly declare text files we want to always be normalized and converted
# to native line endings on checkout.
*.txt text
*.md text
*.rb text
*.js text
*.html text
*.yml text
*.mustache text
*.css text
Rakefile text
Gemfile text
LICENSE text
COPYRIGHT text
gollum text
.gitattributes text
.gitignore text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
+18 -2
View File
@@ -136,7 +136,13 @@ or JavaScript. These tags will be stripped from the converted HTML. See
`docs/sanitization.md` for more details on what tags and attributes are
allowed.
## TITLES
The first defined `h1` will override the default header on a page. There are two ways to set a page title. The metadata syntax:
`<!-- --- title: New Title -->`
The first `h1` tag can be set to always override the page title, without needing to use the metadata syntax. Start gollum with the `--h1-title` flag.
## BRACKET TAGS
A variety of Gollum tags use a double bracket syntax. For example:
@@ -532,9 +538,17 @@ Your Rack middleware can pass author details to Gollum in a Hash in the session
## WINDOWS FILENAME VALIDATION
Note that filenames on windows must not contain any of the following characters `\ / : * ? " < > |`. See [this support article](http://support.microsoft.com/kb/177506) for details.
## LIB.SO ERROR
## CONFIG FILE
`Could not open library 'lib.so'` may be solved by installing `python-devel` on Fedora or `python-dev` on Ubuntu. Gentoo requires a rubypython [patch](https://gist.github.com/2802480) to use python2.7.
Gollum optionally takes a `--config file`. See [config.rb](https://github.com/github/gollum/blob/master/config.rb) for an example.
## CUSTOM CSS
The `--css` flag will inject `custom.css` from the root of your git repository into each page. `custom.css` must be commited to git or you will get a 302 redirect to the create page. Here's an example of floating the sidebar to the left.
```css
#wiki-rightbar { float: left !important; }
```
## CONTRIBUTE
@@ -556,6 +570,8 @@ your changes merged back into core is as follows:
1. Send a pull request to the github/gollum project.
## RELEASING
x.y.z
For z releases:
$ rake bump
$ rake release
+1 -1
View File
@@ -146,7 +146,7 @@ task :gemspec => :validate do
split("\n").
sort.
reject { |file| file =~ /^\./ }.
reject { |file| file =~ /^(rdoc|pkg|test|Home\.md)/ }.
reject { |file| file =~ /^(rdoc|pkg|test|Home\.md|\.gitattributes)/ }.
map { |file| " #{file}" }.
join("\n")
+7
View File
@@ -45,6 +45,10 @@ opts = OptionParser.new do |opts|
options['irb'] = true
end
opts.on("--css", "Inject custom css. Uses custom.css from root repository") do
wiki_options[:css] = true
end
opts.on("--page-file-dir [PATH]", "Specify the sub directory for all page files (default: repository root).") do |path|
wiki_options[:page_file_dir] = path
end
@@ -76,6 +80,9 @@ opts = OptionParser.new do |opts|
opts.on("--collapse-tree", "Collapse file view tree. By default, expanded tree is shown.") do
wiki_options[:collapse_tree] = true
end
opts.on("--h1-title", "Sets page title to value of first h1") do
wiki_options[:h1_title] = true
end
end
# Read command line options into `options` hash
+28
View File
@@ -0,0 +1,28 @@
# Example gollum config
# gollum ../wiki --config config.rb
#
# or run from source with
#
# bundle exec bin/gollum ../wiki/ --config config.rb
# Remove const to avoid
# warning: already initialized constant FORMAT_NAMES
#
# only remove if it's defined.
# constant Gollum::Page::FORMAT_NAMES not defined (NameError)
Gollum::Page.send :remove_const, :FORMAT_NAMES if defined? Gollum::Page::FORMAT_NAMES
# limit to one format
Gollum::Page::FORMAT_NAMES = { :markdown => "Markdown" }
=begin
Valid formats are:
{ :markdown => "Markdown",
:textile => "Textile",
:rdoc => "RDoc",
:org => "Org-mode",
:creole => "Creole",
:rest => "reStructuredText",
:asciidoc => "AsciiDoc",
:mediawiki => "MediaWiki",
:pod => "Pod" }
=end
+3 -2
View File
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
s.required_ruby_version = ">= 1.8.7"
s.name = 'gollum'
s.version = '2.3.5'
s.date = '2012-10-31'
s.version = '2.4.0'
s.date = '2012-11-11'
s.rubyforge_project = 'gollum'
s.summary = "A simple, Git-powered wiki."
@@ -53,6 +53,7 @@ Gem::Specification.new do |s|
README.md
Rakefile
bin/gollum
config.rb
docs/sanitization.md
gollum.gemspec
lib/gollum.rb
+1 -1
View File
@@ -23,7 +23,7 @@ require File.expand_path('../gollum/web_sequence_diagram', __FILE__)
require File.expand_path('../gollum/frontend/uri_encode_component', __FILE__)
module Gollum
VERSION = '2.3.5'
VERSION = '2.4.0'
def self.assets_path
::File.expand_path('gollum/frontend/public', ::File.dirname(__FILE__))
+3 -8
View File
@@ -22,7 +22,7 @@ module Gollum
def new_page page
name = page.name
url = url_for_page page
%Q( <li class="file"><a href="#{url}">#{name}</a></li>\n)
%Q( <li class="file"><a href="#{url}"><span class="icon"></span>#{name}</a></li>)
end
def new_folder folder_path
@@ -38,10 +38,7 @@ module Gollum
end
def end_folder
<<-HTML
</ol>
</li>
HTML
"</ol></li>\n"
end
def url_for_page page
@@ -85,13 +82,11 @@ module Gollum
# Handle special case of only one folder.
if (count - folder_start == 1)
page = @pages[ folder_start ]
name = page.name
url = url_for_page page
html += <<-HTML
<li>
<label>#{::File.dirname(page.path)}</label> <input type="checkbox" #{@checked} />
<ol>
<li class="file"><a href="#{url}">#{name}</a></li>
#{new_page page}
</ol>
</li>
HTML
+6 -1
View File
@@ -238,6 +238,8 @@ module Precious
@content = @page.formatted_data
@toc_content = wiki.universal_toc ? @page.toc_data : nil
@mathjax = wiki.mathjax
@css = wiki.css
@h1_title = wiki.h1_title
@editable = false
mustache :page
end
@@ -306,7 +308,8 @@ module Precious
get '/search' do
@query = params[:q]
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
mustache :search
end
@@ -359,6 +362,8 @@ module Precious
@content = page.formatted_data
@toc_content = wiki.universal_toc ? @page.toc_data : nil
@mathjax = wiki.mathjax
@css = wiki.css
@h1_title = wiki.h1_title
mustache :page
elsif file = wiki.file(fullpath)
content_type file.mime_type
+128 -121
View File
@@ -1,121 +1,128 @@
*, html {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#results a:hover {
background-color: #4c4c4c;
}
#home_button {
position: absolute;
top: 10px;
left: 50%;
}
#home_button .minibutton {
font-size: 1em;
text-align: center;
}
#results {
position: absolute;
top: 60px;
left: 10px;
}
body, form, ul, li, p, h1, h2, h3, h4, h5 {
margin: 0;
padding: 0;
}
body {
background-color: #606061;
color: #ffffff;
margin: 0;
}
img {
border: none;
}
p {
font-size: 1em;
margin: 0 0 1em 0;
}
html { font-size: 100%; /* IE hack */ }
body { font-size: 1em; /* Sets base font size to 16px */ }
table { font-size: 100%; /* IE hack */ }
input, select, textarea, th, td { font-size: 1em; }
/* Prevent wrapping on large file names. */
li.file {
white-space: nowrap;
}
/* CSS Tree menu styles */
ol.tree
{
padding: 0 0 0 30px;
width: 300px;
}
li
{
position: relative;
margin-left: -15px;
list-style: none;
}
li.file
{
margin-left: -1px !important;
height: 1.5em;
}
li.file a
{
background: url(../images/fileview/document.png) 0 0 no-repeat;
color: #fff;
padding-left: 21px;
text-decoration: none;
display: block;
}
li.file a[href *= '.pdf'] { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href *= '.html'] { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href $= '.css'] { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href $= '.js'] { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li input
{
position: absolute;
left: 0;
margin-left: 0;
opacity: 0;
z-index: 2;
cursor: pointer;
height: 1em;
width: 1em;
top: 0;
}
li input + ol
{
background: url(../images/fileview/toggle-small-expand.png) 40px 0 no-repeat;
margin: -1.188em 0 0 -44px; /* 15px */
height: 1.5em;
}
li input + ol > li { display: none; margin-left: -14px !important; padding-left: 1px; }
li label
{
background: url(../images/fileview/folder-horizontal.png) 15px 1px no-repeat;
cursor: pointer;
display: block;
padding-left: 37px;
}
li input:checked + ol
{
background: url(../images/fileview/toggle-small.png) 40px 5px no-repeat;
margin: -1.5em 0 0 -44px; /* 20px */
padding: 1.563em 0 0 80px;
height: auto;
}
li input:checked + ol > li { display: block; margin: 0 0 0.125em; /* 2px */}
li input:checked + ol > li:last-child { margin: 0 0 0.063em; /* 1px */ }
*, html {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#results a:hover {
background-color: #4c4c4c;
}
#home_button {
position: absolute;
top: 10px;
left: 50%;
}
#home_button .minibutton {
font-size: 1em;
text-align: center;
}
#results {
position: absolute;
top: 60px;
left: 10px;
}
body, form, ul, li, p, h1, h2, h3, h4, h5 {
margin: 0;
padding: 0;
}
body {
background-color: #606061;
color: #ffffff;
margin: 0;
}
img {
border: none;
}
p {
font-size: 1em;
margin: 0 0 1em 0;
}
html { font-size: 100%; /* IE hack */ }
body { font-size: 1em; /* Sets base font size to 16px */ }
table { font-size: 100%; /* IE hack */ }
input, select, textarea, th, td { font-size: 1em; }
/* Prevent wrapping on large file names. */
li.file {
white-space: nowrap;
}
/* CSS Tree menu styles */
ol.tree
{
padding: 0 0 0 30px;
width: 300px;
}
li
{
position: relative;
margin-left: -15px;
list-style: none;
}
li.file
{
margin-left: -1px !important;
height: 1.5em;
}
li.file a
{
color: #fff;
text-decoration: none;
display: inline-block;
}
li.file a span.icon
{
width: 14px;
height: 18px;
background: url(../images/fileview/document.png) 0 0 no-repeat;
display: inline-block;
margin-right: 7px;
vertical-align: text-top;
}
li.file a[href *= '.pdf'] span.icon { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href *= '.html'] span.icon { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href $= '.css'] span.icon { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li.file a[href $= '.js'] span.icon { background: url(../images/fileview/document.png) 0 0 no-repeat; }
li input
{
position: absolute;
left: 0;
margin-left: 0;
opacity: 0;
z-index: 2;
cursor: pointer;
height: 1em;
width: 1em;
top: 0;
}
li input + ol
{
background: url(../images/fileview/toggle-small-expand.png) 40px 0 no-repeat;
margin: -1.188em 0 0 -44px; /* 15px */
height: 1.5em;
}
li input + ol > li { display: none; margin-left: -14px !important; padding-left: 1px; }
li label
{
background: url(../images/fileview/folder-horizontal.png) 15px 1px no-repeat;
cursor: pointer;
display: block;
padding-left: 37px;
}
li input:checked + ol
{
background: url(../images/fileview/toggle-small.png) 40px 5px no-repeat;
margin: -1.5em 0 0 -44px; /* 20px */
padding: 1.563em 0 0 80px;
height: auto;
}
li input:checked + ol > li { display: block; margin: 0 0 0.125em; /* 2px */}
li input:checked + ol > li:last-child { margin: 0 0 0.063em; /* 1px */ }
@@ -212,4 +212,20 @@ $(document).ready(function() {
$('#gollum-revert-form').submit();
});
}
if( $('#wiki-wrapper.edit').length ){
$("#gollum-editor-submit").click( function() { window.onbeforeunload = null; } );
$("#gollum-editor-body").one('change', function(){
window.onbeforeunload = function(){ return "Leaving will discard all edits!" };
});
$.GollumEditor();
}
if( $('#wiki-wrapper.create').length ){
$("#gollum-editor-submit").click( function() { window.onbeforeunload = null; } );
$("#gollum-editor-body").one('change', function(){
window.onbeforeunload = function(){ return "Leaving will not create a new page!" };
});
$.GollumEditor({ NewFile: true, MarkupType: default_markup });
}
});
@@ -1,4 +1,4 @@
<div id="wiki-wrapper">
<div id="wiki-wrapper" class="create">
<div id="head">
<h1>Create New Page</h1>
</div>
@@ -9,12 +9,6 @@
</div>
</div>
<script type="text/javascript">
window.onbeforeunload = function(){ return "Leaving will not create a new page!" };
$("#gollum-editor-submit").click( function() { window.onbeforeunload = null; } );
jQuery(document).ready(function() {
$.GollumEditor({ NewFile: true, MarkupType: '{{default_markup}}' });
});
var default_markup = '{{default_markup}}';
</script>
{{something}}
@@ -10,11 +10,3 @@
</div>
<div id="wiki-content">{{>editor}}</div>
</div>
<script type="text/javascript">
window.onbeforeunload = function(){ return "Leaving will discard all edits!" };
$("#gollum-editor-submit").click( function() { window.onbeforeunload = null; } );
jQuery(document).ready(function() {
$.GollumEditor();
});
</script>
@@ -6,6 +6,7 @@
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/editor.css" media="all">
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/dialog.css" media="all">
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/template.css" media="all">
{{#css}}<link rel="stylesheet" type="text/css" href="{{base_url}}/custom.css" media="all">{{/css}}
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/ie7.css" media="all">
+1 -1
View File
@@ -7,7 +7,7 @@ Mousetrap.bind(['e'], function( e ) {
</script>
<div id="wiki-wrapper" class="page">
<div id="head">
<h1>{{title}}</h1>
<h1>{{page_header}}</h1>
<ul class="actions">
<li class="minibutton">
{{>searchbar}}
+56 -1
View File
@@ -8,7 +8,16 @@ module Precious
DEFAULT_AUTHOR = 'you'
def title
@page.url_path.gsub("-", " ")
h1 = @h1_title ? page_header_from_content(@content) : false
h1 || @page.url_path_title
end
def page_header
page_header_from_content(@content) || title
end
def content
content_without_page_header(@content)
end
def author
@@ -80,6 +89,10 @@ module Precious
@mathjax
end
def css # custom css
@css
end
# Access to embedded metadata.
#
# Examples
@@ -90,6 +103,48 @@ module Precious
def metadata
@page.metadata
end
private
# Wraps page formatted data to Nokogiri::HTML document.
#
def build_document(content)
Nokogiri::HTML(%{<div id="gollum-root">} + content + %{</div>})
end
# Finds header node inside Nokogiri::HTML document.
#
def find_header_node(doc)
case self.format
when :asciidoc
doc.css("div#gollum-root > div#header > h1:first-child")
when :org
doc.css("div#gollum-root > p.title:first-child")
when :pod
doc.css("div#gollum-root > a.dummyTopAnchor:first-child + h1")
when :rest
doc.css("div#gollum-root > div > div > h1:first-child")
else
doc.css("div#gollum-root > h1:first-child")
end
end
# Extracts title from page if present.
#
def page_header_from_content(content)
doc = build_document(content)
title = find_header_node(doc)
Sanitize.clean(title.to_html).strip unless title.empty?
end
# Returns page content without title if it was extracted.
#
def content_without_page_header(content)
doc = build_document(content)
title = find_header_node(doc)
title.remove unless title.empty?
doc.css("div#gollum-root").inner_html
end
end
end
end
+4 -2
View File
@@ -488,8 +488,10 @@ module Gollum
# 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?
if lang
lang = lang.match(/\.([^}\s]+)/)
lang = lang[1] unless lang.nil?
end
@codemap[id] = cached ?
{ :output => cached } :
+22 -1
View File
@@ -168,6 +168,27 @@ module Gollum
path
end
# Public: Defines title for page.rb
#
# Returns the String title
def url_path_title
metadata_title || url_path.gsub("-", " ")
end
# Public: Metadata title
#
# Set with <!-- --- title: New Title --> in page content
#
# Returns the String title or nil if not defined
def metadata_title
if metadata
title = metadata['title']
return title unless title.nil?
end
nil
end
# Public: The url_path, but CGI escaped.
#
# Returns the String url_path
@@ -221,7 +242,7 @@ module Gollum
# Public: Embedded metadata.
#
# Returns Hash of metadata.
def meta_data()
def metadata()
formatted_data if markup_class.metadata == nil
markup_class.metadata
end
+35 -20
View File
@@ -137,6 +137,14 @@ module Gollum
# Gets the boolean live preview value.
attr_reader :live_preview
# Injects custom css from custom.css in root repo.
# Defaults to false
attr_reader :css
# Sets page title to value of first h1
# Defaults to false
attr_reader :h1_title
# Public: Initialize a new Gollum Repo.
#
# path - The String path to the Git repository that holds the Gollum
@@ -166,26 +174,33 @@ module Gollum
options[:access] = path
path = path.path
end
@path = path
@repo_is_bare = options[:repo_is_bare]
@page_file_dir = options[:page_file_dir]
@access = options[:access] || GitAccess.new(path, @page_file_dir, @repo_is_bare)
@base_path = options[:base_path] || "/"
@page_class = options[:page_class] || self.class.page_class
@file_class = options[:file_class] || self.class.file_class
@markup_classes = options[:markup_classes] || self.class.markup_classes
@repo = @access.repo
@ref = options[:ref] || self.class.default_ref
@sanitization = options[:sanitization] || self.class.sanitization
@ws_subs = options[:ws_subs] ||
self.class.default_ws_subs
@history_sanitization = options[:history_sanitization] ||
self.class.history_sanitization
@live_preview = options.fetch(:live_preview, true)
@universal_toc = options.fetch(:universal_toc, false)
@mathjax = options[:mathjax] || false
@show_all = options[:show_all] || false
@collapse_tree = options[:collapse_tree] || false
# Use .fetch instead of ||
#
# o = { :a => false }
# o[:a] || true # => true
# o.fetch :a, true # => false
@path = path
@repo_is_bare = options.fetch :repo_is_bare, nil
@page_file_dir = options.fetch :page_file_dir, nil
@access = options.fetch :access, GitAccess.new(path, @page_file_dir, @repo_is_bare)
@base_path = options.fetch :base_path, "/"
@page_class = options.fetch :page_class, self.class.page_class
@file_class = options.fetch :file_class, self.class.file_class
@markup_classes = options.fetch :markup_classes, self.class.markup_classes
@repo = @access.repo
@ref = options.fetch :ref, self.class.default_ref
@sanitization = options.fetch :sanitization, self.class.sanitization
@ws_subs = options.fetch :ws_subs, self.class.default_ws_subs
@history_sanitization = options.fetch :history_sanitization, self.class.history_sanitization
@live_preview = options.fetch :live_preview, true
@universal_toc = options.fetch :universal_toc, false
@mathjax = options.fetch :mathjax, false
@show_all = options.fetch :show_all, false
@collapse_tree = options.fetch :collapse_tree, false
@css = options.fetch :css, false
@h1_title = options.fetch :h1_title, false
end
# Public: check whether the wiki's git repo exists on the filesystem.
+9
View File
@@ -1,3 +1,12 @@
For gollum code, everything should fall under the existing MIT License.
Alternative permissive licenses (such as BSD) for 3rd party dependencies are
acceptable. For image assets in Gollum, CC BY or CC BY-SA is fine. Anything
released under a copyleft license (for example GPL, AGPL, LGPL, MPL, EPL,
etc.) is not permitted in gollum. Public domain, CC BY or CC BY-SA for code in
gollum is not permitted.
---
The following PNGs are based on Ubuntu 11.10 SVG files located in /usr/share/icons/unity-icon-theme/places/svg/
- group-folders.svg
- group-files.svg
+1
View File
@@ -5,3 +5,4 @@ a8ad3c09dd842a3517085bfadd37718856dee813 1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e
b16b3d9fad9d78e5a669e7f33d94c96da374eccd b0de6e794dfdc7ef3400e894225bfe23308aae5c kristi <kristi.dev@gmail.com> 1336984025 -0700 push
b0de6e794dfdc7ef3400e894225bfe23308aae5c cfea406f5f77afc7fb673a43e97721234385b1bd Darren Oakley <daz.oakley@gmail.com> 1341830099 +0100 push
cfea406f5f77afc7fb673a43e97721234385b1bd 629aa678272b017a4d136d35e77ac94d80b08dc2 Darren Oakley <daz.oakley@gmail.com> 1341830833 +0100 push
629aa678272b017a4d136d35e77ac94d80b08dc2 7d6aeab8b84c895f21f6c66b84a457b0fced9693 Daniel Kimsey <dekimsey@ufl.edu> 1352501984 -0500 push
@@ -5,3 +5,4 @@ a8ad3c09dd842a3517085bfadd37718856dee813 1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e
b16b3d9fad9d78e5a669e7f33d94c96da374eccd b0de6e794dfdc7ef3400e894225bfe23308aae5c kristi <kristi.dev@gmail.com> 1336984025 -0700 push
b0de6e794dfdc7ef3400e894225bfe23308aae5c cfea406f5f77afc7fb673a43e97721234385b1bd Darren Oakley <daz.oakley@gmail.com> 1341830099 +0100 push
cfea406f5f77afc7fb673a43e97721234385b1bd 629aa678272b017a4d136d35e77ac94d80b08dc2 Darren Oakley <daz.oakley@gmail.com> 1341830833 +0100 push
629aa678272b017a4d136d35e77ac94d80b08dc2 7d6aeab8b84c895f21f6c66b84a457b0fced9693 Daniel Kimsey <dekimsey@ufl.edu> 1352501984 -0500 push
@@ -0,0 +1,2 @@
xEOK1 Å=÷S<ëEaºzEYð ]¼g·™™`¦•´3ê··ãù½—4ps}{¶=!gtä;°ö.„{wZNѹSÄ<g‹È=^eáYµCN¼vêȘdëlV¶²6³Æ6 
ã‰$q„$÷"1*&«c«!µ`?J? ¼Á“)øwšµ®°·JV|¿&!æ‰}ç²Áï´)<Ò—«þ¦cýƒHРs:²Õf£C»dŸõC8ah.Jß³qªˆl²P•ܤ›·ÿÁ§¶ï”«s¿³6gú
@@ -0,0 +1 @@
xÎ=j1@áÔ:Åt®ô?cC\ù³šY¼Ú ZmáÛ|„t¯ùà•­µy€õþct>èDh*q0Á°ËÅŠµbLbı+è²%õG]ÖÑf¢ˆÉ¢´Aòl\d‘Jöœô¤«è¿[‡ZgYà>·]žðÍòx×å¨Ë—ðqã‚ ÚdÌð©ƒÖª¼‡üǪ+³0Ü–¾­|Ú¡S š b¤^í/M1
+1 -1
View File
@@ -1 +1 @@
629aa678272b017a4d136d35e77ac94d80b08dc2
7d6aeab8b84c895f21f6c66b84a457b0fced9693
+4 -2
View File
@@ -1,3 +1,5 @@
<ol class="tree">
<li class="file"><a href="0">0</a></li>
</ol>
<li class="file">
<a href="0"><span class="icon"></span>0</a>
</li>
</ol>
+10 -7
View File
@@ -1,8 +1,11 @@
<ol class="tree">
<li>
<label>folder0</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0/0">0</a></li>
</ol>
</li>
</ol>
<li>
<label>folder0</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0/0"><span class="icon"></span>0</a>
</li>
</ol>
</li>
</ol>
+10 -7
View File
@@ -1,8 +1,11 @@
<ol class="tree">
<li>
<label>.</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0">folder0</a></li>
</ol>
</li>
</ol>
<li>
<label>.</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0"><span class="icon"></span>folder0</a>
</li>
</ol>
</li>
</ol>
+18 -10
View File
@@ -1,12 +1,20 @@
<ol class="tree">
<li>
<label>folder0</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0/0">0</a></li>
</ol>
<li>
<label>folder0</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0/0"><span class="icon"></span>0</a>
</li>
<li>
<label>folder1</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder1/1">1</a></li>
</ol>
</ol>
</li>
<li>
<label>folder1</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder1/1"><span class="icon"></span>1</a>
</li>
</ol>
</li>
</ol>
+21 -11
View File
@@ -1,13 +1,23 @@
<ol class="tree">
<li class="file"><a href="root">root</a></li>
<li>
<label>folder0</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0/0">0</a></li>
</ol>
<li class="file">
<a href="root"><span class="icon"></span>root</a>
</li>
<li>
<label>folder0</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0/0"><span class="icon"></span>0</a>
</li>
<li>
<label>folder1</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder1/1">1</a></li>
</ol>
</ol>
</li>
<li>
<label>folder1</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder1/1"><span class="icon"></span>1</a>
</li>
</ol>
</li>
</ol>
+35 -22
View File
@@ -1,28 +1,41 @@
<ol class="tree">
<li>
<label>folder0</label>
<input type="checkbox" />
<ol>
<li>
<label>folder0</label> <input type="checkbox" checked />
<label>folder1</label>
<input type="checkbox" />
<ol>
<li>
<label>folder1</label> <input type="checkbox" checked />
<ol>
<li>
<label>folder2</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0/folder1/folder2/0">0</a></li>
<li>
<label>folder2</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0/folder1/folder2/0"><span class="icon"></span>0</a>
</li>
</ol>
</li>
<li>
<label>folder3</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder0/folder1/folder3/1"><span class="icon"></span>1</a>
</li>
</ol>
</li>
</ol>
</li>
<li>
<label>folder3</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder0/folder1/folder3/1">1</a></li>
</ol>
</ol>
</li>
<li>
<label>folder4</label>
<input type="checkbox" />
<ol>
<li class="file">
<a href="folder4/2"><span class="icon"></span>2</a>
</li>
</ol>
</li>
</ol>
</li>
<li>
<label>folder4</label> <input type="checkbox" checked />
<ol>
<li class="file"><a href="folder4/2">2</a></li>
</ol>
</ol>
</li>
</ol>
+1 -1
View File
@@ -50,7 +50,7 @@ context "Wiki" do
end
test "parents with default master ref" do
ref = '629aa678272b017a4d136d35e77ac94d80b08dc2'
ref = '7d6aeab8b84c895f21f6c66b84a457b0fced9693'
committer = Gollum::Committer.new(@wiki)
assert_equal ref, committer.parents.first.sha
end
+15 -1
View File
@@ -68,10 +68,24 @@ def write file, content
end
end
def to_html html
# Remove blank nodes for proper formatting
doc = Nokogiri.XML(html) do |cfg|
cfg.default_xml.noblanks
end
# Save as XHTML
doc.to_xml( { :save_with => Nokogiri::XML::Node::SaveOptions::DEFAULT_XHTML, :indent => 2, :encoding => 'UTF-8' } )
end
def check name, pages_array
pages = FakePages.new pages_array
expected = read name
actual = view pages
actual = to_html view pages
# Uncomment when updating tests
# write name, actual
assert_equal expected, actual
end
+1 -1
View File
@@ -18,7 +18,7 @@ context "GitAccess" do
assert @access.ref_map.empty?
assert @access.tree_map.empty?
@access.tree 'master'
assert_equal({"master"=>"629aa678272b017a4d136d35e77ac94d80b08dc2"}, @access.ref_map)
assert_equal({"master"=>"7d6aeab8b84c895f21f6c66b84a457b0fced9693"}, @access.ref_map)
@access.tree '1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e3'
map = @access.tree_map['1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e3']
+2 -4
View File
@@ -25,15 +25,13 @@ context "gitcode" do
end
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\"><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;</span>\n <span class=\"nt\">&lt;a</span> <span class=\"na\">href=</span><span class=\"s\">\"0\"</span><span class=\"nt\">&gt;&lt;span</span> <span class=\"na\">class=</span><span class=\"s\">\"icon\"</span><span class=\"nt\">&gt;&lt;/span&gt;</span>0<span class=\"nt\">&lt;/a&gt;</span>\n <span class=\"nt\">&lt;/li&gt;</span>\n<span class=\"nt\">&lt;/ol&gt;</span>\n</pre></div>\n\n<p>b</p>}, @rendered
end
test 'contents' do
g = Gollum::Gitcode.new 'github/gollum/master/test/file_view/1_file.txt'
assert_equal g.contents, %{<ol class="tree">
<li class="file"><a href="0">0</a></li>
</ol>}
assert_equal g.contents, %{<ol class=\"tree\">\n <li class=\"file\">\n <a href=\"0\"><span class=\"icon\"></span>0</a>\n </li>\n</ol>\n}
end
teardown do
+19 -6
View File
@@ -212,7 +212,20 @@ context "Markup" do
assert_equal expected, output
end
test "tilda 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'
@wiki.write_page(page, :markdown,
%Q(~~~ {.ruby}
@@ -225,7 +238,7 @@ context "Markup" do
end
# Issue #537
test "tilda code blocks with more than one class" do
test "tilde code blocks with more than one class" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~ {#hi .ruby .sauce}
@@ -238,7 +251,7 @@ context "Markup" do
end
# Issue #537
test "tilda code blocks with lots of tildes" do
test "tilde code blocks with lots of tildes" do
page = 'test_rgx'
@wiki.write_page(page, :markdown,
%Q(~~~~~~ {#hi .ruby .sauce}
@@ -643,7 +656,7 @@ np.array([[2,2],[1,3]],np.float)
page = @wiki.page("Bilbo Baggins")
rendered = Gollum::Markup.new(page).render
assert_equal output, rendered
assert_equal result, page.meta_data
assert_equal result, page.metadata
end
test "metadata blocks with newline" do
@@ -658,7 +671,7 @@ np.array([[2,2],[1,3]],np.float)
page = @wiki.page("Bilbo Baggins")
rendered = Gollum::Markup.new(page).render
assert_equal output, rendered
assert_equal result, page.meta_data
assert_equal result, page.metadata
end
test "metadata sanitation" do
@@ -673,7 +686,7 @@ np.array([[2,2],[1,3]],np.float)
page = @wiki.page("Bilbo Baggins")
rendered = Gollum::Markup.new(page).render
assert_equal output, rendered
assert_equal result, page.meta_data
assert_equal result, page.metadata
end
#########################################################################
+7
View File
@@ -227,5 +227,12 @@ context "within a sub-directory" do
assert page.header.raw_data =~ /^Hobbits/
assert page.footer.raw_data =~ /^Lord of the Rings/
end
test "get metadata on page" do
page = @wiki.page('Elrond')
assert_equal Gollum::Page, page.class
assert_equal 'elf', page.metadata['race']
end
end
+8
View File
@@ -198,6 +198,14 @@ context "Wiki page writing" do
assert_equal cd[:email], @wiki.repo.commits.first.author.email
end
test "page title override with metadata" do
@wiki.write_page("Gollum", :markdown, "<!-- --- title: Over -->", commit_details)
page = @wiki.page("Gollum")
assert_equal 'Over', page.url_path_title
end
test "update page with format change" do
@wiki.write_page("Gollum", :markdown, "# Gollum", commit_details)