mirror of
https://github.com/gitbucket/gitbucket.git
synced 2026-03-16 09:10:30 +01:00
Add text completion (use SuggestionProvider) (#3974)
This commit is contained in:
committed by
GitHub
parent
74a9aaa31d
commit
3111ab3234
57
src/main/twirl/gitbucket/core/helper/completion.scala.html
Normal file
57
src/main/twirl/gitbucket/core/helper/completion.scala.html
Normal file
@@ -0,0 +1,57 @@
|
||||
@(repository: gitbucket.core.service.RepositoryService.RepositoryInfo,
|
||||
completionContext: String, generateScript: Boolean = true)(implicit context: gitbucket.core.controller.Context)
|
||||
@import gitbucket.core.view.helpers
|
||||
<style>
|
||||
@gitbucket.core.plugin.PluginRegistry().getSuggestionProviders.map { provider =>
|
||||
@if(provider.context.contains(completionContext)){
|
||||
@if(provider.id == "emoji") {
|
||||
@provider.options(repository).map { case (value, label) =>
|
||||
@Html(s"""
|
||||
.ace_${label.replaceAll("[^a-z0-9\\-_]", "_")}::after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
background-image: url("${context.path}/plugin-assets/emoji/${label}.png");
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
background-size: contain;
|
||||
vertical-align: middle;
|
||||
}"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var mdCompleters = [];
|
||||
|
||||
@gitbucket.core.plugin.PluginRegistry().getSuggestionProviders.map { provider =>
|
||||
@if(provider.context.contains(completionContext)){
|
||||
var @provider.id = @Html(helpers.json(provider.options(repository).map { case (value, label) =>
|
||||
Map("value" -> (s"${provider.prefix}${value}${provider.suffix}"), "label" -> label)
|
||||
}));
|
||||
|
||||
var @{provider.id}Completer = {
|
||||
triggerCharacters: [ `@provider.prefix.charAt(0)` ],
|
||||
getCompletions: function (editor, session, pos, prefix, callback) {
|
||||
if (session.$mode && session.$mode.$id === 'ace/mode/markdown') {
|
||||
callback(null, @{provider.id}.map(function (table) {
|
||||
var token = session.getTokenAt(pos.row, pos.column).value.slice(-1);
|
||||
return {
|
||||
caption: table.description,
|
||||
value: token == "@provider.prefix.charAt(0)" ? table.value.replace(token, "") : table.value,
|
||||
className: "@{provider.id}" == "emoji" ? table.label.replace(/[^a-z0-9\-_]/g, '_') : "@{provider.id}",
|
||||
meta: "@{provider.id}"
|
||||
};
|
||||
}));
|
||||
}
|
||||
},
|
||||
id: "@{provider.id}Completer"
|
||||
};
|
||||
|
||||
mdCompleters.push(@{provider.id}Completer);
|
||||
|
||||
@Html(provider.additionalScript(repository))
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -74,12 +74,19 @@
|
||||
</form>
|
||||
<script src='@helpers.assets("/vendors/ace/ace.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script src='@helpers.assets("/vendors/ace/ext-modelist.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script src='@helpers.assets("/vendors/ace/ext-language_tools.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" src='@helpers.assets("/vendors/jsdifflib/difflib.js")'></script>
|
||||
<link href='@helpers.assets("/vendors/jsdifflib/diffview.css")' type="text/css" rel="stylesheet" />
|
||||
@gitbucket.core.helper.html.completion(
|
||||
repository = repository,
|
||||
completionContext = "wiki",
|
||||
generateScript = false
|
||||
)
|
||||
<script>
|
||||
const gitbucket = {
|
||||
editor: null,
|
||||
enableWikiLink: false,
|
||||
pluginAssets: "@context.path/plugin-assets/",
|
||||
protected: @protectedBranch,
|
||||
previewTemplate: '<img src="@helpers.assets("/common/images/indicator.gif")"> Previewing...',
|
||||
previewUrl: '@helpers.url(repository)/_preview',
|
||||
|
||||
@@ -35,12 +35,19 @@
|
||||
</form>
|
||||
<script src='@helpers.assets("/vendors/ace/ace.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script src='@helpers.assets("/vendors/ace/ext-modelist.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script src='@helpers.assets("/vendors/ace/ext-language_tools.js")' type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" src='@helpers.assets("/vendors/jsdifflib/difflib.js")'></script>
|
||||
<link href='@helpers.assets("/vendors/jsdifflib/diffview.css")' type="text/css" rel="stylesheet" />
|
||||
@gitbucket.core.helper.html.completion(
|
||||
repository = repository,
|
||||
completionContext = "wiki",
|
||||
generateScript = false
|
||||
)
|
||||
<script>
|
||||
const gitbucket = {
|
||||
editor: null,
|
||||
enableWikiLink: true,
|
||||
pluginAssets: "@context.path/plugin-assets/",
|
||||
protected: false,
|
||||
previewTemplate: '<img src="@helpers.assets("/common/images/indicator.gif")"> Previewing...',
|
||||
previewUrl: '@helpers.url(repository)/_preview',
|
||||
|
||||
@@ -291,6 +291,7 @@
|
||||
gitbucket.editor.focus();
|
||||
});
|
||||
|
||||
var originalCompleter = null;
|
||||
|
||||
/**
|
||||
* A function to update the file mode of the Ace editor
|
||||
@@ -302,11 +303,14 @@
|
||||
gitbucket.editor.getSession().setMode(mode.mode);
|
||||
if (mode.name == "markdown") {
|
||||
markdownToolBar.style.display = "block";
|
||||
gitbucket.editor.completers = mdCompleters ?? [];
|
||||
} else {
|
||||
markdownToolBar.style.display = "none";
|
||||
gitbucket.editor.completers = originalCompleter ?? [];
|
||||
}
|
||||
} else {
|
||||
markdownToolBar.style.display = "none";
|
||||
gitbucket.editor.completers = originalCompleter ?? [];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -325,6 +329,7 @@
|
||||
$('#editor').text($('#initial').val());
|
||||
|
||||
// Initializing Ace editor
|
||||
const langtools = ace.require("ace/ext/language_tools");
|
||||
gitbucket.editor = ace.edit("editor");
|
||||
|
||||
// Initialize Ace editor keyboard handler
|
||||
@@ -370,6 +375,14 @@
|
||||
}
|
||||
});
|
||||
|
||||
// enable auto completion
|
||||
gitbucket.editor.setOptions({
|
||||
enableBasicAutocompletion: true,
|
||||
enableSnippets: true,
|
||||
enableLiveAutocompletion: true
|
||||
});
|
||||
originalCompleter = gitbucket.editor.completers;
|
||||
|
||||
// Initialize file mode for Ace editor
|
||||
updateFileMode();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user