Compare commits

..

1 Commits

Author SHA1 Message Date
benjamin wil a9039177b7 Include rdoc as a dependency
We've had some reports (#1342, #1809) of `rdoc` not being installed
in some environments, causing Gollum to error in unpleasant ways.

This isn't an issue that's unique to Gollum, and I don't think `rdoc`
should actually be a hard dependency of this project.  But since we can
side-step the issue by requiring `rdoc`, something that most users who
install Gollum via RubyGems would already have installed, I don't think
this is a horrible solution.
2022-05-04 18:07:35 -07:00
15 changed files with 107 additions and 320 deletions
-38
View File
@@ -1,38 +0,0 @@
en:
pagination:
aria:
label: Pagination
next_page: Next page
previous_page: Previous page
next: Next
previous: Previous
precious/views/compare:
back_to_page_history: Back to Page History
back_to_top: Back to Top
comparison_of: Comparison of
comparing_versions_of: Comparing versions of
comparing_from: "Comparing %{before} to %{after}"
revert: Revert Changes
precious/views/error:
error: Error
precious/views/history:
browse_in_history_description: Browse the page at this point in the history
compare_revisions: Compare Revisions
history_for: History for
precious/views/latest_changes:
title: Latest Changes (Globally)
precious/views/layout:
title: Home
precious/views/overview:
back_to_top: Back to Top
delete_confirmation: "Are you sure you want to delete %{name}?"
no_pages_in: There are no pages in
on: "on"
title: "Overview of %{ref}"
precious/views/search:
aria:
show_all: "Show all %{count} hits in this page"
back_to_top: Back to Top
no_results: There are no results for your search
search_results_for: Search results for
title: "Search results for %{query}"
+8 -37
View File
@@ -4,7 +4,7 @@
<h1 class="header-title text-center text-md-left py-4"> <h1 class="header-title text-center text-md-left py-4">
<span class="f1-light text-gray-light"> <span class="f1-light text-gray-light">
{{t.comparing_versions_of}} Comparing versions of
</span> </span>
{{name}} {{name}}
</h1> </h1>
@@ -21,35 +21,16 @@
{{#allow_editing}} {{#allow_editing}}
<form name="gollum-revert" action="{{revert_path}}/{{escaped_url_path}}/{{before}}/{{after}}" method="post" id="gollum-revert-form"></form> <form name="gollum-revert" action="{{revert_path}}/{{escaped_url_path}}/{{before}}/{{after}}" method="post" id="gollum-revert-form"></form>
<span class="pb-4"> <span class="pb-4">
<button <button class="btn btn-sm" type="submit" onclick="$('#gollum-revert-form').submit()">Revert Changes</button>
class="btn btn-sm"
onclick="$('#gollum-revert-form').submit()"
type="submit"
>
{{t.revert}}
</button>
</span> </span>
{{/allow_editing}} {{/allow_editing}}
{{/show_revert}} {{/show_revert}}
<a href="{{history_path}}/{{escaped_url_path}}" class="btn btn-sm action-page-history">Back to Page History</a>
<a
class="btn btn-sm action-page-history"
href="{{history_path}}/{{escaped_url_path}}"
>
{{t.back_to_page_history}}
</a>
</div> </div>
<div class="Box data highlight"> <div class="Box data highlight">
<div class="Box-header Box--condensed Box-header--gray"> <div class="Box-header Box--condensed Box-header--gray">{{path}} <span class="px-2 float-right">Comparing {{before}} to {{after}}</span></div>
{{path}} <table >
<span class="px-2 float-right">
{{t.comparing_from}}
</span>
</div>
<table>
{{#lines}} {{#lines}}
<tr> <tr>
<td class="line_numbers">{{ldln}}</td> <td class="line_numbers">{{ldln}}</td>
@@ -66,22 +47,12 @@
<div class="pt-4" id="footer"> <div class="pt-4" id="footer">
{{#show_revert}} {{#show_revert}}
{{#allow_editing}} {{#allow_editing}}
<span class="pt-4"> <span class="pt-4"><button class="btn btn-sm gollum-revert-button" type="submit" onclick="$('#gollum-revert-form').submit()">Revert Changes</button></span>
<button
class="btn btn-sm gollum-revert-button"
onclick="$('#gollum-revert-form').submit()"
type="submit"
>
{{t.revert}}
</button>
</span>
{{/allow_editing}} {{/allow_editing}}
{{/show_revert}} {{/show_revert}}
<div class="pt-4"> <div class="pt-4">
<a href="#"> <a href="#">Back to Top</a>
{{t.back_to_top}}
</a>
</div> </div>
</div> </div>
</div> </div>
+1 -1
View File
@@ -1,6 +1,6 @@
<div id="wiki-wrapper" class="error"> <div id="wiki-wrapper" class="error">
<div id="error"> <div id="error">
<h1>{{t.error}}</h1> <h1>Error</h1>
<p> <p>
{{message}} {{message}}
</p> </p>
+7 -16
View File
@@ -4,7 +4,7 @@
<h1 class="header-title text-center text-md-left py-4"> <h1 class="header-title text-center text-md-left py-4">
<span class="f1-light text-gray-light"> <span class="f1-light text-gray-light">
{{t.history_for}} History for
</span> </span>
{{name}} {{name}}
</h1> </h1>
@@ -27,13 +27,7 @@
<span class="flex-auto col-5">{{message}}</span> <span class="flex-auto col-5">{{message}}</span>
<span class="pl-4 float-right"> <span class="pl-4 float-right">
<a href="{{href}}" class="btn btn-outline text-mono">{{id7}}</a> <a href="{{href}}" class="btn btn-outline text-mono">{{id7}}</a>
<a <a href="{{href_page}}" title="Browse the page at this point in the history" class="btn btn-outline">{{#octicon}}code{{/octicon}}</a>
class="btn btn-outline"
href="{{href_page}}"
title="{{t.browse_in_history_description}}"
>
{{#octicon}}code{{/octicon}}
</a>
</span> </span>
</li> </li>
{{/versions}} {{/versions}}
@@ -41,14 +35,11 @@
</form> </form>
</div> </div>
<div id="footer">
<div id="footer">
<div class="pt-4"> <div class="pt-4">
<button <button class="btn btn-sm action-compare-revision" type="submit">Compare Revisions</button>
class="btn btn-sm action-compare-revision"
type="submit"
>
{{t.compare_revisions}}
</button>
</div>
</div> </div>
</div> </div>
</div>
+3 -16
View File
@@ -21,15 +21,7 @@
<span class="pr-2">{{{icon}}}</span> <span class="pr-2">{{{icon}}}</span>
<span><a href="{{url}}">{{name}}</a></span> <span><a href="{{url}}">{{name}}</a></span>
{{#allow_editing}} {{#allow_editing}}
{{#is_file}} {{#is_file}}<button class="btn btn-sm float-right delete-file" data-file-path="{{file_path}}" data-confirm="Are you sure you want to delete {{name}}?">{{#octicon}}trash{{/octicon}}</button>{{/is_file}}
<button
class="btn btn-sm float-right delete-file"
data-confirm="{{t.delete_confirmation}}"
data-file-path="{{file_path}}"
>
{{#octicon}}trash{{/octicon}}
</button>
{{/is_file}}
{{/allow_editing}} {{/allow_editing}}
</li> </li>
{{/files_folders}} {{/files_folders}}
@@ -41,18 +33,13 @@
{{#no_results}} {{#no_results}}
<p id="no-results"> <p id="no-results">
{{t.no_pages_in}} There are no pages in <strong>{{current_path}}</strong> on <strong>{{ref}}</strong>.
<strong>{{current_path}}</strong>
{{t.on}}
<strong>{{ref}}</strong>.
</p> </p>
{{/no_results}} {{/no_results}}
</div> </div>
<div class="pt-4" id="footer"> <div class="pt-4" id="footer">
<a href="#"> <a href="#">Back to Top</a>
{{t.back_to_top}}
</a>
</div> </div>
</div> </div>
+3 -20
View File
@@ -1,23 +1,6 @@
<nav class="paginate-container" aria-label="{{tt.pagination.aria.label}}"> <nav class="paginate-container" aria-label="Pagination">
<div class="pagination" id="pagination"> <div class="pagination" id="pagination">
<a <a id="prev" href="?page_num={{previous_page}}{{query_string}}" class="previous_page {{^previous_page}}disabled{{/previous_page}}">Previous</span>
aria-label="{{td.pagination.aria.previous_page}}" <a id="next" href="?page_num={{next_page}}{{query_string}}" class="next_page {{^next_page}}disabled{{/next_page}}" rel="next" aria-label="Next Page">Next</a>
class="previous_page {{^previous_page}}disabled{{/previous_page}}"
href="?page_num={{previous_page}}{{query_string}}"
id="prev"
rel="prev"
>
{{tt.pagination.previous}}
</a>
<a
aria-label="{{td.pagination.aria.next_page}}"
class="next_page {{^next_page}}disabled{{/next_page}}"
href="?page_num={{next_page}}{{query_string}}"
id="next"
rel="next"
>
{{tt.pagination.next}}
</a>
</div> </div>
</nav> </nav>
+5 -9
View File
@@ -4,7 +4,7 @@
<h1 class="header-title text-center text-md-left py-4"> <h1 class="header-title text-center text-md-left py-4">
<span class="f1-light text-gray-light"> <span class="f1-light text-gray-light">
{{t.search_results_for}} Search results for
</span> </span>
{{name}} {{name}}
</h1> </h1>
@@ -21,12 +21,7 @@
<li class="Box-row Box-row--gray"> <li class="Box-row Box-row--gray">
<span class="Counter Counter--gray tooltipped tooltipped-w" aria-label="{{filename_count}} hits in filename - {{count}} hits in content">{{filename_count}} - {{count}}</span>&nbsp; <span class="Counter Counter--gray tooltipped tooltipped-w" aria-label="{{filename_count}} hits in filename - {{count}} hits in content">{{filename_count}} - {{count}}</span>&nbsp;
<span class="text-bold"><a href="{{href}}">{{name}}</a></span> <span class="text-bold"><a href="{{href}}">{{name}}</a></span>
<button <button class="btn-link tooltipped tooltipped-w float-right toggle-context" aria-label="Show all {{count}} hits in this page">{{#octicon}}search{{/octicon}}</button>
class="btn-link tooltipped tooltipped-w float-right toggle-context"
aria-label="{{t.aria.show_all}}"
>
{{#octicon}}search{{/octicon}}
</button>
</li> </li>
<div class="search-context"> <div class="search-context">
@@ -34,6 +29,7 @@
<li class="Box-row border-0"><span class="text-italic">{{.}}</span></li> <li class="Box-row border-0"><span class="text-italic">{{.}}</span></li>
{{/context}} {{/context}}
</div> </div>
{{/results}} {{/results}}
</ul> </ul>
</div> </div>
@@ -41,12 +37,12 @@
{{#no_results}} {{#no_results}}
<p id="no-results"> <p id="no-results">
{{t.no_results}} <strong>{{query}}</strong>. There are no results for your search <strong>{{query}}</strong>.
</p> </p>
{{/no_results}} {{/no_results}}
<div id="footer" class="mt-4"> <div id="footer" class="mt-4">
<a class="btn" href="#">{{t.back_to_top}}</a> <a class="btn" href="#">Back to Top</a>
</div> </div>
</div> </div>
+1 -1
View File
@@ -6,7 +6,7 @@ module Precious
attr_reader :page, :diff, :versions, :message, :allow_editing attr_reader :page, :diff, :versions, :message, :allow_editing
def title def title
[t[:comparison_of], @page.title].join(" ") "Comparison of #{@page.title}"
end end
def before def before
@@ -21,13 +21,6 @@ module Precious
autofill I18n.t(locale_klass_name) autofill I18n.t(locale_klass_name)
end end
# Returns all I18n translation strings from the root of an I18n YAML file.
# Otherwise, it works exactly like the `#t` method that's also defined in
# this file.
def tt
autofill I18n.t('.')
end
private private
# Recursively looks up I18n translation values and autofills any YAML # Recursively looks up I18n translation values and autofills any YAML
+1 -1
View File
@@ -9,7 +9,7 @@ module Precious
attr_reader :wiki attr_reader :wiki
def title def title
t[:title] "Latest Changes (Globally)"
end end
def versions def versions
+1 -1
View File
@@ -20,7 +20,7 @@ module Precious
end end
def title def title
t[:title] "Home"
end end
def has_path def has_path
+2 -2
View File
@@ -3,11 +3,11 @@ require 'pathname'
module Precious module Precious
module Views module Views
class Overview < Layout class Overview < Layout
attr_reader :name, :results, :ref, :allow_editing, :newable attr_reader :results, :ref, :allow_editing, :newable
HIDDEN_PATHS = ['.gitkeep'] HIDDEN_PATHS = ['.gitkeep']
def title def title
t[:title] "Overview of #{@ref}"
end end
# def editable # def editable
+1 -1
View File
@@ -23,7 +23,7 @@ module Precious
end end
def title def title
t[:title] "Search results for " + @query
end end
def search def search
+2 -98
View File
@@ -15,13 +15,12 @@ describe Precious::Views::LocaleHelpers do
end end
def setup def setup
I18n.available_locales = [:en, :de] ::I18n.available_locales = [:en, :de]
I18n.load_path = Dir[File.expand_path("test/support/locales" + "/*.yml")] ::I18n.load_path = Dir[File.expand_path("test/support/locales" + "/*.yml")]
end end
def teardown def teardown
I18n.locale = :en I18n.locale = :en
I18n.load_path = Dir[::File.expand_path("lib/gollum/locales") + "/*.yml"]
end end
let(:dummy_instance) { TestClass.new } let(:dummy_instance) { TestClass.new }
@@ -132,99 +131,4 @@ describe Precious::Views::LocaleHelpers do
end end
end end
end end
describe "#tt" do
describe "mustache usage" do
let(:subject) { dummy_instance.render(mustache_template) }
let(:mustache_template) { "{{ tt.test_class.hello_world }}" }
describe "in the default locale" do
it "returns the translation string" do
_(subject).must_equal "Hello world"
end
end
describe "in the configured locale" do
it "returns the translation string" do
I18n.locale = :de
_(subject).must_equal "Hallo Welt"
end
end
describe "translations with YAML arguments" do
let(:mustache_template) { "{{ tt.test_class.author_info.full }}" }
describe "in the default locale" do
it "autofills YAML arguments" do
_(subject).must_equal "Author J.R.R. is from Bloemfontein"
end
end
describe "in the configured locale" do
it "autofills YAML arguments" do
I18n.locale = :de
_(subject).must_equal "Autor J.R.R. ist vom Bloemfontein"
end
end
end
describe "translations with invalid arguments" do
let(:mustache_template) { "{{ tt.test_class.has_invalid_argument }}" }
it "fails gracefully with embedded error message" do
expected_string = "Welcome to " \
"[#{TestClass::NO_METHOD_MESSAGE}: no_matching_method]"
_(subject).must_equal expected_string
end
end
describe "missing translations" do
let(:mustache_template) {
"{{ tt.test_class.nested.nonexistent_key }}"
}
it "outputs an empty string" do
_(subject).must_be_empty
end
end
end
describe "usage" do
let(:subject) { dummy_instance.tt }
it "returns a hash" do
_(subject).must_be_kind_of Hash
end
it "returns all present translation keys" do
i18n_keys = I18n.t(".").keys
_(subject.keys).must_equal i18n_keys
end
it "returns nested keys" do
nested_keys = subject[:test_class][:author_info].keys
_(nested_keys).must_equal [:full]
end
describe "auto-filled YAML arguments" do
let(:subject) { dummy_instance.tt[:test_class][:author_info][:full] }
it "auto-fills in the default locale" do
_(subject).must_equal "Author J.R.R. is from Bloemfontein"
end
it "auto-fills in a configured locale" do
I18n.locale = :de
_(subject).must_equal "Autor J.R.R. ist vom Bloemfontein"
end
end
end
end
end end