commit 044613bff5b965be817d7c87f5e2740bd8190489
parent 0b04f41e71dd61b888068511f3f58df2cd52489d
Author: Peter Kosyh <p.kosyh@gmail.com>
Date: Sat, 5 Sep 2020 10:01:07 +0300
preview msg
Diffstat:
8 files changed, 83 insertions(+), 28 deletions(-)
diff --git a/ii-node/lib/style.css b/ii-node/lib/style.css
@@ -119,8 +119,9 @@
}
#edit {
text-align: left;
- margin-left: auto;
+ width: 100%;
margin-right: auto;
+ margin-left: auto;
margin-top: 1em;
background: #ffffea;
border: 1px solid #55aaaa;
@@ -132,6 +133,7 @@
margin: 0.5em;
border: none;
overflow: auto;
+ width: 95%;
}
#edit textarea {
diff --git a/ii-node/main.go b/ii-node/main.go
@@ -79,13 +79,10 @@ func main() {
fs := http.FileServer(http.Dir("lib"))
http.Handle("/lib/", http.StripPrefix("/lib/", fs))
- http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- handleWWW(www, w, r)
- })
http.HandleFunc("/list.txt", func(w http.ResponseWriter, r *http.Request) {
echoes := db.Echoes(nil)
for _, v := range echoes {
- fmt.Fprintf(w, "%s:%d:\n", v.Name, v.Count)
+ fmt.Fprintf(w, "%s:%d:%s\n", v.Name, v.Count,www.edb.Info[v.Name])
}
})
http.HandleFunc("/blacklist.txt", func(w http.ResponseWriter, r *http.Request) {
@@ -94,6 +91,9 @@ func main() {
fmt.Fprintf(w, "%s\n", v)
}
})
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ handleWWW(www, w, r)
+ })
http.HandleFunc("/u/point/", func(w http.ResponseWriter, r *http.Request) {
var pauth, tmsg string
switch r.Method {
diff --git a/ii-node/tpl/error.tpl b/ii-node/tpl/error.tpl
@@ -3,7 +3,7 @@
<table id="error" cellspacing=0 cellpadding=0>
<tr class="alert"><td>Error!</td></tr>
<tr class="even"><td>{{.Error}}</td></tr>
-<tr class="odd"><td class="links"><a href="/">Ok</a></td></tr>
+<!-- <tr class="odd"><td class="links"><a href="{{.Ref}}">Ok</a></td></tr> -->
</table>
{{template "footer.tpl"}}
diff --git a/ii-node/tpl/header.tpl b/ii-node/tpl/header.tpl
@@ -20,19 +20,23 @@
<td class="links">
<span>
{{ if .User.Name }}
+
{{ if eq .BasePath "profile" }}
<a href="/logout">Logout</a>
{{ else }}
<a href="/profile">{{.User.Name}}</a>
{{ end }}
+
+ {{ with .Echo }}
+ :: <a href="/{{.}}/new">New topic</a>
+ {{ end }}
+
{{ else if eq .BasePath "login" }}
<a href="/register">Register</a>
{{ else }}
<a href="/login">Login</a>
{{ end }}
- {{ with .Echo }}
- :: <a href="/{{.}}/new">New topic</a>
- {{ end }}
+
</span>
</td>
</tr>
diff --git a/ii-node/tpl/index.tpl b/ii-node/tpl/index.tpl
@@ -13,7 +13,7 @@
{{ else }}
<tr class="even">
{{ end }}
-<td class="echo"><a href="{{.Name}}">{{.Name}}</a><br>
+<td class="echo"><a href="/{{.Name}}/">{{.Name}}</a><br>
<span class="info">{{ index $.Echolist.Info .Name }}</span>
</td>
<td class="topics extra">{{.Topics}}</td>
diff --git a/ii-node/tpl/new.tpl b/ii-node/tpl/new.tpl
@@ -1,11 +1,18 @@
{{template "header.tpl" $}}
+<table id="edit">
<form method="post" enctype="application/x-www-form-urlencoded" action="/{{.Echo}}/new">
-<table id="edit"><tr><td class="even">
+<tr><td class="even">
<input type="text" name="to" class="to" placeholder="To" value="All"><br>
<input type="text" name="subj" class="subj" placeholder="Subject"><br>
-<textarea type="text" name="msg" class="message" cols=60 row=16 placeholder="Hi, All!"></textarea>
-</td></tr><tr><td class="odd center">
-<button class="form-button">Submit</button>
-</td></tr></table>
+<textarea type="text" name="msg" class="message" cols=60 row=16 placeholder="Hi, All!">
+</textarea>
+</td></tr>
+
+<tr><td class="odd center">
+<button class="form-button" type="submit" name="action" value="Submit">Submit</button>
+<button class="form-button" type="submit" name="action" value="Preview">Preview</button>
+</td></tr>
</form>
+
+</table>
{{template "footer.tpl"}}
diff --git a/ii-node/tpl/preview.tpl b/ii-node/tpl/preview.tpl
@@ -0,0 +1,35 @@
+{{template "header.tpl" $}}
+{{range .Msg}}
+
+<div id="topic">
+<div class="msg">
+<span class="subj">{{.Subj}}</span><br>
+<span class="info">{{.From}}({{.Addr}}) — {{.To}}<br>{{.Date | fdate}}</span><br>
+<div class="text">
+<br>
+{{with .Text}}
+{{. | msg_format}}
+{{end}}
+<br>
+</div>
+</div>
+</div>
+
+<table id="edit">
+<form method="post" enctype="application/x-www-form-urlencoded" action="/{{.Echo}}/new">
+
+<tr><td class="even">
+<input type="text" name="to" class="to" placeholder="{{.To}}" value="{{.To}}"><br>
+<input type="text" name="subj" class="subj" placeholder="{{.Subj}}" value="{{.Subj}}"><br>
+<textarea type="text" name="msg" class="message" cols=60 row=16 placeholder="Hi, All!">{{.Text}}</textarea>
+</td></tr>
+
+<tr><td class="odd center">
+<button class="form-button" type="submit" name="action" value="Submit">Submit</button>
+<button class="form-button" type="submit" name="action" value="Preview">Preview</button>
+</td></tr>
+</form>
+
+</table>
+{{end}}
+{{template "footer.tpl"}}
diff --git a/ii-node/web.go b/ii-node/web.go
@@ -27,10 +27,11 @@ type WebContext struct {
User *ii.User
Echolist *ii.EDB
Selected string
+ Ref string
}
func www_register(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request) error {
- ctx := WebContext{ User: user, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echolist: www.edb, Ref: r.Header.Get("Referer") }
ii.Trace.Printf("www register")
switch r.Method {
case "GET":
@@ -60,7 +61,7 @@ func www_register(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request
}
func www_login(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request) error {
- ctx := WebContext{ User: user, BasePath: "login", Echolist: www.edb }
+ ctx := WebContext{ User: user, BasePath: "login", Echolist: www.edb, Ref: r.Header.Get("Referer") }
ii.Trace.Printf("www login")
switch r.Method {
case "GET":
@@ -89,7 +90,7 @@ func www_login(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request) e
}
func www_profile(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request) error {
- ctx := WebContext{ User: user, BasePath: "profile", Echolist: www.edb }
+ ctx := WebContext{ User: user, BasePath: "profile", Echolist: www.edb, Ref: r.Header.Get("Referer") }
ii.Trace.Printf("www profile")
if user.Name == "" {
ii.Error.Printf("Access denied")
@@ -112,7 +113,7 @@ func www_logout(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request)
}
func www_index(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request) error {
- ctx := WebContext{ User: user, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echolist: www.edb, Ref: r.Header.Get("Referer") }
ii.Trace.Printf("www index")
@@ -202,7 +203,7 @@ func makePager(ctx *WebContext, count int, page int) int {
func www_topics(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, echo string, page int) error {
db := www.db
- ctx := WebContext{ User: user, Echo: echo, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echo: echo, Echolist: www.edb, Ref: r.Header.Get("Referer") }
mis := db.LookupIDS(db.SelectIDS(ii.Query{Echo: echo}))
ii.Trace.Printf("www topics: %s", echo)
topicsIds := getTopics(db, mis)
@@ -249,7 +250,7 @@ func www_topics(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request,
func www_topic(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, id string, page int) error {
db := www.db
- ctx := WebContext{ User: user, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echolist: www.edb, Ref: r.Header.Get("Referer") }
mi := db.Lookup(id)
if mi == nil {
@@ -299,7 +300,7 @@ func www_topic(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, i
}
func www_new(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, echo string) error {
- ctx := WebContext{ User: user, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echolist: www.edb, Ref: r.Header.Get("Referer") }
ctx.BasePath = echo
ctx.Echo = echo
@@ -320,6 +321,7 @@ func www_new(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, ech
subj := r.FormValue("subj")
to := r.FormValue("to")
msg := r.FormValue("msg")
+ action := r.FormValue("action")
text := fmt.Sprintf("%s\n%s\n%s\n\n%s", echo, to, subj, msg)
m, err := ii.DecodeMsgline(text, false)
if err != nil {
@@ -328,18 +330,23 @@ func www_new(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, ech
}
m.From = user.Name
m.Addr = fmt.Sprintf("%s,%d", www.db.Name, user.Id)
- if err = www.db.Store(m); err != nil {
- ii.Error.Printf("Error while storig new topic %s: %s", m.MsgId, err)
- return err
+ if action == "Submit" { // submit
+ if err = www.db.Store(m); err != nil {
+ ii.Error.Printf("Error while storig new topic %s: %s", m.MsgId, err)
+ return err
+ }
+ http.Redirect(w, r, "/"+echo+"/1", http.StatusSeeOther)
+ return nil
}
- http.Redirect(w, r, "/"+echo+"/1", http.StatusSeeOther)
- return nil
+ ctx.Msg = append(ctx.Msg, m)
+ err = www.tpl.ExecuteTemplate(w, "preview.tpl", ctx)
+ return err
}
return nil
}
func www_reply(user *ii.User, www WWW, w http.ResponseWriter, r *http.Request, id string) error {
- ctx := WebContext{ User: user, Echolist: www.edb }
+ ctx := WebContext{ User: user, Echolist: www.edb, Ref: r.Header.Get("Referer") }
ctx.BasePath = id
switch r.Method {