]> source.dussan.org Git - gitea.git/commitdiff
Render the Code view on the server (minus syntax highlighting) (#2942)
authorRory McNamara <psychomario@users.noreply.github.com>
Tue, 9 Aug 2016 19:35:20 +0000 (20:35 +0100)
committer无闻 <u@gogs.io>
Tue, 9 Aug 2016 19:35:20 +0000 (12:35 -0700)
* 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

public/css/gogs.css
public/js/gogs.js
public/less/_repository.less
routers/repo/view.go
templates/repo/view_file.tmpl

index ae58c7c54ec2d055493a3e832989d638de4a2873..c39c52ca22cce64ff54ba6de72611389d2d3c4f0 100644 (file)
@@ -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,
index 226bb6bae56b76bd082bd79d0106295abdbe5b23..c6a1b6b6242e5a704fc13b8e5a35b67382071b77 100644 (file)
@@ -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');
index 474b8ade6d3fbcbd01556087c78568a770844b2b..cb1cc121ceb54682573118d6995bbc492eac312d 100644 (file)
                                                padding: 0 !important;
                                                li {
                                                        padding-left: 5px;
+                                                       display: inline-block;
+                                                       width: 100%;
                                                        &.active {
                                                                background: #ffffdd;
                                                        }
index 7bcdc1293c2ed83f175901a6ec80487f653f0b3c..c13f57f4266f1ca49450171fdfe32414ee957d45 100644 (file)
@@ -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())
                                        }
                                }
                        }
index cd0caf10f92aa4cf9f4451cbaac188bf972f1593..0f42df4925c58d940785455c48b7581913c23aa5 100644 (file)
@@ -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>