mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Render the Code view on the server (minus syntax highlighting) (#2942)
* render code view server side * remove debug print * fix multiline selection bug * change string concatenation to bytes.Buffer for efficiency * Fix newlines added by previous for hljs * fix selection highlighting * make css changes in .less
This commit is contained in:
		@@ -1316,6 +1316,8 @@ footer .ui.language .menu {
 | 
			
		||||
.repository.file.list #file-content .code-view .lines-num .hljs li,
 | 
			
		||||
.repository.file.list #file-content .code-view .lines-code .hljs li {
 | 
			
		||||
  padding-left: 5px;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.repository.file.list #file-content .code-view .lines-num pre li.active,
 | 
			
		||||
.repository.file.list #file-content .code-view .lines-code pre li.active,
 | 
			
		||||
 
 | 
			
		||||
@@ -1088,7 +1088,7 @@ $(window).load(function () {
 | 
			
		||||
                    b = c;
 | 
			
		||||
                }
 | 
			
		||||
                var classes = [];
 | 
			
		||||
                for (i = a; i <= b; i++) {
 | 
			
		||||
                for (var i = a; i <= b; i++) {
 | 
			
		||||
                    classes.push('.L' + i);
 | 
			
		||||
                }
 | 
			
		||||
                $list.filter(classes.join(',')).addClass('active');
 | 
			
		||||
@@ -1102,22 +1102,6 @@ $(window).load(function () {
 | 
			
		||||
 | 
			
		||||
    // Code view.
 | 
			
		||||
    if ($('.code-view .linenums').length > 0) {
 | 
			
		||||
        var $block = $('.code-view .linenums');
 | 
			
		||||
        var lines = $block.html().split("\n");
 | 
			
		||||
        $block.html('');
 | 
			
		||||
 | 
			
		||||
        var $num_list = $('.code-view .lines-num');
 | 
			
		||||
 | 
			
		||||
        // Building blocks.
 | 
			
		||||
        var $toappendblock = [];
 | 
			
		||||
        var $toappendnum_list = [];
 | 
			
		||||
        for (var i = 0; i < lines.length; i++) {
 | 
			
		||||
            $toappendblock.push('<li class="L' + (i + 1) + '" rel="L' + (i + 1) + '">' + lines[i] + '</li>');
 | 
			
		||||
            $toappendnum_list.push('<span id="L' + (i + 1) + '">' + (i + 1) + '</span>');
 | 
			
		||||
        }
 | 
			
		||||
        $block.append($toappendblock.join(''));
 | 
			
		||||
        $num_list.append($toappendnum_list.join(''));
 | 
			
		||||
 | 
			
		||||
        $(document).on('click', '.lines-num span', function (e) {
 | 
			
		||||
            var $select = $(this);
 | 
			
		||||
            var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li');
 | 
			
		||||
 
 | 
			
		||||
@@ -251,6 +251,8 @@
 | 
			
		||||
						padding: 0 !important;
 | 
			
		||||
						li {
 | 
			
		||||
							padding-left: 5px;
 | 
			
		||||
							display: inline-block;
 | 
			
		||||
							width: 100%;
 | 
			
		||||
							&.active {
 | 
			
		||||
								background: #ffffdd;
 | 
			
		||||
							}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,14 @@
 | 
			
		||||
package repo
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	htmltemplate "html/template"
 | 
			
		||||
 | 
			
		||||
	"github.com/Unknwon/paginater"
 | 
			
		||||
 | 
			
		||||
	"github.com/gogits/git-module"
 | 
			
		||||
@@ -116,14 +119,27 @@ func Home(ctx *context.Context) {
 | 
			
		||||
					if readmeExist {
 | 
			
		||||
						ctx.Data["FileContent"] = string(markdown.Render(buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeMetas()))
 | 
			
		||||
					} else {
 | 
			
		||||
						filecontent := ""
 | 
			
		||||
						if err, content := template.ToUtf8WithErr(buf); err != nil {
 | 
			
		||||
							if err != nil {
 | 
			
		||||
								log.Error(4, "Convert content encoding: %s", err)
 | 
			
		||||
							}
 | 
			
		||||
							ctx.Data["FileContent"] = string(buf)
 | 
			
		||||
							filecontent = string(buf)
 | 
			
		||||
						} else {
 | 
			
		||||
							ctx.Data["FileContent"] = content
 | 
			
		||||
							filecontent = content
 | 
			
		||||
						}
 | 
			
		||||
						var output bytes.Buffer
 | 
			
		||||
						lines := strings.Split(filecontent, "\n")
 | 
			
		||||
						for index, line := range lines {
 | 
			
		||||
							output.WriteString(fmt.Sprintf(`<li class="L%d" rel="L%d">%s</li>`, index+1, index+1, htmltemplate.HTMLEscapeString(line)) + "\n")
 | 
			
		||||
						}
 | 
			
		||||
						ctx.Data["FileContent"] = htmltemplate.HTML(output.String())
 | 
			
		||||
 | 
			
		||||
						output.Reset()
 | 
			
		||||
						for i := 0; i < len(lines); i++ {
 | 
			
		||||
							output.WriteString(fmt.Sprintf(`<span id="L%d">%d</span>`, i+1, i+1))
 | 
			
		||||
						}
 | 
			
		||||
						ctx.Data["LineNums"] = htmltemplate.HTML(output.String())
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@
 | 
			
		||||
						{{if .IsFileTooLarge}}
 | 
			
		||||
							<td><strong>{{.i18n.Tr "repo.file_too_large"}}</strong></td>
 | 
			
		||||
						{{else}}
 | 
			
		||||
							<td class="lines-num"></td>
 | 
			
		||||
							<td class="lines-num">{{.LineNums}}</td>
 | 
			
		||||
							<td class="lines-code"><pre><code class="{{.HighlightClass}}"><ol class="linenums">{{.FileContent}}</ol></code></pre></td>
 | 
			
		||||
						{{end}}
 | 
			
		||||
						</tr>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user