diff options
-rw-r--r-- | mastodon/status.go | 1 | ||||
-rw-r--r-- | model/notification.go | 1 | ||||
-rw-r--r-- | model/settings.go | 9 | ||||
-rw-r--r-- | service/service.go | 10 | ||||
-rw-r--r-- | service/transport.go | 14 | ||||
-rw-r--r-- | templates/settings.tmpl | 4 | ||||
-rw-r--r-- | templates/status.tmpl | 4 |
7 files changed, 33 insertions, 10 deletions
diff --git a/mastodon/status.go b/mastodon/status.go index 816d092..298c666 100644 --- a/mastodon/status.go +++ b/mastodon/status.go @@ -54,6 +54,7 @@ type Status struct { ShowReplies bool `json:"show_replies"` ReplyMap map[string][]ReplyInfo `json:"reply_map"` ReplyNumber int `json:"reply_number"` + ThreadInNewTab bool `json:"thread_in_new_tab"` } // Context hold information for mastodon context. diff --git a/model/notification.go b/model/notification.go new file mode 100644 index 0000000..8b53790 --- /dev/null +++ b/model/notification.go @@ -0,0 +1 @@ +package model diff --git a/model/settings.go b/model/settings.go index bc8f09f..55db08a 100644 --- a/model/settings.go +++ b/model/settings.go @@ -3,4 +3,13 @@ package model type Settings struct { DefaultVisibility string `json:"default_visibility"` CopyScope bool `json:"copy_scope"` + ThreadInNewTab bool `json:"thread_in_new_tab"` +} + +func NewSettings() *Settings { + return &Settings{ + DefaultVisibility: "public", + CopyScope: true, + ThreadInNewTab: false, + } } diff --git a/service/service.go b/service/service.go index d9482c8..c9c48eb 100644 --- a/service/service.go +++ b/service/service.go @@ -90,10 +90,12 @@ func (svc *service) GetAuthUrl(ctx context.Context, instance string) ( } sessionID = util.NewSessionId() - err = svc.sessionRepo.Add(model.Session{ + session := model.Session{ ID: sessionID, InstanceDomain: instance, - }) + Settings: *model.NewSettings(), + } + err = svc.sessionRepo.Add(session) if err != nil { return } @@ -276,6 +278,10 @@ func (svc *service) ServeTimelinePage(ctx context.Context, client io.Writer, return err } + for i := range statuses { + statuses[i].ThreadInNewTab = c.Session.Settings.ThreadInNewTab + } + if len(maxID) > 0 && len(statuses) > 0 { hasPrev = true prevLink = fmt.Sprintf("/timeline/$s?min_id=%s", timelineType, statuses[0].ID) diff --git a/service/transport.go b/service/transport.go index bbf1f06..83eeedf 100644 --- a/service/transport.go +++ b/service/transport.go @@ -52,9 +52,9 @@ func NewHandler(s Service, staticDir string) http.Handler { } http.SetCookie(w, &http.Cookie{ - Name: "session_id", - Value: sessionID, - Expires: time.Now().Add(365 * 24 * time.Hour), + Name: "session_id", + Value: sessionID, + Expires: time.Now().Add(365 * 24 * time.Hour), }) w.Header().Add("Location", url) @@ -354,9 +354,11 @@ func NewHandler(s Service, staticDir string) http.Handler { visibility := req.FormValue("visibility") copyScope := req.FormValue("copy_scope") == "true" + threadInNewTab := req.FormValue("thread_in_new_tab") == "true" settings := &model.Settings{ DefaultVisibility: visibility, CopyScope: copyScope, + ThreadInNewTab: threadInNewTab, } err := s.SaveSettings(ctx, w, nil, settings) @@ -372,9 +374,9 @@ func NewHandler(s Service, staticDir string) http.Handler { r.HandleFunc("/signout", func(w http.ResponseWriter, req *http.Request) { // TODO remove session from database http.SetCookie(w, &http.Cookie{ - Name: "session_id", - Value: "", - Expires: time.Now(), + Name: "session_id", + Value: "", + Expires: time.Now(), }) w.Header().Add("Location", "/") w.WriteHeader(http.StatusFound) diff --git a/templates/settings.tmpl b/templates/settings.tmpl index e2fd778..df04cb1 100644 --- a/templates/settings.tmpl +++ b/templates/settings.tmpl @@ -16,6 +16,10 @@ <input id="copy-scope" name="copy_scope" type="checkbox" value="true" {{if .Settings.CopyScope}}checked{{end}}> <label for="copy-scope"> Copy scope when replying </label> </div> + <div class="settings-form-field"> + <input id="thread-tab" name="thread_in_new_tab" type="checkbox" value="true" {{if .Settings.ThreadInNewTab}}checked{{end}}> + <label for="thread-tab"> Open threads in new tab from timeline </label> + </div> <button type="submit"> Save </button> </form> diff --git a/templates/status.tmpl b/templates/status.tmpl index 4e975ad..4c94062 100644 --- a/templates/status.tmpl +++ b/templates/status.tmpl @@ -90,7 +90,7 @@ <a class="status-you" href="/thread/{{.ID}}?reply=true#status-{{.ID}}" title="reply"> <i class="fa fa-reply"></i> </a> - <a class="status-action-count" href="/thread/{{.ID}}#status-{{.ID}}"> + <a class="status-action-count" href="/thread/{{.ID}}#status-{{.ID}}" {{if .ThreadInNewTab}}target="_blank"{{end}}> <span> {{DisplayInteractionCount .RepliesCount}} </span> </a> </div> @@ -129,7 +129,7 @@ </a> </div> <div class="status-action"> - <a class="status-time" href="/thread/{{.ID}}#status-{{.ID}}"> + <a class="status-time" href="/thread/{{.ID}}#status-{{.ID}}" {{if .ThreadInNewTab}}target="_blank"{{end}}> <time datetime="{{FormatTimeRFC3339 .CreatedAt}}" title="{{.CreatedAt}}"> {{TimeSince .CreatedAt}} </time> </a> </div> |