mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 04:14:01 +01:00 
			
		
		
		
	* Improve issue autolinks Update autolinks to match what github does here: Issue in same repo: #1 Issue in different repo: org/repo#1 Fixes #6264 * Use setting.AppURL when parsing URL Using setting.AppURL here is a more reliable way of parsing the current URL and what other functions in this file seem to use. * Make ComposeMetas always return a valid context * Add per repository markdown renderers for better context * Update for use of context metas Now that we include the user and repo name inside context metas, update various code and tests for this new logic
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2014 The Gogs 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 misc
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	api "code.gitea.io/sdk/gitea"
 | 
						|
 | 
						|
	"code.gitea.io/gitea/modules/context"
 | 
						|
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
						|
	"code.gitea.io/gitea/modules/setting"
 | 
						|
	"code.gitea.io/gitea/modules/util"
 | 
						|
 | 
						|
	"mvdan.cc/xurls/v2"
 | 
						|
)
 | 
						|
 | 
						|
// Markdown render markdown document to HTML
 | 
						|
func Markdown(ctx *context.APIContext, form api.MarkdownOption) {
 | 
						|
	// swagger:operation POST /markdown miscellaneous renderMarkdown
 | 
						|
	// ---
 | 
						|
	// summary: Render a markdown document as HTML
 | 
						|
	// parameters:
 | 
						|
	// - name: body
 | 
						|
	//   in: body
 | 
						|
	//   schema:
 | 
						|
	//     "$ref": "#/definitions/MarkdownOption"
 | 
						|
	// consumes:
 | 
						|
	// - application/json
 | 
						|
	// produces:
 | 
						|
	//     - text/html
 | 
						|
	// responses:
 | 
						|
	//   "200":
 | 
						|
	//     "$ref": "#/responses/MarkdownRender"
 | 
						|
	//   "422":
 | 
						|
	//     "$ref": "#/responses/validationError"
 | 
						|
	if ctx.HasAPIError() {
 | 
						|
		ctx.Error(422, "", ctx.GetErrMsg())
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if len(form.Text) == 0 {
 | 
						|
		ctx.Write([]byte(""))
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	switch form.Mode {
 | 
						|
	case "gfm":
 | 
						|
		md := []byte(form.Text)
 | 
						|
		urlPrefix := form.Context
 | 
						|
		var meta map[string]string
 | 
						|
		if !strings.HasPrefix(setting.AppSubURL+"/", urlPrefix) {
 | 
						|
			// check if urlPrefix is already set to a URL
 | 
						|
			linkRegex, _ := xurls.StrictMatchingScheme("https?://")
 | 
						|
			m := linkRegex.FindStringIndex(urlPrefix)
 | 
						|
			if m == nil {
 | 
						|
				urlPrefix = util.URLJoin(setting.AppURL, form.Context)
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if ctx.Repo != nil && ctx.Repo.Repository != nil {
 | 
						|
			meta = ctx.Repo.Repository.ComposeMetas()
 | 
						|
		}
 | 
						|
		if form.Wiki {
 | 
						|
			ctx.Write([]byte(markdown.RenderWiki(md, urlPrefix, meta)))
 | 
						|
		} else {
 | 
						|
			ctx.Write(markdown.Render(md, urlPrefix, meta))
 | 
						|
		}
 | 
						|
	default:
 | 
						|
		ctx.Write(markdown.RenderRaw([]byte(form.Text), "", false))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// MarkdownRaw render raw markdown HTML
 | 
						|
func MarkdownRaw(ctx *context.APIContext) {
 | 
						|
	// swagger:operation POST /markdown/raw miscellaneous renderMarkdownRaw
 | 
						|
	// ---
 | 
						|
	// summary: Render raw markdown as HTML
 | 
						|
	// parameters:
 | 
						|
	//     - name: body
 | 
						|
	//       in: body
 | 
						|
	//       description: Request body to render
 | 
						|
	//       required: true
 | 
						|
	//       schema:
 | 
						|
	//         type: string
 | 
						|
	// consumes:
 | 
						|
	//     - text/plain
 | 
						|
	// produces:
 | 
						|
	//     - text/html
 | 
						|
	// responses:
 | 
						|
	//   "200":
 | 
						|
	//     "$ref": "#/responses/MarkdownRender"
 | 
						|
	//   "422":
 | 
						|
	//     "$ref": "#/responses/validationError"
 | 
						|
	body, err := ctx.Req.Body().Bytes()
 | 
						|
	if err != nil {
 | 
						|
		ctx.Error(422, "", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	ctx.Write(markdown.RenderRaw(body, "", false))
 | 
						|
}
 |