mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 02:46:04 +01:00 
			
		
		
		
	Backport #35727 and #35730 --------- Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -5,11 +5,13 @@ package internal | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"html/template" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| type finalProcessor struct { | ||||
| 	renderInternal *RenderInternal | ||||
| 	extraHeadHTML  template.HTML | ||||
|  | ||||
| 	output io.Writer | ||||
| 	buf    bytes.Buffer | ||||
| @@ -25,6 +27,32 @@ func (p *finalProcessor) Close() error { | ||||
| 	// because "postProcess" already does so. In the future we could optimize the code to process data on the fly. | ||||
| 	buf := p.buf.Bytes() | ||||
| 	buf = bytes.ReplaceAll(buf, []byte(` data-attr-class="`+p.renderInternal.secureIDPrefix), []byte(` class="`)) | ||||
| 	_, err := p.output.Write(buf) | ||||
|  | ||||
| 	tmp := bytes.TrimSpace(buf) | ||||
| 	isLikelyHTML := len(tmp) != 0 && tmp[0] == '<' && tmp[len(tmp)-1] == '>' && bytes.Index(tmp, []byte(`</`)) > 0 | ||||
| 	if !isLikelyHTML { | ||||
| 		// not HTML, write back directly | ||||
| 		_, err := p.output.Write(buf) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// add our extra head HTML into output | ||||
| 	headBytes := []byte("<head>") | ||||
| 	posHead := bytes.Index(buf, headBytes) | ||||
| 	var part1, part2 []byte | ||||
| 	if posHead >= 0 { | ||||
| 		part1, part2 = buf[:posHead+len(headBytes)], buf[posHead+len(headBytes):] | ||||
| 	} else { | ||||
| 		part1, part2 = nil, buf | ||||
| 	} | ||||
| 	if len(part1) > 0 { | ||||
| 		if _, err := p.output.Write(part1); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	if _, err := io.WriteString(p.output, string(p.extraHeadHTML)); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err := p.output.Write(part2) | ||||
| 	return err | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user