mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-10 07:25:50 +01:00
Emoji completion in textarea
This commit is contained in:
@@ -5,7 +5,7 @@ package gitbucket.core.util
|
|||||||
*/
|
*/
|
||||||
object EmojiUtil {
|
object EmojiUtil {
|
||||||
|
|
||||||
private val emojis = Set(
|
val emojis = Set(
|
||||||
"+1",
|
"+1",
|
||||||
"-1",
|
"-1",
|
||||||
"100",
|
"100",
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ object Markdown {
|
|||||||
val renderer = new GitBucketMarkedRenderer(options, repository,
|
val renderer = new GitBucketMarkedRenderer(options, repository,
|
||||||
enableWikiLink, enableRefsLink, enableAnchor, enableTaskList, hasWritePermission, pages)
|
enableWikiLink, enableRefsLink, enableAnchor, enableTaskList, hasWritePermission, pages)
|
||||||
|
|
||||||
Marked.marked(source, options, renderer)
|
EmojiUtil.convertEmojis(Marked.marked(source, options, renderer))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,10 +113,10 @@ object Markdown {
|
|||||||
// convert task list to checkbox.
|
// convert task list to checkbox.
|
||||||
val t2 = if(enableTaskList) convertCheckBox(t1, hasWritePermission) else t1
|
val t2 = if(enableTaskList) convertCheckBox(t1, hasWritePermission) else t1
|
||||||
|
|
||||||
// convert emoji to image
|
// // convert emoji to image
|
||||||
val t3 = EmojiUtil.convertEmojis(t2)
|
// val t3 = EmojiUtil.convertEmojis(t2)
|
||||||
|
|
||||||
t3
|
t2
|
||||||
}
|
}
|
||||||
|
|
||||||
override def link(href: String, title: String, text: String): String = {
|
override def link(href: String, title: String, text: String): String = {
|
||||||
|
|||||||
@@ -5,10 +5,51 @@
|
|||||||
@textarea
|
@textarea
|
||||||
<div class="clickable">Attach images or documents by dragging & dropping, or selecting them.</div>
|
<div class="clickable">Attach images or documents by dragging & dropping, or selecting them.</div>
|
||||||
</div>
|
</div>
|
||||||
@if(generateScript){
|
|
||||||
@defining("(id=\")([\\w\\-]*)(\")".r.findFirstMatchIn(textarea.body).map(_.group(2))){ textareaId =>
|
@defining("(id=\")([\\w\\-]*)(\")".r.findFirstMatchIn(textarea.body).map(_.group(2))){ textareaId =>
|
||||||
<script>
|
<script>
|
||||||
$(function(){
|
$(function(){
|
||||||
|
var emojis = @Html(gitbucket.core.util.EmojiUtil.emojis.map("\"" + _ + "\"").mkString("[", ", ", "]"));
|
||||||
|
|
||||||
|
$('#@textareaId').textcomplete([
|
||||||
|
{ // emoji strategy
|
||||||
|
id: 'emoji',
|
||||||
|
match: /\B:([\-+\w]*)$/,
|
||||||
|
search: function (term, callback) {
|
||||||
|
callback($.map(emojis, function (emoji) {
|
||||||
|
return emoji.indexOf(term) === 0 ? emoji : null;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
template: function (value) {
|
||||||
|
return '<img src="@path/assets/common/images/emojis/' + value + '.png" class="emoji"></img>' + value;
|
||||||
|
},
|
||||||
|
replace: function (value) {
|
||||||
|
return ':' + value + ': ';
|
||||||
|
},
|
||||||
|
index: 1
|
||||||
|
}//,
|
||||||
|
// { // tech companies
|
||||||
|
// id: 'tech-companies',
|
||||||
|
// words: ['apple', 'google', 'facebook', 'github'],
|
||||||
|
// match: /\b(\w{2,})$/,
|
||||||
|
// search: function (term, callback) {
|
||||||
|
// callback($.map(this.words, function (word) {
|
||||||
|
// return word.indexOf(term) === 0 ? word : null;
|
||||||
|
// }));
|
||||||
|
// },
|
||||||
|
// index: 1,
|
||||||
|
// replace: function (word) {
|
||||||
|
// return word + ' ';
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
], {
|
||||||
|
onKeydown: function (e, commands) {
|
||||||
|
if (e.ctrlKey && e.keyCode === 74) { // CTRL-J
|
||||||
|
return commands.KEY_ENTER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
@if(generateScript){
|
||||||
try {
|
try {
|
||||||
$([$('#@textareaId').closest('div')[0], $('#@textareaId').next('div')[0]]).dropzone({
|
$([$('#@textareaId').closest('div')[0], $('#@textareaId').next('div')[0]]).dropzone({
|
||||||
url: '@path/upload/file/@owner/@repository',
|
url: '@path/upload/file/@owner/@repository',
|
||||||
@@ -28,7 +69,7 @@ $(function(){
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
<script src="@assets/vendors/elastic/jquery.elastic.source.js"></script>
|
<script src="@assets/vendors/elastic/jquery.elastic.source.js"></script>
|
||||||
<script src="@assets/vendors/facebox/facebox.js"></script>
|
<script src="@assets/vendors/facebox/facebox.js"></script>
|
||||||
<script src="@assets/vendors/jquery-hotkeys/jquery.hotkeys.js"></script>
|
<script src="@assets/vendors/jquery-hotkeys/jquery.hotkeys.js"></script>
|
||||||
|
<script src="@assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.js"></script>
|
||||||
@repository.map { repository =>
|
@repository.map { repository =>
|
||||||
@if(!repository.repository.isPrivate){
|
@if(!repository.repository.isPrivate){
|
||||||
<meta name="go-import" content="@context.baseUrl.replaceFirst("^https?://", "")/@repository.owner/@repository.name git @repository.httpUrl" />
|
<meta name="go-import" content="@context.baseUrl.replaceFirst("^https?://", "")/@repository.owner/@repository.name git @repository.httpUrl" />
|
||||||
|
|||||||
1488
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.js
vendored
Executable file
1488
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
3
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.min.js
vendored
Executable file
3
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.min.map
vendored
Executable file
1
src/main/webapp/assets/vendors/jquery-textcomplete-1.6.2/jquery.textcomplete.min.map
vendored
Executable file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user