mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 01:34:27 +00:00 
			
		
		
		
	Add csv file render support defaultly (#4105)
* add csv file render support defaultly * escaping csv column content
This commit is contained in:
		
							
								
								
									
										1
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.go
									
									
									
									
									
								
							@@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	// register supported doc types
 | 
						// register supported doc types
 | 
				
			||||||
 | 
						_ "code.gitea.io/gitea/modules/markup/csv"
 | 
				
			||||||
	_ "code.gitea.io/gitea/modules/markup/markdown"
 | 
						_ "code.gitea.io/gitea/modules/markup/markdown"
 | 
				
			||||||
	_ "code.gitea.io/gitea/modules/markup/orgmode"
 | 
						_ "code.gitea.io/gitea/modules/markup/orgmode"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								modules/markup/csv/csv.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								modules/markup/csv/csv.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					// Copyright 2018 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a MIT-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package markup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"encoding/csv"
 | 
				
			||||||
 | 
						"html"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						markup.RegisterParser(Parser{})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Parser implements markup.Parser for orgmode
 | 
				
			||||||
 | 
					type Parser struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Name implements markup.Parser
 | 
				
			||||||
 | 
					func (Parser) Name() string {
 | 
				
			||||||
 | 
						return "csv"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Extensions implements markup.Parser
 | 
				
			||||||
 | 
					func (Parser) Extensions() []string {
 | 
				
			||||||
 | 
						return []string{".csv"}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Render implements markup.Parser
 | 
				
			||||||
 | 
					func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte {
 | 
				
			||||||
 | 
						rd := csv.NewReader(bytes.NewReader(rawBytes))
 | 
				
			||||||
 | 
						var tmpBlock bytes.Buffer
 | 
				
			||||||
 | 
						tmpBlock.WriteString(`<table class="table">`)
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							fields, err := rd.Read()
 | 
				
			||||||
 | 
							if err == io.EOF {
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							tmpBlock.WriteString("<tr>")
 | 
				
			||||||
 | 
							for _, field := range fields {
 | 
				
			||||||
 | 
								tmpBlock.WriteString("<td>")
 | 
				
			||||||
 | 
								tmpBlock.WriteString(html.EscapeString(field))
 | 
				
			||||||
 | 
								tmpBlock.WriteString("</td>")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							tmpBlock.WriteString("<tr>")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						tmpBlock.WriteString("</table>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return tmpBlock.Bytes()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								modules/markup/csv/csv_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								modules/markup/csv/csv_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					// Copyright 2018 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a MIT-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package markup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestRenderCSV(t *testing.T) {
 | 
				
			||||||
 | 
						var parser Parser
 | 
				
			||||||
 | 
						var kases = map[string]string{
 | 
				
			||||||
 | 
							"a":     "<table class=\"table\"><tr><td>a</td><tr></table>",
 | 
				
			||||||
 | 
							"1,2":   "<table class=\"table\"><tr><td>1</td><td>2</td><tr></table>",
 | 
				
			||||||
 | 
							"<br/>": "<table class=\"table\"><tr><td><br/></td><tr></table>",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for k, v := range kases {
 | 
				
			||||||
 | 
							res := parser.Render([]byte(k), "", nil, false)
 | 
				
			||||||
 | 
							assert.EqualValues(t, v, string(res))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user