Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d817a4fdb6 | |||
| 19635b06cf | |||
| 872776660b | |||
| 9644d4b00e | |||
| 9a1dddaccf | |||
| 4110ab5a82 | |||
| 5d1844e491 | |||
| 6a126d46ee | |||
| f834a0c84f | |||
| 9dfeb237e7 | |||
| b769ba2974 | |||
| fc1feb280f | |||
| bface83af7 | |||
| 2bea800a37 | |||
| 4c1ff7deb7 | |||
| 5a7cb129bb | |||
| b29d22e99b | |||
| 12cf102543 | |||
| 3d95730880 | |||
| c5d807dd58 | |||
| d40df79dce | |||
| 3cfa297b49 | |||
| e435769345 | |||
| 9a73877b3e | |||
| e2cd8d93f4 | |||
| afc6ec468f | |||
| 391838cfc3 | |||
| 36a11ded4f | |||
| f540ef2e06 | |||
| b061e0f859 | |||
| 4972fbbc7b | |||
| 1f318de812 | |||
| 0ceeadd75b | |||
| b9dad32707 | |||
| d1cf698b45 | |||
| 9dba3f9c58 | |||
| 8fbbe40300 | |||
| f73c925ad9 | |||
| b7fb4c5950 | |||
| fed49bb98b |
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
rvm:
|
rvm:
|
||||||
- 1.8.7
|
- 1.8.7
|
||||||
- 1.9.2
|
|
||||||
- rbx-2.0
|
|
||||||
notifications:
|
notifications:
|
||||||
disabled: true
|
disabled: true
|
||||||
|
before_install:
|
||||||
|
- sudo apt-get install -y asciidoc
|
||||||
|
|||||||
@@ -311,6 +311,7 @@ backticks.
|
|||||||
|
|
||||||
## MATHEMATICAL EQUATIONS
|
## MATHEMATICAL EQUATIONS
|
||||||
|
|
||||||
|
|
||||||
Page files may contain mathematic equations in TeX syntax that will be nicely
|
Page files may contain mathematic equations in TeX syntax that will be nicely
|
||||||
typeset into the expected output. A block-style equation is delimited by `\[`
|
typeset into the expected output. A block-style equation is delimited by `\[`
|
||||||
and `\]`. For example:
|
and `\]`. For example:
|
||||||
@@ -322,6 +323,13 @@ inline with regular text. For example:
|
|||||||
|
|
||||||
The Pythagorean theorem is \( a^2 + b^2 = c^2 \).
|
The Pythagorean theorem is \( a^2 + b^2 = c^2 \).
|
||||||
|
|
||||||
|
### INSTALLATION REQUIREMENTS
|
||||||
|
|
||||||
|
In order to get the mathematical equations rendering to work, you need the following binaries:
|
||||||
|
|
||||||
|
* LaText, TeTex or MacTex/BasicTeX (latex, dvips)
|
||||||
|
* ImageMagick (convert)
|
||||||
|
* Ghostscript (gs)
|
||||||
|
|
||||||
## SEQUENCE DIAGRAMS
|
## SEQUENCE DIAGRAMS
|
||||||
|
|
||||||
@@ -454,9 +462,14 @@ like Rack::Auth, OmniAuth, etc.
|
|||||||
require 'gollum/frontend/app'
|
require 'gollum/frontend/app'
|
||||||
|
|
||||||
gollum_path = File.expand_path(File.dirname(__FILE__)) # CHANGE THIS TO POINT TO YOUR OWN WIKI REPO
|
gollum_path = File.expand_path(File.dirname(__FILE__)) # CHANGE THIS TO POINT TO YOUR OWN WIKI REPO
|
||||||
|
Precious::App.set(:gollum_path, gollum_path)
|
||||||
Precious::App.set(:default_markup, :markdown) # set your favorite markup language
|
Precious::App.set(:default_markup, :markdown) # set your favorite markup language
|
||||||
run Precious::App
|
run Precious::App
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
[](http://travis-ci.org/github/gollum)
|
||||||
|
|
||||||
## CONTRIBUTE
|
## CONTRIBUTE
|
||||||
|
|
||||||
If you'd like to hack on Gollum, start by forking my repo on GitHub:
|
If you'd like to hack on Gollum, start by forking my repo on GitHub:
|
||||||
|
|||||||
+3
-3
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
|
|||||||
s.rubygems_version = '1.3.5'
|
s.rubygems_version = '1.3.5'
|
||||||
|
|
||||||
s.name = 'gollum'
|
s.name = 'gollum'
|
||||||
s.version = '1.4.3'
|
s.version = '2.0.0'
|
||||||
s.date = '2012-04-25'
|
s.date = '2012-05-06'
|
||||||
s.rubyforge_project = 'gollum'
|
s.rubyforge_project = 'gollum'
|
||||||
|
|
||||||
s.summary = "A simple, Git-powered wiki."
|
s.summary = "A simple, Git-powered wiki."
|
||||||
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
|
|||||||
s.add_development_dependency('org-ruby', '~>0.6.2')
|
s.add_development_dependency('org-ruby', '~>0.6.2')
|
||||||
s.add_development_dependency('shoulda')
|
s.add_development_dependency('shoulda')
|
||||||
s.add_development_dependency('rack-test')
|
s.add_development_dependency('rack-test')
|
||||||
s.add_development_dependency('wikicloth', '~> 0.6.3')
|
s.add_development_dependency('wikicloth', '~>0.8.0')
|
||||||
s.add_development_dependency('rake', '~> 0.9.2')
|
s.add_development_dependency('rake', '~> 0.9.2')
|
||||||
|
|
||||||
# = MANIFEST =
|
# = MANIFEST =
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ 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__)
|
||||||
|
|
||||||
module Gollum
|
module Gollum
|
||||||
VERSION = '1.4.3'
|
VERSION = '2.0.0'
|
||||||
|
|
||||||
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__))
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ module Precious
|
|||||||
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
|
wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options)
|
||||||
if page = wiki.page(@name)
|
if page = wiki.page(@name)
|
||||||
@page = page
|
@page = page
|
||||||
|
@page.version = wiki.repo.log(wiki.ref, @page.path).first
|
||||||
@content = page.raw_data
|
@content = page.raw_data
|
||||||
mustache :edit
|
mustache :edit
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ a {
|
|||||||
-webkit-border-radius: 1em;
|
-webkit-border-radius: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ff #gollum-editor,
|
||||||
.ie #gollum-editor {
|
.ie #gollum-editor {
|
||||||
padding-bottom: 1em;
|
padding-bottom: 1em;
|
||||||
}
|
}
|
||||||
@@ -51,9 +52,9 @@ a {
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #ddd;
|
border: 1px solid #ddd;
|
||||||
color: #000;
|
color: #000;
|
||||||
font-size: 1.3em;
|
font-size: 1.1em;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
line-height: 1.8em;
|
line-height: 1.5em;
|
||||||
margin: 1em 0 0.4em;
|
margin: 1em 0 0.4em;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
width: 98%;
|
width: 98%;
|
||||||
@@ -192,44 +193,36 @@ a#function-help:hover span { background-position: -405px -28px; }
|
|||||||
|
|
||||||
#gollum-editor #gollum-editor-function-bar #gollum-editor-format-selector {
|
#gollum-editor #gollum-editor-function-bar #gollum-editor-format-selector {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 0 0 1.1em 0;
|
padding: .2em 0 .5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#gollum-editor #gollum-editor-function-bar
|
#gollum-editor #gollum-editor-function-bar
|
||||||
#gollum-editor-format-selector select {
|
#gollum-editor-format-selector select {
|
||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
border: 1px solid transparent;
|
border: 1px solid #ddd;
|
||||||
|
color: #333;
|
||||||
|
|
||||||
float: right;
|
float: right;
|
||||||
font-size: 1.1em;
|
font-size: 1em;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1.6em;
|
line-height: 1.6em;
|
||||||
padding: 0.5em 0.7em;
|
padding: 0.3em 0.4em;
|
||||||
margin-bottom: 0;
|
|
||||||
|
|
||||||
|
|
||||||
border-radius: 0.5em;
|
border-radius: 0.5em;
|
||||||
-moz-border-radius: 0.5em;
|
-moz-border-radius: 0.5em;
|
||||||
-webkit-border-radius: 0.5em;
|
-webkit-border-radius: 0.5em;
|
||||||
-moz-outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#gollum-editor #gollum-editor-function-bar
|
|
||||||
#gollum-editor-format-selector select:hover {
|
|
||||||
background-color: #fff;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
-moz-outline: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#gollum-editor #gollum-editor-function-bar
|
#gollum-editor #gollum-editor-function-bar
|
||||||
#gollum-editor-format-selector label {
|
#gollum-editor-format-selector label {
|
||||||
color: #999;
|
color: #999;
|
||||||
float: right;
|
float: right;
|
||||||
font-size: 1.1em;
|
font-size: 1em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1.6em;
|
line-height: 1.6em;
|
||||||
padding: 0.6em 0.5em 0 0;
|
padding: .3em 0.5em 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#gollum-editor #gollum-editor-function-bar
|
#gollum-editor #gollum-editor-function-bar
|
||||||
@@ -243,9 +236,9 @@ a#function-help:hover span { background-position: -405px -28px; }
|
|||||||
#gollum-editor textarea#gollum-editor-body {
|
#gollum-editor textarea#gollum-editor-body {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #ddd;
|
border: 1px solid #ddd;
|
||||||
font-size: 1.3em;
|
font-size: 1em;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
line-height: 1.8em;
|
line-height: 1.4em;
|
||||||
margin: 1em 0 0.4em;
|
margin: 1em 0 0.4em;
|
||||||
padding: 0.5em; /* I don't really like mixing pct & em here… */
|
padding: 0.5em; /* I don't really like mixing pct & em here… */
|
||||||
width: 98%;
|
width: 98%;
|
||||||
@@ -259,7 +252,7 @@ a#function-help:hover span { background-position: -405px -28px; }
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
font-size: 1.2em;
|
font-size: 1em;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -403,7 +396,7 @@ a#function-help:hover span { background-position: -405px -28px; }
|
|||||||
color: #333;
|
color: #333;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 1.2em;
|
font-size: 1em;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1.2em;
|
line-height: 1.2em;
|
||||||
|
|||||||
@@ -37,13 +37,13 @@ a:hover, a:visited {
|
|||||||
|
|
||||||
/* @section head */
|
/* @section head */
|
||||||
#head {
|
#head {
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
margin: 4.5em 0 0.5em;
|
margin: 4.5em 0 0.5em;
|
||||||
padding: 0.5em 0;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#head h1 {
|
#head h1 {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#head ul.actions {
|
#head ul.actions {
|
||||||
@@ -142,6 +142,7 @@ a:hover, a:visited {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* @section footer */
|
/* @section footer */
|
||||||
|
|
||||||
#wiki-footer {
|
#wiki-footer {
|
||||||
clear: both;
|
clear: both;
|
||||||
margin: 2em 0 5em;
|
margin: 2em 0 5em;
|
||||||
@@ -208,6 +209,7 @@ a:hover, a:visited {
|
|||||||
|
|
||||||
/* @section page-footer */
|
/* @section page-footer */
|
||||||
.page #footer {
|
.page #footer {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
margin: 1em 0 7em;
|
margin: 1em 0 7em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,12 +237,12 @@ a:hover, a:visited {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#wiki-history {
|
#wiki-history {
|
||||||
margin-top: 3em;
|
margin-top: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#wiki-history fieldset {
|
#wiki-history fieldset {
|
||||||
border: 0;
|
border: 0;
|
||||||
margin: 2em 0;
|
margin: 1em 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,14 +264,14 @@ a:hover, a:visited {
|
|||||||
|
|
||||||
#wiki-history table tr td {
|
#wiki-history table tr td {
|
||||||
border: 1px solid #c0dce9;
|
border: 1px solid #c0dce9;
|
||||||
font-size: 1.2em;
|
font-size: 1em;
|
||||||
line-height: 1.6em;
|
line-height: 1.6em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0.3em 0.7em;
|
padding: 0.3em 0.7em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#wiki-history table tr td.checkbox {
|
#wiki-history table tr td.checkbox {
|
||||||
min-width: 2em;
|
width: 4em;
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +280,9 @@ a:hover, a:visited {
|
|||||||
display: block;
|
display: block;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
padding-top: 0.4em;
|
padding-top: 0.4em;
|
||||||
margin-right: -0.2em;
|
margin: 0 auto;
|
||||||
|
width: 1.2em;
|
||||||
|
height: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#wiki-history table tr:nth-child(2n),
|
#wiki-history table tr:nth-child(2n),
|
||||||
@@ -331,6 +335,10 @@ a:hover, a:visited {
|
|||||||
padding: 0 0.2em;
|
padding: 0 0.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.history #footer {
|
||||||
|
margin-bottom: 7em;
|
||||||
|
}
|
||||||
|
|
||||||
.history #wiki-history ul.actions li,
|
.history #wiki-history ul.actions li,
|
||||||
.history #footer ul.actions li {
|
.history #footer ul.actions li {
|
||||||
margin: 0 0.6em 0 0;
|
margin: 0 0.6em 0 0;
|
||||||
@@ -410,10 +418,14 @@ a:hover, a:visited {
|
|||||||
|
|
||||||
.compare .data {
|
.compare .data {
|
||||||
border: 1px solid #ddd;
|
border: 1px solid #ddd;
|
||||||
margin-top: 1em;
|
margin: 1em 0 2em;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.compare .data table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.compare .data pre {
|
.compare .data pre {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -426,11 +438,15 @@ a:hover, a:visited {
|
|||||||
.compare .data tr td {
|
.compare .data tr td {
|
||||||
font-family: "Consolas", "Monaco", "Andale Mono", "Courier New", monospace;
|
font-family: "Consolas", "Monaco", "Andale Mono", "Courier New", monospace;
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
line-height: 1.8em;
|
line-height: 1.2em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.compare .data tr td + td + td {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.compare .data td.line_numbers {
|
.compare .data td.line_numbers {
|
||||||
background: #f7f7f7;
|
background: #f7f7f7;
|
||||||
border-right: 1px solid #999;
|
border-right: 1px solid #999;
|
||||||
@@ -444,6 +460,10 @@ a:hover, a:visited {
|
|||||||
margin-right: 0.6em;
|
margin-right: 0.6em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.compare #footer {
|
||||||
|
margin-bottom: 7em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* @control syntax */
|
/* @control syntax */
|
||||||
@@ -481,8 +501,9 @@ ul.actions {
|
|||||||
|
|
||||||
ul.actions li {
|
ul.actions li {
|
||||||
float: left;
|
float: left;
|
||||||
font-size: 1.2em;
|
font-size: 0.9em;
|
||||||
margin-left: 0.6em;
|
margin-left: 0.6em;
|
||||||
|
margin-bottom: 0.6em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.minibutton a {
|
.minibutton a {
|
||||||
@@ -586,7 +607,6 @@ ul.actions {
|
|||||||
/* @control searchbar */
|
/* @control searchbar */
|
||||||
#head #searchbar {
|
#head #searchbar {
|
||||||
float: right;
|
float: right;
|
||||||
margin: 1em 0 0 0;
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
@@ -595,6 +615,7 @@ ul.actions {
|
|||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #d4d4d4;
|
border: 1px solid #d4d4d4;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
height: 2.2em;
|
||||||
|
|
||||||
border-radius: 0.3em;
|
border-radius: 0.3em;
|
||||||
-moz-border-radius: 0.3em;
|
-moz-border-radius: 0.3em;
|
||||||
@@ -606,18 +627,15 @@ ul.actions {
|
|||||||
color: #000;
|
color: #000;
|
||||||
float: left;
|
float: left;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
font-size: 1.2em;
|
font-size: 1em;
|
||||||
height: 1.8em;
|
height: inherit;
|
||||||
|
padding: 0 .5em;
|
||||||
|
|
||||||
-webkit-focus-ring: none;
|
-webkit-focus-ring: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ff #head #searchbar #searchbar-fauxtext input#search-query {
|
.ie8 #head #searchbar #searchbar-fauxtext input#search-query {
|
||||||
padding: 0.2em 0 0.2em 0.5em;
|
padding: 0.5em 0 0 0.5em;
|
||||||
}
|
|
||||||
|
|
||||||
.ie #head #searchbar #searchbar-fauxtext input#search-query {
|
|
||||||
padding: 0.4em 0 0 0.5em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#head #searchbar #searchbar-fauxtext input#search-query.ph {
|
#head #searchbar #searchbar-fauxtext input#search-query.ph {
|
||||||
@@ -631,7 +649,7 @@ ul.actions {
|
|||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
float: right;
|
float: right;
|
||||||
font-size: 1.2em;
|
height: inherit;
|
||||||
|
|
||||||
border-radius: 0 3px 3px 0;
|
border-radius: 0 3px 3px 0;
|
||||||
-moz-border-radius: 0 3px 3px 0;
|
-moz-border-radius: 0 3px 3px 0;
|
||||||
@@ -643,7 +661,7 @@ ul.actions {
|
|||||||
background-position: -431px -1px;
|
background-position: -431px -1px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
display: block;
|
display: block;
|
||||||
height: 2em;
|
height: inherit;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-indent: -5000px;
|
text-indent: -5000px;
|
||||||
width: 28px;
|
width: 28px;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
color: black;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@@ -24,7 +24,7 @@ img {
|
|||||||
|
|
||||||
#template {
|
#template {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.4;
|
line-height: 1.6;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ a.absent {
|
|||||||
|
|
||||||
/* Primary Body Copy */
|
/* Primary Body Copy */
|
||||||
#template p {
|
#template p {
|
||||||
margin: 1em 0;
|
margin: 1.4em 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,17 +52,17 @@ a.absent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#template h1 {
|
#template h1 {
|
||||||
border-bottom: 1px solid #ccc;
|
font-size: 28px;
|
||||||
font-size: 33px; /* was 32, GH is 33px */
|
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
padding: .08em 0 0 0;
|
padding: 10px 0 0 0;
|
||||||
margin: 0;
|
margin: 30px 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#template h2 {
|
#template h2 {
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
line-height: normal;
|
line-height: 1.6;
|
||||||
margin: 22px 0 0;
|
margin: 22px 0 10px;
|
||||||
padding: 7px 0 0;
|
padding: 7px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,16 +110,16 @@ a.absent {
|
|||||||
/* Border Reset for headers with horizontal rules */
|
/* Border Reset for headers with horizontal rules */
|
||||||
#template > h2:first-child,
|
#template > h2:first-child,
|
||||||
#template > h1:first-child {
|
#template > h1:first-child {
|
||||||
margin: 12px 0 0;
|
margin: 12px 0 10px;
|
||||||
padding: 10px 0 0;
|
padding: 10px 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Lists, Blockquotes & Such */
|
/* Lists, Blockquotes & Such */
|
||||||
#template ul,
|
#template ul,
|
||||||
#template ol {
|
#template ol {
|
||||||
margin-top: 1.5em;
|
margin: 15px 0;
|
||||||
margin-left: 2.6em;
|
padding-left: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nested Lists */
|
/* Nested Lists */
|
||||||
@@ -132,7 +132,7 @@ a.absent {
|
|||||||
#template ul ul,
|
#template ul ul,
|
||||||
#template ol ol {
|
#template ol ol {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: .5em 0;
|
margin: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#template dl {
|
#template dl {
|
||||||
@@ -286,7 +286,7 @@ a.absent {
|
|||||||
background-color: #f8f8f8;
|
background-color: #f8f8f8;
|
||||||
border: 1px solid #dedede;
|
border: 1px solid #dedede;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding: 0;
|
padding: 1px 5px;
|
||||||
|
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 3px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 3px;
|
||||||
@@ -313,6 +313,7 @@ pre, code {
|
|||||||
#template pre code, #template pre tt {
|
#template pre code, #template pre tt {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Executable → Regular
+13
-3
@@ -3,10 +3,16 @@
|
|||||||
<h1>History for <strong>{{path}}</strong></h1>
|
<h1>History for <strong>{{path}}</strong></h1>
|
||||||
|
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton">
|
||||||
|
{{>searchbar}}
|
||||||
|
</li>
|
||||||
|
<li class="minibutton"><a href="/{{escaped_name}}"
|
||||||
|
class="action-view-page">View Page</a></li>
|
||||||
|
<li class="minibutton"><a href="/edit/{{escaped_name}}"
|
||||||
|
class="action-edit-page">Edit Page</a></li>
|
||||||
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
||||||
class="action-page-history">Back to Page History</a></li>
|
class="action-page-history">Page History</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{>searchbar}}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#message}}
|
{{#message}}
|
||||||
@@ -17,6 +23,8 @@
|
|||||||
|
|
||||||
{{#show_revert}}
|
{{#show_revert}}
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
||||||
|
class="action-page-history">Back to Page History</a></li>
|
||||||
<li class="minibutton">
|
<li class="minibutton">
|
||||||
<form name="gollum-revert" action="/revert/{{escaped_name}}/{{before}}/{{after}}" method="post" id="gollum-revert-form">
|
<form name="gollum-revert" action="/revert/{{escaped_name}}/{{before}}/{{after}}" method="post" id="gollum-revert-form">
|
||||||
<a href="#" class="gollum-revert-button">Revert Changes</a>
|
<a href="#" class="gollum-revert-button">Revert Changes</a>
|
||||||
@@ -41,6 +49,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
||||||
|
class="action-page-history">Back to Page History</a></li>
|
||||||
{{#show_revert}}
|
{{#show_revert}}
|
||||||
<li class="minibutton">
|
<li class="minibutton">
|
||||||
<a href="#" class="gollum-revert-button">Revert Changes</a>
|
<a href="#" class="gollum-revert-button">Revert Changes</a>
|
||||||
@@ -50,4 +60,4 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Executable → Regular
Executable → Regular
+4
-2
@@ -2,12 +2,14 @@
|
|||||||
<div id="head">
|
<div id="head">
|
||||||
<h1>History for <strong>{{title}}</strong></h1>
|
<h1>History for <strong>{{title}}</strong></h1>
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton">
|
||||||
|
{{>searchbar}}
|
||||||
|
</li>
|
||||||
<li class="minibutton"><a href="/{{escaped_name}}"
|
<li class="minibutton"><a href="/{{escaped_name}}"
|
||||||
class="action-view-page">View Page</a></li>
|
class="action-view-page">View Page</a></li>
|
||||||
<li class="minibutton"><a href="/edit/{{escaped_name}}"
|
<li class="minibutton"><a href="/edit/{{escaped_name}}"
|
||||||
class="action-edit-page">Edit Page</a></li>
|
class="action-edit-page">Edit Page</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{>searchbar}}
|
|
||||||
</div>
|
</div>
|
||||||
<div id="wiki-history">
|
<div id="wiki-history">
|
||||||
|
|
||||||
@@ -57,4 +59,4 @@
|
|||||||
class="action-back-to-top">Back to Top</a></li>
|
class="action-back-to-top">Back to Top</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Executable → Regular
Executable → Regular
+3
-1
@@ -2,6 +2,9 @@
|
|||||||
<div id="head">
|
<div id="head">
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton">
|
||||||
|
{{>searchbar}}
|
||||||
|
</li>
|
||||||
<li class="minibutton"><a href="/pages"
|
<li class="minibutton"><a href="/pages"
|
||||||
class="action-all-pages">All Pages</a></li>
|
class="action-all-pages">All Pages</a></li>
|
||||||
<li class="minibutton" class="jaws">
|
<li class="minibutton" class="jaws">
|
||||||
@@ -13,7 +16,6 @@
|
|||||||
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
<li class="minibutton"><a href="/history/{{escaped_name}}"
|
||||||
class="action-page-history">Page History</a></li>
|
class="action-page-history">Page History</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{>searchbar}}
|
|
||||||
</div>
|
</div>
|
||||||
<div id="wiki-content">
|
<div id="wiki-content">
|
||||||
<div class="wrap {{#has_footer}} has-footer {{/has_footer}} {{#has_sidebar}} has-rightbar{{/has_sidebar}}">
|
<div class="wrap {{#has_footer}} has-footer {{/has_footer}} {{#has_sidebar}} has-rightbar{{/has_sidebar}}">
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
<div id="head">
|
<div id="head">
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton">
|
||||||
|
{{>searchbar}}
|
||||||
|
</li>
|
||||||
<li class="minibutton"><a href="/"
|
<li class="minibutton"><a href="/"
|
||||||
class="action-edit-page">Home</a></li>
|
class="action-edit-page">Home</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{>searchbar}}
|
|
||||||
</div>
|
</div>
|
||||||
<div id="results">
|
<div id="results">
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
<div id="head">
|
<div id="head">
|
||||||
<h1>Search Results for <strong>{{query}}</strong></h1>
|
<h1>Search Results for <strong>{{query}}</strong></h1>
|
||||||
<ul class="actions">
|
<ul class="actions">
|
||||||
|
<li class="minibutton">
|
||||||
|
{{>searchbar}}
|
||||||
|
</li>
|
||||||
<li class="minibutton"><a href="/"
|
<li class="minibutton"><a href="/"
|
||||||
class="action-edit-page">Home</a></li>
|
class="action-edit-page">Home</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{{>searchbar}}
|
|
||||||
</div>
|
</div>
|
||||||
<div id="results">
|
<div id="results">
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,9 @@ module Gollum
|
|||||||
@wiki.history_sanitizer :
|
@wiki.history_sanitizer :
|
||||||
@wiki.sanitizer
|
@wiki.sanitizer
|
||||||
|
|
||||||
data = extract_tex(@data.dup)
|
data = @data.dup
|
||||||
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
|
||||||
@@ -116,6 +117,9 @@ module Gollum
|
|||||||
#
|
#
|
||||||
# Returns the placeholder'd String data.
|
# Returns the placeholder'd String data.
|
||||||
def extract_tags(data)
|
def extract_tags(data)
|
||||||
|
if @format == :asciidoc
|
||||||
|
return data
|
||||||
|
end
|
||||||
data.gsub!(/(.?)\[\[(.+?)\]\]([^\[]?)/m) do
|
data.gsub!(/(.?)\[\[(.+?)\]\]([^\[]?)/m) do
|
||||||
if $1 == "'" && $3 != "'"
|
if $1 == "'" && $3 != "'"
|
||||||
"[[#{$2}]]#{$3}"
|
"[[#{$2}]]#{$3}"
|
||||||
|
|||||||
+2
-24
@@ -124,35 +124,13 @@ module Gollum
|
|||||||
self.class.canonicalize_filename(filename)
|
self.class.canonicalize_filename(filename)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: If the first element of a formatted page is an <h1> tag it can
|
# Public: The title will be constructed from the
|
||||||
# be considered the title of the page and used in the display. If the
|
|
||||||
# first element is NOT an <h1> tag, the title will be constructed from the
|
|
||||||
# filename by stripping the extension and replacing any dashes with
|
# filename by stripping the extension and replacing any dashes with
|
||||||
# spaces.
|
# spaces.
|
||||||
#
|
#
|
||||||
# Returns the fully sanitized String title.
|
# Returns the fully sanitized String title.
|
||||||
def title
|
def title
|
||||||
doc = Nokogiri::HTML(%{<div id="gollum-root">} + self.formatted_data + %{</div>})
|
header = Sanitize.clean(name).strip
|
||||||
|
|
||||||
header =
|
|
||||||
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
|
|
||||||
|
|
||||||
if !header.empty?
|
|
||||||
Sanitize.clean(header.to_html)
|
|
||||||
else
|
|
||||||
Sanitize.clean(name)
|
|
||||||
end.strip
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: The path of the page within the repo.
|
# Public: The path of the page within the repo.
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ module Gollum
|
|||||||
|
|
||||||
# Default whitelisted protocols for URLs.
|
# Default whitelisted protocols for URLs.
|
||||||
PROTOCOLS = {
|
PROTOCOLS = {
|
||||||
'a' => {'href' => ['http', 'https', 'mailto', 'ftp', 'irc', :relative]},
|
'a' => {'href' => ['http', 'https', 'mailto', 'ftp', 'irc', 'apt', :relative]},
|
||||||
'img' => {'src' => ['http', 'https', :relative]}
|
'img' => {'src' => ['http', 'https', :relative]}
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
@@ -120,12 +120,12 @@ module Gollum
|
|||||||
attr_writer :allow_comments
|
attr_writer :allow_comments
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@elements = ELEMENTS
|
@elements = ELEMENTS.dup
|
||||||
@attributes = ATTRIBUTES
|
@attributes = ATTRIBUTES.dup
|
||||||
@protocols = PROTOCOLS
|
@protocols = PROTOCOLS.dup
|
||||||
@transformers = TRANSFORMERS
|
@transformers = TRANSFORMERS.dup
|
||||||
@add_attributes = {}
|
@add_attributes = {}
|
||||||
@remove_contents = REMOVE_CONTENTS
|
@remove_contents = REMOVE_CONTENTS.dup
|
||||||
@allow_comments = false
|
@allow_comments = false
|
||||||
@id_prefix = 'wiki-'
|
@id_prefix = 'wiki-'
|
||||||
yield self if block_given?
|
yield self if block_given?
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ context "Wiki" do
|
|||||||
|
|
||||||
test "normalizes commit hash" do
|
test "normalizes commit hash" do
|
||||||
commit = {:message => 'abc'}
|
commit = {:message => 'abc'}
|
||||||
name = @wiki.repo.config['user.name']
|
name = @wiki.repo.config['user.name'] || @wiki.default_committer_name
|
||||||
email = @wiki.repo.config['user.email']
|
email = @wiki.repo.config['user.email'] || @wiki.default_committer_email
|
||||||
committer = Gollum::Committer.new(@wiki, commit)
|
committer = Gollum::Committer.new(@wiki, commit)
|
||||||
assert_equal name, committer.actor.name
|
assert_equal name, committer.actor.name
|
||||||
assert_equal email, committer.actor.email
|
assert_equal email, committer.actor.email
|
||||||
|
|||||||
@@ -495,6 +495,13 @@ np.array([[2,2],[1,3]],np.float)
|
|||||||
compare(content, output)
|
compare(content, output)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "allows apt uri schemes" do
|
||||||
|
content = "[Hack me](apt:gettext)"
|
||||||
|
output = "<p><a href=\"apt:gettext\">Hackme</a></p>"
|
||||||
|
compare(content, output)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
test "removes style blocks completely" do
|
test "removes style blocks completely" do
|
||||||
content = "<style>body { color: red }</style>foobar"
|
content = "<style>body { color: red }</style>foobar"
|
||||||
output = "<p>foobar</p>"
|
output = "<p>foobar</p>"
|
||||||
@@ -588,6 +595,19 @@ np.array([[2,2],[1,3]],np.float)
|
|||||||
compare(content, output, 'md')
|
compare(content, output, 'md')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# Asciidoc
|
||||||
|
#########################################################################
|
||||||
|
|
||||||
|
test "asciidoc header" do
|
||||||
|
compare("= Book Title\n\n== Heading", '<div class="sect1"><h2 id="wiki-_heading">Heading</h2><div class="sectionbody"></div></div>', 'asciidoc')
|
||||||
|
end
|
||||||
|
|
||||||
|
test "internal links with asciidoc" do
|
||||||
|
compare("= Book Title\n\n[[anid]]\n== Heading", '<div class="sect1"><h2 id="wiki-anid">Heading</h2><div class="sectionbody"></div></div>', 'asciidoc')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Helpers
|
# Helpers
|
||||||
|
|||||||
+4
-4
@@ -104,12 +104,12 @@ context "Page" do
|
|||||||
assert_equal 'My Precious', page.title
|
assert_equal 'My Precious', page.title
|
||||||
end
|
end
|
||||||
|
|
||||||
test "title from h1 with normal contents" do
|
test "title from filename with normal contents" do
|
||||||
page = @wiki.page('Home')
|
page = @wiki.page('Home')
|
||||||
assert_equal "The LOTR Wiki", page.title
|
assert_equal "Home", page.title
|
||||||
end
|
end
|
||||||
|
|
||||||
test "title from h1 with html contents" do
|
test "title from filename with html contents" do
|
||||||
page = @wiki.page('Eye Of Sauron')
|
page = @wiki.page('Eye Of Sauron')
|
||||||
assert_equal "Eye Of Sauron", page.title
|
assert_equal "Eye Of Sauron", page.title
|
||||||
end
|
end
|
||||||
@@ -163,4 +163,4 @@ context "Page" do
|
|||||||
assert_equal "/foo", Gollum::BlobEntry.normalize_dir("foo")
|
assert_equal "/foo", Gollum::BlobEntry.normalize_dir("foo")
|
||||||
assert_equal "/foo", Gollum::BlobEntry.normalize_dir("/foo")
|
assert_equal "/foo", Gollum::BlobEntry.normalize_dir("/foo")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user