Merge branch 'fuzzylemma-configure-default-keybinding'
This commit is contained in:
@@ -136,6 +136,7 @@ Gollum comes with the following command line options:
|
||||
| --template-dir | [PATH] | Specify custom mustache template directory. Only overrides templates that exist in this directory. |
|
||||
| --template-page | none | Use _Template in root as a template for new pages. Must be committed. |
|
||||
| --emoji | none | Parse and interpret emoji tags (e.g. `:heart:`) except when the leading colon is backslashed (e.g. `\:heart:`). |
|
||||
| --default-keybind | none | Set the default keybinding for the editor. Can be set to `vim`, or `emacs`. |
|
||||
| --lenient-tag-lookup | none | Internal links resolve case-insensitively, will treat spaces as hyphens, and will match the first page found with a certain filename, anywhere in the repository. Provides compatibility with Gollum 4.x. |
|
||||
| --help | none | Display the list of options on the command line. |
|
||||
| --version | none | Display the current version of Gollum. |
|
||||
|
||||
+5
-1
@@ -15,7 +15,7 @@ options = {
|
||||
}
|
||||
wiki_options = {
|
||||
:allow_uploads => false,
|
||||
:allow_editing => true,
|
||||
:allow_editing => true
|
||||
}
|
||||
|
||||
opts = OptionParser.new do |opts|
|
||||
@@ -166,6 +166,10 @@ MSG
|
||||
opts.on('--emoji', 'Parse and interpret emoji tags (e.g. :heart:) except when the leading colon is backslashed (e.g. \\:heart:).') do
|
||||
wiki_options[:emoji] = true
|
||||
end
|
||||
opts.on('--default-keybinding [KEYBINDING]', Gollum::KEYBINDINGS.drop(1), 'Set the default keybinding for the editor. Can be set to \'vim\', or \'emacs\'.') do |keybinding|
|
||||
wiki_options[:default_keybinding] = keybinding.to_s
|
||||
puts wiki_options[:default_keybinding]
|
||||
end
|
||||
opts.separator ''
|
||||
opts.separator ' Common:'
|
||||
|
||||
|
||||
+2
-1
@@ -14,7 +14,8 @@ require ::File.expand_path('../gollum/uri_encode_component', __FILE__)
|
||||
|
||||
module Gollum
|
||||
VERSION = '5.3.0'
|
||||
|
||||
KEYBINDINGS = ['default', 'vim', 'emacs']
|
||||
|
||||
::I18n.available_locales = [:en]
|
||||
::I18n.load_path = Dir[::File.expand_path("lib/gollum/locales") + "/*.yml"]
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ module Precious
|
||||
@show_local_time = settings.wiki_options.fetch(:show_local_time, false)
|
||||
|
||||
@wiki_title = settings.wiki_options.fetch(:title, 'Gollum Wiki')
|
||||
@default_keybinding = settings.wiki_options.fetch(:default_keybinding, 'default')
|
||||
|
||||
if settings.wiki_options[:template_dir]
|
||||
Precious::Views::Layout.extend Precious::Views::TemplateCascade
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"files":{"app-f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5.js":{"logical_path":"app.js","mtime":"2021-11-15T20:08:30-08:00","size":136040,"digest":"f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5","integrity":"sha256-8FQB7jdPDH9I/CvAjjC09NtwWGH9WJXtcJmGg7ODv7U="},"editor-9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a.js":{"logical_path":"editor.js","mtime":"2021-11-15T20:08:30-08:00","size":744886,"digest":"9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a","integrity":"sha256-mIHQx65mMpPw46fnJynux+lA+mExhcB2cJt20pL1cDo="},"app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css":{"logical_path":"app.css","mtime":"2021-11-15T20:08:30-08:00","size":396731,"digest":"309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5","integrity":"sha256-MJvgMjlueDsTpH31jzibfI4RwrLUJkBWC4dPZ3wl9uU="},"criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css":{"logical_path":"criticmarkup.css","mtime":"2021-08-22T15:24:51-07:00","size":646,"digest":"31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4","integrity":"sha256-Ma5dMoK7uOe3w8mRfp+2jjMVprSnXabOxI0huIRpBcQ="},"print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css":{"logical_path":"print.css","mtime":"2021-08-22T15:24:51-07:00","size":75,"digest":"512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb","integrity":"sha256-USSYw2i+DT+xuhBd+oQomuSDgOyfy++Ui9TiOwsJW/s="}},"assets":{"app.js":"app-f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5.js","editor.js":"editor-9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a.js","app.css":"app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css","criticmarkup.css":"criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css","print.css":"print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css"}}
|
||||
{"files":{"app-f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5.js":{"logical_path":"app.js","mtime":"2021-11-15T20:08:30-08:00","size":136040,"digest":"f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5","integrity":"sha256-8FQB7jdPDH9I/CvAjjC09NtwWGH9WJXtcJmGg7ODv7U="},"editor-9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a.js":{"logical_path":"editor.js","mtime":"2021-11-15T20:08:30-08:00","size":744886,"digest":"9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a","integrity":"sha256-mIHQx65mMpPw46fnJynux+lA+mExhcB2cJt20pL1cDo="},"app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css":{"logical_path":"app.css","mtime":"2022-05-26T12:13:37+02:00","size":396731,"digest":"309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5","integrity":"sha256-MJvgMjlueDsTpH31jzibfI4RwrLUJkBWC4dPZ3wl9uU="},"criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css":{"logical_path":"criticmarkup.css","mtime":"2020-03-29T22:28:51+02:00","size":646,"digest":"31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4","integrity":"sha256-Ma5dMoK7uOe3w8mRfp+2jjMVprSnXabOxI0huIRpBcQ="},"print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css":{"logical_path":"print.css","mtime":"2020-03-30T11:12:22+02:00","size":75,"digest":"512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb","integrity":"sha256-USSYw2i+DT+xuhBd+oQomuSDgOyfy++Ui9TiOwsJW/s="},"app-eb6effc9f708916af14718a5c9d2a5028625664f62c2528e5989538537f3f4a8.js":{"logical_path":"app.js","mtime":"2022-05-26T13:00:46+02:00","size":188288,"digest":"eb6effc9f708916af14718a5c9d2a5028625664f62c2528e5989538537f3f4a8","integrity":"sha256-627/yfcIkWrxRxilydKlAoYlZk9iwlKOWYlThTfz9Kg="},"editor-ebdf534a0063fe3b05a7e7daaf7aa40b78fab9863142b161d88f32a3f035378a.js":{"logical_path":"editor.js","mtime":"2022-05-26T13:00:46+02:00","size":745160,"digest":"ebdf534a0063fe3b05a7e7daaf7aa40b78fab9863142b161d88f32a3f035378a","integrity":"sha256-699TSgBj/jsFp+far3qkC3j6uYYxQrFh2I8yo/A1N4o="}},"assets":{"app.js":"app-eb6effc9f708916af14718a5c9d2a5028625664f62c2528e5989538537f3f4a8.js","editor.js":"editor-ebdf534a0063fe3b05a7e7daaf7aa40b78fab9863142b161d88f32a3f035378a.js","app.css":"app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css","criticmarkup.css":"criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css","print.css":"print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css"}}
|
||||
BIN
Binary file not shown.
+6
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
-5
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
BIN
Binary file not shown.
+3
-3
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -55,6 +55,20 @@
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
function setEditorKeyboardHandler(mode) {
|
||||
var editor = window.ace_editor;
|
||||
var storage = window.localStorage;
|
||||
storage.setItem('gollum-kbm', mode)
|
||||
if (mode == "default") {
|
||||
editor.setKeyboardHandler();
|
||||
} else if (mode == "vim" || mode == "emacs") {
|
||||
editor.setKeyboardHandler("ace/keyboard/" + mode);
|
||||
} else {
|
||||
editor.setKeyboardHandler();
|
||||
}
|
||||
editor.focus();
|
||||
}
|
||||
|
||||
/**
|
||||
* $.GollumEditor
|
||||
*
|
||||
@@ -97,9 +111,22 @@
|
||||
});
|
||||
$('#gollum-autorecover-msg')[0].hidden = false;
|
||||
}
|
||||
|
||||
|
||||
// Check for user last keybind and ensure ui is correct
|
||||
var storage = window.localStorage;
|
||||
var userDefaultKeybind = storage.getItem('gollum-kbm');
|
||||
if (userDefaultKeybind) {
|
||||
default_keybinding = userDefaultKeybind;
|
||||
}
|
||||
var keybinding = document.getElementById('keybinding')
|
||||
for (var i = 0; i < keybinding.options.length; ++i) {
|
||||
if (keybinding.options[i].text === default_keybinding) {
|
||||
keybinding.options[i].selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
editor.setTheme("ace/theme/tomorrow");
|
||||
editor.setKeyboardHandler();
|
||||
setEditorKeyboardHandler(default_keybinding);
|
||||
editor.renderer.setShowGutter(false);
|
||||
editor.getSession().setUseWrapMode(true);
|
||||
editor.getSession().setValue(textarea.val());
|
||||
@@ -151,15 +178,7 @@
|
||||
|
||||
$("#keybinding").change(function() {
|
||||
var mode = $(this).val();
|
||||
var editor = window.ace_editor;
|
||||
if (mode == "default") {
|
||||
editor.setKeyboardHandler();
|
||||
} else if (mode == "vim" || mode == "emacs") {
|
||||
editor.setKeyboardHandler("ace/keyboard/" + mode);
|
||||
} else {
|
||||
editor.setKeyboardHandler();
|
||||
}
|
||||
editor.focus();
|
||||
setEditorKeyboardHandler(mode)
|
||||
});
|
||||
|
||||
// Remove any autosaved text when we hit save or cancel
|
||||
|
||||
@@ -51,9 +51,9 @@
|
||||
<div id="gollum-editor-format-selector">
|
||||
<label for="format">Keybinding</label>
|
||||
<select id="keybinding" name="keybinding" class="form-select input-sm">
|
||||
<option selected="selected">default</option>
|
||||
<option>vim</option>
|
||||
<option>emacs</option>
|
||||
{{#keybindings}}
|
||||
<option {{#selected}}selected="selected" {{/selected}}value="{{name}}">{{name}}</option>
|
||||
{{/keybindings}}
|
||||
</select>
|
||||
<label for="format">Markup</label>
|
||||
<select id="wiki_format" name="format" class="form-select input-sm">
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
{{#is_create_page}}
|
||||
var default_markup = '{{default_markup}}';
|
||||
{{/is_create_page}}
|
||||
{{#has_editor}}
|
||||
var default_keybinding = '{{default_keybinding}}';
|
||||
{{/has_editor}}
|
||||
|
||||
</script>
|
||||
{{#sprockets_javascript_tag}}app{{/sprockets_javascript_tag}}
|
||||
|
||||
@@ -4,6 +4,18 @@ module Precious
|
||||
true
|
||||
end
|
||||
|
||||
def default_keybinding
|
||||
@default_keybinding
|
||||
end
|
||||
|
||||
def keybindings
|
||||
Gollum::KEYBINDINGS.map do |kb|
|
||||
{ :name => kb,
|
||||
:selected => default_keybinding == kb
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def formats(selected = @page.format)
|
||||
Gollum::Markup.formats.map do |key, val|
|
||||
{ :name => val[:name],
|
||||
|
||||
@@ -1058,3 +1058,67 @@ context 'Frontend with base path' do
|
||||
Precious::MapGollum.new(@base_path)
|
||||
end
|
||||
end
|
||||
|
||||
context "Default keybindings" do
|
||||
include Rack::Test::Methods
|
||||
|
||||
setup do
|
||||
@path = cloned_testpath("examples/empty.git")
|
||||
@wiki = Gollum::Wiki.new(@path)
|
||||
@url = '/gollum/create/test'
|
||||
Precious::App.set(:gollum_path, @path)
|
||||
Precious::App.set(:wiki_options, {})
|
||||
end
|
||||
|
||||
teardown do
|
||||
FileUtils.rm_rf(@path)
|
||||
end
|
||||
|
||||
test 'keybinding unset' do
|
||||
get @url
|
||||
assert_equal last_response.body.include?('selected="selected" value="default"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="vim"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="emacs"'), false
|
||||
end
|
||||
|
||||
test 'keybinding `dne`' do
|
||||
# dne := does not exist
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'dne'})
|
||||
get @url
|
||||
assert_equal last_response.body.include?('selected="selected" value="default"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="vim"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="emacs"'), false
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'none'})
|
||||
end
|
||||
|
||||
test 'keybinding `default`' do
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'default'})
|
||||
get @url
|
||||
assert_equal last_response.body.include?('selected="selected" value="default"'), true
|
||||
assert_equal last_response.body.include?('selected="selected" value="vim"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="emacs"'), false
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'none'})
|
||||
end
|
||||
|
||||
test 'keybinding `vim`' do
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'vim'})
|
||||
get @url
|
||||
assert_equal last_response.body.include?('selected="selected" value="default"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="vim"'), true
|
||||
assert_equal last_response.body.include?('selected="selected" value="emacs"'), false
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'none'})
|
||||
end
|
||||
|
||||
test 'keybinding `emacs`' do
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'emacs'})
|
||||
get @url
|
||||
assert_equal last_response.body.include?('selected="selected" value="default"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="vim"'), false
|
||||
assert_equal last_response.body.include?('selected="selected" value="emacs"'), true
|
||||
Precious::App.set(:wiki_options, {:default_keybinding => 'none'})
|
||||
end
|
||||
|
||||
def app
|
||||
Precious::App
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user