Allow different HardBreaks settings for documents and comments (#11515)
GH has different HardBreaks behaviour for markdown comments and documents. Comments have hard breaks and documents have soft breaks - therefore Gitea's rendering will always be different from GH's if we only provide one setting. Here we split the setting in to two - one for documents and one for comments and other things. Signed-off-by: Andrew Thornton art27@cantab.net Changes to index.js as per @silverwind Co-authored-by: silverwind <me@silverwind.io> Changes to docs as per @guillep2k Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com>release/v1.15
parent
3761bdb640
commit
814ca9ffea
|
@ -216,7 +216,10 @@ EVENT_SOURCE_UPDATE_TIME = 10s
|
||||||
; Render soft line breaks as hard line breaks, which means a single newline character between
|
; Render soft line breaks as hard line breaks, which means a single newline character between
|
||||||
; paragraphs will cause a line break and adding trailing whitespace to paragraphs is not
|
; paragraphs will cause a line break and adding trailing whitespace to paragraphs is not
|
||||||
; necessary to force a line break.
|
; necessary to force a line break.
|
||||||
ENABLE_HARD_LINE_BREAK = true
|
; Render soft line breaks as hard line breaks for comments
|
||||||
|
ENABLE_HARD_LINE_BREAK_IN_COMMENTS = true
|
||||||
|
; Render soft line breaks as hard line breaks for markdown documents
|
||||||
|
ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS = false
|
||||||
; Comma separated list of custom URL-Schemes that are allowed as links when rendering Markdown
|
; Comma separated list of custom URL-Schemes that are allowed as links when rendering Markdown
|
||||||
; for example git,magnet,ftp (more at https://en.wikipedia.org/wiki/List_of_URI_schemes)
|
; for example git,magnet,ftp (more at https://en.wikipedia.org/wiki/List_of_URI_schemes)
|
||||||
; URLs starting with http and https are always displayed, whatever is put in this entry.
|
; URLs starting with http and https are always displayed, whatever is put in this entry.
|
||||||
|
|
|
@ -152,7 +152,10 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
|
||||||
|
|
||||||
## Markdown (`markdown`)
|
## Markdown (`markdown`)
|
||||||
|
|
||||||
- `ENABLE_HARD_LINE_BREAK`: **true**: Render soft line breaks as hard line breaks, which
|
- `ENABLE_HARD_LINE_BREAK_IN_COMMENTS`: **true**: Render soft line breaks as hard line breaks in comments, which
|
||||||
|
means a single newline character between paragraphs will cause a line break and adding
|
||||||
|
trailing whitespace to paragraphs is not necessary to force a line break.
|
||||||
|
- `ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS`: **false**: Render soft line breaks as hard line breaks in documents, which
|
||||||
means a single newline character between paragraphs will cause a line break and adding
|
means a single newline character between paragraphs will cause a line break and adding
|
||||||
trailing whitespace to paragraphs is not necessary to force a line break.
|
trailing whitespace to paragraphs is not necessary to force a line break.
|
||||||
- `CUSTOM_URL_SCHEMES`: Use a comma separated list (ftp,git,svn) to indicate additional
|
- `CUSTOM_URL_SCHEMES`: Use a comma separated list (ftp,git,svn) to indicate additional
|
||||||
|
|
|
@ -174,9 +174,10 @@ type Repository struct {
|
||||||
*Mirror `xorm:"-"`
|
*Mirror `xorm:"-"`
|
||||||
Status RepositoryStatus `xorm:"NOT NULL DEFAULT 0"`
|
Status RepositoryStatus `xorm:"NOT NULL DEFAULT 0"`
|
||||||
|
|
||||||
RenderingMetas map[string]string `xorm:"-"`
|
RenderingMetas map[string]string `xorm:"-"`
|
||||||
Units []*RepoUnit `xorm:"-"`
|
DocumentRenderingMetas map[string]string `xorm:"-"`
|
||||||
PrimaryLanguage *LanguageStat `xorm:"-"`
|
Units []*RepoUnit `xorm:"-"`
|
||||||
|
PrimaryLanguage *LanguageStat `xorm:"-"`
|
||||||
|
|
||||||
IsFork bool `xorm:"INDEX NOT NULL DEFAULT false"`
|
IsFork bool `xorm:"INDEX NOT NULL DEFAULT false"`
|
||||||
ForkID int64 `xorm:"INDEX"`
|
ForkID int64 `xorm:"INDEX"`
|
||||||
|
@ -545,11 +546,12 @@ func (repo *Repository) mustOwner(e Engine) *User {
|
||||||
|
|
||||||
// ComposeMetas composes a map of metas for properly rendering issue links and external issue trackers.
|
// ComposeMetas composes a map of metas for properly rendering issue links and external issue trackers.
|
||||||
func (repo *Repository) ComposeMetas() map[string]string {
|
func (repo *Repository) ComposeMetas() map[string]string {
|
||||||
if repo.RenderingMetas == nil {
|
if len(repo.RenderingMetas) == 0 {
|
||||||
metas := map[string]string{
|
metas := map[string]string{
|
||||||
"user": repo.OwnerName,
|
"user": repo.OwnerName,
|
||||||
"repo": repo.Name,
|
"repo": repo.Name,
|
||||||
"repoPath": repo.RepoPath(),
|
"repoPath": repo.RepoPath(),
|
||||||
|
"mode": "comment",
|
||||||
}
|
}
|
||||||
|
|
||||||
unit, err := repo.GetUnit(UnitTypeExternalTracker)
|
unit, err := repo.GetUnit(UnitTypeExternalTracker)
|
||||||
|
@ -581,6 +583,19 @@ func (repo *Repository) ComposeMetas() map[string]string {
|
||||||
return repo.RenderingMetas
|
return repo.RenderingMetas
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ComposeDocumentMetas composes a map of metas for properly rendering documents
|
||||||
|
func (repo *Repository) ComposeDocumentMetas() map[string]string {
|
||||||
|
if len(repo.DocumentRenderingMetas) == 0 {
|
||||||
|
metas := map[string]string{}
|
||||||
|
for k, v := range repo.ComposeMetas() {
|
||||||
|
metas[k] = v
|
||||||
|
}
|
||||||
|
metas["mode"] = "document"
|
||||||
|
repo.DocumentRenderingMetas = metas
|
||||||
|
}
|
||||||
|
return repo.DocumentRenderingMetas
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteWiki removes the actual and local copy of repository wiki.
|
// DeleteWiki removes the actual and local copy of repository wiki.
|
||||||
func (repo *Repository) DeleteWiki() error {
|
func (repo *Repository) DeleteWiki() error {
|
||||||
return repo.deleteWiki(x)
|
return repo.deleteWiki(x)
|
||||||
|
|
|
@ -151,6 +151,16 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
|
||||||
v.AppendChild(v, newChild)
|
v.AppendChild(v, newChild)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case *ast.Text:
|
||||||
|
if v.SoftLineBreak() && !v.HardLineBreak() {
|
||||||
|
renderMetas := pc.Get(renderMetasKey).(map[string]string)
|
||||||
|
mode := renderMetas["mode"]
|
||||||
|
if mode != "document" {
|
||||||
|
v.SetHardLineBreak(setting.Markdown.EnableHardLineBreakInComments)
|
||||||
|
} else {
|
||||||
|
v.SetHardLineBreak(setting.Markdown.EnableHardLineBreakInDocuments)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ast.WalkContinue, nil
|
return ast.WalkContinue, nil
|
||||||
})
|
})
|
||||||
|
|
|
@ -29,17 +29,19 @@ var once = sync.Once{}
|
||||||
|
|
||||||
var urlPrefixKey = parser.NewContextKey()
|
var urlPrefixKey = parser.NewContextKey()
|
||||||
var isWikiKey = parser.NewContextKey()
|
var isWikiKey = parser.NewContextKey()
|
||||||
|
var renderMetasKey = parser.NewContextKey()
|
||||||
|
|
||||||
// NewGiteaParseContext creates a parser.Context with the gitea context set
|
// NewGiteaParseContext creates a parser.Context with the gitea context set
|
||||||
func NewGiteaParseContext(urlPrefix string, isWiki bool) parser.Context {
|
func NewGiteaParseContext(urlPrefix string, metas map[string]string, isWiki bool) parser.Context {
|
||||||
pc := parser.NewContext(parser.WithIDs(newPrefixedIDs()))
|
pc := parser.NewContext(parser.WithIDs(newPrefixedIDs()))
|
||||||
pc.Set(urlPrefixKey, urlPrefix)
|
pc.Set(urlPrefixKey, urlPrefix)
|
||||||
pc.Set(isWikiKey, isWiki)
|
pc.Set(isWikiKey, isWiki)
|
||||||
|
pc.Set(renderMetasKey, metas)
|
||||||
return pc
|
return pc
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderRaw renders Markdown to HTML without handling special links.
|
// render renders Markdown to HTML without handling special links.
|
||||||
func RenderRaw(body []byte, urlPrefix string, wikiMarkdown bool) []byte {
|
func render(body []byte, urlPrefix string, metas map[string]string, wikiMarkdown bool) []byte {
|
||||||
once.Do(func() {
|
once.Do(func() {
|
||||||
converter = goldmark.New(
|
converter = goldmark.New(
|
||||||
goldmark.WithExtensions(extension.Table,
|
goldmark.WithExtensions(extension.Table,
|
||||||
|
@ -75,12 +77,9 @@ func RenderRaw(body []byte, urlPrefix string, wikiMarkdown bool) []byte {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
if setting.Markdown.EnableHardLineBreak {
|
|
||||||
converter.Renderer().AddOptions(html.WithHardWraps())
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
pc := NewGiteaParseContext(urlPrefix, wikiMarkdown)
|
pc := NewGiteaParseContext(urlPrefix, metas, wikiMarkdown)
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if err := converter.Convert(giteautil.NormalizeEOL(body), &buf, parser.WithContext(pc)); err != nil {
|
if err := converter.Convert(giteautil.NormalizeEOL(body), &buf, parser.WithContext(pc)); err != nil {
|
||||||
log.Error("Unable to render: %v", err)
|
log.Error("Unable to render: %v", err)
|
||||||
|
@ -112,7 +111,7 @@ func (Parser) Extensions() []string {
|
||||||
|
|
||||||
// Render implements markup.Parser
|
// Render implements markup.Parser
|
||||||
func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte {
|
func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte {
|
||||||
return RenderRaw(rawBytes, urlPrefix, isWiki)
|
return render(rawBytes, urlPrefix, metas, isWiki)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render renders Markdown to HTML with all specific handling stuff.
|
// Render renders Markdown to HTML with all specific handling stuff.
|
||||||
|
@ -120,6 +119,11 @@ func Render(rawBytes []byte, urlPrefix string, metas map[string]string) []byte {
|
||||||
return markup.Render("a.md", rawBytes, urlPrefix, metas)
|
return markup.Render("a.md", rawBytes, urlPrefix, metas)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RenderRaw renders Markdown to HTML without handling special links.
|
||||||
|
func RenderRaw(body []byte, urlPrefix string, wikiMarkdown bool) []byte {
|
||||||
|
return render(body, urlPrefix, map[string]string{}, wikiMarkdown)
|
||||||
|
}
|
||||||
|
|
||||||
// RenderString renders Markdown to HTML with special links and returns string type.
|
// RenderString renders Markdown to HTML with special links and returns string type.
|
||||||
func RenderString(raw, urlPrefix string, metas map[string]string) string {
|
func RenderString(raw, urlPrefix string, metas map[string]string) string {
|
||||||
return markup.RenderString("a.md", raw, urlPrefix, metas)
|
return markup.RenderString("a.md", raw, urlPrefix, metas)
|
||||||
|
|
|
@ -256,12 +256,14 @@ var (
|
||||||
|
|
||||||
// Markdown settings
|
// Markdown settings
|
||||||
Markdown = struct {
|
Markdown = struct {
|
||||||
EnableHardLineBreak bool
|
EnableHardLineBreakInComments bool
|
||||||
CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"`
|
EnableHardLineBreakInDocuments bool
|
||||||
FileExtensions []string
|
CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"`
|
||||||
|
FileExtensions []string
|
||||||
}{
|
}{
|
||||||
EnableHardLineBreak: true,
|
EnableHardLineBreakInComments: true,
|
||||||
FileExtensions: strings.Split(".md,.markdown,.mdown,.mkd", ","),
|
EnableHardLineBreakInDocuments: false,
|
||||||
|
FileExtensions: strings.Split(".md,.markdown,.mdown,.mkd", ","),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Admin settings
|
// Admin settings
|
||||||
|
|
|
@ -48,10 +48,12 @@ func Markdown(ctx *context.APIContext, form api.MarkdownOption) {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch form.Mode {
|
switch form.Mode {
|
||||||
|
case "comment":
|
||||||
|
fallthrough
|
||||||
case "gfm":
|
case "gfm":
|
||||||
md := []byte(form.Text)
|
md := []byte(form.Text)
|
||||||
urlPrefix := form.Context
|
urlPrefix := form.Context
|
||||||
var meta map[string]string
|
meta := map[string]string{}
|
||||||
if !strings.HasPrefix(setting.AppSubURL+"/", urlPrefix) {
|
if !strings.HasPrefix(setting.AppSubURL+"/", urlPrefix) {
|
||||||
// check if urlPrefix is already set to a URL
|
// check if urlPrefix is already set to a URL
|
||||||
linkRegex, _ := xurls.StrictMatchingScheme("https?://")
|
linkRegex, _ := xurls.StrictMatchingScheme("https?://")
|
||||||
|
@ -61,7 +63,15 @@ func Markdown(ctx *context.APIContext, form api.MarkdownOption) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ctx.Repo != nil && ctx.Repo.Repository != nil {
|
if ctx.Repo != nil && ctx.Repo.Repository != nil {
|
||||||
meta = ctx.Repo.Repository.ComposeMetas()
|
// "gfm" = Github Flavored Markdown - set this to render as a document
|
||||||
|
if form.Mode == "gfm" {
|
||||||
|
meta = ctx.Repo.Repository.ComposeDocumentMetas()
|
||||||
|
} else {
|
||||||
|
meta = ctx.Repo.Repository.ComposeMetas()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if form.Mode == "gfm" {
|
||||||
|
meta["mode"] = "document"
|
||||||
}
|
}
|
||||||
if form.Wiki {
|
if form.Wiki {
|
||||||
_, err := ctx.Write([]byte(markdown.RenderWiki(md, urlPrefix, meta)))
|
_, err := ctx.Write([]byte(markdown.RenderWiki(md, urlPrefix, meta)))
|
||||||
|
|
|
@ -94,7 +94,7 @@ Here are some links to the most important topics. You can find the full list of
|
||||||
<p><strong>Wine Staging</strong> on website <a href="http://wine-staging.com" rel="nofollow">wine-staging.com</a>.</p>
|
<p><strong>Wine Staging</strong> on website <a href="http://wine-staging.com" rel="nofollow">wine-staging.com</a>.</p>
|
||||||
<h2 id="user-content-quick-links">Quick Links</h2>
|
<h2 id="user-content-quick-links">Quick Links</h2>
|
||||||
<p>Here are some links to the most important topics. You can find the full list of pages at the sidebar.</p>
|
<p>Here are some links to the most important topics. You can find the full list of pages at the sidebar.</p>
|
||||||
<p><a href="` + AppSubURL + `wiki/Configuration" rel="nofollow">Configuration</a><br/>
|
<p><a href="` + AppSubURL + `wiki/Configuration" rel="nofollow">Configuration</a>
|
||||||
<a href="` + AppSubURL + `wiki/raw/images/icon-bug.png" rel="nofollow"><img src="` + AppSubURL + `wiki/raw/images/icon-bug.png" title="icon-bug.png" alt="images/icon-bug.png"/></a></p>
|
<a href="` + AppSubURL + `wiki/raw/images/icon-bug.png" rel="nofollow"><img src="` + AppSubURL + `wiki/raw/images/icon-bug.png" title="icon-bug.png" alt="images/icon-bug.png"/></a></p>
|
||||||
`,
|
`,
|
||||||
// Guard wiki sidebar: special syntax
|
// Guard wiki sidebar: special syntax
|
||||||
|
|
|
@ -319,7 +319,7 @@ func renderDirectory(ctx *context.Context, treeLink string) {
|
||||||
if markupType := markup.Type(readmeFile.name); markupType != "" {
|
if markupType := markup.Type(readmeFile.name); markupType != "" {
|
||||||
ctx.Data["IsMarkup"] = true
|
ctx.Data["IsMarkup"] = true
|
||||||
ctx.Data["MarkupType"] = string(markupType)
|
ctx.Data["MarkupType"] = string(markupType)
|
||||||
ctx.Data["FileContent"] = string(markup.Render(readmeFile.name, buf, readmeTreelink, ctx.Repo.Repository.ComposeMetas()))
|
ctx.Data["FileContent"] = string(markup.Render(readmeFile.name, buf, readmeTreelink, ctx.Repo.Repository.ComposeDocumentMetas()))
|
||||||
} else {
|
} else {
|
||||||
ctx.Data["IsRenderedHTML"] = true
|
ctx.Data["IsRenderedHTML"] = true
|
||||||
ctx.Data["FileContent"] = strings.Replace(
|
ctx.Data["FileContent"] = strings.Replace(
|
||||||
|
@ -459,7 +459,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
|
||||||
if markupType := markup.Type(blob.Name()); markupType != "" {
|
if markupType := markup.Type(blob.Name()); markupType != "" {
|
||||||
ctx.Data["IsMarkup"] = true
|
ctx.Data["IsMarkup"] = true
|
||||||
ctx.Data["MarkupType"] = markupType
|
ctx.Data["MarkupType"] = markupType
|
||||||
ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeMetas()))
|
ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeDocumentMetas()))
|
||||||
} else if readmeExist {
|
} else if readmeExist {
|
||||||
ctx.Data["IsRenderedHTML"] = true
|
ctx.Data["IsRenderedHTML"] = true
|
||||||
ctx.Data["FileContent"] = strings.Replace(
|
ctx.Data["FileContent"] = strings.Replace(
|
||||||
|
@ -538,7 +538,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
|
||||||
buf = append(buf, d...)
|
buf = append(buf, d...)
|
||||||
ctx.Data["IsMarkup"] = true
|
ctx.Data["IsMarkup"] = true
|
||||||
ctx.Data["MarkupType"] = markupType
|
ctx.Data["MarkupType"] = markupType
|
||||||
ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeMetas()))
|
ctx.Data["FileContent"] = string(markup.Render(blob.Name(), buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeDocumentMetas()))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,7 @@ func renderViewPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
metas := ctx.Repo.Repository.ComposeMetas()
|
metas := ctx.Repo.Repository.ComposeDocumentMetas()
|
||||||
ctx.Data["content"] = markdown.RenderWiki(data, ctx.Repo.RepoLink, metas)
|
ctx.Data["content"] = markdown.RenderWiki(data, ctx.Repo.RepoLink, metas)
|
||||||
ctx.Data["sidebarPresent"] = sidebarContent != nil
|
ctx.Data["sidebarPresent"] = sidebarContent != nil
|
||||||
ctx.Data["sidebarContent"] = markdown.RenderWiki(sidebarContent, ctx.Repo.RepoLink, metas)
|
ctx.Data["sidebarContent"] = markdown.RenderWiki(sidebarContent, ctx.Repo.RepoLink, metas)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<div class="ui top attached tabular menu" data-write="write" data-preview="preview" data-diff="diff">
|
<div class="ui top attached tabular menu" data-write="write" data-preview="preview" data-diff="diff">
|
||||||
<a class="active item" data-tab="write">{{svg "octicon-code" 16}} {{if .IsNewFile}}{{.i18n.Tr "repo.editor.new_file"}}{{else}}{{.i18n.Tr "repo.editor.edit_file"}}{{end}}</a>
|
<a class="active item" data-tab="write">{{svg "octicon-code" 16}} {{if .IsNewFile}}{{.i18n.Tr "repo.editor.new_file"}}{{else}}{{.i18n.Tr "repo.editor.edit_file"}}{{end}}</a>
|
||||||
{{if not .IsNewFile}}
|
{{if not .IsNewFile}}
|
||||||
<a class="item" data-tab="preview" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.RepoLink}}/src/{{.BranchNameSubURL | EscapePound}}" data-preview-file-modes="{{.PreviewableFileModes}}">{{svg "octicon-eye" 16}} {{.i18n.Tr "preview"}}</a>
|
<a class="item" data-tab="preview" data-url="{{.Repository.APIURL}}/markdown" data-context="{{.RepoLink}}/src/{{.BranchNameSubURL | EscapePound}}" data-preview-file-modes="{{.PreviewableFileModes}}" data-markdown-mode="gfm">{{svg "octicon-eye" 16}} {{.i18n.Tr "preview"}}</a>
|
||||||
<a class="item" data-tab="diff" data-url="{{.RepoLink}}/_preview/{{.BranchName | EscapePound}}/{{.TreePath | EscapePound}}" data-context="{{.BranchLink}}">{{svg "octicon-diff" 16}} {{.i18n.Tr "repo.editor.preview_changes"}}</a>
|
<a class="item" data-tab="diff" data-url="{{.RepoLink}}/_preview/{{.BranchName | EscapePound}}/{{.TreePath | EscapePound}}" data-context="{{.BranchLink}}">{{svg "octicon-diff" 16}} {{.i18n.Tr "repo.editor.preview_changes"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -41,7 +41,7 @@ function initCommentPreviewTab($form) {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrf,
|
||||||
mode: 'gfm',
|
mode: 'comment',
|
||||||
context: $this.data('context'),
|
context: $this.data('context'),
|
||||||
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
|
@ -65,6 +65,7 @@ function initEditPreviewTab($form) {
|
||||||
$previewTab.on('click', function () {
|
$previewTab.on('click', function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
let context = `${$this.data('context')}/`;
|
let context = `${$this.data('context')}/`;
|
||||||
|
const mode = $this.data('markdown-mode') || 'comment';
|
||||||
const treePathEl = $form.find('input#tree_path');
|
const treePathEl = $form.find('input#tree_path');
|
||||||
if (treePathEl.length > 0) {
|
if (treePathEl.length > 0) {
|
||||||
context += treePathEl.val();
|
context += treePathEl.val();
|
||||||
|
@ -72,7 +73,7 @@ function initEditPreviewTab($form) {
|
||||||
context = context.substring(0, context.lastIndexOf('/'));
|
context = context.substring(0, context.lastIndexOf('/'));
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrf,
|
||||||
mode: 'gfm',
|
mode,
|
||||||
context,
|
context,
|
||||||
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
|
|
Loading…
Reference in New Issue