mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2024-12-04 18:19:54 +00:00
Migrate /edit to html/template
This commit is contained in:
parent
caa1bcf8bb
commit
4ede2783c5
@ -2,16 +2,51 @@ package hypview
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"github.com/bouncepaw/mycorrhiza/cfg"
|
||||
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||
"html/template"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/bouncepaw/mycorrhiza/cfg"
|
||||
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed *.html
|
||||
fs embed.FS
|
||||
ruTranslation = `
|
||||
{{define "editing hypha"}}Редактирование {{beautifulName .}}{{end}}
|
||||
{{define "editing [[hypha]]"}}Редактирование <a href="/hypha/{{.}}">{{beautifulName .}}</a>{{end}}
|
||||
{{define "you're creating a new hypha"}}Вы создаёте новую гифу.{{end}}
|
||||
{{define "describe your changes"}}Опишите ваши правки{{end}}
|
||||
{{define "save"}}Сохранить{{end}}
|
||||
{{define "preview"}}Предпросмотр{{end}}
|
||||
{{define "previewing hypha"}}Предпросмотр «{{beautifulName .}}»{{end}}
|
||||
{{define "preview tip"}}Заметьте, эта гифа ещё не сохранена. Вот её предпросмотр:{{end}}
|
||||
|
||||
{{define "markup"}}Разметка{{end}}
|
||||
{{define "link"}}Ссылка{{end}}
|
||||
{{define "link title"}}Текст{{end}}
|
||||
{{define "heading"}}Заголовок{{end}}
|
||||
{{define "bold"}}Жирный{{end}}
|
||||
{{define "italic"}}Курсив{{end}}
|
||||
{{define "highlight"}}Выделение{{end}}
|
||||
{{define "underline"}}Подчеркивание{{end}}
|
||||
{{define "mono"}}Моноширинный{{end}}
|
||||
{{define "super"}}Надстрочный{{end}}
|
||||
{{define "sub"}}Подстрочный{{end}}
|
||||
{{define "strike"}}Зачёркнутый{{end}}
|
||||
{{define "rocket"}}Ссылка-ракета{{end}}
|
||||
{{define "transclude"}}Трансклюзия{{end}}
|
||||
{{define "hr"}}Гориз. черта{{end}}
|
||||
{{define "code"}}Код-блок{{end}}
|
||||
{{define "bullets"}}Маркир. список{{end}}
|
||||
{{define "numbers"}}Нумер. список{{end}}
|
||||
{{define "mycomarkup help"}}<a href="/help/en/mycomarkup" class="shy-link">Подробнее</a> о микоразметке{{end}}
|
||||
{{define "actions"}}Действия{{end}}
|
||||
{{define "current date"}}Текущая дата{{end}}
|
||||
{{define "current time"}}Текущее время{{end}}
|
||||
{{define "selflink"}}Ссылка на вас{{end}}
|
||||
|
||||
{{define "empty heading"}}Эта гифа не существует{{end}}
|
||||
{{define "empty no rights"}}У вас нет прав для создания новых гиф. Вы можете:{{end}}
|
||||
{{define "empty log in"}}Войти в свою учётную запись, если она у вас есть{{end}}
|
||||
@ -37,6 +72,7 @@ var (
|
||||
{{define "leave redirections"}}Оставить перенаправления{{end}}
|
||||
`
|
||||
chainNaviTitle viewutil.Chain
|
||||
chainEditHypha viewutil.Chain
|
||||
chainEmptyHypha viewutil.Chain
|
||||
chainDeleteHypha viewutil.Chain
|
||||
chainRenameHypha viewutil.Chain
|
||||
@ -44,11 +80,35 @@ var (
|
||||
|
||||
func Init() {
|
||||
chainNaviTitle = viewutil.CopyEnRuWith(fs, "view_navititle.html", "")
|
||||
chainEditHypha = viewutil.CopyEnRuWith(fs, "view_edit.html", ruTranslation)
|
||||
chainEmptyHypha = viewutil.CopyEnRuWith(fs, "view_empty_hypha.html", ruTranslation)
|
||||
chainDeleteHypha = viewutil.CopyEnRuWith(fs, "view_delete.html", ruTranslation)
|
||||
chainRenameHypha = viewutil.CopyEnRuWith(fs, "view_rename.html", ruTranslation)
|
||||
}
|
||||
|
||||
type editData struct {
|
||||
*viewutil.BaseData
|
||||
HyphaName string
|
||||
IsNew bool
|
||||
Content string
|
||||
Message string
|
||||
Preview template.HTML
|
||||
}
|
||||
|
||||
func EditHypha(meta viewutil.Meta, hyphaName string, isNew bool, content string, message string, preview template.HTML) {
|
||||
viewutil.ExecutePage(meta, chainEditHypha, editData{
|
||||
BaseData: &viewutil.BaseData{
|
||||
Addr: "/edit/" + hyphaName,
|
||||
EditScripts: cfg.EditScripts,
|
||||
},
|
||||
HyphaName: hyphaName,
|
||||
IsNew: isNew,
|
||||
Content: content,
|
||||
Message: message,
|
||||
Preview: preview,
|
||||
})
|
||||
}
|
||||
|
||||
type deleteRenameData struct {
|
||||
*viewutil.BaseData
|
||||
HyphaName string
|
||||
|
@ -1,123 +0,0 @@
|
||||
{% import "fmt" %}
|
||||
{% import "net/http" %}
|
||||
|
||||
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
|
||||
{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
|
||||
{% import "github.com/bouncepaw/mycorrhiza/user" %}
|
||||
|
||||
{% func Toolbar(u *user.User, lc *l18n.Localizer) %}
|
||||
<aside class="edit-toolbar markup-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">{%s lc.Get("edit.markup")%}</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
{% for _, el := range []struct{
|
||||
class string
|
||||
display string
|
||||
}{
|
||||
{"link", fmt.Sprintf("[[%s]]", lc.Get("edit.link"))},
|
||||
{"titlelink", fmt.Sprintf("[[%s | %s]]", lc.Get("edit.link"), lc.Get("edit.link_title"))},
|
||||
{"heading1", fmt.Sprintf("= %s", lc.Get("edit.heading"))},
|
||||
{"heading2", fmt.Sprintf("== %s", lc.Get("edit.heading"))},
|
||||
{"bold", fmt.Sprintf("<b>**%s**</b>", lc.Get("edit.bold"))},
|
||||
{"italic", fmt.Sprintf("<i>//%s//</i>", lc.Get("edit.italic"))},
|
||||
{"highlighted", fmt.Sprintf("<mark>++%s++</mark>", lc.Get("edit.highlight"))},
|
||||
{"underline", fmt.Sprintf("<u>__%s__</u>", lc.Get("edit.underline"))},
|
||||
{"monospace", fmt.Sprintf("<code>`%s`</code>", lc.Get("edit.mono"))},
|
||||
{"lifted", fmt.Sprintf("<sup>^^%s^^</sup>", lc.Get("edit.super"))}, // inconsistent names: lifted, supertext. How cute ❤️
|
||||
{"lowered", fmt.Sprintf("<sub>,,%s,,</sub>", lc.Get("edit.sub"))},
|
||||
{"strikethrough", fmt.Sprintf("<strike>~~%s~~</strike>", lc.Get("edit.strike"))},
|
||||
{"rocket", "=> " + lc.Get("edit.rocket")},
|
||||
{"xcl", "<= " + lc.Get("edit.transclude")},
|
||||
{"img", "<code>img {}</code>"},
|
||||
{"table", "<code>table {}</code>"},
|
||||
{"hr", lc.Get("edit.hr")},
|
||||
{"codeblock", lc.Get("edit.code")},
|
||||
{"bulletedlist", "* " + lc.Get("edit.bullets")},
|
||||
{"numberedlist", "*. " + lc.Get("edit.numbers")},
|
||||
} %}
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__{%s el.class %}">
|
||||
{%s= el.display %}
|
||||
</button>
|
||||
{% endfor %}
|
||||
</section>
|
||||
<p class="edit-toolbar__ad">{%s= lc.Get("edit.help", &l18n.Replacements{"link": fmt.Sprintf("<a href=\"/help/en/mycomarkup\" target=\"_blank\" class=\"shy-link\">%s</a>", lc.Get("edit.help_link"))}) %}</p>
|
||||
</aside>
|
||||
<aside class="edit-toolbar action-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">{%s lc.Get("edit.actions")%}</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
{% for _, el := range []struct{
|
||||
class string
|
||||
display string
|
||||
}{
|
||||
{"date", lc.Get("edit.date")},
|
||||
{"time", lc.Get("edit.time")},
|
||||
} %}
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__{%s el.class %}">
|
||||
{%s= el.display %}
|
||||
</button>
|
||||
{% endfor %}
|
||||
{% if u.Group != "anon" %}
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__user-link">
|
||||
{%s lc.Get("edit.selflink") %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</section>
|
||||
</aside>
|
||||
<script src="/static/toolbar.js"></script>
|
||||
{% endfunc %}
|
||||
|
||||
{% func Editor(rq *http.Request, hyphaName, textAreaFill, warning string) %}
|
||||
{% code
|
||||
lc := l18n.FromRequest(rq)
|
||||
%}
|
||||
<main class="main-width edit edit_no-preview">
|
||||
<form method="post" class="edit-form"
|
||||
action="/upload-text/{%s hyphaName %}">
|
||||
<h1 class="edit__title">{%s= fmt.Sprintf(lc.Get("edit.title"), beautifulLink(hyphaName)) %}</h1>
|
||||
{%s= warning %}
|
||||
<textarea name="text" class="edit-form__textarea" autofocus>{%s textAreaFill %}</textarea>
|
||||
<p class="edit-form__message-zone">
|
||||
<input id="text" type="text" name="message" class="edit-form__message" placeholder="{%s lc.Get("edit.tag") %}" aria-label="{%s lc.Get("edit.tag") %}">
|
||||
</p>
|
||||
<p class="edit-form__buttons">
|
||||
<button type="submit" name="action" class="btn btn_accent edit-form__save" value="Save">{%s lc.Get("edit.save") %}</button>
|
||||
<button type="submit" name="action" class="btn edit-form__preview" value="Preview">{%s lc.Get("edit.preview") %}</button>
|
||||
<a href="/hypha/{%s hyphaName %}" class="btn btn_weak">{%s lc.Get("ui.cancel") %}</a>
|
||||
</p>
|
||||
</form>
|
||||
</main>
|
||||
{%s= Toolbar(user.FromRequest(rq), lc) %}
|
||||
{%= editScripts() %}
|
||||
{% endfunc %}
|
||||
|
||||
{% func Preview(rq *http.Request, hyphaName, textAreaFill, message, warning string, renderedPage string) %}
|
||||
{% code
|
||||
lc := l18n.FromRequest(rq)
|
||||
%}
|
||||
<main class="main-width edit edit_with-preview">
|
||||
<form method="post" class="edit-form"
|
||||
action="/upload-text/{%s hyphaName %}">
|
||||
<h1 class="edit__title">{%s= fmt.Sprintf(lc.Get("edit.title"), beautifulLink(hyphaName)) %}</h1>
|
||||
{%s= warning %}
|
||||
<textarea name="text" class="edit-form__textarea" autofocus>{%s textAreaFill %}</textarea>
|
||||
<p class="edit-form__message-zone">
|
||||
<input id="text" type="text" name="message" class="edit-form__message" placeholder="{%s lc.Get("edit.tag") %}" aria-label="{%s lc.Get("edit.tag") %}">
|
||||
</p>
|
||||
<p class="edit-form__buttons">
|
||||
<button type="submit" name="action" class="btn btn_accent edit-form__save" value="Save">{%s lc.Get("edit.save") %}</button>
|
||||
<button type="submit" name="action" class="btn edit-form__preview" value="Preview">{%s lc.Get("edit.preview") %}</button>
|
||||
<a href="/hypha/{%s hyphaName %}" class="btn btn_weak">{%s lc.Get("ui.cancel") %}</a>
|
||||
</p>
|
||||
</form>
|
||||
<p class="warning">{%s lc.Get("edit.preview_tip") %}</p>
|
||||
<article class="edit__preview">{%s= renderedPage %}</article>
|
||||
</main>
|
||||
{%s= Toolbar(user.FromRequest(rq), lc) %}
|
||||
{%= editScripts() %}
|
||||
{% endfunc %}
|
||||
|
||||
{% func editScripts() %}
|
||||
<script src="/static/editor.js"></script>
|
||||
{% for _, scriptPath := range cfg.EditScripts %}
|
||||
<script src="{%s scriptPath %}"></script>
|
||||
{% endfor %}
|
||||
{% endfunc %}
|
@ -1,452 +0,0 @@
|
||||
// Code generated by qtc from "mutators.qtpl". DO NOT EDIT.
|
||||
// See https://github.com/valyala/quicktemplate for details.
|
||||
|
||||
//line hypview/mutators.qtpl:1
|
||||
package hypview
|
||||
|
||||
//line hypview/mutators.qtpl:1
|
||||
import "fmt"
|
||||
|
||||
//line hypview/mutators.qtpl:2
|
||||
import "net/http"
|
||||
|
||||
//line hypview/mutators.qtpl:4
|
||||
import "github.com/bouncepaw/mycorrhiza/cfg"
|
||||
|
||||
//line hypview/mutators.qtpl:5
|
||||
import "github.com/bouncepaw/mycorrhiza/l18n"
|
||||
|
||||
//line hypview/mutators.qtpl:6
|
||||
import "github.com/bouncepaw/mycorrhiza/user"
|
||||
|
||||
//line hypview/mutators.qtpl:8
|
||||
import (
|
||||
qtio422016 "io"
|
||||
|
||||
qt422016 "github.com/valyala/quicktemplate"
|
||||
)
|
||||
|
||||
//line hypview/mutators.qtpl:8
|
||||
var (
|
||||
_ = qtio422016.Copy
|
||||
_ = qt422016.AcquireByteBuffer
|
||||
)
|
||||
|
||||
//line hypview/mutators.qtpl:8
|
||||
func StreamToolbar(qw422016 *qt422016.Writer, u *user.User, lc *l18n.Localizer) {
|
||||
//line hypview/mutators.qtpl:8
|
||||
qw422016.N().S(`
|
||||
<aside class="edit-toolbar markup-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">`)
|
||||
//line hypview/mutators.qtpl:10
|
||||
qw422016.E().S(lc.Get("edit.markup"))
|
||||
//line hypview/mutators.qtpl:10
|
||||
qw422016.N().S(`</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
`)
|
||||
//line hypview/mutators.qtpl:12
|
||||
for _, el := range []struct {
|
||||
class string
|
||||
display string
|
||||
}{
|
||||
{"link", fmt.Sprintf("[[%s]]", lc.Get("edit.link"))},
|
||||
{"titlelink", fmt.Sprintf("[[%s | %s]]", lc.Get("edit.link"), lc.Get("edit.link_title"))},
|
||||
{"heading1", fmt.Sprintf("= %s", lc.Get("edit.heading"))},
|
||||
{"heading2", fmt.Sprintf("== %s", lc.Get("edit.heading"))},
|
||||
{"bold", fmt.Sprintf("<b>**%s**</b>", lc.Get("edit.bold"))},
|
||||
{"italic", fmt.Sprintf("<i>//%s//</i>", lc.Get("edit.italic"))},
|
||||
{"highlighted", fmt.Sprintf("<mark>++%s++</mark>", lc.Get("edit.highlight"))},
|
||||
{"underline", fmt.Sprintf("<u>__%s__</u>", lc.Get("edit.underline"))},
|
||||
{"monospace", fmt.Sprintf("<code>`%s`</code>", lc.Get("edit.mono"))},
|
||||
{"lifted", fmt.Sprintf("<sup>^^%s^^</sup>", lc.Get("edit.super"))}, // inconsistent names: lifted, supertext. How cute ❤️
|
||||
{"lowered", fmt.Sprintf("<sub>,,%s,,</sub>", lc.Get("edit.sub"))},
|
||||
{"strikethrough", fmt.Sprintf("<strike>~~%s~~</strike>", lc.Get("edit.strike"))},
|
||||
{"rocket", "=> " + lc.Get("edit.rocket")},
|
||||
{"xcl", "<= " + lc.Get("edit.transclude")},
|
||||
{"img", "<code>img {}</code>"},
|
||||
{"table", "<code>table {}</code>"},
|
||||
{"hr", lc.Get("edit.hr")},
|
||||
{"codeblock", lc.Get("edit.code")},
|
||||
{"bulletedlist", "* " + lc.Get("edit.bullets")},
|
||||
{"numberedlist", "*. " + lc.Get("edit.numbers")},
|
||||
} {
|
||||
//line hypview/mutators.qtpl:36
|
||||
qw422016.N().S(`
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__`)
|
||||
//line hypview/mutators.qtpl:37
|
||||
qw422016.E().S(el.class)
|
||||
//line hypview/mutators.qtpl:37
|
||||
qw422016.N().S(`">
|
||||
`)
|
||||
//line hypview/mutators.qtpl:38
|
||||
qw422016.N().S(el.display)
|
||||
//line hypview/mutators.qtpl:38
|
||||
qw422016.N().S(`
|
||||
</button>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:40
|
||||
}
|
||||
//line hypview/mutators.qtpl:40
|
||||
qw422016.N().S(`
|
||||
</section>
|
||||
<p class="edit-toolbar__ad">`)
|
||||
//line hypview/mutators.qtpl:42
|
||||
qw422016.N().S(lc.Get("edit.help", &l18n.Replacements{"link": fmt.Sprintf("<a href=\"/help/en/mycomarkup\" target=\"_blank\" class=\"shy-link\">%s</a>", lc.Get("edit.help_link"))}))
|
||||
//line hypview/mutators.qtpl:42
|
||||
qw422016.N().S(`</p>
|
||||
</aside>
|
||||
<aside class="edit-toolbar action-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">`)
|
||||
//line hypview/mutators.qtpl:45
|
||||
qw422016.E().S(lc.Get("edit.actions"))
|
||||
//line hypview/mutators.qtpl:45
|
||||
qw422016.N().S(`</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
`)
|
||||
//line hypview/mutators.qtpl:47
|
||||
for _, el := range []struct {
|
||||
class string
|
||||
display string
|
||||
}{
|
||||
{"date", lc.Get("edit.date")},
|
||||
{"time", lc.Get("edit.time")},
|
||||
} {
|
||||
//line hypview/mutators.qtpl:53
|
||||
qw422016.N().S(`
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__`)
|
||||
//line hypview/mutators.qtpl:54
|
||||
qw422016.E().S(el.class)
|
||||
//line hypview/mutators.qtpl:54
|
||||
qw422016.N().S(`">
|
||||
`)
|
||||
//line hypview/mutators.qtpl:55
|
||||
qw422016.N().S(el.display)
|
||||
//line hypview/mutators.qtpl:55
|
||||
qw422016.N().S(`
|
||||
</button>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:57
|
||||
}
|
||||
//line hypview/mutators.qtpl:57
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:58
|
||||
if u.Group != "anon" {
|
||||
//line hypview/mutators.qtpl:58
|
||||
qw422016.N().S(`
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__user-link">
|
||||
`)
|
||||
//line hypview/mutators.qtpl:60
|
||||
qw422016.E().S(lc.Get("edit.selflink"))
|
||||
//line hypview/mutators.qtpl:60
|
||||
qw422016.N().S(`
|
||||
</button>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:62
|
||||
}
|
||||
//line hypview/mutators.qtpl:62
|
||||
qw422016.N().S(`
|
||||
</section>
|
||||
</aside>
|
||||
<script src="/static/toolbar.js"></script>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:66
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:66
|
||||
func WriteToolbar(qq422016 qtio422016.Writer, u *user.User, lc *l18n.Localizer) {
|
||||
//line hypview/mutators.qtpl:66
|
||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||
//line hypview/mutators.qtpl:66
|
||||
StreamToolbar(qw422016, u, lc)
|
||||
//line hypview/mutators.qtpl:66
|
||||
qt422016.ReleaseWriter(qw422016)
|
||||
//line hypview/mutators.qtpl:66
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:66
|
||||
func Toolbar(u *user.User, lc *l18n.Localizer) string {
|
||||
//line hypview/mutators.qtpl:66
|
||||
qb422016 := qt422016.AcquireByteBuffer()
|
||||
//line hypview/mutators.qtpl:66
|
||||
WriteToolbar(qb422016, u, lc)
|
||||
//line hypview/mutators.qtpl:66
|
||||
qs422016 := string(qb422016.B)
|
||||
//line hypview/mutators.qtpl:66
|
||||
qt422016.ReleaseByteBuffer(qb422016)
|
||||
//line hypview/mutators.qtpl:66
|
||||
return qs422016
|
||||
//line hypview/mutators.qtpl:66
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:68
|
||||
func StreamEditor(qw422016 *qt422016.Writer, rq *http.Request, hyphaName, textAreaFill, warning string) {
|
||||
//line hypview/mutators.qtpl:68
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:70
|
||||
lc := l18n.FromRequest(rq)
|
||||
|
||||
//line hypview/mutators.qtpl:71
|
||||
qw422016.N().S(`
|
||||
<main class="main-width edit edit_no-preview">
|
||||
<form method="post" class="edit-form"
|
||||
action="/upload-text/`)
|
||||
//line hypview/mutators.qtpl:74
|
||||
qw422016.E().S(hyphaName)
|
||||
//line hypview/mutators.qtpl:74
|
||||
qw422016.N().S(`">
|
||||
<h1 class="edit__title">`)
|
||||
//line hypview/mutators.qtpl:75
|
||||
qw422016.N().S(fmt.Sprintf(lc.Get("edit.title"), beautifulLink(hyphaName)))
|
||||
//line hypview/mutators.qtpl:75
|
||||
qw422016.N().S(`</h1>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:76
|
||||
qw422016.N().S(warning)
|
||||
//line hypview/mutators.qtpl:76
|
||||
qw422016.N().S(`
|
||||
<textarea name="text" class="edit-form__textarea" autofocus>`)
|
||||
//line hypview/mutators.qtpl:77
|
||||
qw422016.E().S(textAreaFill)
|
||||
//line hypview/mutators.qtpl:77
|
||||
qw422016.N().S(`</textarea>
|
||||
<p class="edit-form__message-zone">
|
||||
<input id="text" type="text" name="message" class="edit-form__message" placeholder="`)
|
||||
//line hypview/mutators.qtpl:79
|
||||
qw422016.E().S(lc.Get("edit.tag"))
|
||||
//line hypview/mutators.qtpl:79
|
||||
qw422016.N().S(`" aria-label="`)
|
||||
//line hypview/mutators.qtpl:79
|
||||
qw422016.E().S(lc.Get("edit.tag"))
|
||||
//line hypview/mutators.qtpl:79
|
||||
qw422016.N().S(`">
|
||||
</p>
|
||||
<p class="edit-form__buttons">
|
||||
<button type="submit" name="action" class="btn btn_accent edit-form__save" value="Save">`)
|
||||
//line hypview/mutators.qtpl:82
|
||||
qw422016.E().S(lc.Get("edit.save"))
|
||||
//line hypview/mutators.qtpl:82
|
||||
qw422016.N().S(`</button>
|
||||
<button type="submit" name="action" class="btn edit-form__preview" value="Preview">`)
|
||||
//line hypview/mutators.qtpl:83
|
||||
qw422016.E().S(lc.Get("edit.preview"))
|
||||
//line hypview/mutators.qtpl:83
|
||||
qw422016.N().S(`</button>
|
||||
<a href="/hypha/`)
|
||||
//line hypview/mutators.qtpl:84
|
||||
qw422016.E().S(hyphaName)
|
||||
//line hypview/mutators.qtpl:84
|
||||
qw422016.N().S(`" class="btn btn_weak">`)
|
||||
//line hypview/mutators.qtpl:84
|
||||
qw422016.E().S(lc.Get("ui.cancel"))
|
||||
//line hypview/mutators.qtpl:84
|
||||
qw422016.N().S(`</a>
|
||||
</p>
|
||||
</form>
|
||||
</main>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:88
|
||||
qw422016.N().S(Toolbar(user.FromRequest(rq), lc))
|
||||
//line hypview/mutators.qtpl:88
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:89
|
||||
streameditScripts(qw422016)
|
||||
//line hypview/mutators.qtpl:89
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:90
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:90
|
||||
func WriteEditor(qq422016 qtio422016.Writer, rq *http.Request, hyphaName, textAreaFill, warning string) {
|
||||
//line hypview/mutators.qtpl:90
|
||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||
//line hypview/mutators.qtpl:90
|
||||
StreamEditor(qw422016, rq, hyphaName, textAreaFill, warning)
|
||||
//line hypview/mutators.qtpl:90
|
||||
qt422016.ReleaseWriter(qw422016)
|
||||
//line hypview/mutators.qtpl:90
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:90
|
||||
func Editor(rq *http.Request, hyphaName, textAreaFill, warning string) string {
|
||||
//line hypview/mutators.qtpl:90
|
||||
qb422016 := qt422016.AcquireByteBuffer()
|
||||
//line hypview/mutators.qtpl:90
|
||||
WriteEditor(qb422016, rq, hyphaName, textAreaFill, warning)
|
||||
//line hypview/mutators.qtpl:90
|
||||
qs422016 := string(qb422016.B)
|
||||
//line hypview/mutators.qtpl:90
|
||||
qt422016.ReleaseByteBuffer(qb422016)
|
||||
//line hypview/mutators.qtpl:90
|
||||
return qs422016
|
||||
//line hypview/mutators.qtpl:90
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:92
|
||||
func StreamPreview(qw422016 *qt422016.Writer, rq *http.Request, hyphaName, textAreaFill, message, warning string, renderedPage string) {
|
||||
//line hypview/mutators.qtpl:92
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:94
|
||||
lc := l18n.FromRequest(rq)
|
||||
|
||||
//line hypview/mutators.qtpl:95
|
||||
qw422016.N().S(`
|
||||
<main class="main-width edit edit_with-preview">
|
||||
<form method="post" class="edit-form"
|
||||
action="/upload-text/`)
|
||||
//line hypview/mutators.qtpl:98
|
||||
qw422016.E().S(hyphaName)
|
||||
//line hypview/mutators.qtpl:98
|
||||
qw422016.N().S(`">
|
||||
<h1 class="edit__title">`)
|
||||
//line hypview/mutators.qtpl:99
|
||||
qw422016.N().S(fmt.Sprintf(lc.Get("edit.title"), beautifulLink(hyphaName)))
|
||||
//line hypview/mutators.qtpl:99
|
||||
qw422016.N().S(`</h1>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:100
|
||||
qw422016.N().S(warning)
|
||||
//line hypview/mutators.qtpl:100
|
||||
qw422016.N().S(`
|
||||
<textarea name="text" class="edit-form__textarea" autofocus>`)
|
||||
//line hypview/mutators.qtpl:101
|
||||
qw422016.E().S(textAreaFill)
|
||||
//line hypview/mutators.qtpl:101
|
||||
qw422016.N().S(`</textarea>
|
||||
<p class="edit-form__message-zone">
|
||||
<input id="text" type="text" name="message" class="edit-form__message" placeholder="`)
|
||||
//line hypview/mutators.qtpl:103
|
||||
qw422016.E().S(lc.Get("edit.tag"))
|
||||
//line hypview/mutators.qtpl:103
|
||||
qw422016.N().S(`" aria-label="`)
|
||||
//line hypview/mutators.qtpl:103
|
||||
qw422016.E().S(lc.Get("edit.tag"))
|
||||
//line hypview/mutators.qtpl:103
|
||||
qw422016.N().S(`">
|
||||
</p>
|
||||
<p class="edit-form__buttons">
|
||||
<button type="submit" name="action" class="btn btn_accent edit-form__save" value="Save">`)
|
||||
//line hypview/mutators.qtpl:106
|
||||
qw422016.E().S(lc.Get("edit.save"))
|
||||
//line hypview/mutators.qtpl:106
|
||||
qw422016.N().S(`</button>
|
||||
<button type="submit" name="action" class="btn edit-form__preview" value="Preview">`)
|
||||
//line hypview/mutators.qtpl:107
|
||||
qw422016.E().S(lc.Get("edit.preview"))
|
||||
//line hypview/mutators.qtpl:107
|
||||
qw422016.N().S(`</button>
|
||||
<a href="/hypha/`)
|
||||
//line hypview/mutators.qtpl:108
|
||||
qw422016.E().S(hyphaName)
|
||||
//line hypview/mutators.qtpl:108
|
||||
qw422016.N().S(`" class="btn btn_weak">`)
|
||||
//line hypview/mutators.qtpl:108
|
||||
qw422016.E().S(lc.Get("ui.cancel"))
|
||||
//line hypview/mutators.qtpl:108
|
||||
qw422016.N().S(`</a>
|
||||
</p>
|
||||
</form>
|
||||
<p class="warning">`)
|
||||
//line hypview/mutators.qtpl:111
|
||||
qw422016.E().S(lc.Get("edit.preview_tip"))
|
||||
//line hypview/mutators.qtpl:111
|
||||
qw422016.N().S(`</p>
|
||||
<article class="edit__preview">`)
|
||||
//line hypview/mutators.qtpl:112
|
||||
qw422016.N().S(renderedPage)
|
||||
//line hypview/mutators.qtpl:112
|
||||
qw422016.N().S(`</article>
|
||||
</main>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:114
|
||||
qw422016.N().S(Toolbar(user.FromRequest(rq), lc))
|
||||
//line hypview/mutators.qtpl:114
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:115
|
||||
streameditScripts(qw422016)
|
||||
//line hypview/mutators.qtpl:115
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:116
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:116
|
||||
func WritePreview(qq422016 qtio422016.Writer, rq *http.Request, hyphaName, textAreaFill, message, warning string, renderedPage string) {
|
||||
//line hypview/mutators.qtpl:116
|
||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||
//line hypview/mutators.qtpl:116
|
||||
StreamPreview(qw422016, rq, hyphaName, textAreaFill, message, warning, renderedPage)
|
||||
//line hypview/mutators.qtpl:116
|
||||
qt422016.ReleaseWriter(qw422016)
|
||||
//line hypview/mutators.qtpl:116
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:116
|
||||
func Preview(rq *http.Request, hyphaName, textAreaFill, message, warning string, renderedPage string) string {
|
||||
//line hypview/mutators.qtpl:116
|
||||
qb422016 := qt422016.AcquireByteBuffer()
|
||||
//line hypview/mutators.qtpl:116
|
||||
WritePreview(qb422016, rq, hyphaName, textAreaFill, message, warning, renderedPage)
|
||||
//line hypview/mutators.qtpl:116
|
||||
qs422016 := string(qb422016.B)
|
||||
//line hypview/mutators.qtpl:116
|
||||
qt422016.ReleaseByteBuffer(qb422016)
|
||||
//line hypview/mutators.qtpl:116
|
||||
return qs422016
|
||||
//line hypview/mutators.qtpl:116
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:118
|
||||
func streameditScripts(qw422016 *qt422016.Writer) {
|
||||
//line hypview/mutators.qtpl:118
|
||||
qw422016.N().S(`
|
||||
<script src="/static/editor.js"></script>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:120
|
||||
for _, scriptPath := range cfg.EditScripts {
|
||||
//line hypview/mutators.qtpl:120
|
||||
qw422016.N().S(`
|
||||
<script src="`)
|
||||
//line hypview/mutators.qtpl:121
|
||||
qw422016.E().S(scriptPath)
|
||||
//line hypview/mutators.qtpl:121
|
||||
qw422016.N().S(`"></script>
|
||||
`)
|
||||
//line hypview/mutators.qtpl:122
|
||||
}
|
||||
//line hypview/mutators.qtpl:122
|
||||
qw422016.N().S(`
|
||||
`)
|
||||
//line hypview/mutators.qtpl:123
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:123
|
||||
func writeeditScripts(qq422016 qtio422016.Writer) {
|
||||
//line hypview/mutators.qtpl:123
|
||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||
//line hypview/mutators.qtpl:123
|
||||
streameditScripts(qw422016)
|
||||
//line hypview/mutators.qtpl:123
|
||||
qt422016.ReleaseWriter(qw422016)
|
||||
//line hypview/mutators.qtpl:123
|
||||
}
|
||||
|
||||
//line hypview/mutators.qtpl:123
|
||||
func editScripts() string {
|
||||
//line hypview/mutators.qtpl:123
|
||||
qb422016 := qt422016.AcquireByteBuffer()
|
||||
//line hypview/mutators.qtpl:123
|
||||
writeeditScripts(qb422016)
|
||||
//line hypview/mutators.qtpl:123
|
||||
qs422016 := string(qb422016.B)
|
||||
//line hypview/mutators.qtpl:123
|
||||
qt422016.ReleaseByteBuffer(qb422016)
|
||||
//line hypview/mutators.qtpl:123
|
||||
return qs422016
|
||||
//line hypview/mutators.qtpl:123
|
||||
}
|
104
hypview/view_edit.html
Normal file
104
hypview/view_edit.html
Normal file
@ -0,0 +1,104 @@
|
||||
{{define "toolbar"}}
|
||||
<aside class="edit-toolbar markup-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">{{block "markup" .}}Markup{{end}}</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__link">[[{{block "link" .}}Link{{end}}]]</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__titlelink">[[{{template "link" .}} | {{block "link title" .}}Title{{end}}]]</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__heading1">= {{block "heading" .}}Heading{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__heading2">== {{template "heading" .}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__bold"><b>**{{block "bold" .}}Bold{{end}}**</b></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__italic"><i>//{{block "italic" .}}Italic{{end}}//</i></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__highlighted"><mark>++{{block "highlight" .}}Highlight{{end}}++</mark></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__underline"><u>__{{block "underline" .}}Underline{{end}}__</u></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__monospace"><code>`{{block "mono" .}}Monospace{{end}}`</code></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__lifted"><sup>^^{{block "super" .}}Supertext{{end}}^^</sup></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__lowered"><sub>,,{{block "sub" .}}Subtext{{end}},,</sub></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__strikethrough"><s>~~{{block "strike" .}}Strikethrough{{end}}~~</s></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__rocket">=> {{block "rocket" .}}Rocketlink{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__xcl"><= {{block "transclude" .}}Transclusion{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__img"><code>img {}</code></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__table"><code>table {}</code></button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__hr">{{block "hr" .}}Horizontal bar{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__codeblock">{{block "code" .}}Code block{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__bulletedlist">* {{block "bullets" .}}Bullet list{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__numberedlist">*. {{block "numbers" .}}Number list{{end}}</button>
|
||||
</section>
|
||||
<p class="edit-toolbar__help">
|
||||
{{block "mycomarkup help" .}}
|
||||
<a href="/help/en/mycomarkup" target="_blank" class="shy-link">Learn more</a> about mycomarkup
|
||||
{{end}}
|
||||
</p>
|
||||
</aside>
|
||||
<aside class="edit-toolbar action-toolbar layout-card">
|
||||
<h2 class="edit-toolbar__title layout-card__title">{{block "actions" .}}Actions{{end}}</h2>
|
||||
<section class="edit-toolbar__buttons">
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__date">{{block "current date" .}}Insert current date{{end}}</button>
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__time">{{block "current time" .}}Insert current time{{end}}</button>
|
||||
{{if .Meta.U.Group | ne "anon"}}
|
||||
<button class="btn edit-toolbar__btn edit-toolbar__user-link">{{block "selflink" .}}Link yourself{{end}}</button>
|
||||
{{end}}
|
||||
</section>
|
||||
</aside>
|
||||
<script src="/static/toolbar.js"></script>
|
||||
{{end}}
|
||||
|
||||
{{define "editing hypha"}}Edit {{beautifulName .}}{{end}}
|
||||
{{define "previewing hypha"}}Preview of {{beautifulName .}}{{end}}
|
||||
{{define "title"}}
|
||||
{{- if .Preview -}}
|
||||
{{template "previewing hypha" .HyphaName}}
|
||||
{{- else -}}
|
||||
{{template "editing hypha" .HyphaName}}
|
||||
{{- end -}}
|
||||
{{end}}
|
||||
{{define "body"}}
|
||||
<main class="main-width edit {{if .Preview}}edit_with-preview{{else}}edit_no-preview{{end}}">
|
||||
<form method="post" class="edit-form" action="/upload-text/{{.HyphaName}}">
|
||||
<h1 class="edit__title">
|
||||
{{block "editing [[hypha]]" .HyphaName}}
|
||||
Edit <a href="/hypha/{{.}}">{{beautifulName .}}</a>
|
||||
{{end}}
|
||||
</h1>
|
||||
{{if .IsNew}}
|
||||
<p class="warning warning_new-hypha">
|
||||
{{block "you're creating a new hypha" .}}You are creating a new hypha.{{end}}
|
||||
</p>
|
||||
{{end}}
|
||||
<textarea name="text" class="edit-form__textarea" autofocus>{{.Content}}</textarea>
|
||||
<p class="edit-form__message-zone">
|
||||
<input
|
||||
id="text"
|
||||
type="text"
|
||||
name="message"
|
||||
class="edit-form__message"
|
||||
value="{{.Message}}"
|
||||
placeholder="{{block "describe your changes" .}}Describe your changes{{end}}"
|
||||
aria-label="{{template "describe your changes" .}}">
|
||||
</p>
|
||||
<p class="edit-form__buttons">
|
||||
<button type="submit" name="action" class="btn btn_accent edit-form__save" value="save">
|
||||
{{template "save" .}}
|
||||
</button>
|
||||
<button type="submit" name="action" class="btn edit-form__preview" value="preview">
|
||||
{{block "preview" .}}Preview{{end}}
|
||||
</button>
|
||||
<a href="/hypha/{{.HyphaName}}" class="btn btn_weak">
|
||||
{{template "cancel" .}}
|
||||
</a>
|
||||
</p>
|
||||
</form>
|
||||
{{if .Preview}}
|
||||
<p class="warning">
|
||||
{{block "preview tip" .}}Note that the hypha hasn't been saved yet. Here's the preview:{{end}}
|
||||
</p>
|
||||
<article class="edit__preview">
|
||||
{{.Preview}}
|
||||
</article>
|
||||
{{end}}
|
||||
</main>
|
||||
{{template "toolbar" .}}
|
||||
<script src="/static/editor.js"></script>
|
||||
{{range .EditScripts}}
|
||||
<script src="{{.}}"></script>
|
||||
{{end}}
|
||||
{{end}}
|
@ -99,7 +99,7 @@ textarea {font-size:16px; font-family: inherit; line-height: 150%; }
|
||||
.edit-form p { margin: .25rem 0; }
|
||||
.edit-form__message { width: 100%; margin: 0.25em 0; }
|
||||
.edit-form__save { font-weight: bold; }
|
||||
.edit-toolbar__buttons, .edit-toolbar__ad { margin: .5rem; }
|
||||
.edit-toolbar__buttons, .edit-toolbar__help { margin: .5rem; }
|
||||
.edit-form { height: 100%; display: flex; flex-direction: column; }
|
||||
|
||||
.icon {margin-right: .25rem; vertical-align: bottom; }
|
||||
|
@ -4,12 +4,13 @@ package viewutil
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"github.com/bouncepaw/mycorrhiza/cfg"
|
||||
"github.com/bouncepaw/mycorrhiza/util"
|
||||
"io/fs"
|
||||
"log"
|
||||
"strings"
|
||||
"text/template" // TODO: save the world
|
||||
|
||||
"github.com/bouncepaw/mycorrhiza/cfg"
|
||||
"github.com/bouncepaw/mycorrhiza/util"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -95,6 +96,7 @@ type BaseData struct {
|
||||
HeadElements []string
|
||||
HeaderLinks []HeaderLink
|
||||
CommonScripts []string
|
||||
EditScripts []string
|
||||
Addr string
|
||||
Title string // TODO: remove
|
||||
Body string // TODO: remove
|
||||
@ -119,6 +121,7 @@ func Base(meta Meta, title, body string, bodyAttributes map[string]string, headE
|
||||
HeadElements: headElements,
|
||||
HeaderLinks: HeaderLinks,
|
||||
CommonScripts: cfg.CommonScripts,
|
||||
EditScripts: cfg.EditScripts,
|
||||
Body: body,
|
||||
BodyAttributes: bodyAttributes,
|
||||
})
|
||||
|
@ -2,12 +2,15 @@ package web
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/bouncepaw/mycomarkup/v5"
|
||||
|
||||
"github.com/bouncepaw/mycorrhiza/hypview"
|
||||
"github.com/bouncepaw/mycorrhiza/mycoopts"
|
||||
"github.com/bouncepaw/mycorrhiza/viewutil"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/bouncepaw/mycomarkup/v5/mycocontext"
|
||||
|
||||
@ -148,80 +151,65 @@ func handlerRename(w http.ResponseWriter, rq *http.Request) {
|
||||
func handlerEdit(w http.ResponseWriter, rq *http.Request) {
|
||||
util.PrepareRq(rq)
|
||||
var (
|
||||
hyphaName = util.HyphaNameFromRq(rq, "edit")
|
||||
h = hyphae.ByName(hyphaName)
|
||||
warning string
|
||||
textAreaFill string
|
||||
err error
|
||||
u = user.FromRequest(rq)
|
||||
lc = l18n.FromRequest(rq)
|
||||
meta = viewutil.MetaFrom(w, rq)
|
||||
u = user.FromRequest(rq)
|
||||
lc = l18n.FromRequest(rq)
|
||||
meta = viewutil.MetaFrom(w, rq)
|
||||
|
||||
hyphaName = util.HyphaNameFromRq(rq, "edit")
|
||||
h = hyphae.ByName(hyphaName)
|
||||
|
||||
isNew bool
|
||||
content string
|
||||
err error
|
||||
)
|
||||
|
||||
if err := shroom.CanEdit(u, h, lc); err != nil {
|
||||
viewutil.HttpErr(meta, http.StatusInternalServerError, hyphaName, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
switch h.(type) {
|
||||
case *hyphae.EmptyHypha:
|
||||
warning = fmt.Sprintf(`<p class="warning warning_new-hypha">%s</p>`, lc.Get("edit.new_hypha"))
|
||||
isNew = true
|
||||
default:
|
||||
textAreaFill, err = hyphae.FetchMycomarkupFile(h)
|
||||
content, err = hyphae.FetchMycomarkupFile(h)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
viewutil.HttpErr(meta, http.StatusInternalServerError, hyphaName, lc.Get("ui.error_text_fetch"))
|
||||
return
|
||||
}
|
||||
}
|
||||
util.HTTP200Page(
|
||||
w,
|
||||
viewutil.Base(
|
||||
meta,
|
||||
fmt.Sprintf(lc.Get("edit.title"), util.BeautifulName(hyphaName)),
|
||||
hypview.Editor(rq, hyphaName, textAreaFill, warning),
|
||||
map[string]string{}))
|
||||
hypview.EditHypha(meta, hyphaName, isNew, content, "", "")
|
||||
}
|
||||
|
||||
// handlerUploadText uploads a new text part for the hypha.
|
||||
func handlerUploadText(w http.ResponseWriter, rq *http.Request) {
|
||||
util.PrepareRq(rq)
|
||||
var (
|
||||
u = user.FromRequest(rq)
|
||||
meta = viewutil.MetaFrom(w, rq)
|
||||
|
||||
hyphaName = util.HyphaNameFromRq(rq, "upload-text")
|
||||
h = hyphae.ByName(hyphaName)
|
||||
textData = rq.PostFormValue("text")
|
||||
action = rq.PostFormValue("action")
|
||||
message = rq.PostFormValue("message")
|
||||
u = user.FromRequest(rq)
|
||||
lc = l18n.FromRequest(rq)
|
||||
meta = viewutil.MetaFrom(w, rq)
|
||||
_, isNew = h.(*hyphae.EmptyHypha)
|
||||
|
||||
textData = rq.PostFormValue("text")
|
||||
action = rq.PostFormValue("action")
|
||||
message = rq.PostFormValue("message")
|
||||
)
|
||||
|
||||
if action != "Preview" {
|
||||
if err := shroom.UploadText(h, []byte(textData), message, u); err != nil {
|
||||
viewutil.HttpErr(meta, http.StatusForbidden, hyphaName, err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if action == "Preview" {
|
||||
if action == "preview" {
|
||||
ctx, _ := mycocontext.ContextFromStringInput(textData, mycoopts.MarkupOptions(hyphaName))
|
||||
|
||||
util.HTTP200Page(
|
||||
w,
|
||||
viewutil.Base(
|
||||
meta,
|
||||
fmt.Sprintf(lc.Get("edit.preview_title"), util.BeautifulName(hyphaName)),
|
||||
hypview.Preview(
|
||||
rq,
|
||||
hyphaName,
|
||||
textData,
|
||||
message,
|
||||
"",
|
||||
mycomarkup.BlocksToHTML(ctx, mycomarkup.BlockTree(ctx))),
|
||||
map[string]string{},
|
||||
))
|
||||
} else {
|
||||
http.Redirect(w, rq, "/hypha/"+hyphaName, http.StatusSeeOther)
|
||||
preview := template.HTML(mycomarkup.BlocksToHTML(ctx, mycomarkup.BlockTree(ctx)))
|
||||
hypview.EditHypha(meta, hyphaName, isNew, textData, message, preview)
|
||||
return
|
||||
}
|
||||
|
||||
if err := shroom.UploadText(h, []byte(textData), message, u); err != nil {
|
||||
viewutil.HttpErr(meta, http.StatusForbidden, hyphaName, err.Error())
|
||||
return
|
||||
}
|
||||
http.Redirect(w, rq, "/hypha/"+hyphaName, http.StatusSeeOther)
|
||||
}
|
||||
|
||||
// handlerUploadBinary uploads a new media for the hypha.
|
||||
|
Loading…
Reference in New Issue
Block a user