mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 20:15:59 +01:00 
			
		
		
		
	Emoji completion in textarea
This commit is contained in:
		@@ -5,7 +5,7 @@ package gitbucket.core.util
 | 
			
		||||
 */
 | 
			
		||||
object EmojiUtil {
 | 
			
		||||
 | 
			
		||||
  private val emojis = Set(
 | 
			
		||||
  val emojis = Set(
 | 
			
		||||
    "+1",
 | 
			
		||||
    "-1",
 | 
			
		||||
    "100",
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ object Markdown {
 | 
			
		||||
    val renderer = new GitBucketMarkedRenderer(options, repository,
 | 
			
		||||
      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.
 | 
			
		||||
      val t2 = if(enableTaskList) convertCheckBox(t1, hasWritePermission) else t1
 | 
			
		||||
 | 
			
		||||
      // convert emoji to image
 | 
			
		||||
      val t3 = EmojiUtil.convertEmojis(t2)
 | 
			
		||||
//      // convert emoji to image
 | 
			
		||||
//      val t3 = EmojiUtil.convertEmojis(t2)
 | 
			
		||||
 | 
			
		||||
      t3
 | 
			
		||||
      t2
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override def link(href: String, title: String, text: String): String = {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,10 +5,51 @@
 | 
			
		||||
  @textarea
 | 
			
		||||
  <div class="clickable">Attach images or documents by dragging & dropping, or selecting them.</div>
 | 
			
		||||
</div>
 | 
			
		||||
@if(generateScript){
 | 
			
		||||
@defining("(id=\")([\\w\\-]*)(\")".r.findFirstMatchIn(textarea.body).map(_.group(2))){ textareaId =>
 | 
			
		||||
<script>
 | 
			
		||||
$(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 {
 | 
			
		||||
      $([$('#@textareaId').closest('div')[0], $('#@textareaId').next('div')[0]]).dropzone({
 | 
			
		||||
        url: '@path/upload/file/@owner/@repository',
 | 
			
		||||
@@ -28,7 +69,7 @@ $(function(){
 | 
			
		||||
        throw e;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -33,6 +33,7 @@
 | 
			
		||||
    <script src="@assets/vendors/elastic/jquery.elastic.source.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-textcomplete-1.6.2/jquery.textcomplete.js"></script>
 | 
			
		||||
    @repository.map { repository =>
 | 
			
		||||
      @if(!repository.repository.isPrivate){
 | 
			
		||||
        <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